i2o: fix overflow of copy_to_user()
authorKulikov Vasiliy <segooon@gmail.com>
Wed, 11 Aug 2010 01:02:03 +0000 (18:02 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 11 Aug 2010 15:59:05 +0000 (08:59 -0700)
If (len > reslen) we must not call copy_to_user() since kernel buffer is
smaller than we want to copy.  Similar code in this file is correct, so
this bug was a typo.

Signed-off-by: Kulikov Vasiliy <segooon@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/message/i2o/i2o_config.c

index c4b117f5fb70959df600a2153ac7d961a692488c..4dd39a03082a8e780a1c21ca56ab5af0a38c0ce5 100644 (file)
@@ -115,7 +115,7 @@ static int i2o_cfg_gethrt(unsigned long arg)
        put_user(len, kcmd.reslen);
        if (len > reslen)
                ret = -ENOBUFS;
-       if (copy_to_user(kcmd.resbuf, (void *)hrt, len))
+       else if (copy_to_user(kcmd.resbuf, (void *)hrt, len))
                ret = -EFAULT;
 
        return ret;