]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
can: peak_usb: peak_usb_start(): fix double free of transfer buffer on URB submit...
authorMaoyi Xie <maoyixie.tju@gmail.com>
Tue, 16 Jun 2026 18:15:31 +0000 (02:15 +0800)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 29 Jul 2026 09:58:25 +0000 (11:58 +0200)
In peak_usb_start(), each RX URB transfer buffer is allocated with kmalloc()
and the URB is flagged URB_FREE_BUFFER so that the final usb_free_urb() also
frees the transfer buffer.

If usb_submit_urb() fails, the error path frees the buffer explicitly with
kfree(buf) and then calls usb_free_urb(urb). Because URB_FREE_BUFFER is set,
usb_free_urb() -> urb_destroy() frees the same buffer a second time, a double
free of the transfer buffer.

  BUG: KASAN: double-free in usb_free_urb.part.0+0x91/0xb0
  Free of addr ffff8881069ccb80 by task trigger.sh/285

  Call Trace:
   kfree+0x113/0x3c0
   usb_free_urb.part.0+0x91/0xb0

Drop the redundant kfree(buf); usb_free_urb() already releases the transfer
buffer. This mirrors commit 03819abbeb11 ("net: usb: lan78xx: Fix double free
issue with interrupt buffer allocation").

Fixes: bb4785551f64 ("can: usb: PEAK-System Technik USB adapters driver core")
Closes: https://lore.kernel.org/linux-can/178159320216.2154888.16953451793788581739@maoyixie.com/T/#u
Cc: stable@vger.kernel.org
Signed-off-by: Maoyi Xie <maoyixie.tju@gmail.com>
Reviewed-by: Vincent Mailhol <mailhol@kernel.org>
Link: https://patch.msgid.link/178163373110.2507866.216458825145756798@maoyixie.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/usb/peak_usb/pcan_usb_core.c

index c7933d1acc99a9949e43e8c70d02457df4179d6d..55aad01cd8cac1d6ed3d37fd411b20626b384fc5 100644 (file)
@@ -470,7 +470,6 @@ static int peak_usb_start(struct peak_usb_device *dev)
                                netif_device_detach(dev->netdev);
 
                        usb_unanchor_urb(urb);
-                       kfree(buf);
                        usb_free_urb(urb);
                        break;
                }