i2o: check return code from put_user()
PATCH 2/2 i2o: check return code from put_user()
Check return value of put_user() and return -EFAULT if it failed. Original comment "We did a get user...so assuming mem is ok...is this bad?" is incorrect because memory can be read only.
Signed-off-by Kulikov Vasiliy <[email protected]>
--- drivers/message/i2o/i2o_config.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-)
drivers/message/i2o/i2o_config.c +9 -7
@@ -111,9 +111,9 @@ static int i2o_cfg_gethrt(unsigned long arg) len =8 + ((hrt->entry_len * hrt->num_entries) <<2 ); -/* We did a get user...so assuming mem is ok...is this bad? */ -put_user (len, kcmd.reslen); -if (len > reslen) +if (put_user (len, kcmd.reslen)) + ret = -EFAULT ; +else if (len > reslen) ret = -ENOBUFS ;else if (copy_to_user (kcmd.resbuf, (void *)hrt, len)) ret = -EFAULT ;
@@ -147,8 +147,9 @@ static int i2o_cfg_getlct(unsigned long arg) lct = (i2o_lct *) c->lct; len = (unsigned int )lct->table_size <<2 ; -put_user (len, kcmd.reslen); -if (len > reslen) +if (put_user (len, kcmd.reslen)) + ret = -EFAULT ; +else if (len > reslen) ret = -ENOBUFS ;else if (copy_to_user (kcmd.resbuf, lct, len)) ret = -EFAULT ;
@@ -208,8 +209,9 @@ static int i2o_cfg_parms(unsigned long arg, unsigned int type)return -EAGAIN ; } -put_user (len, kcmd.reslen); -if (len > reslen) +if (put_user (len, kcmd.reslen)) + ret = -EFAULT ; +else if (len > reslen) ret = -ENOBUFS ;else if (copy_to_user (kcmd.resbuf, res, len)) ret = -EFAULT ;
Signature · 1 line
1.7.0.4