}
}
-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;
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;