mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
linux-can-fixes-for-6.19-20260116
-----BEGIN PGP SIGNATURE----- iQFHBAABCgAxFiEEn/sM2K9nqF/8FWzzDHRl3/mQkZwFAmlql18THG1rbEBwZW5n dXRyb25peC5kZQAKCRAMdGXf+ZCRnLugB/99YE/TQM9Kwr3BPl4/BoNM+kiNyT4s C7PK4PJIVnlTQBbp3hLTWpnU1Hyjmd1bRd5QY4/Ue3YfE06mj4v5MvXt7kQYdNP8 jpEU5JZleykE8qxrMR35CiBTbXLf6GeXd5AdDQd4PaAUmZyjPgzGQFkJOdP0DfB/ zTDrjZye2uOAj/d/6K5HSCXwZhjik65VIwj4bWFVTru+YypjRMs19qZgBybINlPn b5fVdbsK+d0vxSeLN9goKRqHVsyl4UCANXLri3k1I34b1wScGOeezydo09eQnbMZ MPhDpYDuhCuzBiti7P0X7UcjY1Y+hiKqsAYsvZmp+q916cDa7I97cakR =I14Q -----END PGP SIGNATURE----- Merge tag 'linux-can-fixes-for-6.19-20260116' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can Marc Kleine-Budde says: ==================== pull-request: can 2026-01-16 The first patch is by me and sets the missing CAN device default capabilities in the CAN device layer. The next patch is by me, target the gs_usb driver and adds the missing unanchor URB on usb_submit_urb() error. The last 5 patches are also from me and fix the same USB-URB leak (as in the gs_usb driver) in the affected CAN-USB driver: ems_usb, esd_usb, kvaser_usb, mcba_usb and usb_8dev. * tag 'linux-can-fixes-for-6.19-20260116' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can: can: usb_8dev: usb_8dev_read_bulk_callback(): fix URB memory leak can: mcba_usb: mcba_usb_read_bulk_callback(): fix URB memory leak can: kvaser_usb: kvaser_usb_read_bulk_callback(): fix URB memory leak can: esd_usb: esd_usb_read_bulk_callback(): fix URB memory leak can: ems_usb: ems_usb_read_bulk_callback(): fix URB memory leak can: gs_usb: gs_usb_receive_bulk_callback(): unanchor URL on usb_submit_urb() error can: dev: alloc_candev_mqs(): add missing default CAN capabilities ==================== Link: https://patch.msgid.link/20260116200323.366877-1-mkl@pengutronix.de Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
3ddf44626a
7 changed files with 45 additions and 5 deletions
|
|
@ -332,6 +332,7 @@ struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max,
|
|||
|
||||
can_ml = (void *)priv + ALIGN(sizeof_priv, NETDEV_ALIGN);
|
||||
can_set_ml_priv(dev, can_ml);
|
||||
can_set_cap(dev, CAN_CAP_CC);
|
||||
|
||||
if (echo_skb_max) {
|
||||
priv->echo_skb_max = echo_skb_max;
|
||||
|
|
|
|||
|
|
@ -486,11 +486,17 @@ resubmit_urb:
|
|||
urb->transfer_buffer, RX_BUFFER_SIZE,
|
||||
ems_usb_read_bulk_callback, dev);
|
||||
|
||||
usb_anchor_urb(urb, &dev->rx_submitted);
|
||||
|
||||
retval = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (!retval)
|
||||
return;
|
||||
|
||||
usb_unanchor_urb(urb);
|
||||
|
||||
if (retval == -ENODEV)
|
||||
netif_device_detach(netdev);
|
||||
else if (retval)
|
||||
else
|
||||
netdev_err(netdev,
|
||||
"failed resubmitting read bulk urb: %d\n", retval);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -541,13 +541,20 @@ resubmit_urb:
|
|||
urb->transfer_buffer, ESD_USB_RX_BUFFER_SIZE,
|
||||
esd_usb_read_bulk_callback, dev);
|
||||
|
||||
usb_anchor_urb(urb, &dev->rx_submitted);
|
||||
|
||||
err = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (!err)
|
||||
return;
|
||||
|
||||
usb_unanchor_urb(urb);
|
||||
|
||||
if (err == -ENODEV) {
|
||||
for (i = 0; i < dev->net_count; i++) {
|
||||
if (dev->nets[i])
|
||||
netif_device_detach(dev->nets[i]->netdev);
|
||||
}
|
||||
} else if (err) {
|
||||
} else {
|
||||
dev_err(dev->udev->dev.parent,
|
||||
"failed resubmitting read bulk urb: %pe\n", ERR_PTR(err));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -754,6 +754,10 @@ resubmit_urb:
|
|||
usb_anchor_urb(urb, &parent->rx_submitted);
|
||||
|
||||
rc = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (!rc)
|
||||
return;
|
||||
|
||||
usb_unanchor_urb(urb);
|
||||
|
||||
/* USB failure take down all interfaces */
|
||||
if (rc == -ENODEV) {
|
||||
|
|
@ -762,6 +766,9 @@ device_detach:
|
|||
if (parent->canch[rc])
|
||||
netif_device_detach(parent->canch[rc]->netdev);
|
||||
}
|
||||
} else if (rc != -ESHUTDOWN && net_ratelimit()) {
|
||||
netdev_info(netdev, "failed to re-submit IN URB: %pe\n",
|
||||
ERR_PTR(urb->status));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -361,7 +361,14 @@ resubmit_urb:
|
|||
urb->transfer_buffer, KVASER_USB_RX_BUFFER_SIZE,
|
||||
kvaser_usb_read_bulk_callback, dev);
|
||||
|
||||
usb_anchor_urb(urb, &dev->rx_submitted);
|
||||
|
||||
err = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (!err)
|
||||
return;
|
||||
|
||||
usb_unanchor_urb(urb);
|
||||
|
||||
if (err == -ENODEV) {
|
||||
for (i = 0; i < dev->nchannels; i++) {
|
||||
struct kvaser_usb_net_priv *priv;
|
||||
|
|
@ -372,7 +379,7 @@ resubmit_urb:
|
|||
|
||||
netif_device_detach(priv->netdev);
|
||||
}
|
||||
} else if (err) {
|
||||
} else {
|
||||
dev_err(&dev->intf->dev,
|
||||
"Failed resubmitting read bulk urb: %d\n", err);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -608,11 +608,17 @@ resubmit_urb:
|
|||
urb->transfer_buffer, MCBA_USB_RX_BUFF_SIZE,
|
||||
mcba_usb_read_bulk_callback, priv);
|
||||
|
||||
usb_anchor_urb(urb, &priv->rx_submitted);
|
||||
|
||||
retval = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (!retval)
|
||||
return;
|
||||
|
||||
usb_unanchor_urb(urb);
|
||||
|
||||
if (retval == -ENODEV)
|
||||
netif_device_detach(netdev);
|
||||
else if (retval)
|
||||
else
|
||||
netdev_err(netdev, "failed resubmitting read bulk urb: %d\n",
|
||||
retval);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -541,11 +541,17 @@ resubmit_urb:
|
|||
urb->transfer_buffer, RX_BUFFER_SIZE,
|
||||
usb_8dev_read_bulk_callback, priv);
|
||||
|
||||
usb_anchor_urb(urb, &priv->rx_submitted);
|
||||
|
||||
retval = usb_submit_urb(urb, GFP_ATOMIC);
|
||||
if (!retval)
|
||||
return;
|
||||
|
||||
usb_unanchor_urb(urb);
|
||||
|
||||
if (retval == -ENODEV)
|
||||
netif_device_detach(netdev);
|
||||
else if (retval)
|
||||
else
|
||||
netdev_err(netdev,
|
||||
"failed resubmitting read bulk urb: %d\n", retval);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue