Revert "x86/early_printk: Replace obsolete simple_strtoul() usage with kstrtoint()"
authorIngo Molnar <mingo@kernel.org>
Fri, 22 Jun 2012 14:25:19 +0000 (16:25 +0200)
committerIngo Molnar <mingo@kernel.org>
Sun, 22 Jul 2012 13:47:52 +0000 (15:47 +0200)
This reverts commit fbd24153c48b8425b09c161a020483cd77da870e.

This commit is subtly buggy: kstrto*int() can return an error but
it's not checked in every path. simple_strtoul() on the other hand
could not fail, so this patch subtly intruduces new failure modes.

Signed-off-by: Shuah Khan <shuahkhan@gmail.com>
Link: http://lkml.kernel.org/r/1338424803.3569.5.camel@lorien2
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/early_printk.c

index 5e4771266f1a966e8c7cde35ab694ec551c61e7d..9b9f18b4991849f7cc1923441bea2d5f5359886c 100644 (file)
@@ -119,7 +119,7 @@ static __init void early_serial_init(char *s)
        unsigned char c;
        unsigned divisor;
        unsigned baud = DEFAULT_BAUD;
-       ssize_t ret;
+       char *e;
 
        if (*s == ',')
                ++s;
@@ -127,14 +127,14 @@ static __init void early_serial_init(char *s)
        if (*s) {
                unsigned port;
                if (!strncmp(s, "0x", 2)) {
-                       ret = kstrtoint(s, 16, &early_serial_base);
+                       early_serial_base = simple_strtoul(s, &e, 16);
                } else {
                        static const int __initconst bases[] = { 0x3f8, 0x2f8 };
 
                        if (!strncmp(s, "ttyS", 4))
                                s += 4;
-                       ret = kstrtouint(s, 10, &port);
-                       if (ret || port > 1)
+                       port = simple_strtoul(s, &e, 10);
+                       if (port > 1 || s == e)
                                port = 0;
                        early_serial_base = bases[port];
                }
@@ -149,8 +149,8 @@ static __init void early_serial_init(char *s)
        outb(0x3, early_serial_base + MCR);     /* DTR + RTS */
 
        if (*s) {
-               ret = kstrtouint(s, 0, &baud);
-               if (ret || baud == 0)
+               baud = simple_strtoul(s, &e, 0);
+               if (baud == 0 || s == e)
                        baud = DEFAULT_BAUD;
        }