01 Sep, 2020

1 commit

  • The .comment section doesn't belong in STABS_DEBUG. Split it out into a
    new macro named ELF_DETAILS. This will gain other non-debug sections
    that need to be accounted for when linking with --orphan-handling=warn.

    Signed-off-by: Kees Cook
    Signed-off-by: Ingo Molnar
    Cc: linux-arch@vger.kernel.org
    Link: https://lore.kernel.org/r/20200821194310.3089815-5-keescook@chromium.org

    Kees Cook
     

04 Nov, 2019

6 commits

  • Rename RW_DATA_SECTION to RW_DATA. (Calling this a "section" is a lie,
    since it's multiple sections and section flags cannot be applied to
    the macro.)

    Signed-off-by: Kees Cook
    Signed-off-by: Borislav Petkov
    Acked-by: Heiko Carstens # s390
    Acked-by: Geert Uytterhoeven # m68k
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Dave Hansen
    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
    Cc: Michal Simek
    Cc: Rick Edgecombe
    Cc: Segher Boessenkool
    Cc: Will Deacon
    Cc: x86-ml
    Cc: Yoshinori Sato
    Link: https://lkml.kernel.org/r/20191029211351.13243-14-keescook@chromium.org

    Kees Cook
     
  • Finish renaming RO_DATA_SECTION to RO_DATA. (Calling this a "section"
    is a lie, since it's multiple sections and section flags cannot be
    applied to the macro.)

    Signed-off-by: Kees Cook
    Signed-off-by: Borislav Petkov
    Acked-by: Heiko Carstens # s390
    Acked-by: Geert Uytterhoeven # m68k
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Dave Hansen
    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
    Cc: Michal Simek
    Cc: Rick Edgecombe
    Cc: Segher Boessenkool
    Cc: Will Deacon
    Cc: x86-ml
    Cc: Yoshinori Sato
    Link: https://lkml.kernel.org/r/20191029211351.13243-13-keescook@chromium.org

    Kees Cook
     
  • The .notes section should be non-executable read-only data. As such,
    move it to the RO_DATA macro instead of being per-architecture defined.

    Signed-off-by: Kees Cook
    Signed-off-by: Borislav Petkov
    Acked-by: Heiko Carstens # s390
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Dave Hansen
    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
    Cc: Michal Simek
    Cc: Rick Edgecombe
    Cc: Segher Boessenkool
    Cc: Will Deacon
    Cc: x86-ml
    Cc: Yoshinori Sato
    Link: https://lkml.kernel.org/r/20191029211351.13243-11-keescook@chromium.org

    Kees Cook
     
  • 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
    Signed-off-by: Borislav Petkov
    Acked-by: Heiko Carstens # s390
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Dave Hansen
    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
    Cc: Michal Simek
    Cc: Rick Edgecombe
    Cc: Segher Boessenkool
    Cc: Will Deacon
    Cc: x86-ml
    Cc: Yoshinori Sato
    Link: https://lkml.kernel.org/r/20191029211351.13243-10-keescook@chromium.org

    Kees Cook
     
  • In preparation for moving NOTES into RO_DATA, provide a mechanism for
    architectures that want to emit a PT_NOTE Program Header to do so.

    Signed-off-by: Kees Cook
    Signed-off-by: Borislav Petkov
    Acked-by: Heiko Carstens # s390
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Dave Hansen
    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
    Cc: Michal Simek
    Cc: Rick Edgecombe
    Cc: Segher Boessenkool
    Cc: Will Deacon
    Cc: x86-ml
    Cc: Yoshinori Sato
    Link: https://lkml.kernel.org/r/20191029211351.13243-9-keescook@chromium.org

    Kees Cook
     
  • In preparation for moving NOTES into RO_DATA, move RO_DATA back into the
    "text" PT_LOAD Program Header, as done with other architectures. The
    "data" PT_LOAD now starts with the writable data section.

    Signed-off-by: Kees Cook
    Signed-off-by: Borislav Petkov
    Acked-by: Heiko Carstens
    Cc: Andy Lutomirski
    Cc: Arnd Bergmann
    Cc: Dave Hansen
    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
    Cc: Michal Simek
    Cc: Rick Edgecombe
    Cc: Segher Boessenkool
    Cc: Will Deacon
    Cc: x86-ml
    Cc: Yoshinori Sato
    Link: https://lkml.kernel.org/r/20191029211351.13243-7-keescook@chromium.org

    Kees Cook
     

06 Aug, 2019

1 commit

  • Perf relies on _etext and _stext symbols being one of 't', 'T', 'v' or
    'V'. Put them into .text section to guarantee that.

    Also moves padding to page boundary inside .text which has an effect that
    .text section is now padded with nops rather than 0's, which apparently
    has been the initial intention for specifying 0x0700 fill expression.

    Reported-by: Thomas Richter
    Tested-by: Thomas Richter
    Suggested-by: Andreas Krebbel
    Signed-off-by: Vasily Gorbik

    Vasily Gorbik
     

29 Apr, 2019

1 commit


10 Apr, 2019

1 commit

  • Introduce .boot.preserve.data section which is similar to .boot.data and
    "shared" between the decompressor code and the decompressed kernel. The
    decompressor will store values in it, and copy over to the decompressed
    image before starting it. This method allows to avoid using pre-defined
    addresses and other hacks to pass values between those boot phases.

    Unlike .boot.data section .boot.preserved.data is NOT a part of init data,
    and hence will be preserved for the kernel life time.

    Signed-off-by: Gerald Schaefer
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Gerald Schaefer
     

26 Oct, 2018

1 commit

  • Currently .vmlinux.info section of uncompressed vmlinux elf image is
    included into the data segment and load address specified as 0. That
    extends data segment to address 0 and makes "text" and "data" segments
    overlap.
    Program Headers:
    Type Offset VirtAddr PhysAddr
    FileSiz MemSiz Flags Align
    LOAD 0x0000000000001000 0x0000000000100000 0x0000000000100000
    0x0000000000ead03c 0x0000000000ead03c R E 0x1000
    LOAD 0x0000000000eaf000 0x0000000000000000 0x0000000000000000
    0x0000000001a13400 0x000000000233b520 RWE 0x1000
    NOTE 0x0000000000eae000 0x0000000000fad000 0x0000000000fad000
    0x000000000000003c 0x000000000000003c 0x4

    Section to Segment mapping:
    Segment Sections...
    00 .text .notes
    01 .rodata __ksymtab __ksymtab_gpl __ksymtab_strings __param
    __modver .data..ro_after_init __ex_table .data __bug_table .init.text
    .exit.text .exit.data .altinstructions .altinstr_replacement
    .nospec_call_table .nospec_return_table .boot.data .init.data
    .data..percpu .bss .vmlinux.info
    02 .notes

    Later when vmlinux.bin is produced from vmlinux, .vmlinux.info section
    is removed. But elf vmlinux file, even though it is not bootable anymore,
    used for debugging and loadable segments overlap should be avoided.

    Utilize special ":NONE" phdr specification to avoid adding .vmlinux.info
    into loadable data segment. Also set .vmlinux.info section type to INFO,
    which allows to get a not-loadable info CONTENTS section.

    Since minimal supported version of binutils 2.20 does not have
    --dump-section objcopy option, make .vmlinux.info section loadable during
    info.bin creation to get actual section contents.

    Reported-by: Philipp Rudo
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     

23 Oct, 2018

1 commit

  • Pull locking and misc x86 updates from Ingo Molnar:
    "Lots of changes in this cycle - in part because locking/core attracted
    a number of related x86 low level work which was easier to handle in a
    single tree:

    - Linux Kernel Memory Consistency Model updates (Alan Stern, Paul E.
    McKenney, Andrea Parri)

    - lockdep scalability improvements and micro-optimizations (Waiman
    Long)

    - rwsem improvements (Waiman Long)

    - spinlock micro-optimization (Matthew Wilcox)

    - qspinlocks: Provide a liveness guarantee (more fairness) on x86.
    (Peter Zijlstra)

    - Add support for relative references in jump tables on arm64, x86
    and s390 to optimize jump labels (Ard Biesheuvel, Heiko Carstens)

    - Be a lot less permissive on weird (kernel address) uaccess faults
    on x86: BUG() when uaccess helpers fault on kernel addresses (Jann
    Horn)

    - macrofy x86 asm statements to un-confuse the GCC inliner. (Nadav
    Amit)

    - ... and a handful of other smaller changes as well"

    * 'locking-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (57 commits)
    locking/lockdep: Make global debug_locks* variables read-mostly
    locking/lockdep: Fix debug_locks off performance problem
    locking/pvqspinlock: Extend node size when pvqspinlock is configured
    locking/qspinlock_stat: Count instances of nested lock slowpaths
    locking/qspinlock, x86: Provide liveness guarantee
    x86/asm: 'Simplify' GEN_*_RMWcc() macros
    locking/qspinlock: Rework some comments
    locking/qspinlock: Re-order code
    locking/lockdep: Remove duplicated 'lock_class_ops' percpu array
    x86/defconfig: Enable CONFIG_USB_XHCI_HCD=y
    futex: Replace spin_is_locked() with lockdep
    locking/lockdep: Make class->ops a percpu counter and move it under CONFIG_DEBUG_LOCKDEP=y
    x86/jump-labels: Macrofy inline assembly code to work around GCC inlining bugs
    x86/cpufeature: Macrofy inline assembly code to work around GCC inlining bugs
    x86/extable: Macrofy inline assembly code to work around GCC inlining bugs
    x86/paravirt: Work around GCC inlining bugs when compiling paravirt ops
    x86/bug: Macrofy the BUG table section handling, to work around GCC inlining bugs
    x86/alternatives: Macrofy lock prefixes to work around GCC inlining bugs
    x86/refcount: Work around GCC inlining bug
    x86/objtool: Use asm macros to work around GCC inlining bugs
    ...

    Linus Torvalds
     

09 Oct, 2018

3 commits

  • Introduce .boot.data section which is "shared" between the decompressor
    code and the decompressed kernel. The decompressor will store values in
    it, and copy over to the decompressed image before starting it. This
    method allows to avoid using pre-defined addresses and other hacks to
    pass values between those boot phases.

    .boot.data section is a part of init data, and will be freed after kernel
    initialization is complete.

    For uncompressed kernel image, .boot.data section is basically the same
    as .init.data

    Reviewed-by: Martin Schwidefsky
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     
  • To avoid multi-stage initrd rescue operation and to simplify
    assumptions during early memory allocations move initrd at some final
    safe destination as early as possible. This would also allow us to
    drop .bss usage restrictions for some files.

    Reviewed-by: Martin Schwidefsky
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     
  • The kernel decompressor has to know several bits of information about
    uncompressed image. Currently this info is collected by running "nm" on
    uncompressed vmlinux + "sed" and producing sizes.h file. This method
    worked well, but it has several disadvantages. Obscure symbols name
    pattern matching is fragile. Adding new values makes pattern even
    longer. Logic is spread across code and make file. Limited ability to
    adjust symbols values (currently magic lma value of 0x100000 is always
    subtracted). Apart from that same pieces of information (and more)
    would be needed for early memory detection and features like KASLR
    outside of boot/compressed/ folder where sizes.h is generated.

    To overcome limitations new "struct vmlinux_info" has been introduced
    to include values needed for the decompressor and the rest of the
    boot code. The only static instance of vmlinux_info is produced during
    vmlinux link step by filling in struct fields by the linker (like it is
    done with input_data in boot/compressed/vmlinux.scr.lds.S). This way
    individual values could be adjusted with all the knowledge linker has
    and arithmetic it supports. Later .vmlinux.info section (which contains
    struct vmlinux_info) is transplanted into the decompressor image and
    dropped from uncompressed image altogether.

    While doing that replace "compressed/vmlinux.scr.lds.S" linker
    script (whose purpose is to rename .data section in piggy.o to
    .rodata.compressed) with plain objcopy command. And simplify
    decompressor's linker script.

    Reviewed-by: Martin Schwidefsky
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     

02 Oct, 2018

1 commit

  • Commit e872267b8bcbb179 ("jump_table: move entries into ro_after_init
    region") moved the __jump_table input section into the __ro_after_init
    output section, but inadvertently put the macro in the wrong place in
    the s390 linker script. Let's fix that.

    Fixes: e872267b8bcbb179 ("jump_table: move entries into ro_after_init region")
    Reported-by: Guenter Roeck
    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Thomas Gleixner
    Reviewed-by: Kees Cook
    Acked-by: Heiko Carstens
    Tested-by: Guenter Roeck
    Cc: linux-s390@vger.kernel.org
    Cc: Martin Schwidefsky
    Cc: Jessica Yu
    Cc: Peter Zijlstra
    Link: https://lkml.kernel.org/r/20180930164950.3841-1-ard.biesheuvel@linaro.org

    Ard Biesheuvel
     

27 Sep, 2018

1 commit

  • The __jump_table sections emitted into the core kernel and into
    each module consist of statically initialized references into
    other parts of the code, and with the exception of entries that
    point into init code, which are defused at post-init time, these
    data structures are never modified.

    So let's move them into the ro_after_init section, to prevent them
    from being corrupted inadvertently by buggy code, or deliberately
    by an attacker.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Thomas Gleixner
    Reviewed-by: Kees Cook
    Acked-by: Jessica Yu
    Acked-by: Peter Zijlstra (Intel)
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-s390@vger.kernel.org
    Cc: Arnd Bergmann
    Cc: Heiko Carstens
    Cc: Will Deacon
    Cc: Catalin Marinas
    Cc: Steven Rostedt
    Cc: Martin Schwidefsky
    Link: https://lkml.kernel.org/r/20180919065144.25010-9-ard.biesheuvel@linaro.org

    Ard Biesheuvel
     

02 Jul, 2018

4 commits

  • Since the uncompressed image .text section starts at 0x100000 now there
    is no need to redefine _text to something else to make perf happy.

    Reviewed-by: Heiko Carstens
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     
  • Avoid unnecessary rewrite of psw and merge _stext into
    startup_continue. This allows to move _stext definition to vmlinux.lds.S,
    where _etext is also defined and set _stext to the actual beginning of
    .text at 0x100000.

    This fixes the problem with setting the last .text page as
    not-executable due to vmem_map_init relying on page alinged _stext and
    _etext.

    Fixes: bd79d6632958 ("s390/decompressor: trim the kernel image up to 1M")
    Reported-by: Nils Hoppmann
    Reviewed-by: Heiko Carstens
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     
  • Instead of generating uncompressed kernel image starting at 0, filling
    first mb with zeros (with ".org 0x100000") and then trimming it off
    from vmlinux.bin before compression, simply generate a kernel image
    starting from 0x100000.

    Reviewed-by: Heiko Carstens
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     
  • Currently none of the vmlinux linker script patterns in .text section
    match expoline execute-trampolines, and they end up as separate
    sections:
    .text.__s390_indirect_jump_r1,
    .text.__s390x_indirect_jump_r1use_r9,
    .text.__s390x_indirect_branch_4_1use_6, ...

    Add a pattern to match them all.

    Reviewed-by: Heiko Carstens
    Signed-off-by: Vasily Gorbik
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     

25 Jun, 2018

1 commit


23 May, 2018

1 commit

  • VMLINUX_SYMBOL() is no-op unless CONFIG_HAVE_UNDERSCORE_SYMBOL_PREFIX
    is defined. It has ever been selected only by BLACKFIN and METAG.
    VMLINUX_SYMBOL() is unneeded for s390-specific code.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Masahiro Yamada
     

07 Feb, 2018

1 commit

  • Add CONFIG_EXPOLINE to enable the use of the new -mindirect-branch= and
    -mfunction_return= compiler options to create a kernel fortified against
    the specte v2 attack.

    With CONFIG_EXPOLINE=y all indirect branches will be issued with an
    execute type instruction. For z10 or newer the EXRL instruction will
    be used, for older machines the EX instruction. The typical indirect
    call

    basr %r14,%r1

    is replaced with a PC relative call to a new thunk

    brasl %r14,__s390x_indirect_jump_r1

    The thunk contains the EXRL/EX instruction to the indirect branch

    __s390x_indirect_jump_r1:
    exrl 0,0f
    j .
    0: br %r1

    The detour via the execute type instruction has a performance impact.
    To get rid of the detour the new kernel parameter "nospectre_v2" and
    "spectre_v2=[on,off,auto]" can be used. If the parameter is specified
    the kernel and module code will be patched at runtime.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     

13 Dec, 2017

1 commit

  • Using perf probe and libdw on kernel modules failed to find CFI
    data for symbols. The CFI data is stored in the .eh_frame section.
    The elfutils libdw is not able to extract the CFI data correctly,
    because the .eh_frame section requires "non-simple" relocations
    for kernel modules.

    The suggestion is to avoid these "non-simple" relocations by emitting
    the CFI data in the .debug_frame section. Let gcc emit respective
    directives by specifying the -fno-asynchronous-unwind-tables option.

    Using the .debug_frame section for CFI data, the .eh_frame section
    becomes unused and, thus, discard it for kernel and modules builds

    The vDSO requires the .eh_frame section and, hence, emit the CFI data
    in both, the .eh_frame and .debug_frame sections.

    See also discussion on elfutils/libdw bugzilla:
    https://sourceware.org/bugzilla/show_bug.cgi?id=22452

    Suggested-by: Mark Wielaard
    Signed-off-by: Hendrik Brueckner
    Reviewed-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Hendrik Brueckner
     

14 Nov, 2017

1 commit

  • Pull s390 updates from Heiko Carstens:
    "Since Martin is on vacation you get the s390 pull request for the
    v4.15 merge window this time from me.

    Besides a lot of cleanups and bug fixes these are the most important
    changes:

    - a new regset for runtime instrumentation registers

    - hardware accelerated AES-GCM support for the aes_s390 module

    - support for the new CEX6S crypto cards

    - support for FORTIFY_SOURCE

    - addition of missing z13 and new z14 instructions to the in-kernel
    disassembler

    - generate opcode tables for the in-kernel disassembler out of a
    simple text file instead of having to manually maintain those
    tables

    - fast memset16, memset32 and memset64 implementations

    - removal of named saved segment support

    - hardware counter support for z14

    - queued spinlocks and queued rwlocks implementations for s390

    - use the stack_depth tracking feature for s390 BPF JIT

    - a new s390_sthyi system call which emulates the sthyi (store
    hypervisor information) instruction

    - removal of the old KVM virtio transport

    - an s390 specific CPU alternatives implementation which is used in
    the new spinlock code"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (88 commits)
    MAINTAINERS: add virtio-ccw.h to virtio/s390 section
    s390/noexec: execute kexec datamover without DAT
    s390: fix transactional execution control register handling
    s390/bpf: take advantage of stack_depth tracking
    s390: simplify transactional execution elf hwcap handling
    s390/zcrypt: Rework struct ap_qact_ap_info.
    s390/virtio: remove unused header file kvm_virtio.h
    s390: avoid undefined behaviour
    s390/disassembler: generate opcode tables from text file
    s390/disassembler: remove insn_to_mnemonic()
    s390/dasd: avoid calling do_gettimeofday()
    s390: vfio-ccw: Do not attempt to free no-op, test and tic cda.
    s390: remove named saved segment support
    s390/archrandom: Reconsider s390 arch random implementation
    s390/pci: do not require AIS facility
    s390/qdio: sanitize put_indicator
    s390/qdio: use atomic_cmpxchg
    s390/nmi: avoid using long-displacement facility
    s390: pass endianness info to sparse
    s390/decompressor: remove informational messages
    ...

    Linus Torvalds
     

08 Nov, 2017

1 commit

  • Remove the support to create a z/VM named saved segment (NSS). This
    feature is not supported since quite a while in favour of jump labels,
    function tracing and (now) CPU alternatives. All of these features
    require to write to the kernel text section which is not possible if
    the kernel is contained within an NSS.

    Given that memory savings are minimal if kernel images are shared and
    in addition updates of shared images are painful, the NSS feature can
    be removed.

    Reviewed-by: Hendrik Brueckner
    Signed-off-by: Heiko Carstens

    Heiko Carstens
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

18 Oct, 2017

1 commit

  • Implement CPU alternatives, which allows to optionally patch newer
    instructions at runtime, based on CPU facilities availability.

    A new kernel boot parameter "noaltinstr" disables patching.

    Current implementation is derived from x86 alternatives. Although
    ideal instructions padding (when altinstr is longer then oldinstr)
    is added at compile time, and no oldinstr nops optimization has to be
    done at runtime. Also couple of compile time sanity checks are done:
    1. oldinstr and altinstr must be
    Signed-off-by: Martin Schwidefsky

    Vasily Gorbik
     

09 May, 2017

1 commit

  • The perf tool assumes that kernel symbols are never present at address
    zero. In fact it assumes if functions that map symbols to addresses
    return zero, that the symbol was not found.

    Given that s390's _text symbol historically is located at address zero
    this yields at least a couple of false errors and warnings in one of
    perf's test cases about not present symbols ("perf test 1").

    To fix this simply move the _text symbol to address 0x200, just behind
    the initial psw and channel program located at the beginning of the
    kernel image. This is now hard coded within the linker script.

    I tried a nicer solution which moves the initial psw and channel
    program into an own section. However that would move the symbols
    within the "real" head.text section to different addresses, since the
    ".org" statements within head.S are relative to the head.text
    section. If there is a new section in front, everything else will be
    moved. Alternatively I could have adjusted all ".org" statements. But
    this current solution seems to be the easiest one, since nobody really
    cares where the _text symbol is actually located.

    Reported-by: Zvonko Kosic
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     

01 Apr, 2017

1 commit

  • A section name for .data..ro_after_init was added by both:

    commit d07a980c1b8d ("s390: add proper __ro_after_init support")

    and

    commit d7c19b066dcf ("mm: kmemleak: scan .data.ro_after_init")

    The latter adds incorrect wrapping around the existing s390 section, and
    came later. I'd prefer the s390 naming, so this moves the s390-specific
    name up to the asm-generic/sections.h and renames the section as used by
    kmemleak (and in the future, kernel/extable.c).

    Link: http://lkml.kernel.org/r/20170327192213.GA129375@beast
    Signed-off-by: Kees Cook
    Acked-by: Heiko Carstens [s390 parts]
    Acked-by: Jakub Kicinski
    Cc: Eddie Kovsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kees Cook
     

08 Feb, 2017

1 commit

  • Bit 0x100 of a page table, segment table of region table entry
    can be used to disallow code execution for the virtual addresses
    associated with the entry.

    There is one tricky bit, the system call to return from a signal
    is part of the signal frame written to the user stack. With a
    non-executable stack this would stop working. To avoid breaking
    things the protection fault handler checks the opcode that caused
    the fault for 0x0a77 (sys_sigreturn) and 0x0aad (sys_rt_sigreturn)
    and injects a system call. This is preferable to the alternative
    solution with a stub function in the vdso because it works for
    vdso=off and statically linked binaries as well.

    Signed-off-by: Martin Schwidefsky

    Martin Schwidefsky
     

12 Nov, 2016

1 commit

  • Limit the number of kmemleak false positives by including
    .data.ro_after_init in memory scanning. To achieve this we need to add
    symbols for start and end of the section to the linker scripts.

    The problem was been uncovered by commit 56989f6d8568 ("genetlink: mark
    families as __ro_after_init").

    Link: http://lkml.kernel.org/r/1478274173-15218-1-git-send-email-jakub.kicinski@netronome.com
    Reviewed-by: Catalin Marinas
    Signed-off-by: Jakub Kicinski
    Cc: Arnd Bergmann
    Cc: Cong Wang
    Cc: Johannes Berg
    Cc: Martin Schwidefsky
    Cc: Heiko Carstens
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jakub Kicinski
     

08 Oct, 2016

1 commit

  • When doing an nmi backtrace of many cores, most of which are idle, the
    output is a little overwhelming and very uninformative. Suppress
    messages for cpus that are idling when they are interrupted and just
    emit one line, "NMI backtrace for N skipped: idling at pc 0xNNN".

    We do this by grouping all the cpuidle code together into a new
    .cpuidle.text section, and then checking the address of the interrupted
    PC to see if it lies within that section.

    This commit suitably tags x86 and tile idle routines, and only adds in
    the minimal framework for other architectures.

    Link: http://lkml.kernel.org/r/1472487169-14923-5-git-send-email-cmetcalf@mellanox.com
    Signed-off-by: Chris Metcalf
    Acked-by: Peter Zijlstra (Intel)
    Tested-by: Peter Zijlstra (Intel)
    Tested-by: Daniel Thompson [arm]
    Tested-by: Petr Mladek
    Cc: Aaron Tomlin
    Cc: Peter Zijlstra (Intel)
    Cc: "Rafael J. Wysocki"
    Cc: Russell King
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Metcalf
     

13 Jun, 2016

2 commits

  • On s390 __ro_after_init is currently mapped to __read_mostly which
    means that data marked as __ro_after_init will not be protected.

    Reason for this is that the common code __ro_after_init implementation
    is x86 centric: the ro_after_init data section was added to rodata,
    since x86 enables write protection to kernel text and rodata very
    late. On s390 we have write protection for these sections enabled with
    the initial page tables. So adding the ro_after_init data section to
    rodata does not work on s390.

    In order to make __ro_after_init work properly on s390 move the
    ro_after_init data, right behind rodata. Unlike the rodata section it
    will be marked read-only later after all init calls happened.

    This s390 specific implementation adds new __start_ro_after_init and
    __end_ro_after_init labels. Everything in between will be marked
    read-only after the init calls happened. In addition to the
    __ro_after_init data move also the exception table there, since from a
    practical point of view it fits the __ro_after_init requirements.

    Signed-off-by: Heiko Carstens
    Reviewed-by: Kees Cook
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     
  • The segment/region table that is part of the kernel image must be
    properly aligned to 16k in order to make the crdte inline assembly
    work.
    Otherwise it will calculate a wrong segment/region table start address
    and access incorrect memory locations if the swapper_pg_dir is not
    aligned to 16k.

    Therefore define BSS_FIRST_SECTIONS in order to put the swapper_pg_dir
    at the beginning of the bss section and also align the bss section to
    16k just like other architectures did.

    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     

26 Mar, 2016

1 commit

  • KASAN needs to know whether the allocation happens in an IRQ handler.
    This lets us strip everything below the IRQ entry point to reduce the
    number of unique stack traces needed to be stored.

    Move the definition of __irq_entry to so that the
    users don't need to pull in . Also introduce the
    __softirq_entry macro which is similar to __irq_entry, but puts the
    corresponding functions to the .softirqentry.text section.

    Signed-off-by: Alexander Potapenko
    Acked-by: Steven Rostedt
    Cc: Christoph Lameter
    Cc: Pekka Enberg
    Cc: David Rientjes
    Cc: Joonsoo Kim
    Cc: Andrey Konovalov
    Cc: Dmitry Vyukov
    Cc: Andrey Ryabinin
    Cc: Konstantin Serebryany
    Cc: Dmitry Chernenkov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alexander Potapenko
     

25 Mar, 2015

1 commit

  • Remove the 31 bit support in order to reduce maintenance cost and
    effectively remove dead code. Since a couple of years there is no
    distribution left that comes with a 31 bit kernel.

    The 31 bit kernel also has been broken since more than a year before
    anybody noticed. In addition I added a removal warning to the kernel
    shown at ipl for 5 minutes: a960062e5826 ("s390: add 31 bit warning
    message") which let everybody know about the plan to remove 31 bit
    code. We didn't get any response.

    Given that the last 31 bit only machine was introduced in 1999 let's
    remove the code.
    Anybody with 31 bit user space code can still use the compat mode.

    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     

14 Feb, 2013

1 commit

  • Discard exit.data section at run time, not link time, since exit.text
    references exit.data and causes this build error:

    `.exit.data' referenced in section `.exit.text' of drivers/built-in.o:
    defined in discarded section `.exit.data' of drivers/built-in.o

    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens
     

18 Oct, 2012

1 commit

  • Because of a change in the s390 arch backend of binutils (commit 23ecd77
    "Pick the default arch depending on the target size" in binutils repo)
    31 bit builds will fail since the linker would now try to create 64 bit
    binary output.
    Fix this by setting OUTPUT_ARCH to s390:31-bit instead of s390.
    Thanks to Andreas Krebbel for figuring out the issue.

    Fixes this build error:

    LD init/built-in.o
    s390x-4.7.2-ld: s390:31-bit architecture of input file
    `arch/s390/kernel/head.o' is incompatible with s390:64-bit output

    Cc: Andreas Krebbel
    Cc: stable@vger.kernel.org
    Signed-off-by: Heiko Carstens
    Signed-off-by: Martin Schwidefsky

    Heiko Carstens