mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
modpost: use more reliable way to get fromsec in section_rel(a)()
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>
This commit is contained in:
parent
125ed24a4a
commit
5419aa2a8d
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user