diff options
Diffstat (limited to 'net/sched/cls_u32.c')
| -rw-r--r-- | net/sched/cls_u32.c | 6 | 
1 files changed, 4 insertions, 2 deletions
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 4f522143811..7416a5c73b2 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -134,10 +134,12 @@ next_knode:  #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;  |