- u16 *bufptr = (u16 *) buffer + (bytes_copied/2);
- copy_from_user(pt->buf, bufptr, PT_BLOCKSIZE);
- bufptr = (u16 *) pt->buf;
- r = pt_putblock(wave_dev, bufptr, nonblock);
+ u16 __user *bufptr = (u16 __user *) buffer + (bytes_copied/2);
+ if (copy_from_user(pt->buf, bufptr, PT_BLOCKSIZE))
+ return -EFAULT;
+ r = pt_putblock(wave_dev, (u16 *)pt->buf, nonblock);