ch9200: use skb_cow_head() to deal with cloned skbs
commit6bc6895bdd
upstream. We need to ensure there is enough headroom to push extra header, but we also need to check if we are allowed to change headers. skb_cow_head() is the proper helper to deal with this. Fixes:4a476bd6d1
("usbnet: New driver for QinHeng CH9200 devices") Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: James Hughes <james.hughes@raspberrypi.org> Cc: Matthew Garrett <mjg59@srcf.ucam.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f8e3d1b101
commit
4307a871ce
@ -255,14 +255,9 @@ static struct sk_buff *ch9200_tx_fixup(struct usbnet *dev, struct sk_buff *skb,
|
|||||||
tx_overhead = 0x40;
|
tx_overhead = 0x40;
|
||||||
|
|
||||||
len = skb->len;
|
len = skb->len;
|
||||||
if (skb_headroom(skb) < tx_overhead) {
|
if (skb_cow_head(skb, tx_overhead)) {
|
||||||
struct sk_buff *skb2;
|
|
||||||
|
|
||||||
skb2 = skb_copy_expand(skb, tx_overhead, 0, flags);
|
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
skb = skb2;
|
return NULL;
|
||||||
if (!skb)
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__skb_push(skb, tx_overhead);
|
__skb_push(skb, tx_overhead);
|
||||||
|
Reference in New Issue
Block a user