[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/dom0: Fix command line parsing issues with dom0_nodes=
commit 8969d58404ceddf9994574253965dc46c4308da3 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Fri Nov 19 13:16:12 2021 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Mon Nov 29 13:53:05 2021 +0000 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 <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/dom0_build.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) 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); -- generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |