12 Jan, 2017

2 commits

  • commit 32eb12a6c11034867401d56b012e3c15d5f8141e upstream.

    Flush the KVM entry code from the icache on all CPUs, not just the one
    that built the entry code.

    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář"
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: Radim Krčmář
    Signed-off-by: Greg Kroah-Hartman

    James Hogan
     
  • commit 4c881451d3017033597ea186cf79ae41a73e1ef8 upstream.

    On 64-bit kernels, MIPS KVM will clear CP0_Status.UX to prevent the
    guest (running in user mode) from accessing the 64-bit memory segments.
    However the previous value of CP0_Status.UX is never restored when
    exiting from the guest.

    If the user process uses 64-bit addressing (the n64 ABI) this can result
    in address error exceptions from the kernel if it needs to deliver a
    signal before returning to user mode, as the kernel will need to write a
    sigframe to high user addresses on the user stack which are disallowed
    by CP0_Status.UX=0.

    This is fixed by explicitly setting SX and UX again when exiting from
    the guest, and explicitly clearing those bits when returning to the
    guest. Having the SX and UX bits set when handling guest exits (rather
    than only when exiting to userland) will be helpful when we support VZ,
    since we shouldn't need to directly read or write guest memory, so it
    will be valid for cache management IPIs to access host user addresses.

    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář"
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: Radim Krčmář
    Signed-off-by: Greg Kroah-Hartman

    James Hogan
     

06 Jan, 2017

1 commit

  • commit 84d77d3f06e7e8dea057d10e8ec77ad71f721be3 upstream.

    It is the reasonable expectation that if an executable file is not
    readable there will be no way for a user without special privileges to
    read the file. This is enforced in ptrace_attach but if ptrace
    is already attached before exec there is no enforcement for read-only
    executables.

    As the only way to read such an mm is through access_process_vm
    spin a variant called ptrace_access_vm that will fail if the
    target process is not being ptraced by the current process, or
    the current process did not have sufficient privileges when ptracing
    began to read the target processes mm.

    In the ptrace implementations replace access_process_vm by
    ptrace_access_vm. There remain several ptrace sites that still use
    access_process_vm as they are reading the target executables
    instructions (for kernel consumption) or register stacks. As such it
    does not appear necessary to add a permission check to those calls.

    This bug has always existed in Linux.

    Fixes: v1.0
    Reported-by: Andy Lutomirski
    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     

11 Dec, 2016

2 commits

  • The hardware documentation says bit 11:10 are used for the GPE
    frequency selection. Fix the mask in the define to match these bits.

    Signed-off-by: Hauke Mehrtens
    Reported-by: Dan Carpenter
    Reviewed-by: Thomas Langer
    Cc: linux-mips@linux-mips.org
    Cc: john@phrozen.org
    Patchwork: https://patchwork.linux-mips.org/patch/14648/
    Signed-off-by: Ralf Baechle

    Hauke Mehrtens
     
  • The sync_cmos_clock function in kernel/time/ntp.c first tries to update
    the internal clock of the cpu by calling the "update_persistent_clock64"
    architecture specific function. If this returns -ENODEV, it then tries
    to update an external RTC using "rtc_set_ntp_time".

    On the mips architecture, the weak implementation of the underlying
    function would return 0 if it wasn't overridden. This meant that the
    sync_cmos_clock function would never try to update an external RTC
    (if both CONFIG_GENERIC_CMOS_UPDATE and CONFIG_RTC_SYSTOHC are
    configured)

    Returning -ENODEV instead, means that an external RTC will be tried.

    Signed-off-by: Luuk Paulussen
    Reviewed-by: Richard Laing
    Reviewed-by: Scott Parlane
    Reviewed-by: Chris Packham
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14649/
    Signed-off-by: Ralf Baechle

    Luuk Paulussen
     

25 Nov, 2016

1 commit

  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from __do_page_fault on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont
    to provide the appropriate markers & restore the expected output.

    Signed-off-by: Matt Redfearn
    Cc: Paul Gortmaker
    Cc: Kirill A. Shutemov
    Cc: Andrew Morton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14544/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     

24 Nov, 2016

1 commit

  • Since MIPSr6 the Wired register is split into 2 fields, with the upper
    16 bits of the register indicating a limit on the value that the wired
    entry count in the bottom 16 bits of the register can take. This means
    that simply reading the wired register doesn't get us a valid TLB entry
    index any longer, and we instead need to retrieve only the lower 16 bits
    of the register. Introduce a new num_wired_entries() function which does
    this on MIPSr6 or higher and simply returns the value of the wired
    register on older architecture revisions, and make use of it when
    reading the number of wired entries.

    Since commit e710d6668309 ("MIPS: tlb-r4k: If there are wired entries,
    don't use TLBINVF") we have been using a non-zero number of wired
    entries to determine whether we should avoid use of the tlbinvf
    instruction (which would invalidate wired entries) and instead loop over
    TLB entries in local_flush_tlb_all(). This loop begins with the number
    of wired entries, or before this patch some large bogus TLB index on
    MIPSr6 systems. Thus since the aforementioned commit some MIPSr6 systems
    with FTLBs have been prone to leaving stale address translations in the
    FTLB & crashing in various weird & wonderful ways when we later observe
    the wrong memory.

    Signed-off-by: Paul Burton
    Cc: Matt Redfearn
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14557/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

05 Nov, 2016

1 commit

  • Pull KVM updates from Paolo Bonzini:
    "One NULL pointer dereference, and two fixes for regressions introduced
    during the merge window.

    The rest are fixes for MIPS, s390 and nested VMX"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    kvm: x86: Check memopp before dereference (CVE-2016-8630)
    kvm: nVMX: VMCLEAR an active shadow VMCS after last use
    KVM: x86: drop TSC offsetting kvm_x86_ops to fix KVM_GET/SET_CLOCK
    KVM: x86: fix wbinvd_dirty_mask use-after-free
    kvm/x86: Show WRMSR data is in hex
    kvm: nVMX: Fix kernel panics induced by illegal INVEPT/INVVPID types
    KVM: document lock orders
    KVM: fix OOPS on flush_work
    KVM: s390: Fix STHYI buffer alignment for diag224
    KVM: MIPS: Precalculate MMIO load resume PC
    KVM: MIPS: Make ERET handle ERL before EXL
    KVM: MIPS: Fix lazy user ASID regenerate for SMP

    Linus Torvalds
     

04 Nov, 2016

17 commits

  • When low memory doesn't reach HIGHMEM_START (e.g. up to 256MB at PA=0 is
    common) and highmem is present above HIGHMEM_START (e.g. on Malta the
    RAM overlayed by the IO region is aliased at PA=0x90000000), max_low_pfn
    will be initially calculated very large and then clipped down to
    HIGHMEM_START.

    This causes crashes when reading /sys/kernel/mm/page_idle/bitmap
    (i.e. CONFIG_IDLE_PAGE_TRACKING=y) when highmem is disabled. pfn_valid()
    will compare against max_mapnr which is derived from max_low_pfn when
    there is no highend_pfn set up, and will return true for PFNs right up
    to HIGHMEM_START, even though they are beyond the end of low memory and
    no page structs will actually exist for these PFNs.

    This is fixed by skipping high memory regions when initially calculating
    max_low_pfn if highmem is disabled, so it doesn't get clipped too high.
    We also clip regions which overlap the highmem boundary when highmem is
    disabled, so that max_pfn doesn't extend into highmem either.

    Signed-off-by: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14490/
    Signed-off-by: Ralf Baechle

    James Hogan
     
  • Complement commit 80cbfad79096 ("MIPS: Correct MIPS I FP context
    layout") and correct the way Floating Point General registers are stored
    in a signal context with MIPS I hardware.

    Use the S.D and L.D assembly macros to have pairs of SWC1 instructions
    and pairs of LWC1 instructions produced, respectively, in an arrangement
    which makes the memory representation of floating-point data passed
    compatible with that used by hardware SDC1 and LDC1 instructions, where
    available, regardless of the hardware endianness used. This matches the
    layout used by r4k_fpu.S, ensuring run-time compatibility for MIPS I
    software across all o32 hardware platforms.

    Define an EX2 macro to handle exceptions from both hardware instructions
    implicitly produced from S.D and L.D assembly macros.

    Signed-off-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14477/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Fix a regression introduced with commit 2db9ca0a3551 ("MIPS: Use struct
    mips_abi offsets to save FP context") for MIPS I/I FP signal contexts,
    by converting save/restore code to the updated internal API. Start FGR
    offsets from 0 rather than SC_FPREGS from $a0 and use $a1 rather than
    the offset of SC_FPC_CSR from $a0 for the Floating Point Control/Status
    Register (FCSR).

    Document the new internal API and adjust assembly code formatting for
    consistency.

    Signed-off-by: Maciej W. Rozycki
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14476/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Complement commit e50c0a8fa60d ("Support the MIPS32 / MIPS64 DSP ASE.")
    and remove the Floating Point Implementation Register (FIR) from the FP
    register set recorded in a signal context with MIPS I processors too, in
    line with the change applied to r4k_fpu.S.

    The `sc_fpc_eir' slot is unused according to our current ABI and the FIR
    register is read-only and always directly accessible from user software.

    [ralf@linux-mips.org: This is also required because the next commit depends
    on it.]

    Signed-off-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14475/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Complement commit 0ae8dceaebe3 ("Merge with 2.3.10.") and use the local
    `fault' handler to recover from FP sigcontext access violation faults,
    like corresponding code does in r4k_fpu.S. The `bad_stack' handler is
    in syscall.c and is not suitable here as we want to propagate the error
    condition up through the caller rather than killing the thread outright.

    Signed-off-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14474/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Sanitize FCSR Cause bit handling, following a trail of past attempts:

    * commit 4249548454f7 ("MIPS: ptrace: Fix FP context restoration FCSR
    regression"),

    * commit 443c44032a54 ("MIPS: Always clear FCSR cause bits after
    emulation"),

    * commit 64bedffe4968 ("MIPS: Clear [MSA]FPE CSR.Cause after
    notify_die()"),

    * commit b1442d39fac2 ("MIPS: Prevent user from setting FCSR cause
    bits"),

    * commit b54d2901517d ("Properly handle branch delay slots in connection
    with signals.").

    Specifically do not mask these bits out in ptrace(2) processing and send
    a SIGFPE signal instead whenever a matching pair of an FCSR Cause and
    Enable bit is seen as execution of an affected context is about to
    resume. Only then clear Cause bits, and even then do not clear any bits
    that are set but masked with the respective Enable bits. Adjust Cause
    bit clearing throughout code likewise, except within the FPU emulator
    proper where they are set according to IEEE 754 exceptions raised as the
    operation emulated executed. Do so so that any IEEE 754 exceptions
    subject to their default handling are recorded like with operations
    executed by FPU hardware.

    Signed-off-by: Maciej W. Rozycki
    Cc: Paul Burton
    Cc: James Hogan
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14460/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Complement commit ac9ad83bc318 ("MIPS: prevent FP context set via ptrace
    being discarded") and also initialize the FP context whenever FCSR alone
    is written with a PTRACE_POKEUSR request addressing FPC_CSR, rather than
    along with the full FPU register set in the case of the PTRACE_SETFPREGS
    request.

    Signed-off-by: Maciej W. Rozycki
    Cc: Paul Burton
    Cc: James Hogan
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14459/
    Signed-off-by: Ralf Baechle

    Maciej W. Rozycki
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from TLB dumps on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output.

    Continuation is also used for the second line of each TLB entry printed
    in dump_tlb.c even though it has a newline, since it is a continuation
    of the interpretation of the same TLB entry. For example:

    [ 46.371884] Index: 0 pgmask=16kb va=77654000 asid=73 gid=00
    [ri=0 xi=0 pa=ffc18000 c=5 d=0 v=1 g=0] [ri=0 xi=0 pa=ffc1c000 c=5 d=0 v=1 g=0]
    [ 46.385380] Index: 12 pgmask=16kb va=004b4000 asid=73 gid=00
    [ri=0 xi=0 pa=00000000 c=0 d=0 v=0 g=0] [ri=0 xi=0 pa=ffb00000 c=5 d=1 v=1 g=0]

    Signed-off-by: James Hogan
    Cc: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14444/
    Signed-off-by: Ralf Baechle

    James Hogan
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from __show_regs() on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected register output.

    Signed-off-by: Paul Burton
    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14432/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from show_code on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output.

    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14431/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from show_stacktrace on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output. Also
    start a new line with printk such that the presence of timing
    information does not interfere with output.

    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14430/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Since commit 4bcc595ccd80 ("printk: reinstate KERN_CONT for printing
    continuation lines") the output from show_backtrace on MIPS has been
    pretty unreadable due to the lack of KERN_CONT markers. Use pr_cont to
    provide the appropriate markers & restore the expected output.

    Signed-off-by: Matt Redfearn
    Cc: Maciej W. Rozycki
    Cc: James Hogan
    Cc: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14429/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Changes introduced to arch/mips/Makefile for the generic kernel resulted
    in build errors when making a compressed image if platform-y has multiple
    values, like this:

    make[2]: *** No rule to make target `alchemy/'.
    make[1]: *** [vmlinuz] Error 2
    make[1]: Target `_all' not remade because of errors.
    make: *** [sub-make] Error 2
    make: Target `_all' not remade because of errors.

    Fix this by quoting $(platform-y) as it is passed to the Makefile in
    arch/mips/boot/compressed/Makefile

    Reported-by: kernelci.org bot
    Link: https://storage.kernelci.org/next/next-20161017/mips-gpr_defconfig/build.log
    Signed-off-by: Matt Redfearn
    Reviewed-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14405/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • The KASLR code requires that the plat_get_fdt() function return the
    address of the device tree, and it must be available early in the boot,
    before prom_init() is called. Move the code determining the address of
    the device tree into plat_get_fdt, and call that from prom_init().

    The fdt pointer will be set up by plat_get_fdt() called from
    relocate_kernel initially and once the relocated kernel has started,
    prom_init() will use it again to determine the address in the relocated
    image.

    Fixes: eed0eabd12ef ("MIPS: generic: Introduce generic DT-based board support")
    Signed-off-by: Matt Redfearn
    Reviewed-by: James Hogan
    Reviewed-by: Paul Burton
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14415/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • If platform code returns a NULL pointer to the FDT, initial_boot_params
    will not get set to a valid pointer and attempting to find the /chosen
    node in it will cause a NULL pointer dereference and the kernel to crash
    immediately on startup - with no output to the console.

    Fix this by checking that initial_boot_params is valid before using it.

    Fixes: 405bc8fd12f5 ("MIPS: Kernel: Implement KASLR using CONFIG_RELOCATABLE")
    Cc: stable@vger.kernel.org # 4.7+
    Signed-off-by: Matt Redfearn
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14414/
    Signed-off-by: Ralf Baechle

    Matt Redfearn
     
  • Commit 10b6ea0959de ("MIPS: Malta: Use syscon-reboot driver to reboot")
    converted the Malta board to use the generic syscon-reboot driver to
    handle reboots, but incorrectly used the value 0x4d rather than 0x42 as
    the magic to write to the reboot register.

    I also incorrectly believed that syscon/regmap would default to native
    endianness, but this isn't the case. Force this by specifying with a
    native-endian property in the devicetree.

    Signed-off-by: Paul Burton
    Fixes: 10b6ea0959de ("MIPS: Malta: Use syscon-reboot driver to reboot")
    Reported-by: Guenter Roeck
    Cc: linux-mips@linux-mips.org
    Tested-by: Guenter Roeck
    Tested-by: Maciej W. Rozycki
    Patchwork: https://patchwork.linux-mips.org/patch/14396/
    Signed-off-by: Ralf Baechle

    Paul Burton
     
  • Provide a default implementation of mips_cpc_default_phys_base() which
    simply returns 0, and adjust mips_cpc_phys_base() to allow for
    mips_cpc_default_phys_base() returning 0. This allows kernels which
    include CPC support to be built without platform code & simply ignore
    the CPC if it wasn't already enabled by the bootloader.

    This fixes link failures such as the following from generic defconfigs:

    arch/mips/built-in.o: In function `mips_cpc_phys_base':
    arch/mips/kernel/mips-cpc.c:47: undefined reference to `mips_cpc_default_phys_base'

    [ralf@linux-mips.org: changed prototype for coding style compliance.]

    Signed-off-by: Paul Burton
    Reported-by: kbuild test robot
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14401/
    Signed-off-by: Ralf Baechle

    Paul Burton
     

26 Oct, 2016

3 commits

  • The advancing of the PC when completing an MMIO load is done before
    re-entering the guest, i.e. before restoring the guest ASID. However if
    the load is in a branch delay slot it may need to access guest code to
    read the prior branch instruction. This isn't safe in TLB mapped code at
    the moment, nor in the future when we'll access unmapped guest segments
    using direct user accessors too, as it could read the branch from host
    user memory instead.

    Therefore calculate the resume PC in advance while we're still in the
    right context and save it in the new vcpu->arch.io_pc (replacing the no
    longer needed vcpu->arch.pending_load_cause), and restore it on MMIO
    completion.

    Fixes: e685c689f3a8 ("KVM/MIPS32: Privileged instruction/target branch emulation.")
    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Cc: # 3.10.x-
    Signed-off-by: Paolo Bonzini

    James Hogan
     
  • The ERET instruction to return from exception is used for returning from
    exception level (Status.EXL) and error level (Status.ERL). If both bits
    are set however we should be returning from ERL first, as ERL can
    interrupt EXL, for example when an NMI is taken. KVM however checks EXL
    first.

    Fix the order of the checks to match the pseudocode in the instruction
    set manual.

    Fixes: e685c689f3a8 ("KVM/MIPS32: Privileged instruction/target branch emulation.")
    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Cc: # 3.10.x-
    Signed-off-by: Paolo Bonzini

    James Hogan
     
  • kvm_mips_check_asids() runs before entering the guest and performs lazy
    regeneration of host ASID for guest usermode, using last_user_gasid to
    track the last guest ASID in the VCPU that was used by guest usermode on
    any host CPU.

    last_user_gasid is reset after performing the lazy ASID regeneration on
    the current CPU, and by kvm_arch_vcpu_load() if the host ASID for guest
    usermode is regenerated due to staleness (to cancel outstanding lazy
    ASID regenerations). Unfortunately neither case handles SMP hosts
    correctly:

    - When the lazy ASID regeneration is performed it should apply to all
    CPUs (as last_user_gasid does), so reset the ASID on other CPUs to
    zero to trigger regeneration when the VCPU is next loaded on those
    CPUs.

    - When the ASID is found to be stale on the current CPU, we should not
    cancel lazy ASID regenerations globally, so drop the reset of
    last_user_gasid altogether here.

    Both cases would require a guest ASID change and two host CPU migrations
    (and in the latter case one of the CPUs to start a new ASID cycle)
    before guest usermode could potentially access stale user pages from a
    previously running ASID in the same VCPU.

    Fixes: 25b08c7fb0e4 ("KVM: MIPS: Invalidate TLB by regenerating ASIDs")
    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: Paolo Bonzini

    James Hogan
     

22 Oct, 2016

1 commit

  • Pull KVM fixes from Radim Krčmář:
    "ARM:
    - avoid livelock when walking guest page tables
    - fix HYP mode static keys without CC_HAVE_ASM_GOTO

    MIPS:
    - fix a build error without TRACEPOINTS_ENABLED

    s390:
    - reject a malformed userspace configuration

    x86:
    - suppress a warning without CONFIG_CPU_FREQ
    - initialize whole irq_eoi array"

    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
    arm/arm64: KVM: Map the BSS at HYP
    arm64: KVM: Take S1 walks into account when determining S2 write faults
    KVM: s390: reject invalid modes for runtime instrumentation
    kvm: x86: memset whole irq_eoi
    kvm/x86: Fix unused variable warning in kvm_timer_init()
    KVM: MIPS: Add missing uaccess.h include

    Linus Torvalds
     

19 Oct, 2016

4 commits

  • Merge the gup_flags cleanups from Lorenzo Stoakes:
    "This patch series adjusts functions in the get_user_pages* family such
    that desired FOLL_* flags are passed as an argument rather than
    implied by flags.

    The purpose of this change is to make the use of FOLL_FORCE explicit
    so it is easier to grep for and clearer to callers that this flag is
    being used. The use of FOLL_FORCE is an issue as it overrides missing
    VM_READ/VM_WRITE flags for the VMA whose pages we are reading
    from/writing to, which can result in surprising behaviour.

    The patch series came out of the discussion around commit 38e088546522
    ("mm: check VMA flags to avoid invalid PROT_NONE NUMA balancing"),
    which addressed a BUG_ON() being triggered when a page was faulted in
    with PROT_NONE set but having been overridden by FOLL_FORCE.
    do_numa_page() was run on the assumption the page _must_ be one marked
    for NUMA node migration as an actual PROT_NONE page would have been
    dealt with prior to this code path, however FOLL_FORCE introduced a
    situation where this assumption did not hold.

    See

    https://marc.info/?l=linux-mm&m=147585445805166

    for the patch proposal"

    Additionally, there's a fix for an ancient bug related to FOLL_FORCE and
    FOLL_WRITE by me.

    [ This branch was rebased recently to add a few more acked-by's and
    reviewed-by's ]

    * gup_flag-cleanups:
    mm: replace access_process_vm() write parameter with gup_flags
    mm: replace access_remote_vm() write parameter with gup_flags
    mm: replace __access_remote_vm() write parameter with gup_flags
    mm: replace get_user_pages_remote() write/force parameters with gup_flags
    mm: replace get_user_pages() write/force parameters with gup_flags
    mm: replace get_vaddr_frames() write/force parameters with gup_flags
    mm: replace get_user_pages_locked() write/force parameters with gup_flags
    mm: replace get_user_pages_unlocked() write/force parameters with gup_flags
    mm: remove write/force parameters from __get_user_pages_unlocked()
    mm: remove write/force parameters from __get_user_pages_locked()
    mm: remove gup_flags FOLL_WRITE games from __get_user_pages()

    Linus Torvalds
     
  • This removes the 'write' argument from access_process_vm() and replaces
    it with 'gup_flags' as use of this function previously silently implied
    FOLL_FORCE, whereas after this patch callers explicitly pass this flag.

    We make this explicit as use of FOLL_FORCE can result in surprising
    behaviour (and hence bugs) within the mm subsystem.

    Signed-off-by: Lorenzo Stoakes
    Acked-by: Jesper Nilsson
    Acked-by: Michal Hocko
    Acked-by: Michael Ellerman
    Signed-off-by: Linus Torvalds

    Lorenzo Stoakes
     
  • MIPS KVM uses user memory accessors but mips.c doesn't directly include
    uaccess.h, so include it now.

    This wasn't too much of a problem before v4.9-rc1 as asm/module.h
    included asm/uaccess.h, however since commit 29abfbd9cbba ("mips:
    separate extable.h, switch module.h to it") this is no longer the case.

    This resulted in build failures when trace points were disabled, as
    trace/define_trace.h includes trace/trace_events.h only ifdef
    TRACEPOINTS_ENABLED, which goes on to include asm/uaccess.h via a couple
    of other headers.

    Fixes: 29abfbd9cbba ("mips: separate extable.h, switch module.h to it")
    Signed-off-by: James Hogan
    Cc: Paolo Bonzini
    Cc: "Radim Krčmář"
    Cc: Ralf Baechle
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org

    James Hogan
     
  • This removes the 'write' and 'force' use from get_user_pages_unlocked()
    and replaces them with 'gup_flags' to make the use of FOLL_FORCE
    explicit in callers as use of this flag can result in surprising
    behaviour (and hence bugs) within the mm subsystem.

    Signed-off-by: Lorenzo Stoakes
    Reviewed-by: Jan Kara
    Acked-by: Michal Hocko
    Signed-off-by: Linus Torvalds

    Lorenzo Stoakes
     

16 Oct, 2016

1 commit

  • Pull MIPS updates from Ralf Baechle:
    "This is the main MIPS pull request for 4.9:

    MIPS core arch code:
    - traps: 64bit kernels should read CP0_EBase 64bit
    - traps: Convert ebase to KSEG0
    - c-r4k: Drop bc_wback_inv() from icache flush
    - c-r4k: Split user/kernel flush_icache_range()
    - cacheflush: Use __flush_icache_user_range()
    - uprobes: Flush icache via kernel address
    - KVM: Use __local_flush_icache_user_range()
    - c-r4k: Fix flush_icache_range() for EVA
    - Fix -mabi=64 build of vdso.lds
    - VDSO: Drop duplicated -I*/-E* aflags
    - tracing: move insn_has_delay_slot to a shared header
    - tracing: disable uprobe/kprobe on compact branch instructions
    - ptrace: Fix regs_return_value for kernel context
    - Squash lines for simple wrapper functions
    - Move identification of VP(E) into proc.c from smp-mt.c
    - Add definitions of SYNC barrierstype values
    - traps: Ensure full EBase is written
    - tlb-r4k: If there are wired entries, don't use TLBINVF
    - Sanitise coherentio semantics
    - dma-default: Don't check hw_coherentio if device is non-coherent
    - Support per-device DMA coherence
    - Adjust MIPS64 CAC_BASE to reflect Config.K0
    - Support generating Flattened Image Trees (.itb)
    - generic: Introduce generic DT-based board support
    - generic: Convert SEAD-3 to a generic board
    - Enable hardened usercopy
    - Don't specify STACKPROTECTOR in defconfigs

    Octeon:
    - Delete dead code and files across the platform.
    - Change to use all memory into use by default.
    - Rename upper case variables in setup code to lowercase.
    - Delete legacy hack for broken bootloaders.
    - Leave maintaining the link state to the actual ethernet/PHY drivers.
    - Add DTS for D-Link DSR-500N.
    - Fix PCI interrupt routing on D-Link DSR-500N.

    Pistachio:
    - Remove ANDROID_TIMED_OUTPUT from defconfig

    TX39xx:
    - Move GPIO setup from .mem_setup() to .arch_init()
    - Convert to Common Clock Framework

    TX49xx:
    - Move GPIO setup from .mem_setup() to .arch_init()
    - Convert to Common Clock Framework

    txx9wdt:
    - Add missing clock (un)prepare calls for CCF

    BMIPS:
    - Add PW, GPIO SDHCI and NAND device node names
    - Support APPENDED_DTB
    - Add missing bcm97435svmb to DT_NONE
    - Rename bcm96358nb4ser to bcm6358-neufbox4-sercom
    - Add DT examples for BCM63268, BCM3368 and BCM6362
    - Add support for BCM3368 and BCM6362

    PCI
    - Reduce stack frame usage
    - Use struct list_head lists
    - Support for CONFIG_PCI_DOMAINS_GENERIC
    - Make pcibios_set_cache_line_size an initcall
    - Inline pcibios_assign_all_busses
    - Split pci.c into pci.c & pci-legacy.c
    - Introduce CONFIG_PCI_DRIVERS_LEGACY
    - Support generic drivers

    CPC
    - Convert bare 'unsigned' to 'unsigned int'
    - Avoid lock when MIPS CM >= 3 is present

    GIC:
    - Delete unused file smp-gic.c

    mt7620:
    - Delete unnecessary assignment for the field "owner" from PCI

    BCM63xx:
    - Let clk_disable() return immediately if clk is NULL

    pm-cps:
    - Change FSB workaround to CPU blacklist
    - Update comments on barrier instructions
    - Use MIPS standard lightweight ordering barrier
    - Use MIPS standard completion barrier
    - Remove selection of sync types
    - Add MIPSr6 CPU support
    - Support CM3 changes to Coherence Enable Register

    SMP:
    - Wrap call to mips_cpc_lock_other in mips_cm_lock_other
    - Introduce mechanism for freeing and allocating IPIs

    cpuidle:
    - cpuidle-cps: Enable use with MIPSr6 CPUs.

    SEAD3:
    - Rewrite to use DT and generic kernel feature.

    USB:
    - host: ehci-sead3: Remove SEAD-3 EHCI code

    FBDEV:
    - cobalt_lcdfb: Drop SEAD3 support

    dt-bindings:
    - Document a binding for simple ASCII LCDs

    auxdisplay:
    - img-ascii-lcd: driver for simple ASCII LCD displays

    irqchip i8259:
    - i8259: Add domain before mapping parent irq
    - i8259: Allow platforms to override poll function
    - i8259: Remove unused i8259A_irq_pending

    Malta:
    - Rewrite to use DT

    of/platform:
    - Probe "isa" busses by default

    CM:
    - Print CM error reports upon bus errors

    Module:
    - Migrate exception table users off module.h and onto extable.h
    - Make various drivers explicitly non-modular:
    - Audit and remove any unnecessary uses of module.h

    mailmap:
    - Canonicalize to Qais' current email address.

    Documentation:
    - MIPS supports HAVE_REGS_AND_STACK_ACCESS_API

    Loongson1C:
    - Add CPU support for Loongson1C
    - Add board support
    - Add defconfig
    - Add RTC support for Loongson1C board

    All this except one Documentation fix has sat in linux-next and has
    survived Imagination's automated build test system"

    * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (127 commits)
    Documentation: MIPS supports HAVE_REGS_AND_STACK_ACCESS_API
    MIPS: ptrace: Fix regs_return_value for kernel context
    MIPS: VDSO: Drop duplicated -I*/-E* aflags
    MIPS: Fix -mabi=64 build of vdso.lds
    MIPS: Enable hardened usercopy
    MIPS: generic: Convert SEAD-3 to a generic board
    MIPS: generic: Introduce generic DT-based board support
    MIPS: Support generating Flattened Image Trees (.itb)
    MIPS: Adjust MIPS64 CAC_BASE to reflect Config.K0
    MIPS: Print CM error reports upon bus errors
    MIPS: Support per-device DMA coherence
    MIPS: dma-default: Don't check hw_coherentio if device is non-coherent
    MIPS: Sanitise coherentio semantics
    MIPS: PCI: Support generic drivers
    MIPS: PCI: Introduce CONFIG_PCI_DRIVERS_LEGACY
    MIPS: PCI: Split pci.c into pci.c & pci-legacy.c
    MIPS: PCI: Inline pcibios_assign_all_busses
    MIPS: PCI: Make pcibios_set_cache_line_size an initcall
    MIPS: PCI: Support for CONFIG_PCI_DOMAINS_GENERIC
    MIPS: PCI: Use struct list_head lists
    ...

    Linus Torvalds
     

15 Oct, 2016

1 commit


12 Oct, 2016

4 commits

  • Currently regs_return_value always negates reg[2] if it determines
    the syscall has failed, but when called in kernel context this check is
    invalid and may result in returning a wrong value.

    This fixes errors reported by CONFIG_KPROBES_SANITY_TEST

    Fixes: d7e7528bcd45 ("Audit: push audit success and retcode into arch ptrace.h")
    Signed-off-by: Marcin Nowakowski
    Cc: linux-mips@linux-mips.org
    Cc: stable@vger.kernel.org # 3.3+
    Patchwork: https://patchwork.linux-mips.org/patch/14381/
    Signed-off-by: Ralf Baechle

    Marcin Nowakowski
     
  • Pull uaccess.h prepwork from Al Viro:
    "Preparations to tree-wide switch to use of linux/uaccess.h (which,
    obviously, will allow to start unifying stuff for real). The last step
    there, ie

    PATT='^[[:blank:]]*#[[:blank:]]*include[[:blank:]]*'
    sed -i -e "s!$PATT!#include !" \
    `git grep -l "$PATT"|grep -v ^include/linux/uaccess.h`

    is not taken here - I would prefer to do it once just before or just
    after -rc1. However, everything should be ready for it"

    * 'work.uaccess2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    remove a stray reference to asm/uaccess.h in docs
    sparc64: separate extable_64.h, switch elf_64.h to it
    score: separate extable.h, switch module.h to it
    mips: separate extable.h, switch module.h to it
    x86: separate extable.h, switch sections.h to it
    remove stray include of asm/uaccess.h from cacheflush.h
    mn10300: remove a bogus processor.h->uaccess.h include
    xtensa: split uaccess.h into C and asm sides
    bonding: quit messing with IOCTL
    kill __kernel_ds_p off
    mn10300: finish verify_area() off
    frv: move HAVE_ARCH_UNMAPPED_AREA to pgtable.h
    exceptions: detritus removal

    Linus Torvalds
     
  • Kernel source files need not include explicitly
    because the top Makefile forces to include it with:

    -include $(srctree)/include/linux/kconfig.h

    This commit removes explicit includes except the following:

    * arch/s390/include/asm/facilities_src.h
    * tools/testing/radix-tree/linux/kernel.h

    These two are used for host programs.

    Link: http://lkml.kernel.org/r/1473656164-11929-1-git-send-email-yamada.masahiro@socionext.com
    Signed-off-by: Masahiro Yamada
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Masahiro Yamada
     
  • Daniel Walker reported problems which happens when
    crash_kexec_post_notifiers kernel option is enabled
    (https://lkml.org/lkml/2015/6/24/44).

    In that case, smp_send_stop() is called before entering kdump routines
    which assume other CPUs are still online. As the result, kdump
    routines fail to save other CPUs' registers. Additionally for MIPS
    OCTEON, it misses to stop the watchdog timer.

    To fix this problem, call a new kdump friendly function,
    crash_smp_send_stop(), instead of the smp_send_stop() when
    crash_kexec_post_notifiers is enabled. crash_smp_send_stop() is a
    weak function, and it just call smp_send_stop(). Architecture
    codes should override it so that kdump can work appropriately.
    This patch provides MIPS version.

    Fixes: f06e5153f4ae (kernel/panic.c: add "crash_kexec_post_notifiers" option)
    Link: http://lkml.kernel.org/r/20160810080950.11028.28000.stgit@sysi4-13.yrl.intra.hitachi.co.jp
    Signed-off-by: Hidehiro Kawai
    Reported-by: Daniel Walker
    Cc: Dave Young
    Cc: Baoquan He
    Cc: Vivek Goyal
    Cc: Eric Biederman
    Cc: Masami Hiramatsu
    Cc: Daniel Walker
    Cc: Xunlei Pang
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: Borislav Petkov
    Cc: David Vrabel
    Cc: Toshi Kani
    Cc: Ralf Baechle
    Cc: David Daney
    Cc: Aaro Koskinen
    Cc: "Steven J. Hill"
    Cc: Corey Minyard
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Hidehiro Kawai
     

11 Oct, 2016

1 commit

  • The aflags-vdso is based on ccflags-vdso, which already contains the -I*
    and -EL/-EB flags from KBUILD_CFLAGS, but those flags are needlessly
    added again to aflags-vdso.

    Drop the duplication.

    Signed-off-by: James Hogan
    Reported-by: Maciej W. Rozycki
    Reviewed-by: Maciej W. Rozycki
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14369/
    Signed-off-by: Ralf Baechle

    James Hogan