From: Dave Airlie Date: Thu, 7 Feb 2008 04:51:32 +0000 (+1000) Subject: drm: fixup some of the ioctl function exit paths X-Git-Tag: v2.6.25-rc1~301^2~2 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=9d5b3ffc42f7820e8ee07705496955e4c2c38dd9;p=~shefty%2Frdma-dev.git drm: fixup some of the ioctl function exit paths Signed-off-by: Dave Airlie --- diff --git a/drivers/char/drm/drm_drv.c b/drivers/char/drm/drm_drv.c index 77e2fb7b7b3..0e7af53c87d 100644 --- a/drivers/char/drm/drm_drv.c +++ b/drivers/char/drm/drm_drv.c @@ -495,23 +495,25 @@ int drm_ioctl(struct inode *inode, struct file *filp, } else { if (cmd & (IOC_IN | IOC_OUT)) { kdata = kmalloc(_IOC_SIZE(cmd), GFP_KERNEL); - if (!kdata) - return -ENOMEM; + if (!kdata) { + retcode = -ENOMEM; + goto err_i1; + } } if (cmd & IOC_IN) { if (copy_from_user(kdata, (void __user *)arg, _IOC_SIZE(cmd)) != 0) { - retcode = -EACCES; + retcode = -EFAULT; goto err_i1; } } retcode = func(dev, kdata, file_priv); - if (cmd & IOC_OUT) { + if ((retcode == 0) && (cmd & IOC_OUT)) { if (copy_to_user((void __user *)arg, kdata, _IOC_SIZE(cmd)) != 0) - retcode = -EACCES; + retcode = -EFAULT; } }