bpf: Make use of probe_user_write in probe write helper
Convert the bpf_probe_write_user() helper to probe_user_write() such that
writes are not attempted under KERNEL_DS anymore which is buggy as kernel
and user space pointers can have overlapping addresses. Also, given we have
the access_ok() check inside probe_user_write(), the helper doesn't need
to do it twice.
Fixes: 96ae522795
("bpf: Add bpf_probe_write_user BPF helper to be called in tracers")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Andrii Nakryiko <andriin@fb.com>
Link: https://lore.kernel.org/bpf/841c461781874c07a0ee404a454c3bc0459eed30.1572649915.git.daniel@iogearbox.net
This commit is contained in:
parent
75a1a607bb
commit
eb1b668874
@ -163,7 +163,7 @@ static const struct bpf_func_proto bpf_probe_read_proto = {
|
|||||||
.arg3_type = ARG_ANYTHING,
|
.arg3_type = ARG_ANYTHING,
|
||||||
};
|
};
|
||||||
|
|
||||||
BPF_CALL_3(bpf_probe_write_user, void *, unsafe_ptr, const void *, src,
|
BPF_CALL_3(bpf_probe_write_user, void __user *, unsafe_ptr, const void *, src,
|
||||||
u32, size)
|
u32, size)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -186,10 +186,8 @@ BPF_CALL_3(bpf_probe_write_user, void *, unsafe_ptr, const void *, src,
|
|||||||
return -EPERM;
|
return -EPERM;
|
||||||
if (unlikely(!nmi_uaccess_okay()))
|
if (unlikely(!nmi_uaccess_okay()))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
if (!access_ok(unsafe_ptr, size))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
return probe_kernel_write(unsafe_ptr, src, size);
|
return probe_user_write(unsafe_ptr, src, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct bpf_func_proto bpf_probe_write_user_proto = {
|
static const struct bpf_func_proto bpf_probe_write_user_proto = {
|
||||||
|
Loading…
Reference in New Issue
Block a user