Skip to content

Commit

Permalink
usb: aqc111: stop lying about skb->truesize
Browse files Browse the repository at this point in the history
Some usb drivers try to set small skb->truesize and break
core networking stacks.

I replace one skb_clone() by an allocation of a fresh
and small skb, to get minimally sized skbs, like we did
in commit 1e2c611 ("net: cdc_ncm: reduce skb truesize
in rx path") and 4ce62d5 ("net: usb: ax88179_178a:
stop lying about skb->truesize")

Fixes: 361459c ("net: usb: aqc111: Implement RX data path")
Signed-off-by: Eric Dumazet <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
  • Loading branch information
Eric Dumazet authored and kuba-moo committed May 8, 2024
1 parent eb709b5 commit 9aad6e4
Showing 1 changed file with 3 additions and 5 deletions.
8 changes: 3 additions & 5 deletions drivers/net/usb/aqc111.c
Original file line number Diff line number Diff line change
Expand Up @@ -1141,17 +1141,15 @@ static int aqc111_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
continue;
}

/* Clone SKB */
new_skb = skb_clone(skb, GFP_ATOMIC);
new_skb = netdev_alloc_skb_ip_align(dev->net, pkt_len);

if (!new_skb)
goto err;

new_skb->len = pkt_len;
skb_put(new_skb, pkt_len);
memcpy(new_skb->data, skb->data, pkt_len);
skb_pull(new_skb, AQ_RX_HW_PAD);
skb_set_tail_pointer(new_skb, new_skb->len);

new_skb->truesize = SKB_TRUESIZE(new_skb->len);
if (aqc111_data->rx_checksum)
aqc111_rx_checksum(new_skb, pkt_desc);

Expand Down

0 comments on commit 9aad6e4

Please sign in to comment.