From 8b20e4d95e127f8c72e0c3e5c144caf7ce994dec Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Thu, 7 Feb 2008 14:51:32 +1000 Subject: [PATCH] --- yaml --- r: 84039 b: refs/heads/master c: 9d5b3ffc42f7820e8ee07705496955e4c2c38dd9 h: refs/heads/master i: 84037: 49d89ee48ad4aa52e187c3bdeda3bc66af53f199 84035: 7e85184a7ce1e1af3e07f61f6cc031c3a9eef301 84031: 9b9c86291a3a1babd34846f8ad9e475d54d2b4ca v: v3 --- [refs] | 2 +- trunk/drivers/char/drm/drm_drv.c | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 81418feabda1..21e07a9111c1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 19a8f59ab8ceee751ea720085098355d53f727d6 +refs/heads/master: 9d5b3ffc42f7820e8ee07705496955e4c2c38dd9 diff --git a/trunk/drivers/char/drm/drm_drv.c b/trunk/drivers/char/drm/drm_drv.c index 77e2fb7b7b37..0e7af53c87de 100644 --- a/trunk/drivers/char/drm/drm_drv.c +++ b/trunk/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; } }