aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/comedi_compat32.c
diff options
context:
space:
mode:
authorAlex Shi <alex.shi@linaro.org>2015-03-19 08:57:07 +0800
committerAlex Shi <alex.shi@linaro.org>2015-03-19 08:57:07 +0800
commit42f45c9abdea541a9f966553b5e71dd576d432f9 (patch)
treee9189f804b03d19696b0944a5a34ea9427177646 /drivers/staging/comedi/comedi_compat32.c
parent4d8fd56f051e5eea61209de4a3cb0619283a30af (diff)
parentba0bfedf4c9cad58f56a7038d1462ffc21cd33df (diff)
Merge branch 'linux-linaro-lsk' into linux-linaro-lsk-androidlsk-v3.10-15.03-android
Diffstat (limited to 'drivers/staging/comedi/comedi_compat32.c')
-rw-r--r--drivers/staging/comedi/comedi_compat32.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/staging/comedi/comedi_compat32.c b/drivers/staging/comedi/comedi_compat32.c
index ad208cdd53d4..83bcf968ac63 100644
--- a/drivers/staging/comedi/comedi_compat32.c
+++ b/drivers/staging/comedi/comedi_compat32.c
@@ -270,7 +270,7 @@ static int compat_cmd(struct file *file, unsigned long arg)
{
struct comedi_cmd __user *cmd;
struct comedi32_cmd_struct __user *cmd32;
- int rc;
+ int rc, err;
cmd32 = compat_ptr(arg);
cmd = compat_alloc_user_space(sizeof(*cmd));
@@ -279,7 +279,15 @@ static int compat_cmd(struct file *file, unsigned long arg)
if (rc)
return rc;
- return translated_ioctl(file, COMEDI_CMD, (unsigned long)cmd);
+ rc = translated_ioctl(file, COMEDI_CMD, (unsigned long)cmd);
+ if (rc == -EAGAIN) {
+ /* Special case: copy cmd back to user. */
+ err = put_compat_cmd(cmd32, cmd);
+ if (err)
+ rc = err;
+ }
+
+ return rc;
}
/* Handle 32-bit COMEDI_CMDTEST ioctl. */