A command line such as "cpuid=no-ibrsb,no-stibp" tickles a bug in
parse_boolean() because the separating comma fails the NUL case.
Instead, check for slen == nlen which accounts for the boundary (if any)
passed via the 'e' parameter.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
if ( slen < nlen || strncmp(s, name, nlen) )
return -1;
- switch ( s[nlen] )
- {
- case '\0': return val;
- case '=': return parse_bool(&s[nlen + 1], e);
- default: return -1;
- }
+ /* Exact, unadorned name? Result depends on the 'no-' prefix. */
+ if ( slen == nlen )
+ return val;
+
+ /* =$SOMETHING? Defer to the regular boolean parsing. */
+ if ( s[nlen] == '=' )
+ return parse_bool(&s[nlen + 1], e);
+
+ /* Unrecognised. Give up. */
+ return -1;
}
unsigned int tainted;