030-6-ch9200-use-skb_cow_head-to-deal-with-cloned-skbs.patch 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. From 6bc6895bdd6744e0136eaa4a11fbdb20a7db4e40 Mon Sep 17 00:00:00 2001
  2. From: Eric Dumazet <edumazet@google.com>
  3. Date: Wed, 19 Apr 2017 09:59:25 -0700
  4. Subject: [PATCH] ch9200: use skb_cow_head() to deal with cloned skbs
  5. We need to ensure there is enough headroom to push extra header,
  6. but we also need to check if we are allowed to change headers.
  7. skb_cow_head() is the proper helper to deal with this.
  8. Fixes: 4a476bd6d1d9 ("usbnet: New driver for QinHeng CH9200 devices")
  9. Signed-off-by: Eric Dumazet <edumazet@google.com>
  10. Cc: James Hughes <james.hughes@raspberrypi.org>
  11. Cc: Matthew Garrett <mjg59@srcf.ucam.org>
  12. Signed-off-by: David S. Miller <davem@davemloft.net>
  13. ---
  14. drivers/net/usb/ch9200.c | 9 ++-------
  15. 1 file changed, 2 insertions(+), 7 deletions(-)
  16. --- a/drivers/net/usb/ch9200.c
  17. +++ b/drivers/net/usb/ch9200.c
  18. @@ -255,14 +255,9 @@ static struct sk_buff *ch9200_tx_fixup(s
  19. tx_overhead = 0x40;
  20. len = skb->len;
  21. - if (skb_headroom(skb) < tx_overhead) {
  22. - struct sk_buff *skb2;
  23. -
  24. - skb2 = skb_copy_expand(skb, tx_overhead, 0, flags);
  25. + if (skb_cow_head(skb, tx_overhead)) {
  26. dev_kfree_skb_any(skb);
  27. - skb = skb2;
  28. - if (!skb)
  29. - return NULL;
  30. + return NULL;
  31. }
  32. __skb_push(skb, tx_overhead);