diff options
Diffstat (limited to 'drivers/net/usb')
| -rw-r--r-- | drivers/net/usb/aqc111.c | 9 | 
1 files changed, 7 insertions, 2 deletions
| diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c index ea06d10e1c21..ca409d450a29 100644 --- a/drivers/net/usb/aqc111.c +++ b/drivers/net/usb/aqc111.c @@ -1102,10 +1102,15 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)  	if (start_of_descs != desc_offset)  		goto err; -	/* self check desc_offset from header*/ -	if (desc_offset >= skb_len) +	/* self check desc_offset from header and make sure that the +	 * bounds of the metadata array are inside the SKB +	 */ +	if (pkt_count * 2 + desc_offset >= skb_len)  		goto err; +	/* Packets must not overlap the metadata array */ +	skb_trim(skb, desc_offset); +  	if (pkt_count == 0)  		goto err; |