Skip to content

Commit

Permalink
bpf: make bpf_check_uarg_tail_zero() use check_zeroed_user()
Browse files Browse the repository at this point in the history
... rather than open-coding it, and badly, at that.

Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Al Viro committed Jun 3, 2020
1 parent 9eb41c5 commit b7e4b65
Showing 1 changed file with 6 additions and 19 deletions.
25 changes: 6 additions & 19 deletions kernel/bpf/syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,32 +67,19 @@ int bpf_check_uarg_tail_zero(void __user *uaddr,
size_t expected_size,
size_t actual_size)
{
unsigned char __user *addr;
unsigned char __user *end;
unsigned char val;
int err;
unsigned char __user *addr = uaddr + expected_size;
int res;

if (unlikely(actual_size > PAGE_SIZE)) /* silly large */
return -E2BIG;

if (unlikely(!access_ok(uaddr, actual_size)))
return -EFAULT;

if (actual_size <= expected_size)
return 0;

addr = uaddr + expected_size;
end = uaddr + actual_size;

for (; addr < end; addr++) {
err = get_user(val, addr);
if (err)
return err;
if (val)
return -E2BIG;
}

return 0;
res = check_zeroed_user(addr, actual_size - expected_size);
if (res < 0)
return res;
return res ? 0 : -E2BIG;
}

const struct bpf_map_ops bpf_map_offload_ops = {
Expand Down

0 comments on commit b7e4b65

Please sign in to comment.