usb: aqc111: stop lying about skb->truesize
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 commit1e2c611723
("net: cdc_ncm: reduce skb truesize in rx path") and4ce62d5b2f
("net: usb: ax88179_178a: stop lying about skb->truesize") Fixes:361459cd96
("net: usb: aqc111: Implement RX data path") Signed-off-by: Eric Dumazet <edumazet@google.com> Link: https://lore.kernel.org/r/20240506135546.3641185-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
eb709b5f65
commit
9aad6e45c4
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user