xen: fix parse_bool() with empty string
authorJuergen Gross <jgross@suse.com>
Fri, 25 Aug 2017 16:11:25 +0000 (18:11 +0200)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 25 Aug 2017 19:11:16 +0000 (20:11 +0100)
parse_bool() should return -1 in case it is called with an empty
string. In order to allow boolean parameters in the cmdline without
specifying a value this case must be handled in _cmdline_parse() by
always passing a value string.

This fixes commit 532dec8e31174ed450adfd36a4b0b41dec27010d ("xen:
add an optional string end parameter to parse_bool()")

Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/common/kernel.c

index ec7714961aec1b9eea62b24d52d13720723ab51a..71bc547d17eb83061abcd640a85e04bb10abf5ed 100644 (file)
@@ -114,7 +114,7 @@ static void __init _cmdline_parse(const char *cmdline)
                     simple_strtoll(optval, NULL, 0));
                 break;
             case OPT_BOOL:
-                if ( !parse_bool(optval, NULL) )
+                if ( !parse_bool(*optval ? optval : "yes", NULL) )
                     bool_assert = !bool_assert;
                 assign_integer_param(param, bool_assert);
                 break;
@@ -168,6 +168,8 @@ int __init parse_bool(const char *s, const char *e)
     unsigned int len;
 
     len = e ? ({ ASSERT(e >= s); e - s; }) : strlen(s);
+    if ( !len )
+        return -1;
 
     if ( !strncmp("no", s, len) ||
          !strncmp("off", s, len) ||