On Tue, 2012-12-11 at 14:36 -0800, Ani Sinha wrote: > > > > It is possible to test for the presence of support of the new vlan bpf > > extensions by attempting to load a filter that uses them. As only valid > > filters can be loaded, old kernels that do not support filtering of vlan > > tags will fail to load the a test filter with uses them. > > Unfortunately I do not see this. The sk_chk_filter() does not have a > default in the case statement and the check will not detect an unknown > instruction. It will fail when the filter is run and as far as I can see, > the packet will be dropped. Something like this might help? > > diff --git a/net/core/filter.c b/net/core/filter.c > index c23543c..96338aa 100644 > --- a/net/core/filter.c > +++ b/net/core/filter.c > @@ -548,6 +548,8 @@ int sk_chk_filter(struct sock_filter *filter, unsigned > int flen) > return -EINVAL; > /* Some instructions need special checks */ > switch (code) { > + /* for unknown instruction, return EINVAL */ > + default : return -EINVAL; > case BPF_S_ALU_DIV_K: > /* check for division by zero */ > if (ftest->k == 0)
This patch is wrong. Check lines 546, 547, 548 where we do the check for unknown instructions code = codes[code]; if (!code) return -EINVAL; If you want to test ANCILLARY possible values, its already too late, as old kernels wont use any patch anyway. _______________________________________________ tcpdump-workers mailing list tcpdump-workers@lists.tcpdump.org https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers