patch "media: smsusb: better handle optional alignment" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
media: smsusb: better handle optional alignment
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From a47686636d84eaec5c9c6e84bd5f96bed34d526d Mon Sep 17 00:00:00 2001
From: Mauro Carvalho Chehab <[email protected]>
Date: Fri, 24 May 2019 10:59:43 -0400
Subject: media: smsusb: better handle optional alignment
Most Siano devices require an alignment for the response.
Changeset f3be52b0056a ("media: usb: siano: Fix general protection fault in smsusb") changed the logic with gets such aligment, but it now produces a sparce warning:
drivers/media/usb/siano/smsusb.c: In function 'smsusb_init_device':drivers/media/usb/siano/smsusb.c:447:37: warning: 'in_maxp' may be used uninitialized in this function [-Wmaybe-uninitialized]
447 | dev->response_alignment = in_maxp - sizeof(struct sms_msg_hdr);
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~The sparse message itself is bogus, but a broken (or fake) USB eeprom could produce a negative value for response_alignment.
So, change the code in order to check if the result is not negative.
--- drivers/media/usb/siano/smsusb.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/media/usb/siano/smsusb.c +4 -4
@@ -400,7 +400,7 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)struct smsusb_device_t *dev;void *mdev;int i, rc; -int in_maxp =0 ; +int align =0 ;/* create device object */ dev =kzalloc (sizeof (struct smsusb_device_t ),GFP_KERNEL );
@@ -418,14 +418,14 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)if (desc->bEndpointAddress &USB_DIR_IN ) { dev->in_ep = desc->bEndpointAddress; - in_maxp =usb_endpoint_maxp (desc); + align =usb_endpoint_maxp (desc) -sizeof (struct sms_msg_hdr ); }else { dev->out_ep = desc->bEndpointAddress; } }pr_debug ("in_ep = %02x, out_ep = %02x\n" , dev->in_ep, dev->out_ep); -if (!dev->in_ep || !dev->out_ep) {/* Missing endpoints? */ +if (!dev->in_ep || !dev->out_ep || align <0 ) {/* Missing endpoints? */ smsusb_term_device (intf);return -ENODEV ; }
@@ -444,7 +444,7 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id)/* fall-thru */ default : dev->buffer_size =USB2_BUFFER_SIZE ; - dev->response_alignment = in_maxp -sizeof (struct sms_msg_hdr ); + dev->response_alignment = align; params.flags |=SMS_DEVICE_FAMILY2 ;break ;
Signature · 1 line
2.21.0