ELF: Don't include zero size sections at start of PT_NOTE segment
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 21 Sep 2018 11:07:50 +0000 (04:07 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 21 Sep 2018 11:08:01 +0000 (04:08 -0700)
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
include/elf/internal.h

index 34dcb8c536cdbb5a7af6264e2b15af7e1e92fc75..f46251eae7f7643f4e62912eb393fcefe09962e8 100644 (file)
@@ -1,3 +1,9 @@
+2018-09-21  H.J. Lu  <hongjiu.lu@intel.com>
+
+       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 <nelson.chu1990@gmail.com>
 
        * elf/nds32.h: Remove the unused target features.
index 05f9fab89cbe2aee94006d18a689cb01e101776f..0d96f0c19612100a3b4caf607e46d4ffa737b365 100644 (file)
@@ -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                           \