Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB: make transfer_buffer_lengths in struct urb field u32

Roel Kluin pointed out that transfer_buffer_lengths in struct urb was
declared as an 'int'. This patch changes this field to be 'u32' to
prevent any potential negative conversion and comparison errors.

This triggered a few compiler warning messages when these fields were
being used with the min macro, so they have also been fixed up in this
patch.

Cc: Roel Kluin <roel.kluin@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

+9 -9
+1 -1
drivers/usb/gadget/dummy_hcd.c
··· 1437 1437 } 1438 1438 if (urb->transfer_buffer_length > 1) 1439 1439 buf [1] = 0; 1440 - urb->actual_length = min (2, 1440 + urb->actual_length = min_t(u32, 2, 1441 1441 urb->transfer_buffer_length); 1442 1442 value = 0; 1443 1443 status = 0;
+1 -1
drivers/usb/host/isp116x-hcd.c
··· 772 772 break; 773 773 case PIPE_INTERRUPT: 774 774 urb->interval = ep->period; 775 - ep->length = min((int)ep->maxpacket, 775 + ep->length = min_t(u32, ep->maxpacket, 776 776 urb->transfer_buffer_length); 777 777 778 778 /* urb submitted for already existing endpoint */
+1 -1
drivers/usb/host/r8a66597-hcd.c
··· 1394 1394 (int)urb->iso_frame_desc[td->iso_cnt].length); 1395 1395 } else { 1396 1396 buf = (u16 *)(urb->transfer_buffer + urb->actual_length); 1397 - size = min((int)bufsize, 1397 + size = min_t(u32, bufsize, 1398 1398 urb->transfer_buffer_length - urb->actual_length); 1399 1399 } 1400 1400
+2 -2
drivers/usb/host/sl811-hcd.c
··· 230 230 writeb(usb_pipedevice(urb->pipe), data_reg); 231 231 232 232 sl811_write(sl811, bank + SL11H_HOSTCTLREG, control); 233 - ep->length = min((int)len, 233 + ep->length = min_t(u32, len, 234 234 urb->transfer_buffer_length - urb->actual_length); 235 235 PACKET("IN%s/%d qh%p len%d\n", ep->nak_count ? "/retry" : "", 236 236 !!usb_gettoggle(urb->dev, ep->epnum, 0), ep, len); ··· 255 255 buf = urb->transfer_buffer + urb->actual_length; 256 256 prefetch(buf); 257 257 258 - len = min((int)ep->maxpacket, 258 + len = min_t(u32, ep->maxpacket, 259 259 urb->transfer_buffer_length - urb->actual_length); 260 260 261 261 if (!(control & SL11H_HCTLMASK_ISOCH)
+3 -3
drivers/usb/misc/ftdi-elan.c
··· 1568 1568 struct u132_target *target = &ftdi->target[ed]; 1569 1569 struct u132_command *command = &ftdi->command[ 1570 1570 COMMAND_MASK & ftdi->command_next]; 1571 - int remaining_length = urb->transfer_buffer_length - 1571 + u32 remaining_length = urb->transfer_buffer_length - 1572 1572 urb->actual_length; 1573 1573 command->header = 0x82 | (ed << 5); 1574 1574 if (remaining_length == 0) { ··· 1702 1702 | (address << 0); 1703 1703 command->width = usb_maxpacket(urb->dev, urb->pipe, 1704 1704 usb_pipeout(urb->pipe)); 1705 - command->follows = min(1024, 1705 + command->follows = min_t(u32, 1024, 1706 1706 urb->transfer_buffer_length - 1707 1707 urb->actual_length); 1708 1708 command->value = 0; ··· 1766 1766 mutex_lock(&ftdi->u132_lock); 1767 1767 command_size = ftdi->command_next - ftdi->command_head; 1768 1768 if (command_size < COMMAND_SIZE) { 1769 - int remaining_length = urb->transfer_buffer_length - 1769 + u32 remaining_length = urb->transfer_buffer_length - 1770 1770 urb->actual_length; 1771 1771 struct u132_target *target = &ftdi->target[ed]; 1772 1772 struct u132_command *command = &ftdi->command[
+1 -1
include/linux/usb.h
··· 1177 1177 unsigned int transfer_flags; /* (in) URB_SHORT_NOT_OK | ...*/ 1178 1178 void *transfer_buffer; /* (in) associated data buffer */ 1179 1179 dma_addr_t transfer_dma; /* (in) dma addr for transfer_buffer */ 1180 - int transfer_buffer_length; /* (in) data buffer length */ 1180 + u32 transfer_buffer_length; /* (in) data buffer length */ 1181 1181 int actual_length; /* (return) actual transfer length */ 1182 1182 unsigned char *setup_packet; /* (in) setup packet (control only) */ 1183 1183 dma_addr_t setup_dma; /* (in) dma addr for setup_packet */