Re: [Xen-devel] [PATCH] xen/cmdline: Fix parse_boolean() for unadorned values

2018-01-31 Thread Jan Beulich
>>> On 31.01.18 at 11:36,  wrote:
> 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-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

[Xen-devel] [PATCH] xen/cmdline: Fix parse_boolean() for unadorned values

2018-01-31 Thread Andrew Cooper
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