@@ -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;
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@gmail.com> --- drivers/usb/misc/sisusbvga/sisusb.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)