From 95475e5d6b7529309ca804fdc2c2e04d654c3978 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 21 Sep 2018 04:07:50 -0700 Subject: [PATCH] ELF: Don't include zero size sections at start of PT_NOTE segment We shouldn't include zero size sections at start of PT_NOTE segment, similar to PT_DYNAMIC segment. PR binutils/23694 * include/elf/internal.h (ELF_SECTION_IN_SEGMENT_1): Don't include zero size sections at start of PT_NOTE segment. --- include/ChangeLog | 6 ++++++ include/elf/internal.h | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/ChangeLog b/include/ChangeLog index 34dcb8c536..f46251eae7 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,9 @@ +2018-09-21 H.J. Lu + + PR binutils/23694 + * include/elf/internal.h (ELF_SECTION_IN_SEGMENT_1): Don't + include zero size sections at start of PT_NOTE segment. + 2018-09-20 Nelson Chu * elf/nds32.h: Remove the unused target features. diff --git a/include/elf/internal.h b/include/elf/internal.h index 05f9fab89c..0d96f0c196 100644 --- a/include/elf/internal.h +++ b/include/elf/internal.h @@ -311,8 +311,8 @@ struct elf_segment_map VMAs are checked for alloc sections. If STRICT, then a zero size section won't match at the end of a segment, unless the segment is also zero size. Regardless of STRICT and CHECK_VMA, zero size - sections won't match at the start or end of PT_DYNAMIC, unless - PT_DYNAMIC is itself zero sized. */ + sections won't match at the start or end of PT_DYNAMIC nor PT_NOTE, + unless PT_DYNAMIC and PT_NOTE are themselves zero sized. */ #define ELF_SECTION_IN_SEGMENT_1(sec_hdr, segment, check_vma, strict) \ ((/* Only PT_LOAD, PT_GNU_RELRO and PT_TLS segments can contain \ SHF_TLS sections. */ \ @@ -352,8 +352,10 @@ struct elf_segment_map && (((sec_hdr)->sh_addr - (segment)->p_vaddr \ + ELF_SECTION_SIZE(sec_hdr, segment)) \ <= (segment)->p_memsz))) \ - /* No zero size sections at start or end of PT_DYNAMIC. */ \ - && ((segment)->p_type != PT_DYNAMIC \ + /* No zero size sections at start or end of PT_DYNAMIC nor \ + PT_NOTE. */ \ + && (((segment)->p_type != PT_DYNAMIC \ + && (segment)->p_type != PT_NOTE) \ || (sec_hdr)->sh_size != 0 \ || (segment)->p_memsz == 0 \ || (((sec_hdr)->sh_type == SHT_NOBITS \ -- 2.34.1