static ssize_t r3964_read(struct tty_struct *tty, struct file *file,
unsigned char __user *buf, size_t nr);
static ssize_t r3964_write(struct tty_struct * tty, struct file * file,
- const unsigned char __user * buf, size_t nr);
+ const unsigned char * buf, size_t nr);
static int r3964_ioctl(struct tty_struct * tty, struct file * file,
unsigned int cmd, unsigned long arg);
static void r3964_set_termios(struct tty_struct *tty, struct termios * old);
}
static ssize_t r3964_write(struct tty_struct * tty, struct file * file,
- const unsigned char __user *data, size_t count)
+ const unsigned char *data, size_t count)
{
struct r3964_info *pInfo=(struct r3964_info*)tty->disc_data;
struct r3964_block_header *pHeader;
struct r3964_client_info *pClient;
unsigned char *new_data;
- int status;
int pid;
TRACE_L("write request, %d characters", count);
if(!pInfo)
return -EIO;
- status = verify_area (VERIFY_READ, data, count);
- if (status != 0)
- {
- return status;
- }
-
/*
* Ensure that the caller does not wish to send too much.
*/
count = R3964_MTU;
}
/*
- * Allocate a buffer for the data and fetch it from the user space.
+ * Allocate a buffer for the data and copy it from the buffer with header prepended
*/
new_data = kmalloc (count+sizeof(struct r3964_block_header), GFP_KERNEL);
TRACE_M("r3964_write - kmalloc %x",(int)new_data);
pHeader->owner = pClient;
}
- __copy_from_user(pHeader->data, data, count); /* We already verified this */
+ memcpy(pHeader->data, data, count); /* We already verified this */
if(pInfo->flags & R3964_DEBUG)
{