From ac37ec1ddef234eeba6f438c29ff687c64962ebd Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Wed, 31 Jan 2018 10:35:52 +0000 Subject: [PATCH] xen/cmdline: Fix parse_boolean() for unadorned values 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 Reviewed-by: Jan Beulich --- xen/common/kernel.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/xen/common/kernel.c b/xen/common/kernel.c index 19f9bad48d..5766a0f784 100644 --- a/xen/common/kernel.c +++ b/xen/common/kernel.c @@ -259,12 +259,16 @@ int parse_boolean(const char *name, const char *s, const char *e) 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; -- 2.30.2