]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: wwan: t7xx: check skb_clone in control TX
authorRuoyu Wang <ruoyuw560@gmail.com>
Fri, 12 Jun 2026 03:56:13 +0000 (11:56 +0800)
committerJakub Kicinski <kuba@kernel.org>
Sat, 13 Jun 2026 17:44:38 +0000 (10:44 -0700)
t7xx_port_ctrl_tx() clones each skb fragment before passing it to the
port transmit path. The clone is used immediately to set cloned->len, so
an skb_clone() failure results in a NULL pointer dereference.

Check the clone before using it. If previous fragments were already
queued, preserve the driver's existing partial-write behavior by
returning the number of bytes submitted so far.

Fixes: 36bd28c1cb0d ("wwan: core: Support slicing in port TX flow of WWAN subsystem")
Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
Reviewed-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Link: https://patch.msgid.link/20260612035613.1192486-1-ruoyuw560@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/wwan/t7xx/t7xx_port_wwan.c

index 7fc569565ff99a4b7ab8fc26ca819d043eb8339f..d2529df7592a7f56103e9622cb9d17e84603942e 100644 (file)
@@ -106,6 +106,8 @@ static int t7xx_port_ctrl_tx(struct t7xx_port *port, struct sk_buff *skb)
 
        while (cur) {
                cloned = skb_clone(cur, GFP_KERNEL);
+               if (!cloned)
+                       return cnt ? cnt : -ENOMEM;
                cloned->len = skb_headlen(cur);
                ret = t7xx_port_send_skb(port, cloned, 0, 0);
                if (ret) {