Hi Jakie,
I replied only to the list but you look not subscribed?
so sending you this again just in case..
Thanks,
Kazu
-----Original Message-----
-----Original Message-----
> From: Jackie Liu <liuyun01(a)kylinos.cn>
>
> 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.
>
> Signed-off-by: Jackie Liu <liuyun01(a)kylinos.cn>
> ---
> kernel.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/kernel.c b/kernel.c
> index 9871637..aa86f0d 100644
> --- a/kernel.c
> +++ b/kernel.c
> @@ -10244,6 +10244,9 @@ static void add_ikconfig_entry(char *line, struct
ikconfig_list *ent)
> sscanf(name, "CONFIG_%s", name);
> val = strtok_r(NULL, "", &tokptr);
>
> + if (!val)
> + return;
> +
This looks harmless, but kt->ikconfig_ents is incremented unconditionally
in setup_ikconfig() and inconsistent with the following debug message
if (setup_ikconfig(pos)) {
kt->ikconfig_flags |= IKCONFIG_LOADED;
if (CRASHDEBUG(1))
fprintf(fp,
"ikconfig: %d valid configs.\n",
kt->ikconfig_ents);
and it consumes an element of the ikconfig_all array needlessly, so
how about something like this?:
if (!val) {
if (CRASHDEBUG(2))
error(WARNING, "invalid ikconfig entry: %s\n", line);
return FALSE;
}
...
return TRUE;
and in setup_ikconfig():
if (add_ikconfig_entry(ent, &ikconfig_all[kt->ikconfig_ents])
kt->ikconfig_ents++;
Thanks,
Kazu
> ent->name = strdup(name);
> ent->val = strdup(val);
> }
> --
> 2.17.1
>
>