> -----Original Message----- > 在 2021年01月05日 20:12, crash-utility-request@xxxxxxxxxx 写道: > > From: Jackie Liu <liuyun01@xxxxxxxxxx> > > > > Some strange reasons may cause kcore to collect some strange > > entries of ikconfig, such as CONFIG_SECU+[some hex data] causes > > the 'val' to be NULL, and then crashes when strdup. > > > > CONFIG_SECU+[some hex data] to be **strings that don't > > contain the delimitor string '='** and then strtok_r() interprets > > it as consisting of a single token, hence val resulting in having NULL. > > > > Thank you for the fix. > > Acked-by: Lianbo Jiang <lijiang@xxxxxxxxxx> > Queued for the next version: https://github.com/crash-utility/crash/commit/5a0488049917ba2790d59108f3def16825528974 Thanks, Kazu > > [d.hatayama@xxxxxxxxxxx: rewrite comment] > > Suggested-by: HAGIO KAZUHITO(?? ??) <k-hagio-ab@xxxxxxx> > > Signed-off-by: Jackie Liu <liuyun01@xxxxxxxxxx> > > --- > > kernel.c | 14 +++++++++++--- > > 1 file changed, 11 insertions(+), 3 deletions(-) > > > > diff --git a/kernel.c b/kernel.c > > index 9871637..c8182a6 100644 > > --- a/kernel.c > > +++ b/kernel.c > > @@ -10236,7 +10236,7 @@ static struct ikconfig_list { > > char *val; > > } *ikconfig_all; > > > > -static void add_ikconfig_entry(char *line, struct ikconfig_list *ent) > > +static int add_ikconfig_entry(char *line, struct ikconfig_list *ent) > > { > > char *tokptr, *name, *val; > > > > @@ -10244,8 +10244,16 @@ static void add_ikconfig_entry(char *line, struct ikconfig_list *ent) > > sscanf(name, "CONFIG_%s", name); > > val = strtok_r(NULL, "", &tokptr); > > > > + if (!val) { > > + if (CRASHDEBUG(2)) > > + error(WARNING, "invalid ikconfig entry: %s\n", line); > > + return FALSE; > > + } > > + > > ent->name = strdup(name); > > ent->val = strdup(val); > > + > > + return TRUE; > > } > > > > static int setup_ikconfig(char *config) > > @@ -10265,8 +10273,8 @@ static int setup_ikconfig(char *config) > > ent++; > > > > if (STRNEQ(ent, "CONFIG_")) { > > - add_ikconfig_entry(ent, > > - &ikconfig_all[kt->ikconfig_ents++]); > > + if (add_ikconfig_entry(ent, &ikconfig_all[kt->ikconfig_ents])) > > + kt->ikconfig_ents++; > > if (kt->ikconfig_ents == IKCONFIG_MAX) { > > error(WARNING, "ikconfig overflow.\n"); > > return 1; > > -- 2.17.1 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility