static int vfd_open(struct inode *inode, struct file *file);
 static long vfd_ioctl(struct file *file, unsigned cmd, unsigned long arg);
 static int vfd_close(struct inode *inode, struct file *file);
-static ssize_t vfd_write(struct file *file, const char *buf,
+static ssize_t vfd_write(struct file *file, const char __user *buf,
                                size_t n_bytes, loff_t *pos);
 
 /* LIRC driver function prototypes */
 static const struct file_operations vfd_fops = {
        .owner          = THIS_MODULE,
        .open           = &vfd_open,
-       .write          = &vfd_write,
+       .write          = vfd_write,
        .unlocked_ioctl = &vfd_ioctl,
        .release        = &vfd_close,
        .llseek         = noop_llseek,
  * and requires data in 9 consecutive USB interrupt packets,
  * each packet carrying 8 bytes.
  */
-static ssize_t vfd_write(struct file *file, const char *buf,
+static ssize_t vfd_write(struct file *file, const char __user *buf,
                                size_t n_bytes, loff_t *pos)
 {
        int i;
                goto exit;
        }
 
-       data_buf = memdup_user(buf, n_bytes);
+       data_buf = memdup_user((void const __user *)buf, n_bytes);
        if (IS_ERR(data_buf)) {
                retval = PTR_ERR(data_buf);
                goto exit;