Skip to content

Commit 9d5b3ff

Browse files
committed
drm: fixup some of the ioctl function exit paths
Signed-off-by: Dave Airlie <[email protected]>
1 parent 19a8f59 commit 9d5b3ff

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

drivers/char/drm/drm_drv.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -495,23 +495,25 @@ int drm_ioctl(struct inode *inode, struct file *filp,
495495
} else {
496496
if (cmd & (IOC_IN | IOC_OUT)) {
497497
kdata = kmalloc(_IOC_SIZE(cmd), GFP_KERNEL);
498-
if (!kdata)
499-
return -ENOMEM;
498+
if (!kdata) {
499+
retcode = -ENOMEM;
500+
goto err_i1;
501+
}
500502
}
501503

502504
if (cmd & IOC_IN) {
503505
if (copy_from_user(kdata, (void __user *)arg,
504506
_IOC_SIZE(cmd)) != 0) {
505-
retcode = -EACCES;
507+
retcode = -EFAULT;
506508
goto err_i1;
507509
}
508510
}
509511
retcode = func(dev, kdata, file_priv);
510512

511-
if (cmd & IOC_OUT) {
513+
if ((retcode == 0) && (cmd & IOC_OUT)) {
512514
if (copy_to_user((void __user *)arg, kdata,
513515
_IOC_SIZE(cmd)) != 0)
514-
retcode = -EACCES;
516+
retcode = -EFAULT;
515517
}
516518
}
517519

0 commit comments

Comments
 (0)