net: usb: ax88179_178a: fix skb leak in ax88179_tx_fixup()
Subsystems (5)
PATCH 1/1 net: usb: ax88179_178a: fix skb leak in ax88179_tx_fixup()
From: Yi Cong <[email protected]>
When the interface has NETIF_F_SG enabled and skb_linearize() fails in ax88179_tx_fixup(), the function returns NULL without freeing the skb.
usbnet_start_xmit() treats a NULL return from tx_fixup() as a drop (info->flags does not set FLAG_MULTI_PACKET for this driver), jumping to the "drop" label where it does if (skb) dev_kfree_skb_any(skb). Because tx_fixup() returned NULL, the local skb variable in usbnet_start_xmit() is NULL, so the original skb is never freed — a memory leak on every TX frame whose linearization fails (i.e. under memory pressure).
Free the skb before returning, matching the error handling already used for the pskb_expand_head() failure path in the same function.
--- drivers/net/usb/ax88179_178a.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/usb/ax88179_178a.c +3 -1
@@ -1487,8 +1487,10 @@ ax88179_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) headroom =skb_headroom (skb) -8 ; -if ((dev->net->features &NETIF_F_SG ) &&skb_linearize (skb)) +if ((dev->net->features &NETIF_F_SG ) &&skb_linearize (skb)) { +dev_kfree_skb_any (skb);return NULL ; + }if ((skb_header_cloned (skb) || headroom <0 ) &&pskb_expand_head (skb, headroom <0 ?8 :0 ,0 ,GFP_ATOMIC )) {
Signature · 1 line
2.25.1
This patch was applied to netdev/net.git (main) by Jakub Kicinski <[email protected]>:
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <[email protected]>:
Quoted 13 lines · On Wed, 29 Jul 2026 11:04:36 +0800 you wrote:
From: Yi Cong <[email protected]>
When the interface has
NETIF_F_SGenabled andskb_linearize()fails inax88179_tx_fixup(), the function returns NULL without freeing the skb.
usbnet_start_xmit()treats a NULL return fromtx_fixup()as a drop (info->flagsdoes not setFLAG_MULTI_PACKETfor this driver), jumping to the "drop" label where it doesif (skb) dev_kfree_skb_any(skb). Becausetx_fixup()returned NULL, the local skb variable inusbnet_start_xmit()is NULL, so the original skb is never freed — a memory leak on every TX frame whose linearization fails (i.e. under memory pressure).
Quoted 1 line
[...]
Here is the summary with links:
- [net-next] net: usb: ax88179_178a: fix skb leak in ax88179_tx_fixup()
https://git.kernel.org/netdev/net/c/1f428e309473
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html