15 Feb, 2017

1 commit

  • commit 228dbbfb5d77f8e047b2a1d78da14b7158433027 upstream.

    Ensure that if userspace supplies insufficient data to
    PTRACE_SETREGSET to fill all the registers, the thread's old
    registers are preserved.

    Fixes: 5be6f62b0059 ("ARM: 6883/1: ptrace: Migrate to regsets framework")
    Signed-off-by: Dave Martin
    Acked-by: Russell King
    Signed-off-by: Russell King
    Signed-off-by: Greg Kroah-Hartman

    Dave Martin
     

26 Jan, 2017

2 commits

  • commit 90f92c631b210c1e97080b53a9d863783281a932 upstream.

    The following patch was sketched by Russell in response to my
    crashes on the PB11MPCore after the patch for software-based
    priviledged no access support for ARMv8.1. See this thread:
    http://marc.info/?l=linux-arm-kernel&m=144051749807214&w=2

    I am unsure what is going on, I suspect everyone involved in
    the discussion is. I just want to repost this to get the
    discussion restarted, as I still have to apply this patch
    with every kernel iteration to get my PB11MPCore Realview
    running.

    Testing by Neil Armstrong on the Oxnas NAS has revealed that
    this bug exist also on that widely deployed hardware, so
    we are probably currently regressing all ARM11MPCore systems.

    Cc: Russell King
    Cc: Will Deacon
    Fixes: a5e090acbf54 ("ARM: software-based priviledged-no-access support")
    Tested-by: Neil Armstrong
    Signed-off-by: Linus Walleij
    Signed-off-by: Russell King
    Signed-off-by: Greg Kroah-Hartman

    Linus Walleij
     
  • commit ddc37832a1349f474c4532de381498020ed71d31 upstream.

    On APQ8060, the kernel crashes in arch_hw_breakpoint_init, taking an
    undefined instruction trap within write_wb_reg. This is because Scorpion
    CPUs erroneously appear to set DBGPRSR.SPD when WFI is issued, even if
    the core is not powered down. When DBGPRSR.SPD is set, breakpoint and
    watchpoint registers are treated as undefined.

    It's possible to trigger similar crashes later on from userspace, by
    requesting the kernel to install a breakpoint or watchpoint, as we can
    go idle at any point between the reset of the debug registers and their
    later use. This has always been the case.

    Given that this has always been broken, no-one has complained until now,
    and there is no clear workaround, disable hardware breakpoints and
    watchpoints on Scorpion to avoid these issues.

    Signed-off-by: Mark Rutland
    Reported-by: Linus Walleij
    Reviewed-by: Stephen Boyd
    Acked-by: Will Deacon
    Cc: Russell King
    Signed-off-by: Russell King
    Signed-off-by: Greg Kroah-Hartman

    Mark Rutland
     

23 Nov, 2016

1 commit

  • This reverts commit 4dd1837d7589f468ed109556513f476e7a7f9121.

    Moving the exports for assembly code into the assembly files breaks
    KSYM trimming, but also breaks modversions.

    While fixing the KSYM trimming is trivial, fixing modversions brings
    us to a technically worse position that we had prior to the above
    change:

    - We end up with the prototype definitions divorsed from everything
    else, which means that adding or removing assembly level ksyms
    become more fragile:
    * if adding a new assembly ksyms export, a missed prototype in
    asm-prototypes.h results in a successful build if no module in
    the selected configuration makes use of the symbol.
    * when removing a ksyms export, asm-prototypes.h will get forgotten,
    with armksyms.c, you'll get a build error if you forget to touch
    the file.

    - We end up with the same amount of include files and prototypes,
    they're just in a header file instead of a .c file with their
    exports.

    As for lines of code, we don't get much of a size reduction:
    (original commit)
    47 files changed, 131 insertions(+), 208 deletions(-)
    (fix for ksyms trimming)
    7 files changed, 18 insertions(+), 5 deletions(-)
    (two fixes for modversions)
    1 file changed, 34 insertions(+)
    3 files changed, 7 insertions(+), 2 deletions(-)
    which results in a net total of only 25 lines deleted.

    As there does not seem to be much benefit from this change of approach,
    revert the change.

    Signed-off-by: Russell King

    Russell King
     

17 Nov, 2016

1 commit

  • Commit 7619751f8c90 ("ARM: 8595/2: apply more __ro_after_init") caused
    a regression with XIP kernels by moving the __ro_after_init data into
    the read-only section. With XIP kernels, the read-only section is
    located in read-only memory from the very beginning.

    Work around this by moving the __ro_after_init data back into the .data
    section, which will be in RAM, and hence will be writable.

    It should be noted that in doing so, this remains writable after init.

    Fixes: 7619751f8c90 ("ARM: 8595/2: apply more __ro_after_init")
    Reported-by: Andrea Merello
    Tested-by: Andrea Merello [ XIP stm32 ]
    Tested-by: Alexandre Torgue
    Signed-off-by: Russell King

    Russell King
     

15 Nov, 2016

1 commit

  • Recent kernels have changed their behaviour to be more inconsistent
    when handling printk continuations. With todays kernels, the output
    looks sane on the console, but dmesg splits individual printk()s which
    do not have the KERN_CONT prefix into separate lines.

    Since the assembly code is not trivial to add the KERN_CONT, and we
    ideally want to avoid using KERN_CONT (as multiple printk()s can race
    between different threads), convert the assembly dumping the register
    values to C code, and have the C code build the output a line at a
    time before dumping to the console.

    This avoids the KERN_CONT issue, and also avoids situations where the
    output is intermixed with other console activity.

    Signed-off-by: Russell King

    Russell King
     

19 Oct, 2016

1 commit


15 Oct, 2016

1 commit

  • Pull kbuild updates from Michal Marek:

    - EXPORT_SYMBOL for asm source by Al Viro.

    This does bring a regression, because genksyms no longer generates
    checksums for these symbols (CONFIG_MODVERSIONS). Nick Piggin is
    working on a patch to fix this.

    Plus, we are talking about functions like strcpy(), which rarely
    change prototypes.

    - Fixes for PPC fallout of the above by Stephen Rothwell and Nick
    Piggin

    - fixdep speedup by Alexey Dobriyan.

    - preparatory work by Nick Piggin to allow architectures to build with
    -ffunction-sections, -fdata-sections and --gc-sections

    - CONFIG_THIN_ARCHIVES support by Stephen Rothwell

    - fix for filenames with colons in the initramfs source by me.

    * 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild: (22 commits)
    initramfs: Escape colons in depfile
    ppc: there is no clear_pages to export
    powerpc/64: whitelist unresolved modversions CRCs
    kbuild: -ffunction-sections fix for archs with conflicting sections
    kbuild: add arch specific post-link Makefile
    kbuild: allow archs to select link dead code/data elimination
    kbuild: allow architectures to use thin archives instead of ld -r
    kbuild: Regenerate genksyms lexer
    kbuild: genksyms fix for typeof handling
    fixdep: faster CONFIG_ search
    ia64: move exports to definitions
    sparc32: debride memcpy.S a bit
    [sparc] unify 32bit and 64bit string.h
    sparc: move exports to definitions
    ppc: move exports to definitions
    arm: move exports to definitions
    s390: move exports to definitions
    m68k: move exports to definitions
    alpha: move exports to actual definitions
    x86: move exports to actual definitions
    ...

    Linus Torvalds
     

12 Oct, 2016

1 commit

  • Currently, all callers to randomize_range() set the length to 0 and
    calculate end by adding a constant to the start address. We can simplify
    the API to remove a bunch of needless checks and variables.

    Use the new randomize_addr(start, range) call to set the requested
    address.

    Link: http://lkml.kernel.org/r/20160803233913.32511-4-jason@lakedaemon.net
    Signed-off-by: Jason Cooper
    Acked-by: Kees Cook
    Cc: "Russell King - ARM Linux"
    Cc: "Theodore Ts'o"
    Cc: Catalin Marinas
    Cc: Will Deacon
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jason Cooper
     

08 Oct, 2016

3 commits

  • 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
     
  • Currently on arm there is code that checks whether it should call
    dump_stack() explicitly, to avoid trying to raise an NMI when the
    current context is not preemptible by the backtrace IPI. Similarly, the
    forthcoming arch/tile support uses an IPI mechanism that does not
    support generating an NMI to self.

    Accordingly, move the code that guards this case into the generic
    mechanism, and invoke it unconditionally whenever we want a backtrace of
    the current cpu. It seems plausible that in all cases, dump_stack()
    will generate better information than generating a stack from the NMI
    handler. The register state will be missing, but that state is likely
    not particularly helpful in any case.

    Or, if we think it is helpful, we should be capturing and emitting the
    current register state in all cases when regs == NULL is passed to
    nmi_cpu_backtrace().

    Link: http://lkml.kernel.org/r/1472487169-14923-3-git-send-email-cmetcalf@mellanox.com
    Signed-off-by: Chris Metcalf
    Tested-by: Daniel Thompson [arm]
    Reviewed-by: Petr Mladek
    Acked-by: Aaron Tomlin
    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
     
  • Patch series "improvements to the nmi_backtrace code" v9.

    This patch series modifies the trigger_xxx_backtrace() NMI-based remote
    backtracing code to make it more flexible, and makes a few small
    improvements along the way.

    The motivation comes from the task isolation code, where there are
    scenarios where we want to be able to diagnose a case where some cpu is
    about to interrupt a task-isolated cpu. It can be helpful to see both
    where the interrupting cpu is, and also an approximation of where the
    cpu that is being interrupted is. The nmi_backtrace framework allows us
    to discover the stack of the interrupted cpu.

    I've tested that the change works as desired on tile, and build-tested
    x86, arm, mips, and sparc64. For x86 I confirmed that the generic
    cpuidle stuff as well as the architecture-specific routines are in the
    new cpuidle section. For arm, mips, and sparc I just build-tested it
    and made sure the generic cpuidle routines were in the new cpuidle
    section, but I didn't attempt to figure out which the platform-specific
    idle routines might be. That might be more usefully done by someone
    with platform experience in follow-up patches.

    This patch (of 4):

    Currently you can only request a backtrace of either all cpus, or all
    cpus but yourself. It can also be helpful to request a remote backtrace
    of a single cpu, and since we want that, the logical extension is to
    support a cpumask as the underlying primitive.

    This change modifies the existing lib/nmi_backtrace.c code to take a
    cpumask as its basic primitive, and modifies the linux/nmi.h code to use
    the new "cpumask" method instead.

    The existing clients of nmi_backtrace (arm and x86) are converted to
    using the new cpumask approach in this change.

    The other users of the backtracing API (sparc64 and mips) are converted
    to use the cpumask approach rather than the all/allbutself approach.
    The mips code ignored the "include_self" boolean but with this change it
    will now also dump a local backtrace if requested.

    Link: http://lkml.kernel.org/r/1472487169-14923-2-git-send-email-cmetcalf@mellanox.com
    Signed-off-by: Chris Metcalf
    Tested-by: Daniel Thompson [arm]
    Reviewed-by: Aaron Tomlin
    Reviewed-by: Petr Mladek
    Cc: "Rafael J. Wysocki"
    Cc: Russell King
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: Ralf Baechle
    Cc: David Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Chris Metcalf
     

06 Oct, 2016

3 commits

  • Pull ARM updates from Russell King:

    - Correct ARMs dma-mapping to use the correct printk format strings.

    - Avoid defining OBJCOPYFLAGS globally which upsets lkdtm rodata
    testing.

    - Cleanups to ARMs asm/memory.h include.

    - L2 cache cleanups.

    - Allow flat nommu binaries to be executed on ARM MMU systems.

    - Kernel hardening - add more read-only after init annotations,
    including making some kernel vdso variables const.

    - Ensure AMBA primecell clocks are appropriately defaulted.

    - ARM breakpoint cleanup.

    - Various StrongARM 11x0 and companion chip (SA1111) updates to bring
    this legacy platform to use more modern APIs for (eg) GPIOs and
    interrupts, which will allow us in the future to reduce some of the
    board-level driver clutter and elimate function callbacks into board
    code via platform data. There still appears to be interest in these
    platforms!

    - Remove the now redundant secure_flush_area() API.

    - Module PLT relocation optimisations. Ard says: This series of 4
    patches optimizes the ARM PLT generation code that is invoked at
    module load time, to get rid of the O(n^2) algorithm that results in
    pathological load times of 10 seconds or more for large modules on
    certain STB platforms.

    - ARMv7M cache maintanence support.

    - L2 cache PMU support

    * 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm: (35 commits)
    ARM: sa1111: provide to_sa1111_device() macro
    ARM: sa1111: add sa1111_get_irq()
    ARM: sa1111: clean up duplication in IRQ chip implementation
    ARM: sa1111: implement a gpio_chip for SA1111 GPIOs
    ARM: sa1111: move irq cleanup to separate function
    ARM: sa1111: use devm_clk_get()
    ARM: sa1111: use devm_kzalloc()
    ARM: sa1111: ensure we only touch RAB bus type devices when removing
    ARM: 8611/1: l2x0: add PMU support
    ARM: 8610/1: V7M: Add dsb before jumping in handler mode
    ARM: 8609/1: V7M: Add support for the Cortex-M7 processor
    ARM: 8608/1: V7M: Indirect proc_info construction for V7M CPUs
    ARM: 8607/1: V7M: Wire up caches for V7M processors with cache support.
    ARM: 8606/1: V7M: introduce cache operations
    ARM: 8605/1: V7M: fix notrace variant of save_and_disable_irqs
    ARM: 8604/1: V7M: Add support for reading the CTR with read_cpuid_cachetype()
    ARM: 8603/1: V7M: Add addresses for mem-mapped V7M cache operations
    ARM: 8602/1: factor out CSSELR/CCSIDR operations that use cp15 directly
    ARM: kernel: avoid brute force search on PLT generation
    ARM: kernel: sort relocation sections before allocating PLTs
    ...

    Linus Torvalds
     
  • Russell King
     
  • Russell King
     

04 Oct, 2016

1 commit

  • Pull low-level x86 updates from Ingo Molnar:
    "In this cycle this topic tree has become one of those 'super topics'
    that accumulated a lot of changes:

    - Add CONFIG_VMAP_STACK=y support to the core kernel and enable it on
    x86 - preceded by an array of changes. v4.8 saw preparatory changes
    in this area already - this is the rest of the work. Includes the
    thread stack caching performance optimization. (Andy Lutomirski)

    - switch_to() cleanups and all around enhancements. (Brian Gerst)

    - A large number of dumpstack infrastructure enhancements and an
    unwinder abstraction. The secret long term plan is safe(r) live
    patching plus maybe another attempt at debuginfo based unwinding -
    but all these current bits are standalone enhancements in a frame
    pointer based debug environment as well. (Josh Poimboeuf)

    - More __ro_after_init and const annotations. (Kees Cook)

    - Enable KASLR for the vmemmap memory region. (Thomas Garnier)"

    [ The virtually mapped stack changes are pretty fundamental, and not
    x86-specific per se, even if they are only used on x86 right now. ]

    * 'x86-asm-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (70 commits)
    x86/asm: Get rid of __read_cr4_safe()
    thread_info: Use unsigned long for flags
    x86/alternatives: Add stack frame dependency to alternative_call_2()
    x86/dumpstack: Fix show_stack() task pointer regression
    x86/dumpstack: Remove dump_trace() and related callbacks
    x86/dumpstack: Convert show_trace_log_lvl() to use the new unwinder
    oprofile/x86: Convert x86_backtrace() to use the new unwinder
    x86/stacktrace: Convert save_stack_trace_*() to use the new unwinder
    perf/x86: Convert perf_callchain_kernel() to use the new unwinder
    x86/unwind: Add new unwind interface and implementations
    x86/dumpstack: Remove NULL task pointer convention
    fork: Optimize task creation by caching two thread stacks per CPU if CONFIG_VMAP_STACK=y
    sched/core: Free the stack early if CONFIG_THREAD_INFO_IN_TASK
    lib/syscall: Pin the task stack in collect_syscall()
    x86/process: Pin the target stack in get_wchan()
    x86/dumpstack: Pin the target stack when dumping it
    kthread: Pin the stack via try_get_task_stack()/put_task_stack() in to_live_kthread() function
    sched/core: Add try_get_task_stack() and put_task_stack()
    x86/entry/64: Fix a minor comment rebase error
    iommu/amd: Don't put completion-wait semaphore on stack
    ...

    Linus Torvalds
     

03 Oct, 2016

1 commit

  • Pull arm64 updates from Will Deacon:
    "It's a bit all over the place this time with no "killer feature" to
    speak of. Support for mismatched cache line sizes should help people
    seeing whacky JIT failures on some SoCs, and the big.LITTLE perf
    updates have been a long time coming, but a lot of the changes here
    are cleanups.

    We stray outside arch/arm64 in a few areas: the arch/arm/ arch_timer
    workaround is acked by Russell, the DT/OF bits are acked by Rob, the
    arch_timer clocksource changes acked by Marc, CPU hotplug by tglx and
    jump_label by Peter (all CC'd).

    Summary:

    - Support for execute-only page permissions
    - Support for hibernate and DEBUG_PAGEALLOC
    - Support for heterogeneous systems with mismatches cache line sizes
    - Errata workarounds (A53 843419 update and QorIQ A-008585 timer bug)
    - arm64 PMU perf updates, including cpumasks for heterogeneous systems
    - Set UTS_MACHINE for building rpm packages
    - Yet another head.S tidy-up
    - Some cleanups and refactoring, particularly in the NUMA code
    - Lots of random, non-critical fixes across the board"

    * tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (100 commits)
    arm64: tlbflush.h: add __tlbi() macro
    arm64: Kconfig: remove SMP dependence for NUMA
    arm64: Kconfig: select OF/ACPI_NUMA under NUMA config
    arm64: fix dump_backtrace/unwind_frame with NULL tsk
    arm/arm64: arch_timer: Use archdata to indicate vdso suitability
    arm64: arch_timer: Work around QorIQ Erratum A-008585
    arm64: arch_timer: Add device tree binding for A-008585 erratum
    arm64: Correctly bounds check virt_addr_valid
    arm64: migrate exception table users off module.h and onto extable.h
    arm64: pmu: Hoist pmu platform device name
    arm64: pmu: Probe default hw/cache counters
    arm64: pmu: add fallback probe table
    MAINTAINERS: Update ARM PMU PROFILING AND DEBUGGING entry
    arm64: Improve kprobes test for atomic sequence
    arm64/kvm: use alternative auto-nop
    arm64: use alternative auto-nop
    arm64: alternative: add auto-nop infrastructure
    arm64: lse: convert lse alternatives NOP padding to use __nops
    arm64: barriers: introduce nops and __nops macros for NOP sequences
    arm64: sysreg: replace open-coded mrs_s/msr_s with {read,write}_sysreg_s
    ...

    Linus Torvalds
     

29 Sep, 2016

1 commit

  • Whilst MPIDR values themselves are less than 32 bits, it is still
    perfectly valid for a DT to have #address-cells > 1 in the CPUs node,
    resulting in the "reg" property having leading zero cell(s). In that
    situation, the big-endian nature of the data conspires with the current
    behaviour of only reading the first cell to cause the kernel to think
    all CPUs have ID 0, and become resoundingly unhappy as a consequence.

    Take the full property length into account when parsing CPUs so as to
    be correct under any circumstances.

    Cc: Russell King
    Signed-off-by: Robin Murphy
    Signed-off-by: Russell King

    Robin Murphy
     

24 Sep, 2016

1 commit


15 Sep, 2016

1 commit


09 Sep, 2016

1 commit


06 Sep, 2016

3 commits

  • This patch does the plumbing required to invoke the V7M cache code added
    in earlier patches in this series, although there is no users for that
    yet.

    In order to honour the I/D cache disable config options, this patch changes
    the mechanism by which the CCR is set on boot, to be more like V7A/R.

    Signed-off-by: Jonathan Austin
    Signed-off-by: Vladimir Murzin
    Tested-by: Andras Szemzo
    Tested-by: Joachim Eastwood
    Tested-by: Alexandre TORGUE
    Signed-off-by: Russell King

    Jonathan Austin
     
  • With the addition of caches to the V7M Architecture a new Cache Type
    Register (CTR) is defined at 0xE000ED7C. This register serves the same
    purpose as the V7A/R version and accessed via the read_cpuid_cachetype.

    Signed-off-by: Jonathan Austin
    Signed-off-by: Vladimir Murzin
    Tested-by: Andras Szemzo
    Tested-by: Joachim Eastwood
    Tested-by: Alexandre TORGUE
    Signed-off-by: Russell King

    Jonathan Austin
     
  • Currently we use raw cp15 operations to access the cache setup data.

    This patch abstracts the CSSELR and CCSIDR accessors out to a header so
    that the implementation for them can be switched out as we do with other
    cpu/cachetype operations.

    Signed-off-by: Jonathan Austin
    Signed-off-by: Vladimir Murzin
    Tested-by: Andras Szemzo
    Tested-by: Joachim Eastwood
    Tested-by: Alexandre TORGUE
    Signed-off-by: Russell King

    Jonathan Austin
     

31 Aug, 2016

4 commits

  • Given that we now sort the relocation sections in a way that guarantees
    that entries that can share a single PLT entry end up adjacently, there
    is no a longer a need to go over the entire list to look for an existing
    entry that matches our jump target. If such a match exists, it was the
    last one to be emitted, so we can simply check the preceding slot.

    Note that this will still work correctly in the [theoretical] presence of
    call/jump relocations against SHN_UNDEF symbols with non-zero addends,
    although not optimally. Since the relocations are presented in the same
    order that we checked them for duplicates, any duplicates that we failed
    to spot the first time around will be accounted for in the PLT allocation
    so there is guaranteed to be sufficient space for them when actually
    emitting the PLT.

    For instance, the following sequence of relocations:

    000004d8 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    000004fc 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    0000050e 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    00000520 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    00000532 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    00000544 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    00000556 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    00000568 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    0000057a 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    0000058c 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    0000059e 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    000005b0 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    000005c2 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null
    000005d4 00058b0a R_ARM_THM_CALL 00000000 warn_slowpath_null

    may result in several PLT entries to be allocated, and also emitted, if
    any of the entries in the middle refer to a Place that contains a non-zero
    addend (i.e., one for all the preceding zero-addend relocations, one for
    all the following zero-addend relocations, and one for the non-zero addend
    relocation itself)

    Tested-by: Jongsung Kim
    Signed-off-by: Ard Biesheuvel

    Ard Biesheuvel
     
  • The PLT allocation routines try to establish an upper bound on the
    number of PLT entries that will be required at relocation time, and
    optimize this by disregarding duplicates (i.e., PLT entries that will
    end up pointing to the same function). This is currently a O(n^2)
    algorithm, but we can greatly simplify this by
    - sorting the relocation section so that relocations that can use the
    same PLT entry will be listed adjacently,
    - disregard jump/call relocations with addends; these are highly unusual,
    for relocations against SHN_UNDEF symbols, and so we can simply allocate
    a PLT entry for each one we encounter, without trying to optimize away
    duplicates.

    Tested-by: Jongsung Kim
    Signed-off-by: Ard Biesheuvel

    Ard Biesheuvel
     
  • When CONFIG_ARM_MODULE_PLTS is enabled, jump and call instructions in
    modules no longer need to be within 16 MB (8 MB for Thumb2) of their
    targets. If they are further away, a PLT entry will be generated on the
    fly for each of them, which extends the range to the entire 32-bit
    address space.

    However, since these PLT entries will become the branch targets of the
    original jump and call instructions, the PLT itself needs to be in
    range, or we end up in the same situation we started in. Since the PLT
    is in a separate section, this essentially means that all jumps and calls
    inside the same module must be resolvable without PLT entries.

    The PLT allocation code executes before the module itself is loaded in
    its final location, and so it has to use a worst-case estimate for
    which jumps and calls will require an entry in the PLT at relocation
    time. As an optimization, this code deduplicates entries pointing to
    the same symbol, using a O(n^2) algorithm. However, it does not take
    the above into account, i.e., that PLT entries will only be needed for
    jump and call relocations against symbols that are not defined in the
    module.

    So disregard relocations against symbols that are defined in the module
    itself.

    As an additional minor optimization, ignore input sections that lack
    the SHF_EXECINSTR flag. Since jump and call relocations operate on
    executable instructions only, there is no need to look in sections that
    do not contain executable code.

    Tested-by: Jongsung Kim
    Signed-off-by: Ard Biesheuvel

    Ard Biesheuvel
     
  • The PLT code uses a separate .init.plt section to allocate PLT entries
    for jump and call instructions in __init code. However, even for fairly
    sizable modules like mac80211.ko, we only end up with a couple of PLT
    entries in the .init section, and so we can simplify the code
    significantly by emitting all PLT entries into the same section.

    Tested-by: Jongsung Kim
    Signed-off-by: Ard Biesheuvel

    Ard Biesheuvel
     

24 Aug, 2016

1 commit

  • Storing this value will help prevent unwinders from getting out of sync
    with the function graph tracer ret_stack. Now instead of needing a
    stateful iterator, they can compare the return address pointer to find
    the right ret_stack entry.

    Note that an array of 50 ftrace_ret_stack structs is allocated for every
    task. So when an arch implements this, it will add either 200 or 400
    bytes of memory usage per task (depending on whether it's a 32-bit or
    64-bit platform).

    Signed-off-by: Josh Poimboeuf
    Acked-by: Steven Rostedt
    Cc: Andy Lutomirski
    Cc: Andy Lutomirski
    Cc: Borislav Petkov
    Cc: Brian Gerst
    Cc: Byungchul Park
    Cc: Denys Vlasenko
    Cc: Frederic Weisbecker
    Cc: H. Peter Anvin
    Cc: Kees Cook
    Cc: Linus Torvalds
    Cc: Nilay Vaish
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/a95cfcc39e8f26b89a430c56926af0bb217bc0a1.1471607358.git.jpoimboe@redhat.com
    Signed-off-by: Ingo Molnar

    Josh Poimboeuf
     

23 Aug, 2016

1 commit

  • Since the non-secure copies of banked registers lack architecturally
    defined reset values, there is no actual guarantee when entering in Hyp
    from secure-only firmware that the Non-Secure PL1 state will look the
    way that kernel entry (in particular the decompressor stub) expects.
    So far, we've been getting away with it thanks to implementation details
    of ARMv7 cores and/or bootloader behaviour, but for the sake of forwards
    compatibility let's try to ensure that we have a minimally sane state
    before dropping down into it.

    Cc: Russell King
    Reviewed-by: Marc Zyngier
    Reviewed-by: Christoffer Dall
    Signed-off-by: Robin Murphy
    Signed-off-by: Russell King

    Robin Murphy
     

19 Aug, 2016

1 commit

  • Pull ARM fixes from Russell King:
    "Only three fixes this time:

    - Emil found an overflow problem with the memory layout sanity check.

    - Ard Biesheuvel noticed that late-allocated page tables (for EFI)
    weren't being properly constructed.

    - Guenter Roeck reported a problem found on qemu caused by the recent
    addr_limit changes"

    * 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm:
    ARM: fix address limit restoration for undefined instructions
    ARM: 8591/1: mm: use fully constructed struct pages for EFI pgd allocations
    ARM: 8590/1: sanity_check_meminfo(): avoid overflow on vmalloc_limit

    Linus Torvalds
     

16 Aug, 2016

1 commit

  • vdso_data_mapping is never modified, so mark it as const.

    vdso_total_pages, vdso_data_page, vdso_text_mapping and cntvct_ok are
    initialized by vdso_init(), thereafter are read only.

    The fact that they are read only after init makes them candidates for
    __ro_after_init declarations.

    Signed-off-by: Jisheng Zhang
    Reviewed-by: Kees Cook
    Acked-by: Nathan Lynch
    Signed-off-by: Russell King

    Jisheng Zhang
     

12 Aug, 2016

1 commit


11 Aug, 2016

1 commit

  • Add access checks to sys_oabi_epoll_wait() and sys_oabi_semtimedop().
    This fixes CVE-2016-3857, a local privilege escalation under
    CONFIG_OABI_COMPAT.

    Cc: stable@vger.kernel.org
    Reported-by: Chiachih Wu
    Reviewed-by: Kees Cook
    Reviewed-by: Nicolas Pitre
    Signed-off-by: Dave Weinstein
    Signed-off-by: Linus Torvalds

    Dave Weinstein
     

10 Aug, 2016

1 commit

  • During boot, sometimes the kernel will test to see if an instruction
    causes an undefined instruction exception. Unfortunately, the exit
    path for these exceptions did not restore the address limit, which
    causes the rootfs mount code to fail. Fix the missing address limit
    restoration.

    Tested-by: Guenter Roeck
    Signed-off-by: Russell King

    Russell King
     

08 Aug, 2016

1 commit


04 Aug, 2016

1 commit

  • The jump table can reference text found in an __exit section. Thus,
    instead of discarding it at build time, include EXIT_TEXT as part of
    __init and it will be released when the system boots.

    Link: http://lkml.kernel.org/r/60284113bb759121e8ae3e99af1535647e52123f.1467837322.git.jbaron@akamai.com
    Signed-off-by: Jason Baron
    Cc: Arnd Bergmann
    Cc: "David S. Miller"
    Cc: Benjamin Herrenschmidt
    Cc: Chris Metcalf
    Cc: Heiko Carstens
    Cc: Joe Perches
    Cc: Martin Schwidefsky
    Cc: Michael Ellerman
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jason Baron
     

03 Aug, 2016

3 commits

  • Merge yet more updates from Andrew Morton:

    - the rest of ocfs2

    - various hotfixes, mainly MM

    - quite a bit of misc stuff - drivers, fork, exec, signals, etc.

    - printk updates

    - firmware

    - checkpatch

    - nilfs2

    - more kexec stuff than usual

    - rapidio updates

    - w1 things

    * emailed patches from Andrew Morton : (111 commits)
    ipc: delete "nr_ipc_ns"
    kcov: allow more fine-grained coverage instrumentation
    init/Kconfig: add clarification for out-of-tree modules
    config: add android config fragments
    init/Kconfig: ban CONFIG_LOCALVERSION_AUTO with allmodconfig
    relay: add global mode support for buffer-only channels
    init: allow blacklisting of module_init functions
    w1:omap_hdq: fix regression
    w1: add helper macro module_w1_family
    w1: remove need for ida and use PLATFORM_DEVID_AUTO
    rapidio/switches: add driver for IDT gen3 switches
    powerpc/fsl_rio: apply changes for RIO spec rev 3
    rapidio: modify for rev.3 specification changes
    rapidio: change inbound window size type to u64
    rapidio/idt_gen2: fix locking warning
    rapidio: fix error handling in mbox request/release functions
    rapidio/tsi721_dma: advance queue processing from transfer submit call
    rapidio/tsi721: add messaging mbox selector parameter
    rapidio/tsi721: add PCIe MRRS override parameter
    rapidio/tsi721_dma: add channel mask and queue size parameters
    ...

    Linus Torvalds
     
  • Provide kexec with the boot view of memory by overriding the normal
    kexec translation functions added in a previous patch. We also need to
    fix a call to memblock in machine_kexec_prepare() so that we provide it
    with a running-view physical address rather than a boot- view physical
    address.

    Link: http://lkml.kernel.org/r/E1b8koa-0004Hl-Ey@rmk-PC.armlinux.org.uk
    Signed-off-by: Russell King
    Cc: Keerthy
    Cc: Pratyush Anand
    Cc: Vitaly Andrianov
    Cc: Eric Biederman
    Cc: Dave Young
    Cc: Baoquan He
    Cc: Vivek Goyal
    Cc: Simon Horman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Russell King
     
  • Advertise the location of bootable RAM to kexec-tools. kexec needs to
    know where it can place the kernel in RAM, and so be executable when the
    system needs to jump into it.

    Advertise these areas in /proc/iomem with a "System RAM (boot alias)"
    tag.

    Link: http://lkml.kernel.org/r/E1b8ko4-0004HA-GF@rmk-PC.armlinux.org.uk
    Signed-off-by: Russell King
    Reviewed-by: Pratyush Anand
    Cc: Baoquan He
    Cc: Keerthy
    Cc: Vitaly Andrianov
    Cc: Eric Biederman
    Cc: Dave Young
    Cc: Vivek Goyal
    Cc: Simon Horman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Russell King