case VIDEO1394_IOC_TALK_QUEUE_BUFFER:
{
struct video1394_wait v;
- unsigned int *psizes = NULL;
+ struct video1394_queue_variable qv;
struct dma_iso_ctx *d;
+ qv.packet_sizes = NULL;
+
if (copy_from_user(&v, argp, sizeof(v)))
return -EFAULT;
}
if (d->flags & VIDEO1394_VARIABLE_PACKET_SIZE) {
+ unsigned int *psizes;
int buf_size = d->nb_cmd * sizeof(unsigned int);
- struct video1394_queue_variable __user *p = argp;
- unsigned int __user *qv;
- if (get_user(qv, &p->packet_sizes))
+ if (copy_from_user(&qv, argp, sizeof(qv)))
return -EFAULT;
psizes = kmalloc(buf_size, GFP_KERNEL);
if (!psizes)
return -ENOMEM;
- if (copy_from_user(psizes, qv, buf_size)) {
+ if (copy_from_user(psizes, qv.packet_sizes, buf_size)) {
kfree(psizes);
return -EFAULT;
}
+
+ qv.packet_sizes = psizes;
}
spin_lock_irqsave(&d->lock,flags);
PRINT(KERN_ERR, ohci->host->id,
"Buffer %d is already used",v.buffer);
spin_unlock_irqrestore(&d->lock,flags);
- if (psizes)
- kfree(psizes);
+ if (qv.packet_sizes)
+ kfree(qv.packet_sizes);
return -EFAULT;
}
if (d->flags & VIDEO1394_VARIABLE_PACKET_SIZE) {
initialize_dma_it_prg_var_packet_queue(
- d, v.buffer, psizes,
+ d, v.buffer, qv.packet_sizes,
ohci);
}
}
}
- if (psizes)
- kfree(psizes);
+ if (qv.packet_sizes)
+ kfree(qv.packet_sizes);
return 0;
static int video1394_wr_wait32(unsigned int fd, unsigned int cmd, unsigned long arg,
struct file *file)
{
- struct video1394_wait32 __user *argp = (void __user *)arg;
struct video1394_wait32 wait32;
struct video1394_wait wait;
mm_segment_t old_fs;
if (file->f_op->ioctl != video1394_ioctl)
return -EFAULT;
- if (copy_from_user(&wait32, argp, sizeof(wait32)))
+ if (copy_from_user(&wait32, (void *)arg, sizeof(wait32)))
return -EFAULT;
wait.channel = wait32.channel;
wait32.filltime.tv_sec = (int)wait.filltime.tv_sec;
wait32.filltime.tv_usec = (int)wait.filltime.tv_usec;
- if (copy_to_user(argp, &wait32, sizeof(wait32)))
+ if (copy_to_user((struct video1394_wait32 *)arg, &wait32, sizeof(wait32)))
ret = -EFAULT;
}
if (file->f_op->ioctl != video1394_ioctl)
return -EFAULT;
- if (copy_from_user(&wait32, (void __user *)arg, sizeof(wait32)))
+ if (copy_from_user(&wait32, (void *)arg, sizeof(wait32)))
return -EFAULT;
wait.channel = wait32.channel;