2020-08-24 14:21:48

by Tobias Klauser

[permalink] [raw]
Subject: [PATCH bpf] bpf, sysctl: let bpf_stats_handler take a kernel pointer buffer

Commit 32927393dc1c ("sysctl: pass kernel pointers to ->proc_handler")
changed ctl_table.proc_handler to take a kernel pointer. Adjust the
signature of bpf_stats_handler to match ctl_table.proc_handler which
fixes the following sparse warning:

kernel/sysctl.c:226:49: warning: incorrect type in argument 3 (different address spaces)
kernel/sysctl.c:226:49: expected void *
kernel/sysctl.c:226:49: got void [noderef] __user *buffer
kernel/sysctl.c:2640:35: warning: incorrect type in initializer (incompatible argument 3 (different address spaces))
kernel/sysctl.c:2640:35: expected int ( [usertype] *proc_handler )( ... )
kernel/sysctl.c:2640:35: got int ( * )( ... )

Fixes: 32927393dc1c ("sysctl: pass kernel pointers to ->proc_handler")
Cc: Christoph Hellwig <[email protected]>
Signed-off-by: Tobias Klauser <[email protected]>
---
kernel/sysctl.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 287862f91717..09e70ee2332e 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -204,8 +204,7 @@ static int max_extfrag_threshold = 1000;

#if defined(CONFIG_BPF_SYSCALL) && defined(CONFIG_SYSCTL)
static int bpf_stats_handler(struct ctl_table *table, int write,
- void __user *buffer, size_t *lenp,
- loff_t *ppos)
+ void *buffer, size_t *lenp, loff_t *ppos)
{
struct static_key *key = (struct static_key *)table->data;
static int saved_val;
--
2.27.0


2020-08-25 04:19:20

by Alexei Starovoitov

[permalink] [raw]
Subject: Re: [PATCH bpf] bpf, sysctl: let bpf_stats_handler take a kernel pointer buffer

On Mon, Aug 24, 2020 at 7:20 AM Tobias Klauser <[email protected]> wrote:
>
> Commit 32927393dc1c ("sysctl: pass kernel pointers to ->proc_handler")
> changed ctl_table.proc_handler to take a kernel pointer. Adjust the
> signature of bpf_stats_handler to match ctl_table.proc_handler which
> fixes the following sparse warning:
>
> kernel/sysctl.c:226:49: warning: incorrect type in argument 3 (different address spaces)
> kernel/sysctl.c:226:49: expected void *
> kernel/sysctl.c:226:49: got void [noderef] __user *buffer
> kernel/sysctl.c:2640:35: warning: incorrect type in initializer (incompatible argument 3 (different address spaces))
> kernel/sysctl.c:2640:35: expected int ( [usertype] *proc_handler )( ... )
> kernel/sysctl.c:2640:35: got int ( * )( ... )
>
> Fixes: 32927393dc1c ("sysctl: pass kernel pointers to ->proc_handler")
> Cc: Christoph Hellwig <[email protected]>
> Signed-off-by: Tobias Klauser <[email protected]>

Applied. Thanks