Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 43b78d06 authored by Eric Dumazet's avatar Eric Dumazet Committed by Greg Kroah-Hartman
Browse files

usb: aqc111: stop lying about skb->truesize



[ Upstream commit 9aad6e45c4e7d16b2bb7c3794154b828fb4384b4 ]

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 1e2c6117 ("net: cdc_ncm: reduce skb truesize
in rx path") and 4ce62d5b2f7a ("net: usb: ax88179_178a:
stop lying about skb->truesize")

Fixes: 361459cd ("net: usb: aqc111: Implement RX data path")
Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20240506135546.3641185-1-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent d0209bba
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -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);