Patch "can: peak: fix potential bug in packet fragmentation" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
can: peak: fix potential bug in packet fragmentation
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
can-peak-fix-potential-bug-in-packet-fragmentation.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d8a243af1a68395e07ac85384a2740d4134c67f4Mon Sep 17 00:00:00 2001
From: Stephane Grosjean <[email protected]>
Date: Mon, 15 Jan 2018 16:31:19 +0100
Subject: can: peak: fix potential bug in packet fragmentation
From: Stephane Grosjean <[email protected]>
commit d8a243af1a68395e07ac85384a2740d4134c67f4 upstream.
In some rare conditions when running one PEAK USB-FD interface over a non high-speed USB controller, one useless USB fragment might be sent. This patch fixes the way a USB command is fragmented when its length is greater than 64 bytes and when the underlying USB controller is not a high-speed one.
--- drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)
drivers/net/can/usb/peak_usb/pcan_usb_fd.c +11 -10
@@ -184,7 +184,7 @@ static int pcan_usb_fd_send_cmd(struct pvoid *cmd_head =pcan_usb_fd_cmd_buffer (dev);int err =0 ;u8 *packet_ptr; -int i, n =1 , packet_len; +int packet_len;ptrdiff_t cmd_len;/* usb device unregistered? */
@@ -201,17 +201,13 @@ static int pcan_usb_fd_send_cmd(struct p } packet_ptr = cmd_head; + packet_len = cmd_len;/* firmware is not able to re-assemble 512 bytes buffer in full-speed */ -if ((dev->udev->speed !=USB_SPEED_HIGH ) && - (cmd_len >PCAN_UFD_LOSPD_PKT_SIZE )) { - packet_len =PCAN_UFD_LOSPD_PKT_SIZE ; - n += cmd_len / packet_len; - }else { - packet_len = cmd_len; - } +if (unlikely (dev->udev->speed !=USB_SPEED_HIGH )) + packet_len =min (packet_len,PCAN_UFD_LOSPD_PKT_SIZE ); -for (i =0 ; i < n; i++) { + do { err = usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, PCAN_USBPRO_EP_CMDOUT),
@@ -224,7 +220,12 @@ static int pcan_usb_fd_send_cmd(struct p } packet_ptr += packet_len; - } + cmd_len -= packet_len; + +if (cmd_len <PCAN_UFD_LOSPD_PKT_SIZE ) + packet_len = cmd_len; + + }while (packet_len >0 );return err; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/can-peak-fix-potential-bug-in-packet-fragmentation.patch