diff --git a/[refs] b/[refs] index 06ea6ec139b2..f28ec40bee0f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: eabd8ba9060444cac5b89a3306e607c15ec37418 +refs/heads/master: 66d50d25502cd9b7d6e3ebbf4e241259c1283eaf diff --git a/trunk/net/sched/cls_u32.c b/trunk/net/sched/cls_u32.c index 4f522143811e..7416a5c73b2a 100644 --- a/trunk/net/sched/cls_u32.c +++ b/trunk/net/sched/cls_u32.c @@ -134,10 +134,12 @@ static int u32_classify(struct sk_buff *skb, struct tcf_proto *tp, struct tcf_re #endif for (i = n->sel.nkeys; i>0; i--, key++) { - unsigned int toff; + int toff = off + key->off + (off2 & key->offmask); __be32 *data, _data; - toff = off + key->off + (off2 & key->offmask); + if (skb_headroom(skb) + toff < 0) + goto out; + data = skb_header_pointer(skb, toff, 4, &_data); if (!data) goto out;