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
---
CC: Jan Beulich
This wants backporting everywhere the spectre series has gone.
---
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 19f9bad..5766a0f 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.1.4
___
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel