On Tue, 11 Dec 2012 14:36:33 -0800 (PST) Ani Sinha <a...@aristanetworks.com> 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) Did you test this? I think it will blow up for some existing instructions like BPF_S_ALU_XOR_X or any of the other non-special instructions. Also it is not formatted correctly for the kernel programming style. ERROR: space prohibited before that ':' (ctx:WxW) #86: FILE: net/core/filter.c:552: + default : return -EINVAL; ^ _______________________________________________ tcpdump-workers mailing list tcpdump-workers@lists.tcpdump.org https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers