On Sat, Jul 30, 2022 at 10:37 AM Masahiro Yamada <masahiroy@xxxxxxxxxx> wrote: > > The section name of Rel and Rela starts with ".rel" and ".rela" > respectively (but, I do not know whether this is specification or > convention). > > For example, ".rela.text" holds relocation entries applied to the > ".text" section. > > So, the code chops the ".rel" or ".rela" prefix to get the name of > the section to which the relocation applies. > > However, I do not like to skip 4 or 5 bytes blindly because it is > potential memory overrun. > > The ELF specification provides a more reliable way to do this. > > - The sh_info field holds extra information, whose interpretation > depends on the section type > > - If the section type is SHT_REL or SHT_RELA, the sh_info field holds > the section header index of the section to which the relocation > applies. > > Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx> Yes, this seems much safer; thanks for the patch! Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > --- > > scripts/mod/modpost.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c > index 148b38699889..c6a055c0291e 100644 > --- a/scripts/mod/modpost.c > +++ b/scripts/mod/modpost.c > @@ -1723,8 +1723,7 @@ static void section_rela(const char *modname, struct elf_info *elf, > Elf_Rela *start = (void *)elf->hdr + sechdr->sh_offset; > Elf_Rela *stop = (void *)start + sechdr->sh_size; > > - fromsec = sech_name(elf, sechdr); > - fromsec += strlen(".rela"); > + fromsec = sec_name(elf, sechdr->sh_info); > /* if from section (name) is know good then skip it */ > if (match(fromsec, section_white_list)) > return; > @@ -1776,8 +1775,7 @@ static void section_rel(const char *modname, struct elf_info *elf, > Elf_Rel *start = (void *)elf->hdr + sechdr->sh_offset; > Elf_Rel *stop = (void *)start + sechdr->sh_size; > > - fromsec = sech_name(elf, sechdr); > - fromsec += strlen(".rel"); > + fromsec = sec_name(elf, sechdr->sh_info); > /* if from section (name) is know good then skip it */ > if (match(fromsec, section_white_list)) > return; > -- > 2.34.1 > -- Thanks, ~Nick Desaulniers