This patch changes the userbuffer,kernbuffer in the header of sisusb_read_mem_bulk from char to u8 to avoid related UB. Also a local buffer, buf, in sisusb_read_mem_bulk is changed from char to u8. Since sisusb_read_mem_bulk is called by sisusb_read_memory sisusb_testreadwrite and sisusb_read, change their passed-in parameters types from char to u8 accordingly. Signed-off-by: Changming Liu <charley.ashbringer@xxxxxxxxx> --- drivers/usb/misc/sisusbvga/sisusb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/usb/misc/sisusbvga/sisusb.c b/drivers/usb/misc/sisusbvga/sisusb.c index 86638c1..f1b46b5 100644 --- a/drivers/usb/misc/sisusbvga/sisusb.c +++ b/drivers/usb/misc/sisusbvga/sisusb.c @@ -1108,7 +1108,7 @@ static int sisusb_read_mem_bulk(struct sisusb_usb_data *sisusb, u32 addr, ssize_t *bytes_read) { int ret = 0; - char buf[4]; + u8 buf[4]; u16 swap16; u32 swap32; @@ -1293,7 +1293,7 @@ int sisusb_copy_memory(struct sisusb_usb_data *sisusb, char *src, } #ifdef SISUSBENDIANTEST -static int sisusb_read_memory(struct sisusb_usb_data *sisusb, char *dest, +static int sisusb_read_memory(struct sisusb_usb_data *sisusb, u8 *dest, u32 src, int length) { size_t dummy; @@ -1308,7 +1308,7 @@ static int sisusb_read_memory(struct sisusb_usb_data *sisusb, char *dest, static void sisusb_testreadwrite(struct sisusb_usb_data *sisusb) { static char srcbuffer[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }; - char destbuffer[10]; + u8 destbuffer[10]; int i, j; sisusb_copy_memory(sisusb, srcbuffer, sisusb->vrambase, 7); @@ -2561,7 +2561,7 @@ static ssize_t sisusb_read(struct file *file, char __user *buffer, * Remember: Data delivered is never endian-corrected */ errno = sisusb_read_mem_bulk(sisusb, address, - NULL, count, buffer, &bytes_read); + NULL, count, (u8 __user *)buffer, &bytes_read); if (bytes_read) errno = bytes_read; @@ -2577,7 +2577,7 @@ static ssize_t sisusb_read(struct file *file, char __user *buffer, * Remember: Data delivered is never endian-corrected */ errno = sisusb_read_mem_bulk(sisusb, address, - NULL, count, buffer, &bytes_read); + NULL, count, (u8 __user *)buffer, &bytes_read); if (bytes_read) errno = bytes_read; -- 2.7.4