On Sat, Jul 30, 2022 at 10:37 AM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote: > > The section index is always positive, so the argunent, secindex, should > be unsigned. > > Also, inserted the array range check. > > If sym->st_shndx is a special section index (between SHN_LORESERVE and > SHN_HIRESERVE), there is no corresponding section header. > > For example, if a symbol specifies an absolute value, sym->st_shndx is > SHN_ABS (=0xfff1). > > The current users do not cause the out-of-range access of > info->sechddrs[], but it is better to avoid such a pitfall. > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> I don't mind adding this check; though if it's anomalous I think we could also just print to stderr and abort. I would prefer Elf_Sym over unsigned int though. WDYT? > --- > > scripts/mod/modpost.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c > index 08411fff3e17..148b38699889 100644 > --- a/scripts/mod/modpost.c > +++ b/scripts/mod/modpost.c > @@ -336,8 +336,16 @@ static const char *sech_name(const struct elf_info *info, Elf_Shdr *sechdr) > sechdr->sh_name); > } > > -static const char *sec_name(const struct elf_info *info, int secindex) > +static const char *sec_name(const struct elf_info *info, unsigned int secindex) > { > + /* > + * If sym->st_shndx is a special section index, there is no > + * corresponding section header. > + * Return "" if the index is out of range of info->sechdrs[] array. > + */ > + if (secindex >= info->num_sections) > + return ""; > + > return sech_name(info, &info->sechdrs[secindex]); > } > > -- > 2.34.1 > -- Thanks, ~Nick Desaulniers