X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fusb%2Fserial%2Fsafe_serial.c;h=fa0abc4b625ace1fb119a0b0c7ec87bfa22c1d2c;hb=a9fdee76789476a10f923f9fb3c84993042da3ac;hp=0e85ed6c6c195ced68b8e9b0c99769cb4517981f;hpb=8d40237c730b8be87c1b80a5d96b9c603fefa829;p=linux-2.6.git diff --git a/drivers/usb/serial/safe_serial.c b/drivers/usb/serial/safe_serial.c index 0e85ed6c6..fa0abc4b6 100644 --- a/drivers/usb/serial/safe_serial.c +++ b/drivers/usb/serial/safe_serial.c @@ -273,7 +273,7 @@ static void safe_read_bulk_callback (struct urb *urb, struct pt_regs *regs) } } -static int safe_write (struct usb_serial_port *port, const unsigned char *buf, int count) +static int safe_write (struct usb_serial_port *port, int from_user, const unsigned char *buf, int count) { unsigned char *data; int result; @@ -314,7 +314,12 @@ static int safe_write (struct usb_serial_port *port, const unsigned char *buf, i data = port->write_urb->transfer_buffer; memset (data, '0', packet_length); - memcpy (data, buf, count); + if (from_user) { + if (copy_from_user (data, buf, count)) + return -EFAULT; + } else { + memcpy (data, buf, count); + } if (safe) { __u16 fcs;