• Kees Cook's avatar
    x86/vmlinux: Use INT3 instead of NOP for linker fill bytes · 7705dc85
    Kees Cook authored
    Instead of using 0x90 (NOP) to fill bytes between functions, which makes
    it easier to sloppily target functions in function pointer overwrite
    attacks, fill with 0xCC (INT3) to force a trap. Also drop the space
    between "=" and the value to better match the binutils documentation
    
      https://sourceware.org/binutils/docs/ld/Output-Section-Fill.html#Output-Section-Fill
    
    Example "objdump -d" before:
    
      ...
      ffffffff810001e0 <start_cpu0>:
      ffffffff810001e0:       48 8b 25 e1 b1 51 01    mov 0x151b1e1(%rip),%rsp        # ffffffff8251b3c8 <initial_stack>
      ffffffff810001e7:       e9 d5 fe ff ff          jmpq   ffffffff810000c1 <secondary_startup_64+0x91>
      ffffffff810001ec:       90                      nop
      ffffffff810001ed:       90                      nop
      ffffffff810001ee:       90                      nop
      ffffffff810001ef:       90                      nop
    
      ffffffff810001f0 <__startup_64>:
      ...
    
    After:
    
      ...
      ffffffff810001e0 <start_cpu0>:
      ffffffff810001e0:       48 8b 25 41 79 53 01    mov 0x1537941(%rip),%rsp        # ffffffff82537b28 <initial_stack>
      ffffffff810001e7:       e9 d5 fe ff ff          jmpq   ffffffff810000c1 <secondary_startup_64+0x91>
      ffffffff810001ec:       cc                      int3
      ffffffff810001ed:       cc                      int3
      ffffffff810001ee:       cc                      int3
      ffffffff810001ef:       cc                      int3
    
      ffffffff810001f0 <__startup_64>:
      ...
    Signed-off-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.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: linuxppc-dev@lists.ozlabs.org
    Cc: linux-s390@vger.kernel.org
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Michal Simek <monstr@monstr.eu>
    Cc: Rick Edgecombe <rick.p.edgecombe@intel.com>
    Cc: Ross Zwisler <zwisler@chromium.org>
    Cc: Segher Boessenkool <segher@kernel.crashing.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Thomas Lendacky <Thomas.Lendacky@amd.com>
    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-30-keescook@chromium.org
    7705dc85
vmlinux.lds.S 11.4 KB