06 Apr, 2016

1 commit


25 Mar, 2016

3 commits

  • Pull kbuild misc updates from Michal Marek:
    "The non-critical part of kbuild for v4.6-rc1:

    - coccinelle cleanup and a new patch
    - make tags rule for kprobe helpers
    - make rpm fix to avoid spurious grub2 entries
    - make rpm support for %postun script (Fedora only at the moment)"

    * 'misc' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    kbuild/mkspec: clean boot loader configuration on rpm removal
    kbuild/mkspec: fix grub2 installkernel issue
    Coccinelle: Add api/setup_timer.cocci
    coccinelle: bugon: reduce rule applicability
    Coccinelle: pm_runtime: reduce rule applicability
    Coccinelle: array_size: reduce rule applicability
    Coccinelle: reduce rule applicability
    scripts/tags.sh: add regex to map kprobe helpers
    scripts/coccinelle: modernize &

    Linus Torvalds
     
  • Pull kconfig updates from Michal Marek:
    "Just two kconfig commits this time:

    - kconfig Makefile fix for make 3.80

    - Fix calculating symbols so that KCONFIG_ALLCONFIG=... does not
    disable CONFIG_MODULES silently"

    * 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    unbreak allmodconfig KCONFIG_ALLCONFIG=...
    scripts/kconfig: allow building with make 3.80 again

    Linus Torvalds
     
  • Pull kbuild updates from Michal Marek:

    - make dtbs_install fix

    - Error handling fix fixdep and link-vmlinux.sh

    - __UNIQUE_ID fix for clang

    - Fix for if_changed_* to suppress the "is up to date." message

    - The kernel is built with -Werror=incompatible-pointer-types

    * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
    kbuild: Add option to turn incompatible pointer check into error
    kbuild: suppress annoying "... is up to date." message
    kbuild: fixdep: Check fstat(2) return value
    scripts/link-vmlinux.sh: force error on kallsyms failure
    Kbuild: provide a __UNIQUE_ID for clang
    dtbsinstall: don't move target directory out of the way

    Linus Torvalds
     

23 Mar, 2016

6 commits

  • Switch to the generic extable search and sort routines which were introduced
    with commit a272858 from Ard Biesheuvel. This saves quite some memory in the
    vmlinux binary with the 64bit kernel.

    Signed-off-by: Helge Deller

    Helge Deller
     
  • -fsanitize=* options makes GCC less smart than usual and increase number
    of 'maybe-uninitialized' false-positives. So this patch does two things:

    * Add -Wno-maybe-uninitialized to CFLAGS_UBSAN which will disable all
    such warnings for instrumented files.

    * Remove CONFIG_UBSAN_SANITIZE_ALL from all[yes|mod]config builds. So
    the all[yes|mod]config build goes without -fsanitize=* and still with
    -Wmaybe-uninitialized.

    Signed-off-by: Andrey Ryabinin
    Reported-by: Fengguang Wu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrey Ryabinin
     
  • Commit 7523e4dc5057 ("module: use a structure to encapsulate layout.")
    factored out the module_layout structure. Adjust the symbol loader and
    the lsmod command to this.

    Signed-off-by: Jan Kiszka
    Reviewed-by: Kieran Bingham
    Tested-by: Kieran Bingham (qemu-{ARM,x86})
    Cc: Rusty Russell
    Cc: Jiri Kosina
    Cc: Jason Wessel
    Cc: [4.4+]
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Kiszka
     
  • lx-cmdline Report the Linux Commandline used in the current kernel

    [jan.kiszka@siemens.com: remove blank line from help output and fix pep8 warning]
    Signed-off-by: Kieran Bingham
    Signed-off-by: Jan Kiszka
    Cc: Jason Wessel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kieran Bingham
     
  • lx-version Report the Linux Version of the current kernel.

    Add a command to identify the version specified by the banner in the
    debugged kernel.

    This lets the user identify the kernel of the running kernel, and will
    let later scripts compare the banner of the attached kernel against the
    banner in the vmlinux symbols files to verify that the files are
    correct.

    [jan.kiszka@siemens.com: remove blank line from help output and fix pep8 warning]
    Signed-off-by: Kieran Bingham
    Signed-off-by: Jan Kiszka
    Cc: Jason Wessel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Kieran Bingham
     
  • kcov provides code coverage collection for coverage-guided fuzzing
    (randomized testing). Coverage-guided fuzzing is a testing technique
    that uses coverage feedback to determine new interesting inputs to a
    system. A notable user-space example is AFL
    (http://lcamtuf.coredump.cx/afl/). However, this technique is not
    widely used for kernel testing due to missing compiler and kernel
    support.

    kcov does not aim to collect as much coverage as possible. It aims to
    collect more or less stable coverage that is function of syscall inputs.
    To achieve this goal it does not collect coverage in soft/hard
    interrupts and instrumentation of some inherently non-deterministic or
    non-interesting parts of kernel is disbled (e.g. scheduler, locking).

    Currently there is a single coverage collection mode (tracing), but the
    API anticipates additional collection modes. Initially I also
    implemented a second mode which exposes coverage in a fixed-size hash
    table of counters (what Quentin used in his original patch). I've
    dropped the second mode for simplicity.

    This patch adds the necessary support on kernel side. The complimentary
    compiler support was added in gcc revision 231296.

    We've used this support to build syzkaller system call fuzzer, which has
    found 90 kernel bugs in just 2 months:

    https://github.com/google/syzkaller/wiki/Found-Bugs

    We've also found 30+ bugs in our internal systems with syzkaller.
    Another (yet unexplored) direction where kcov coverage would greatly
    help is more traditional "blob mutation". For example, mounting a
    random blob as a filesystem, or receiving a random blob over wire.

    Why not gcov. Typical fuzzing loop looks as follows: (1) reset
    coverage, (2) execute a bit of code, (3) collect coverage, repeat. A
    typical coverage can be just a dozen of basic blocks (e.g. an invalid
    input). In such context gcov becomes prohibitively expensive as
    reset/collect coverage steps depend on total number of basic
    blocks/edges in program (in case of kernel it is about 2M). Cost of
    kcov depends only on number of executed basic blocks/edges. On top of
    that, kernel requires per-thread coverage because there are always
    background threads and unrelated processes that also produce coverage.
    With inlined gcov instrumentation per-thread coverage is not possible.

    kcov exposes kernel PCs and control flow to user-space which is
    insecure. But debugfs should not be mapped as user accessible.

    Based on a patch by Quentin Casasnovas.

    [akpm@linux-foundation.org: make task_struct.kcov_mode have type `enum kcov_mode']
    [akpm@linux-foundation.org: unbreak allmodconfig]
    [akpm@linux-foundation.org: follow x86 Makefile layout standards]
    Signed-off-by: Dmitry Vyukov
    Reviewed-by: Kees Cook
    Cc: syzkaller
    Cc: Vegard Nossum
    Cc: Catalin Marinas
    Cc: Tavis Ormandy
    Cc: Will Deacon
    Cc: Quentin Casasnovas
    Cc: Kostya Serebryany
    Cc: Eric Dumazet
    Cc: Alexander Potapenko
    Cc: Kees Cook
    Cc: Bjorn Helgaas
    Cc: Sasha Levin
    Cc: David Drysdale
    Cc: Ard Biesheuvel
    Cc: Andrey Ryabinin
    Cc: Kirill A. Shutemov
    Cc: Jiri Slaby
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dmitry Vyukov
     

21 Mar, 2016

1 commit

  • Pull 'objtool' stack frame validation from Ingo Molnar:
    "This tree adds a new kernel build-time object file validation feature
    (ONFIG_STACK_VALIDATION=y): kernel stack frame correctness validation.
    It was written by and is maintained by Josh Poimboeuf.

    The motivation: there's a category of hard to find kernel bugs, most
    of them in assembly code (but also occasionally in C code), that
    degrades the quality of kernel stack dumps/backtraces. These bugs are
    hard to detect at the source code level. Such bugs result in
    incorrect/incomplete backtraces most of time - but can also in some
    rare cases result in crashes or other undefined behavior.

    The build time correctness checking is done via the new 'objtool'
    user-space utility that was written for this purpose and which is
    hosted in the kernel repository in tools/objtool/. The tool's (very
    simple) UI and source code design is shaped after Git and perf and
    shares quite a bit of infrastructure with tools/perf (which tooling
    infrastructure sharing effort got merged via perf and is already
    upstream). Objtool follows the well-known kernel coding style.

    Objtool does not try to check .c or .S files, it instead analyzes the
    resulting .o generated machine code from first principles: it decodes
    the instruction stream and interprets it. (Right now objtool supports
    the x86-64 architecture.)

    From tools/objtool/Documentation/stack-validation.txt:

    "The kernel CONFIG_STACK_VALIDATION option enables a host tool named
    objtool which runs at compile time. It has a "check" subcommand
    which analyzes every .o file and ensures the validity of its stack
    metadata. It enforces a set of rules on asm code and C inline
    assembly code so that stack traces can be reliable.

    Currently it only checks frame pointer usage, but there are plans to
    add CFI validation for C files and CFI generation for asm files.

    For each function, it recursively follows all possible code paths
    and validates the correct frame pointer state at each instruction.

    It also follows code paths involving special sections, like
    .altinstructions, __jump_table, and __ex_table, which can add
    alternative execution paths to a given instruction (or set of
    instructions). Similarly, it knows how to follow switch statements,
    for which gcc sometimes uses jump tables."

    When this new kernel option is enabled (it's disabled by default), the
    tool, if it finds any suspicious assembly code pattern, outputs
    warnings in compiler warning format:

    warning: objtool: rtlwifi_rate_mapping()+0x2e7: frame pointer state mismatch
    warning: objtool: cik_tiling_mode_table_init()+0x6ce: call without frame pointer save/setup
    warning: objtool:__schedule()+0x3c0: duplicate frame pointer save
    warning: objtool:__schedule()+0x3fd: sibling call from callable instruction with changed frame pointer

    ... so that scripts that pick up compiler warnings will notice them.
    All known warnings triggered by the tool are fixed by the tree, most
    of the commits in fact prepare the kernel to be warning-free. Most of
    them are bugfixes or cleanups that stand on their own, but there are
    also some annotations of 'special' stack frames for justified cases
    such entries to JIT-ed code (BPF) or really special boot time code.

    There are two other long-term motivations behind this tool as well:

    - To improve the quality and reliability of kernel stack frames, so
    that they can be used for optimized live patching.

    - To create independent infrastructure to check the correctness of
    CFI stack frames at build time. CFI debuginfo is notoriously
    unreliable and we cannot use it in the kernel as-is without extra
    checking done both on the kernel side and on the build side.

    The quality of kernel stack frames matters to debuggability as well,
    so IMO we can merge this without having to consider the live patching
    or CFI debuginfo angle"

    * 'core-objtool-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (52 commits)
    objtool: Only print one warning per function
    objtool: Add several performance improvements
    tools: Copy hashtable.h into tools directory
    objtool: Fix false positive warnings for functions with multiple switch statements
    objtool: Rename some variables and functions
    objtool: Remove superflous INIT_LIST_HEAD
    objtool: Add helper macros for traversing instructions
    objtool: Fix false positive warnings related to sibling calls
    objtool: Compile with debugging symbols
    objtool: Detect infinite recursion
    objtool: Prevent infinite recursion in noreturn detection
    objtool: Detect and warn if libelf is missing and don't break the build
    tools: Support relative directory path for 'O='
    objtool: Support CROSS_COMPILE
    x86/asm/decoder: Use explicitly signed chars
    objtool: Enable stack metadata validation on 64-bit x86
    objtool: Add CONFIG_STACK_VALIDATION option
    objtool: Add tool to perform compile-time stack metadata validation
    x86/kprobes: Mark kretprobe_trampoline() stack frame as non-standard
    sched: Always inline context_switch()
    ...

    Linus Torvalds
     

20 Mar, 2016

1 commit

  • Pull DeviceTree updates from Rob Herring:

    - new tool 'dtx_diff' to diff DT files

    - sync kernel's dtc/libfdt to current dtc repo master

    - fix for reserved memory regions located in highmem

    - document standard unit suffixes for DT properties

    - various DT binding doc updates

    * tag 'devicetree-for-4.6' of git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux:
    of: Add vendor prefix for eGalax_eMPIA Technology Inc
    Input: ads7846: Add description how to use internal reference (ADS7846)
    ARM: realview: add EB syscon variants to bindings
    devicetree: bindings: ARM: Use "uV" for micro-volt
    serial: fsl-imx-uart: Fix typo in fsl,dte-mode description
    of: add 'const' for of_property_*_string*() parameter '*np'
    of/unittest: fix infinite loop in of_unittest_destroy_tracked_overlays()
    of: alloc anywhere from memblock if range not specified
    kbuild: Allow using host dtc instead of kernel's copy
    of: resolver: Add missing of_node_get and of_node_put
    of: Add United Radiant Technology Corporation vendor prefix
    dt/bindings: add documentation on standard property unit suffixes
    scripts/dtc: Update to upstream commit b06e55c88b9b
    ARM: boot: Add an implementation of strnlen for libfdt
    scripts/dtc: dtx_diff - add info to error message
    dtc: create tool to diff device trees

    Linus Torvalds
     

18 Mar, 2016

3 commits

  • Pull arm64 updates from Catalin Marinas:
    "Here are the main arm64 updates for 4.6. There are some relatively
    intrusive changes to support KASLR, the reworking of the kernel
    virtual memory layout and initial page table creation.

    Summary:

    - Initial page table creation reworked to avoid breaking large block
    mappings (huge pages) into smaller ones. The ARM architecture
    requires break-before-make in such cases to avoid TLB conflicts but
    that's not always possible on live page tables

    - Kernel virtual memory layout: the kernel image is no longer linked
    to the bottom of the linear mapping (PAGE_OFFSET) but at the bottom
    of the vmalloc space, allowing the kernel to be loaded (nearly)
    anywhere in physical RAM

    - Kernel ASLR: position independent kernel Image and modules being
    randomly mapped in the vmalloc space with the randomness is
    provided by UEFI (efi_get_random_bytes() patches merged via the
    arm64 tree, acked by Matt Fleming)

    - Implement relative exception tables for arm64, required by KASLR
    (initial code for ARCH_HAS_RELATIVE_EXTABLE added to lib/extable.c
    but actual x86 conversion to deferred to 4.7 because of the merge
    dependencies)

    - Support for the User Access Override feature of ARMv8.2: this
    allows uaccess functions (get_user etc.) to be implemented using
    LDTR/STTR instructions. Such instructions, when run by the kernel,
    perform unprivileged accesses adding an extra level of protection.
    The set_fs() macro is used to "upgrade" such instruction to
    privileged accesses via the UAO bit

    - Half-precision floating point support (part of ARMv8.2)

    - Optimisations for CPUs with or without a hardware prefetcher (using
    run-time code patching)

    - copy_page performance improvement to deal with 128 bytes at a time

    - Sanity checks on the CPU capabilities (via CPUID) to prevent
    incompatible secondary CPUs from being brought up (e.g. weird
    big.LITTLE configurations)

    - valid_user_regs() reworked for better sanity check of the
    sigcontext information (restored pstate information)

    - ACPI parking protocol implementation

    - CONFIG_DEBUG_RODATA enabled by default

    - VDSO code marked as read-only

    - DEBUG_PAGEALLOC support

    - ARCH_HAS_UBSAN_SANITIZE_ALL enabled

    - Erratum workaround Cavium ThunderX SoC

    - set_pte_at() fix for PROT_NONE mappings

    - Code clean-ups"

    * tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (99 commits)
    arm64: kasan: Fix zero shadow mapping overriding kernel image shadow
    arm64: kasan: Use actual memory node when populating the kernel image shadow
    arm64: Update PTE_RDONLY in set_pte_at() for PROT_NONE permission
    arm64: Fix misspellings in comments.
    arm64: efi: add missing frame pointer assignment
    arm64: make mrs_s prefixing implicit in read_cpuid
    arm64: enable CONFIG_DEBUG_RODATA by default
    arm64: Rework valid_user_regs
    arm64: mm: check at build time that PAGE_OFFSET divides the VA space evenly
    arm64: KVM: Move kvm_call_hyp back to its original localtion
    arm64: mm: treat memstart_addr as a signed quantity
    arm64: mm: list kernel sections in order
    arm64: lse: deal with clobbered IP registers after branch via PLT
    arm64: mm: dump: Use VA_START directly instead of private LOWEST_ADDR
    arm64: kconfig: add submenu for 8.2 architectural features
    arm64: kernel: acpi: fix ioremap in ACPI parking protocol cpu_postboot
    arm64: Add support for Half precision floating point
    arm64: Remove fixmap include fragility
    arm64: Add workaround for Cavium erratum 27456
    arm64: mm: Mark .rodata as RO
    ...

    Linus Torvalds
     
  • Pull char/misc updates from Greg KH:
    "Here is the big char/misc driver update for 4.6-rc1.

    The majority of the patches here is hwtracing and some new mic
    drivers, but there's a lot of other driver updates as well. Full
    details in the shortlog.

    All have been in linux-next for a while with no reported issues"

    * tag 'char-misc-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (238 commits)
    goldfish: Fix build error of missing ioremap on UM
    nvmem: mediatek: Fix later provider initialization
    nvmem: imx-ocotp: Fix return value of imx_ocotp_read
    nvmem: Fix dependencies for !HAS_IOMEM archs
    char: genrtc: replace blacklist with whitelist
    drivers/hwtracing: make coresight-etm-perf.c explicitly non-modular
    drivers: char: mem: fix IS_ERROR_VALUE usage
    char: xillybus: Fix internal data structure initialization
    pch_phub: return -ENODATA if ROM can't be mapped
    Drivers: hv: vmbus: Support kexec on ws2012 r2 and above
    Drivers: hv: vmbus: Support handling messages on multiple CPUs
    Drivers: hv: utils: Remove util transport handler from list if registration fails
    Drivers: hv: util: Pass the channel information during the init call
    Drivers: hv: vmbus: avoid unneeded compiler optimizations in vmbus_wait_for_unload()
    Drivers: hv: vmbus: remove code duplication in message handling
    Drivers: hv: vmbus: avoid wait_for_completion() on crash
    Drivers: hv: vmbus: don't loose HVMSG_TIMER_EXPIRED messages
    misc: at24: replace memory_accessor with nvmem_device_read
    eeprom: 93xx46: extend driver to plug into the NVMEM framework
    eeprom: at25: extend driver to plug into the NVMEM framework
    ...

    Linus Torvalds
     
  • Pull security layer updates from James Morris:
    "There are a bunch of fixes to the TPM, IMA, and Keys code, with minor
    fixes scattered across the subsystem.

    IMA now requires signed policy, and that policy is also now measured
    and appraised"

    * 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security: (67 commits)
    X.509: Make algo identifiers text instead of enum
    akcipher: Move the RSA DER encoding check to the crypto layer
    crypto: Add hash param to pkcs1pad
    sign-file: fix build with CMS support disabled
    MAINTAINERS: update tpmdd urls
    MODSIGN: linux/string.h should be #included to get memcpy()
    certs: Fix misaligned data in extra certificate list
    X.509: Handle midnight alternative notation in GeneralizedTime
    X.509: Support leap seconds
    Handle ISO 8601 leap seconds and encodings of midnight in mktime64()
    X.509: Fix leap year handling again
    PKCS#7: fix unitialized boolean 'want'
    firmware: change kernel read fail to dev_dbg()
    KEYS: Use the symbol value for list size, updated by scripts/insert-sys-cert
    KEYS: Reserve an extra certificate symbol for inserting without recompiling
    modsign: hide openssl output in silent builds
    tpm_tis: fix build warning with tpm_tis_resume
    ima: require signed IMA policy
    ima: measure and appraise the IMA policy itself
    ima: load policy using path
    ...

    Linus Torvalds
     

17 Mar, 2016

1 commit

  • Merge first patch-bomb from Andrew Morton:

    - some misc things

    - ofs2 updates

    - about half of MM

    - checkpatch updates

    - autofs4 update

    * emailed patches from Andrew Morton : (120 commits)
    autofs4: fix string.h include in auto_dev-ioctl.h
    autofs4: use pr_xxx() macros directly for logging
    autofs4: change log print macros to not insert newline
    autofs4: make autofs log prints consistent
    autofs4: fix some white space errors
    autofs4: fix invalid ioctl return in autofs4_root_ioctl_unlocked()
    autofs4: fix coding style line length in autofs4_wait()
    autofs4: fix coding style problem in autofs4_get_set_timeout()
    autofs4: coding style fixes
    autofs: show pipe inode in mount options
    kallsyms: add support for relative offsets in kallsyms address table
    kallsyms: don't overload absolute symbol type for percpu symbols
    x86: kallsyms: disable absolute percpu symbols on !SMP
    checkpatch: fix another left brace warning
    checkpatch: improve UNSPECIFIED_INT test for bare signed/unsigned uses
    checkpatch: warn on bare unsigned or signed declarations without int
    checkpatch: exclude asm volatile from complex macro check
    mm: memcontrol: drop unnecessary lru locking from mem_cgroup_migrate()
    mm: migrate: consolidate mem_cgroup_migrate() calls
    mm/compaction: speed up pageblock_pfn_to_page() when zone is contiguous
    ...

    Linus Torvalds
     

16 Mar, 2016

7 commits

  • Similar to how relative extables are implemented, it is possible to emit
    the kallsyms table in such a way that it contains offsets relative to
    some anchor point in the kernel image rather than absolute addresses.

    On 64-bit architectures, it cuts the size of the kallsyms address table
    in half, since offsets between kernel symbols can typically be expressed
    in 32 bits. This saves several hundreds of kilobytes of permanent
    .rodata on average. In addition, the kallsyms address table is no
    longer subject to dynamic relocation when CONFIG_RELOCATABLE is in
    effect, so the relocation work done after decompression now doesn't have
    to do relocation updates for all these values. This saves up to 24
    bytes (i.e., the size of a ELF64 RELA relocation table entry) per value,
    which easily adds up to a couple of megabytes of uncompressed __init
    data on ppc64 or arm64. Even if these relocation entries typically
    compress well, the combined size reduction of 2.8 MB uncompressed for a
    ppc64_defconfig build (of which 2.4 MB is __init data) results in a ~500
    KB space saving in the compressed image.

    Since it is useful for some architectures (like x86) to retain the
    ability to emit absolute values as well, this patch also adds support
    for capturing both absolute and relative values when
    KALLSYMS_ABSOLUTE_PERCPU is in effect, by emitting absolute per-cpu
    addresses as positive 32-bit values, and addresses relative to the
    lowest encountered relative symbol as negative values, which are
    subtracted from the runtime address of this base symbol to produce the
    actual address.

    Support for the above is enabled by default for all architectures except
    IA-64 and Tile-GX, whose symbols are too far apart to capture in this
    manner.

    Signed-off-by: Ard Biesheuvel
    Tested-by: Guenter Roeck
    Reviewed-by: Kees Cook
    Tested-by: Kees Cook
    Cc: Heiko Carstens
    Cc: Michael Ellerman
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: Benjamin Herrenschmidt
    Cc: Michal Marek
    Cc: Rusty Russell
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ard Biesheuvel
     
  • Commit c6bda7c988a5 ("kallsyms: fix percpu vars on x86-64 with
    relocation") overloaded the 'A' (absolute) symbol type to signify that a
    symbol is not subject to dynamic relocation. However, the original A
    type does not imply that at all, and depending on the version of the
    toolchain, many A type symbols are emitted that are in fact relative to
    the kernel text, i.e., if the kernel is relocated at runtime, these
    symbols should be updated as well.

    For instance, on sparc32, the following symbols are emitted as absolute
    (kindly provided by Guenter Roeck):

    f035a420 A _etext
    f03d9000 A _sdata
    f03de8c4 A jiffies
    f03f8860 A _edata
    f03fc000 A __init_begin
    f041bdc8 A __init_text_end
    f0423000 A __bss_start
    f0423000 A __init_end
    f044457d A __bss_stop
    f044457d A _end

    On x86_64, similar behavior can be observed:

    ffffffff81a00000 A __end_rodata_hpage_align
    ffffffff81b19000 A __vvar_page
    ffffffff81d3d000 A _end

    Even if only a couple of them pass the symbol range check that results
    in them to be taken into account for the final kallsyms symbol table, it
    is obvious that 'A' does not mean the symbol does not need to be updated
    at relocation time, and overloading its meaning to signify that is
    perhaps not a good idea.

    So instead, add a new percpu_absolute member to struct sym_entry, and
    when --absolute-percpu is in effect, use it to record symbols whose
    addresses should be emitted as final values rather than values that
    still require relocation at runtime. That way, we can drop the check
    against the 'A' type.

    Signed-off-by: Ard Biesheuvel
    Tested-by: Guenter Roeck
    Reviewed-by: Kees Cook
    Tested-by: Kees Cook
    Cc: Heiko Carstens
    Cc: Michael Ellerman
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: Benjamin Herrenschmidt
    Cc: Michal Marek
    Acked-by: Rusty Russell
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ard Biesheuvel
     
  • scripts/kallsyms.c has a special --absolute-percpu command line option
    which deals with the zero based per cpu offsets that are used when
    building for SMP on x86_64. This means that the option should only be
    passed in that case, so add a Kconfig symbol with the correct predicate,
    and use that instead.

    Signed-off-by: Ard Biesheuvel
    Tested-by: Guenter Roeck
    Reviewed-by: Kees Cook
    Tested-by: Kees Cook
    Acked-by: Rusty Russell
    Cc: Heiko Carstens
    Cc: Michael Ellerman
    Cc: Ingo Molnar
    Cc: H. Peter Anvin
    Cc: Benjamin Herrenschmidt
    Cc: Michal Marek
    Cc: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ard Biesheuvel
     
  • This patch escapes a regex that uses left brace.

    Using checkpatch.pl with Perl 5.22.0 generates the warning: "Unescaped
    left brace in regex is deprecated, passed through in regex;"

    Comment from regcomp.c in Perl source: "Currently we don't warn when the
    lbrace is at the start of a construct. This catches it in the middle of
    a literal string, or when it's the first thing after something like
    "\b"."

    This works as a complement to 4e5d56bd ("checkpatch: fix left brace
    warning").

    Signed-off-by: Geyslan G. Bem
    Signed-off-by: Joe Perches
    Suggested-by: Peter Senna Tschudin
    Cc: Eddie Kovsky
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Geyslan G. Bem
     
  • Improve the test to allow casts to (unsigned) or (signed) to be found
    and fixed if desired.

    Signed-off-by: Joe Perches
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     
  • Kernel style prefers "unsigned int " over "unsigned " and
    "signed int " over "signed ".

    Emit a warning for these simple signed/unsigned declarations. Fix
    it too if desired.

    Signed-off-by: Joe Perches
    Acked-by: David S. Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     
  • asm volatile and all its variants like __asm__ __volatile__ ("")
    are reported as errors with "Macros with with complex values should be
    enclosed in parentheses".

    Make an exception for these asm volatile macro definitions by converting
    the "asm volatile" to "asm_volatile" so it appears as a single function
    call and the error isn't reported.

    Signed-off-by: Joe Perches
    Reported-by: Jeff Merkey
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Joe Perches
     

15 Mar, 2016

2 commits

  • Conflicts:
    kernel/rcu/tree.c

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • Pull RAS updates from Ingo Molnar:
    "Various RAS updates:

    - AMD MCE support updates for future CPUs, fixes and 'SMCA' (Scalable
    MCA) error decoding support (Aravind Gopalakrishnan)

    - x86 memcpy_mcsafe() support, to enable smart(er) hardware error
    recovery in NVDIMM drivers, based on an extension of the x86
    exception handling code. (Tony Luck)"

    * 'ras-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    EDAC/sb_edac: Fix computation of channel address
    x86/mm, x86/mce: Add memcpy_mcsafe()
    x86/mce/AMD: Document some functionality
    x86/mce: Clarify comments regarding deferred error
    x86/mce/AMD: Fix logic to obtain block address
    x86/mce/AMD, EDAC: Enable error decoding of Scalable MCA errors
    x86/mce: Move MCx_CONFIG MSR definitions
    x86/mce: Check for faults tagged in EXTABLE_CLASS_FAULT exception table entries
    x86/mm: Expand the exception table logic to allow new handling options
    x86/mce/AMD: Set MCAX Enable bit
    x86/mce/AMD: Carve out threshold block preparation
    x86/mce/AMD: Fix LVT offset configuration for thresholding
    x86/mce/AMD: Reduce number of blocks scanned per bank
    x86/mce/AMD: Do not perform shared bank check for future processors
    x86/mce: Fix order of AMD MCE init function call

    Linus Torvalds
     

13 Mar, 2016

1 commit

  • The ld-version.sh script fails on some versions of awk with the
    following error, resulting in build failures for MIPS:

    awk: scripts/ld-version.sh: line 4: regular expression compile failed (missing '(')

    This is due to the regular expression ".*)", meant to strip off the
    beginning of the ld version string up to the close bracket, however
    brackets have a meaning in regular expressions, so lets escape it so
    that awk doesn't expect a corresponding open bracket.

    Fixes: ccbef1674a15 ("Kbuild, lto: add ld-version and ld-ifversion ...")
    Reported-by: Geert Uytterhoeven
    Signed-off-by: James Hogan
    Tested-by: Michael S. Tsirkin
    Acked-by: Michael S. Tsirkin
    Tested-by: Sudip Mukherjee
    Cc: Michal Marek
    Cc: Andi Kleen
    Cc: Geert Uytterhoeven
    Cc: linux-mips@linux-mips.org
    Cc: linux-kbuild@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: stable@vger.kernel.org # 4.4.x-
    Patchwork: https://patchwork.linux-mips.org/patch/12838/
    Signed-off-by: Ralf Baechle

    James Hogan
     

05 Mar, 2016

3 commits

  • With CONFIG_STACK_VALIDATION enabled, if the host system doesn't have
    a development version of libelf installed, the build fails with errors
    like:

    elf.h:22:18: fatal error: gelf.h: No such file or directory compilation terminated.

    Instead of failing to build, instead just print a warning and disable
    stack validation.

    Signed-off-by: Josh Poimboeuf
    Cc: Andrew Morton
    Cc: Linus Torvalds
    Cc: Peter Zijlstra
    Cc: Stephen Rothwell
    Cc: Sudip Mukherjee
    Cc: Thomas Gleixner
    Cc: linux-next@vger.kernel.org
    Cc: linux@roeck-us.net
    Cc: live-patching@vger.kernel.org
    Link: http://lkml.kernel.org/r/8c27fe00face60f42e888ddb3142c97e45223165.1457026550.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     
  • Under certain conditions, Kbuild shows "... is up to date" where
    if_changed or friends are used.

    For example, the incremental build of ARM64 Linux shows this message
    when the kernel image has not been updated.

    $ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
    CHK include/config/kernel.release
    CHK include/generated/uapi/linux/version.h
    CHK include/generated/utsrelease.h
    CHK include/generated/bounds.h
    CHK include/generated/timeconst.h
    CHK include/generated/asm-offsets.h
    CALL scripts/checksyscalls.sh
    CHK include/generated/compile.h
    CHK kernel/config_data.h
    make[1]: `arch/arm64/boot/Image.gz' is up to date.
    Building modules, stage 2.
    MODPOST 0 modules

    The following is the build rule in arch/arm64/boot/Makefile:

    $(obj)/Image.gz: $(obj)/Image FORCE
    $(call if_changed,gzip)

    If the Image.gz is newer than the Image and the command line has not
    changed (i.e., $(any-prereq) and $(arg-check) are both empty), the
    build rule $(call if_changed,gzip) is evaluated to be empty, then
    GNU Make reports the target is up to date. In order to make GNU Make
    quiet, we need to give it something to do, for example, "@:". This
    should be fixed in the Kbuild core part rather than in each Makefile.

    Signed-off-by: Masahiro Yamada
    Signed-off-by: Michal Marek

    Masahiro Yamada
     
  • This patch add a rpm preuninstall scriptlet to cleanup the
    boot loader configuration on kernel package uninstall.
    The initrd for the to-be-removed kernel is deleted, too.

    Signed-off-by: Paolo Abeni
    Signed-off-by: Michal Marek

    Paolo Abeni
     

03 Mar, 2016

1 commit

  • Some versions of openssl might have the CMS feature disabled
    LibreSSL disables this feature too
    If the feature is disabled, fallback to PKCS7

    In file included from scripts/sign-file.c:46:0:
    /usr/x86_64-pc-linux-gnu/include/openssl/cms.h:62:2: error: #error CMS is disabled.
    #error CMS is disabled.

    Signed-off-by: Marc-Antoine Perennou
    Signed-off-by: David Howells

    Marc-Antoine Perennou
     

29 Feb, 2016

2 commits

  • Add a CONFIG_STACK_VALIDATION option which will run "objtool check" for
    each .o file to ensure the validity of its stack metadata.

    Signed-off-by: Josh Poimboeuf
    Cc: Andrew Morton
    Cc: Andy Lutomirski
    Cc: Arnaldo Carvalho de Melo
    Cc: Bernd Petrovitsch
    Cc: Borislav Petkov
    Cc: Chris J Arges
    Cc: Jiri Slaby
    Cc: Linus Torvalds
    Cc: Michal Marek
    Cc: Namhyung Kim
    Cc: Pedro Alves
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: live-patching@vger.kernel.org
    Link: http://lkml.kernel.org/r/92baab69a6bf9bc7043af0bfca9fb964a1d45546.1456719558.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     
  • Code which runs outside the kernel's normal mode of operation often does
    unusual things which can cause a static analysis tool like objtool to
    emit false positive warnings:

    - boot image
    - vdso image
    - relocation
    - realmode
    - efi
    - head
    - purgatory
    - modpost

    Set OBJECT_FILES_NON_STANDARD for their related files and directories,
    which will tell objtool to skip checking them. It's ok to skip them
    because they don't affect runtime stack traces.

    Also skip the following code which does the right thing with respect to
    frame pointers, but is too "special" to be validated by a tool:

    - entry
    - mcount

    Also skip the test_nx module because it modifies its exception handling
    table at runtime, which objtool can't understand. Fortunately it's
    just a test module so it doesn't matter much.

    Currently objtool is the only user of OBJECT_FILES_NON_STANDARD, but it
    might eventually be useful for other tools.

    Signed-off-by: Josh Poimboeuf
    Cc: Andrew Morton
    Cc: Andy Lutomirski
    Cc: Arnaldo Carvalho de Melo
    Cc: Bernd Petrovitsch
    Cc: Borislav Petkov
    Cc: Chris J Arges
    Cc: Jiri Slaby
    Cc: Linus Torvalds
    Cc: Michal Marek
    Cc: Namhyung Kim
    Cc: Pedro Alves
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: live-patching@vger.kernel.org
    Link: http://lkml.kernel.org/r/366c080e3844e8a5b6a0327dc7e8c2b90ca3baeb.1456719558.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

26 Feb, 2016

3 commits

  • When a certificate is inserted to the image using scripts/writekey, the
    value of __cert_list_end does not change. The updated size can be found
    out by reading the value pointed by the system_certificate_list_size
    symbol.

    Signed-off-by: Mehmet Kayaalp
    Signed-off-by: David Howells

    Mehmet Kayaalp
     
  • Place a system_extra_cert buffer of configurable size, right after the
    system_certificate_list, so that inserted keys can be readily processed by
    the existing mechanism. Added script takes a key file and a kernel image
    and inserts its contents to the reserved area. The
    system_certificate_list_size is also adjusted accordingly.

    Call the script as:

    scripts/insert-sys-cert -b -c

    If vmlinux has no symbol table, supply System.map file with -s flag.
    Subsequent runs replace the previously inserted key, instead of appending
    the new one.

    Signed-off-by: Mehmet Kayaalp
    Signed-off-by: David Howells
    Acked-by: Mimi Zohar

    Mehmet Kayaalp
     
  • mkspec is copying built kernel to temporrary location

    /boot/vmlinuz-$KERNELRELEASE-rpm

    and runs installkernel on it. This however directly leads to grub2
    menuentry for this suffixed binary being generated as well during the run
    of installkernel script.

    Later in the process the temporary -rpm suffixed files are removed, and
    therefore we end up with spurious (and non-functional) grub2 menu entries
    for each installed kernel RPM.

    Fix that by using a different temporary name (prefixed by '.'), so that
    the binary is not recognized as an actual kernel binary and no menuentry
    is created for it.

    Signed-off-by: Jiri Kosina
    Fixes: 3c9c7a14b627 ("rpm-pkg: add %post section to create initramfs and grub hooks")
    Signed-off-by: Michal Marek

    Jiri Kosina
     

24 Feb, 2016

4 commits

  • Instead of using absolute addresses for both the exception location
    and the fixup, use offsets relative to the exception table entry values.
    Not only does this cut the size of the exception table in half, it is
    also a prerequisite for KASLR, since absolute exception table entries
    are subject to dynamic relocation, which is incompatible with the sorting
    of the exception table that occurs at build time.

    This patch also introduces the _ASM_EXTABLE preprocessor macro (which
    exists on x86 as well) and its _asm_extable assembly counterpart, as
    shorthands to emit exception table entries.

    Acked-by: Will Deacon
    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Catalin Marinas

    Ard Biesheuvel
     
  • Add support to scripts/sortextable for handling relocatable (PIE)
    executables, whose ELF type is ET_DYN, not ET_EXEC. Other than adding
    support for the new type, no changes are needed.

    Signed-off-by: Ard Biesheuvel
    Signed-off-by: Catalin Marinas

    Ard Biesheuvel
     
  • In C programming language, we don't have a easy way to privatize a
    member of a structure. However in kernel, sometimes there is a need to
    privatize a member in case of potential bugs or misuses.

    Fortunately, the noderef attribute of sparse is a way to privatize a
    member, as by defining a member as noderef, the address-of operator on
    the member will produce a noderef pointer to that member, and if anyone
    wants to dereference that kind of pointers to read or modify the member,
    sparse will yell.

    Based on this, __private modifier and related operation ACCESS_PRIVATE()
    are introduced, which could help detect undesigned public uses of
    private members of structs. Here is an example of sparse's output if it
    detect an undersigned public use:

    | kernel/rcu/tree.c:4453:25: warning: incorrect type in argument 1 (different modifiers)
    | kernel/rcu/tree.c:4453:25: expected struct raw_spinlock [usertype] *lock
    | kernel/rcu/tree.c:4453:25: got struct raw_spinlock [noderef] *

    Also, this patch improves compiler.h a little bit by adding comments for
    "#else" and "#endif".

    Signed-off-by: Boqun Feng
    Signed-off-by: Paul E. McKenney

    Boqun Feng
     
  • Development of dtc happens in its own upstream repository, but testing
    dtc changes against the kernel tree is useful. Change dtc to a variable
    that users can override.

    Signed-off-by: Rob Herring
    Cc: Michal Marek
    Cc: linux-kbuild@vger.kernel.org

    Rob Herring
     

19 Feb, 2016

1 commit