From: Andrew Cooper Date: Fri, 19 Nov 2021 13:16:12 +0000 (+0000) Subject: x86/dom0: Fix command line parsing issues with dom0_nodes= X-Git-Tag: archive/raspbian/4.17.0-1+rpi1^2~33^2~1302 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=8969d58404ceddf9994574253965dc46c4308da3;p=xen.git x86/dom0: Fix command line parsing issues with dom0_nodes= This is a simple comma separated list, so use the normal form. * Don't cease processing subsequent elements on an error * Do report -EINVAL for things like `dom0_nodes=4foo` * Don't opencode the cmdline_strcmp() helper Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- diff --git a/xen/arch/x86/dom0_build.c b/xen/arch/x86/dom0_build.c index fe24e11b37..5a7441ed5b 100644 --- a/xen/arch/x86/dom0_build.c +++ b/xen/arch/x86/dom0_build.c @@ -169,30 +169,37 @@ bool __initdata dom0_affinity_relaxed; static int __init parse_dom0_nodes(const char *s) { + const char *ss; + int rc = 0; + do { + ss = strchr(s, ','); + if ( !ss ) + ss = strchr(s, '\0'); + if ( isdigit(*s) ) { + const char *endp; + if ( dom0_nr_pxms >= ARRAY_SIZE(dom0_pxms) ) - return -E2BIG; - dom0_pxms[dom0_nr_pxms] = simple_strtoul(s, &s, 0); - if ( !*s || *s == ',' ) - ++dom0_nr_pxms; + rc = -E2BIG; + else if ( (dom0_pxms[dom0_nr_pxms] = simple_strtoul(s, &endp, 0), + endp != ss) ) + rc = -EINVAL; + else + dom0_nr_pxms++; } - else if ( !strncmp(s, "relaxed", 7) && (!s[7] || s[7] == ',') ) - { + else if ( !cmdline_strcmp(s, "relaxed") ) dom0_affinity_relaxed = true; - s += 7; - } - else if ( !strncmp(s, "strict", 6) && (!s[6] || s[6] == ',') ) - { + else if ( !cmdline_strcmp(s, "strict") ) dom0_affinity_relaxed = false; - s += 6; - } else - return -EINVAL; - } while ( *s++ == ',' ); + rc = -EINVAL; - return s[-1] ? -EINVAL : 0; + s = ss + 1; + } while ( *ss ); + + return rc; } custom_param("dom0_nodes", parse_dom0_nodes);