Skip to content

Commit

Permalink
[NET]: Validate socket filters against BPF_MAXINSNS in one spot.
Browse files Browse the repository at this point in the history
Currently the checks are scattered all over and this leads
to inconsistencies and even cases where the check is not made.

Based upon a patch from Kris Katterjohn.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Dec 27, 2005
1 parent 6732bad commit 1b93ae6
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 5 deletions.
3 changes: 0 additions & 3 deletions drivers/net/ppp_generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,9 +524,6 @@ static int get_filter(void __user *arg, struct sock_filter **p)
if (copy_from_user(&uprog, arg, sizeof(uprog)))
return -EFAULT;

if (uprog.len > BPF_MAXINSNS)
return -EINVAL;

if (!uprog.len) {
*p = NULL;
return 0;
Expand Down
4 changes: 2 additions & 2 deletions net/core/filter.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ int sk_chk_filter(struct sock_filter *filter, int flen)
struct sock_filter *ftest;
int pc;

if (((unsigned int)flen >= (~0U / sizeof(struct sock_filter))) || flen == 0)
if (flen == 0 || flen > BPF_MAXINSNS)
return -EINVAL;

/* check the filter code now */
Expand Down Expand Up @@ -360,7 +360,7 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
int err;

/* Make sure new filter is there and in the right amounts. */
if (fprog->filter == NULL || fprog->len > BPF_MAXINSNS)
if (fprog->filter == NULL)
return -EINVAL;

fp = sock_kmalloc(sk, fsize+sizeof(*fp), GFP_KERNEL);
Expand Down

0 comments on commit 1b93ae6

Please sign in to comment.