[NET]: 2.6.13 breaks libpcap (and tcpdump)
authorHerbert Xu <herbert@gondor.apana.org.au>
Tue, 6 Sep 2005 01:44:37 +0000 (18:44 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 6 Sep 2005 01:44:37 +0000 (18:44 -0700)
Patrick McHardy says:

  Never mind, I got it, we never fall through to the second switch
  statement anymore. I think we could simply break when load_pointer
  returns NULL. The switch statement will fall through to the default
  case and return 0 for all cases but 0 > k >= SKF_AD_OFF.

Here's a patch to do just that.

I left BPF_MSH alone because it's really a hack to calculate the IP
header length, which makes no sense when applied to the special data.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/filter.c

index cd91a24f97202f08944aea961153074d02b91449..079c2edff789e95ccc9fbcec96184c2eb2772e84 100644 (file)
@@ -182,7 +182,7 @@ int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)
                                A = ntohl(*(u32 *)ptr);
                                continue;
                        }
-                       return 0;
+                       break;
                case BPF_LD|BPF_H|BPF_ABS:
                        k = fentry->k;
  load_h:
@@ -191,7 +191,7 @@ int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)
                                A = ntohs(*(u16 *)ptr);
                                continue;
                        }
-                       return 0;
+                       break;
                case BPF_LD|BPF_B|BPF_ABS:
                        k = fentry->k;
 load_b:
@@ -200,7 +200,7 @@ load_b:
                                A = *(u8 *)ptr;
                                continue;
                        }
-                       return 0;
+                       break;
                case BPF_LD|BPF_W|BPF_LEN:
                        A = skb->len;
                        continue;