[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 39/52] xen: check parameter validity when parsing command line
>>> On 16.08.17 at 14:52, <jgross@xxxxxxxx> wrote: > static void __init _cmdline_parse(const char *cmdline) > { > char opt[128], *optval, *optkey, *q; > - const char *p = cmdline; > + const char *p = cmdline, *s, *key; > const struct kernel_param *param; > - int bool_assert; > + int bool_assert, rctmp, rc; > + bool found; If you touch this anyway, I think bool_assert should become bool too. And perhaps worthwhile shrinking the scope of at least some of the variables you add/touch. > @@ -131,13 +157,21 @@ static void __init _cmdline_parse(const char *cmdline) > safe_strcpy(opt, "no"); > optval = opt; > } > - ((void (*)(const char *))param->var)(optval); > + rctmp = param->par.func(optval); > break; > default: > BUG(); > break; > } > + > + if ( !rc ) > + rc = rctmp; > } > + > + if ( rc ) > + printk("parameter \"%s\" has invalid value \"%s\"!\n", key, > optval); Since a few different rc values are possible by now, it's perhaps worth also logging rc. > @@ -176,7 +210,8 @@ int __init parse_bool(const char *s) > !strcmp("on", s) || > !strcmp("true", s) || > !strcmp("enable", s) || > - !strcmp("1", s) ) > + !strcmp("1", s) || > + !*s ) > return 1; Careful with this: Taking the "iommu=" example that I've commented on in the other patch already, much depends on what you mean to do about the problem there: "iommu=,..." should not end up meaning "iommu=on,...". > --- a/xen/include/xen/init.h > +++ b/xen/include/xen/init.h > @@ -83,7 +83,10 @@ struct kernel_param { > OPT_CUSTOM > } type; > unsigned int len; > - void *var; > + union { > + void *var; > + int (*func)(const char *); > + } par; > }; > > extern const struct kernel_param __setup_start[], __setup_end[]; > @@ -95,23 +98,38 @@ extern const struct kernel_param __setup_start[], > __setup_end[]; > > #define custom_param(_name, _var) \ > __setup_str __setup_str_##_var[] = _name; \ > - __kparam __setup_##_var = { __setup_str_##_var, OPT_CUSTOM, 0, _var } > + __kparam __setup_##_var = \ > + { .name = __setup_str_##_var, \ > + .type = OPT_CUSTOM, \ > + .par.func = _var } I much appreciate this, as it is only now that we can be sure all handler functions are of the intended type. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |