strict_strto* is not strict enough
authorPavel Machek <pavel@suse.cz>
Tue, 6 Jan 2009 22:40:53 +0000 (14:40 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 6 Jan 2009 23:59:12 +0000 (15:59 -0800)
It decodes "\n" as 0, which is bad, because stray echo into backlight
will turn your backlight off, etc...

Signed-off-by: Pavel Machek <pavel@suse.cz>
Cc: Yi Yang <yi.y.yang@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
lib/vsprintf.c

index 98d6322..0fbd012 100644 (file)
@@ -170,6 +170,8 @@ int strict_strtoul(const char *cp, unsigned int base, unsigned long *res)
                return -EINVAL;
 
        val = simple_strtoul(cp, &tail, base);
+       if (tail == cp)
+               return -EINVAL;
        if ((*tail == '\0') ||
                ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {
                *res = val;
@@ -241,6 +243,8 @@ int strict_strtoull(const char *cp, unsigned int base, unsigned long long *res)
                return -EINVAL;
 
        val = simple_strtoull(cp, &tail, base);
+       if (tail == cp)
+               return -EINVAL;
        if ((*tail == '\0') ||
                ((len == (size_t)(tail - cp) + 1) && (*tail == '\n'))) {
                *res = val;