lkml.org 
[lkml]   [2022]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/3] modpost: use more reliable way to get fromsec in section_rel(a)()
    Date
    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@kernel.org>
    ---

    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
    \
     
     \ /
      Last update: 2022-07-30 19:39    [W:3.229 / U:0.492 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site