Re: [PATCH] sysctl: drop the pointer dance in proc_put_char()
From: Joel Granados
Date: Wed Sep 16 2026 - 08:13:14 EST
On Sat, Aug 22, 2026 at 06:42:44PM +0000, Bradley Morgan wrote:
> proc_put_char() still drags around a char **buffer alias, writing
> the char through it, advancing it, then copying it back into the
> slot it was loaded from. That only made sense when the buffer was
> __user and the char went through put_user() (which could fail).
>
> Since commit 32927393dc1c ("sysctl: pass kernel pointers to
> ->proc_handler") the buffer is just a kernel pointer, so the alias
> is dead weight. proc_put_long() and the skip helpers already advance
> *buf directly, so do the same here. No functional change.
>
> Signed-off-by: Bradley Morgan <include@xxxxxxxxx>
> ---
> kernel/sysctl.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/kernel/sysctl.c b/kernel/sysctl.c
> index f7b7598..2b92b30 100644
> --- a/kernel/sysctl.c
> +++ b/kernel/sysctl.c
> @@ -350,12 +350,9 @@ static void proc_put_long(void **buf, size_t *size, unsigned long val, bool neg)
> static void proc_put_char(void **buf, size_t *size, char c)
> {
> if (*size) {
> - char **buffer = (char **)buf;
> - **buffer = c;
> -
> + *(char *)*buf = c;
> (*size)--;
> - (*buffer)++;
> - *buf = *buffer;
> + (*buf)++;
> }
> }
>
> --
> 2.47.3
>
I was thinking more along these lines https://lore.kernel.org/all/20260916-lklm-sysctl-void-vs-char-v1-1-c3f8b2eb8b1e@xxxxxxxxxx/
Best
Attachment:
signature.asc
Description: PGP signature