vmlinux.lds.h: Move Program Header restoration into NOTES macro
authorKees Cook <keescook@chromium.org>
Tue, 29 Oct 2019 21:13:31 +0000 (14:13 -0700)
committerBorislav Petkov <bp@suse.de>
Mon, 4 Nov 2019 14:34:39 +0000 (15:34 +0100)
In preparation for moving NOTES into RO_DATA, make the Program Header
assignment restoration be part of the NOTES macro itself.

Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com> # s390
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: linux-alpha@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-c6x-dev@linux-c6x.org
Cc: linux-ia64@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Rick Edgecombe <rick.p.edgecombe@intel.com>
Cc: Segher Boessenkool <segher@kernel.crashing.org>
Cc: Will Deacon <will@kernel.org>
Cc: x86-ml <x86@kernel.org>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Link: https://lkml.kernel.org/r/20191029211351.13243-10-keescook@chromium.org
arch/alpha/kernel/vmlinux.lds.S
arch/ia64/kernel/vmlinux.lds.S
arch/mips/kernel/vmlinux.lds.S
arch/powerpc/kernel/vmlinux.lds.S
arch/s390/kernel/vmlinux.lds.S
arch/x86/kernel/vmlinux.lds.S
include/asm-generic/vmlinux.lds.h

index 363a60b..cdfdc91 100644 (file)
@@ -34,10 +34,7 @@ SECTIONS
        swapper_pg_dir = SWAPPER_PGD;
        _etext = .;     /* End of text section */
 
-       NOTES :text :note
-       .dummy : {
-               *(.dummy)
-       } :text
+       NOTES
 
        RODATA
        EXCEPTION_TABLE(16)
index 7cf4958..bfc937e 100644 (file)
@@ -70,9 +70,7 @@ SECTIONS {
        /*
         * Read-only data
         */
-       NOTES :text :note       /* put .notes in text and mark in PT_NOTE  */
-       code_continues : {
-       } :text                /* switch back to regular program...  */
+       NOTES
 
        EXCEPTION_TABLE(16)
 
index 1c95612..6a22f53 100644 (file)
@@ -81,8 +81,7 @@ SECTIONS
                __stop___dbe_table = .;
        }
 
-       NOTES NOTES_HEADERS
-       .dummy : { *(.dummy) } :text
+       NOTES
 
        _sdata = .;                     /* Start of data section */
        RODATA
index 7e26e20..4f19d81 100644 (file)
@@ -164,9 +164,7 @@ SECTIONS
 #endif
        EXCEPTION_TABLE(0)
 
-       NOTES :text :note
-       /* Restore program header away from PT_NOTE. */
-       .dummy : { *(.dummy) } :text
+       NOTES
 
 /*
  * Init sections discarded at runtime
index 646d939..f88eede 100644 (file)
@@ -52,9 +52,7 @@ SECTIONS
                _etext = .;             /* End of text section */
        } :text = 0x0700
 
-       NOTES :text :note
-
-       .dummy : { *(.dummy) } :text
+       NOTES
 
        RO_DATA_SECTION(PAGE_SIZE)
 
index 2e18bf5..8be25b0 100644 (file)
@@ -148,8 +148,7 @@ SECTIONS
                _etext = .;
        } :text = 0x9090
 
-       NOTES :text :note
-       .dummy : { *(.dummy) } :text
+       NOTES
 
        EXCEPTION_TABLE(16)
 
index f5dd45c..97d4299 100644 (file)
 
 /*
  * Only some architectures want to have the .notes segment visible in
- * a separate PT_NOTE ELF Program Header.
+ * a separate PT_NOTE ELF Program Header. When this happens, it needs
+ * to be visible in both the kernel text's PT_LOAD and the PT_NOTE
+ * Program Headers. In this case, though, the PT_LOAD needs to be made
+ * the default again so that all the following sections don't also end
+ * up in the PT_NOTE Program Header.
  */
 #ifdef EMITS_PT_NOTE
 #define NOTES_HEADERS          :text :note
+#define NOTES_HEADERS_RESTORE  __restore_ph : { *(.__restore_ph) } :text
+#else
+#define NOTES_HEADERS
+#define NOTES_HEADERS_RESTORE
 #endif
 
 /* Align . to a 8 byte boundary equals to maximum function alignment. */
                __start_notes = .;                                      \
                KEEP(*(.note.*))                                        \
                __stop_notes = .;                                       \
-       }
+       } NOTES_HEADERS                                                 \
+       NOTES_HEADERS_RESTORE
 
 #define INIT_SETUP(initsetup_align)                                    \
                . = ALIGN(initsetup_align);                             \