diff options
-rw-r--r-- | src/ChangeLog | 6 | ||||
-rw-r--r-- | src/elflint.c | 18 |
2 files changed, 19 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 8ba25397..f459e117 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2015-10-13 Jose E. Marchesi <jose.marchesi@oracle.com> + + * elflint.c (check_sections): Do not rely on + ebl_check_special_section when checking debuginfo files. Also + check that the type of WE sections in debuginfo files is NOBITS. + 2015-10-13 Mark Wielaard <mjw@redhat.com> * elflint.c (check_program_header): Check relro flags are a subset diff --git a/src/elflint.c b/src/elflint.c index 63192bbd..0a6f0df3 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -3938,12 +3938,20 @@ section [%2zu] '%s' has unexpected type %d for an executable section\n"), break; } - if ((shdr->sh_flags & SHF_WRITE) - && !ebl_check_special_section (ebl, cnt, shdr, - section_name (ebl, cnt))) - ERROR (gettext ("\ + if (shdr->sh_flags & SHF_WRITE) + { + if (is_debuginfo && shdr->sh_type != SHT_NOBITS) + ERROR (gettext ("\ +section [%2zu] '%s' must be of type NOBITS in debuginfo files\n"), + cnt, section_name (ebl, cnt)); + + if (!is_debuginfo + && !ebl_check_special_section (ebl, cnt, shdr, + section_name (ebl, cnt))) + ERROR (gettext ("\ section [%2zu] '%s' is both executable and writable\n"), - cnt, section_name (ebl, cnt)); + cnt, section_name (ebl, cnt)); + } } if (ehdr->e_type != ET_REL && (shdr->sh_flags & SHF_ALLOC) != 0) |