Commit 3154e540 authored by Patrick McHardy's avatar Patrick McHardy Committed by David S. Miller

[NET]: net/core/filter.c: make len cover the entire packet

As suggested by Herbert Xu:

Since we don't require anything to be in the linear packet range
anymore make len cover the entire packet.
Signed-off-by: default avatarPatrick McHardy <kaber@trash.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0b05b2a4
No related merge requests found
...@@ -76,10 +76,6 @@ static inline void *load_pointer(struct sk_buff *skb, int k, ...@@ -76,10 +76,6 @@ static inline void *load_pointer(struct sk_buff *skb, int k,
int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen) int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)
{ {
/* len is UNSIGNED. Byte wide insns relies only on implicit
type casts to prevent reading arbitrary memory locations.
*/
unsigned int len = skb->len-skb->data_len;
struct sock_filter *fentry; /* We walk down these */ struct sock_filter *fentry; /* We walk down these */
void *ptr; void *ptr;
u32 A = 0; /* Accumulator */ u32 A = 0; /* Accumulator */
...@@ -206,10 +202,10 @@ int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen) ...@@ -206,10 +202,10 @@ int sk_run_filter(struct sk_buff *skb, struct sock_filter *filter, int flen)
} }
return 0; return 0;
case BPF_LD|BPF_W|BPF_LEN: case BPF_LD|BPF_W|BPF_LEN:
A = len; A = skb->len;
continue; continue;
case BPF_LDX|BPF_W|BPF_LEN: case BPF_LDX|BPF_W|BPF_LEN:
X = len; X = skb->len;
continue; continue;
case BPF_LD|BPF_W|BPF_IND: case BPF_LD|BPF_W|BPF_IND:
k = X + fentry->k; k = X + fentry->k;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment