On Thu, 21 Jan 2021 11:01:06 -0600 Tom Zanussi <zanu...@kernel.org> wrote:
> +static int check_command(const char *raw_command) > +{ > + char **argv = NULL, *cmd, *saved_cmd, *name_and_field; > + int argc, ret = 0; > + > + cmd = saved_cmd = kstrdup(raw_command, GFP_KERNEL); > + if (!cmd) > + return -ENOMEM; > + > + name_and_field = strsep(&cmd, ";"); > + if (!name_and_field) { > + ret = -EINVAL; > + goto free; > + } > + > + if (name_and_field[0] == '!') > + goto free; > + > + argv = argv_split(GFP_KERNEL, name_and_field, &argc); > + if (!argv) { > + ret = -ENOMEM; > + goto free; > + } > + > + if (argc < 3) > + ret = -EINVAL; Nit, you can simply put here: argv_free(argv); Hmm, is it used at all? If not, just move it after its allocation check. > +free: > + kfree(saved_cmd); > + if (argv) > + argv_free(argv); And remove the above, as argv is always NULL when "goto free" is used. -- Steve > + > + return ret; > +} > +