17 Feb, 2018

40 commits

  • commit e0aeca3d8cbaea514eb98df1149faa918f9ec42d upstream.

    The current code hides a couple of bugs:

    - The global variable 'clock_event_ddata' is overwritten each time the
    init function is invoked.

    This is fixed with a kmemdup() instead of assigning the global variable. That
    prevents a memory corruption when several timers are defined in the DT.

    - The clockevent's event_handler is NULL if the time framework does
    not select the clockevent when registering it, this is fine but the init
    code generates in any case an interrupt leading to dereference this
    NULL pointer.

    The stm32 timer works with shadow registers, a mechanism to cache the
    registers. When a change is done in one buffered register, we need to
    artificially generate an event to force the timer to copy the content
    of the register to the shadowed register.

    The auto-reload register (ARR) is one of the shadowed register as well as
    the prescaler register (PSC), so in order to force the copy, we issue an
    event which in turn leads to an interrupt and the NULL dereference.

    This is fixed by inverting two lines where we clear the status register
    before enabling the update event interrupt.

    As this kernel crash is resulting from the combination of these two bugs,
    the fixes are grouped into a single patch.

    Tested-by: Benjamin Gaignard
    Signed-off-by: Daniel Lezcano
    Acked-by: Benjamin Gaignard
    Cc: Alexandre Torgue
    Cc: Linus Torvalds
    Cc: Maxime Coquelin
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1515418139-23276-11-git-send-email-daniel.lezcano@linaro.org
    Signed-off-by: Ingo Molnar
    Signed-off-by: Greg Kroah-Hartman

    Daniel Lezcano
     
  • commit c2856ae2f315d754a0b6a268e4c6745b332b42e7 upstream.

    After queue is frozen, dispatch still may happen, for example:

    1) requests are submitted from several contexts
    2) requests from all these contexts are inserted to queue, but may dispatch
    to LLD in one of these paths, but other paths sill need to move on even all
    these requests are completed(that means blk_mq_freeze_queue_wait() returns
    at that time)
    3) dispatch after queue freezing still moves on and causes use-after-free,
    because request queue is freed

    This patch quiesces queue after it is frozen, and makes sure all
    in-progress dispatch are completed.

    This patch fixes the following kernel crash when running heavy IOs vs.
    deleting device:

    [ 36.719251] BUG: unable to handle kernel NULL pointer dereference at 0000000000000008
    [ 36.720318] IP: kyber_has_work+0x14/0x40
    [ 36.720847] PGD 254bf5067 P4D 254bf5067 PUD 255e6a067 PMD 0
    [ 36.721584] Oops: 0000 [#1] PREEMPT SMP
    [ 36.722105] Dumping ftrace buffer:
    [ 36.722570] (ftrace buffer empty)
    [ 36.723057] Modules linked in: scsi_debug ebtable_filter ebtables ip6table_filter ip6_tables tcm_loop iscsi_target_mod target_core_file target_core_iblock target_core_pscsi target_core_mod xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack libcrc32c bridge stp llc fuse iptable_filter ip_tables sd_mod sg btrfs xor zstd_decompress zstd_compress xxhash raid6_pq mptsas mptscsih bcache crc32c_intel ahci mptbase libahci serio_raw scsi_transport_sas nvme libata shpchp lpc_ich virtio_scsi nvme_core binfmt_misc dm_mod iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi null_blk configs
    [ 36.733438] CPU: 2 PID: 2374 Comm: fio Not tainted 4.15.0-rc2.blk_mq_quiesce+ #714
    [ 36.735143] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.9.3-1.fc25 04/01/2014
    [ 36.736688] RIP: 0010:kyber_has_work+0x14/0x40
    [ 36.737515] RSP: 0018:ffffc9000209bca0 EFLAGS: 00010202
    [ 36.738431] RAX: 0000000000000008 RBX: ffff88025578bfc8 RCX: ffff880257bf4ed0
    [ 36.739581] RDX: 0000000000000038 RSI: ffffffff81a98c6d RDI: ffff88025578bfc8
    [ 36.740730] RBP: ffff880253cebfc8 R08: ffffc9000209bda0 R09: ffff8802554f3480
    [ 36.741885] R10: ffffc9000209be60 R11: ffff880263f72538 R12: ffff88025573e9e8
    [ 36.743036] R13: ffff88025578bfd0 R14: 0000000000000001 R15: 0000000000000000
    [ 36.744189] FS: 00007f9b9bee67c0(0000) GS:ffff88027fc80000(0000) knlGS:0000000000000000
    [ 36.746617] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 36.748483] CR2: 0000000000000008 CR3: 0000000254bf4001 CR4: 00000000003606e0
    [ 36.750164] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [ 36.751455] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [ 36.752796] Call Trace:
    [ 36.753992] blk_mq_do_dispatch_sched+0x7f/0xe0
    [ 36.755110] blk_mq_sched_dispatch_requests+0x119/0x190
    [ 36.756179] __blk_mq_run_hw_queue+0x83/0x90
    [ 36.757144] __blk_mq_delay_run_hw_queue+0xaf/0x110
    [ 36.758046] blk_mq_run_hw_queue+0x24/0x70
    [ 36.758845] blk_mq_flush_plug_list+0x1e7/0x270
    [ 36.759676] blk_flush_plug_list+0xd6/0x240
    [ 36.760463] blk_finish_plug+0x27/0x40
    [ 36.761195] do_io_submit+0x19b/0x780
    [ 36.761921] ? entry_SYSCALL_64_fastpath+0x1a/0x7d
    [ 36.762788] entry_SYSCALL_64_fastpath+0x1a/0x7d
    [ 36.763639] RIP: 0033:0x7f9b9699f697
    [ 36.764352] RSP: 002b:00007ffc10f991b8 EFLAGS: 00000206 ORIG_RAX: 00000000000000d1
    [ 36.765773] RAX: ffffffffffffffda RBX: 00000000008f6f00 RCX: 00007f9b9699f697
    [ 36.766965] RDX: 0000000000a5e6c0 RSI: 0000000000000001 RDI: 00007f9b8462a000
    [ 36.768377] RBP: 0000000000000000 R08: 0000000000000001 R09: 00000000008f6420
    [ 36.769649] R10: 00007f9b846e5000 R11: 0000000000000206 R12: 00007f9b795d6a70
    [ 36.770807] R13: 00007f9b795e4140 R14: 00007f9b795e3fe0 R15: 0000000100000000
    [ 36.771955] Code: 83 c7 10 e9 3f 68 d1 ff 0f 1f 44 00 00 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 8b 97 b0 00 00 00 48 8d 42 08 48 83 c2 38 3b 00 74 06 b8 01 00 00 00 c3 48 3b 40 08 75 f4 48 83 c0 10
    [ 36.775004] RIP: kyber_has_work+0x14/0x40 RSP: ffffc9000209bca0
    [ 36.776012] CR2: 0000000000000008
    [ 36.776690] ---[ end trace 4045cbce364ff2a4 ]---
    [ 36.777527] Kernel panic - not syncing: Fatal exception
    [ 36.778526] Dumping ftrace buffer:
    [ 36.779313] (ftrace buffer empty)
    [ 36.780081] Kernel Offset: disabled
    [ 36.780877] ---[ end Kernel panic - not syncing: Fatal exception

    Reviewed-by: Christoph Hellwig
    Tested-by: Yi Zhang
    Signed-off-by: Ming Lei
    Signed-off-by: Jens Axboe
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     
  • commit 882d4171a8950646413b1a3cbe0e4a6a612fe82e upstream.

    Call bdev_get_queue(bdev) after bdev->bd_disk has been initialized
    instead of just before that pointer has been initialized. This patch
    avoids that the following command

    pktsetup 1 /dev/sr0

    triggers the following kernel crash:

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000548
    IP: pkt_setup_dev+0x2db/0x670 [pktcdvd]
    CPU: 2 PID: 724 Comm: pktsetup Not tainted 4.15.0-rc4-dbg+ #1
    Call Trace:
    pkt_ctl_ioctl+0xce/0x1c0 [pktcdvd]
    do_vfs_ioctl+0x8e/0x670
    SyS_ioctl+0x3c/0x70
    entry_SYSCALL_64_fastpath+0x23/0x9a

    Reported-by: Maciej S. Szmigiero
    Fixes: commit ca18d6f769d2 ("block: Make most scsi_req_init() calls implicit")
    Signed-off-by: Bart Van Assche
    Tested-by: Maciej S. Szmigiero
    Cc: Maciej S. Szmigiero
    Signed-off-by: Jens Axboe
    Signed-off-by: Greg Kroah-Hartman

    Bart Van Assche
     
  • commit 5a0ec388ef0f6e33841aeb810d7fa23f049ec4cd upstream.

    Commit 523e1d399ce0 ("block: make gendisk hold a reference to its queue")
    modified add_disk() and disk_release() but did not update any of the
    error paths that trigger a put_disk() call after disk->queue has been
    assigned. That introduced the following behavior in the pktcdvd driver
    if pkt_new_dev() fails:

    Kernel BUG at 00000000e98fd882 [verbose debug info unavailable]

    Since disk_release() calls blk_put_queue() anyway if disk->queue != NULL,
    fix this by removing the blk_cleanup_queue() call from the pkt_setup_dev()
    error path.

    Fixes: commit 523e1d399ce0 ("block: make gendisk hold a reference to its queue")
    Signed-off-by: Bart Van Assche
    Cc: Tejun Heo
    Cc: Maciej S. Szmigiero
    Signed-off-by: Jens Axboe
    Signed-off-by: Greg Kroah-Hartman

    Bart Van Assche
     
  • commit b930151e5b55a0e62a3aad06876de891ac980471 upstream.

    Without such a range, gpiolib fails with -EPROBE_DEFER, pending the
    addition of the range. So, without a range, gpiolib will keep
    deferring indefinitely.

    Fixes: 9e80f9064e73 ("pinctrl: Add SX150X GPIO Extender Pinctrl Driver")
    Fixes: e10f72bf4b3e ("gpio: gpiolib: Generalise state persistence beyond sleep")
    Suggested-by: Linus Walleij
    Signed-off-by: Peter Rosin
    Signed-off-by: Linus Walleij
    Signed-off-by: Greg Kroah-Hartman

    Peter Rosin
     
  • commit 1a1d39e1b8dd1d0f92a79da4fcc1ab0be3ae9bfc upstream.

    Various gpiolib activity depend on the pinctrl to be up and kicking.
    Therefore, register the pinctrl before adding a gpiochip.

    Suggested-by: Linus Walleij
    Signed-off-by: Peter Rosin
    Signed-off-by: Linus Walleij
    Signed-off-by: Greg Kroah-Hartman

    Peter Rosin
     
  • commit 0657cb50b5a75abd92956028727dc255d690a4a6 upstream.

    There is no matching call to pinctrl_unregister, so switch to the
    managed devm_pinctrl_register to clean up properly when done.

    Fixes: 9e80f9064e73 ("pinctrl: Add SX150X GPIO Extender Pinctrl Driver")
    Signed-off-by: Peter Rosin
    Signed-off-by: Linus Walleij
    Signed-off-by: Greg Kroah-Hartman

    Peter Rosin
     
  • commit 02e389e63e3523828fc3832f27e0341885f60f6f upstream.

    When using mcp23s08 module with gpio-keys, often (50% of boots)
    it fails to get irq numbers with message:
    "gpio-keys keys: Unable to get irq number for GPIO 0, error -6".
    Seems that irqs must be setup before devm_gpiochip_add_data().

    Signed-off-by: Dmitry Mastykin
    Signed-off-by: Linus Walleij
    Signed-off-by: Greg Kroah-Hartman

    Dmitry Mastykin
     
  • commit f5a26acf0162477af6ee4c11b4fb9cffe5d3e257 upstream.

    When a GPIO is requested using gpiod_get_* APIs the intel pinctrl driver
    switches the pin to GPIO mode and makes sure interrupts are routed to
    the GPIO hardware instead of IOAPIC. However, if the GPIO is used
    directly through irqchip, as is the case with many I2C-HID devices where
    I2C core automatically configures interrupt for the device, the pin is
    not initialized as GPIO. Instead we rely that the BIOS configures the
    pin accordingly which seems not to be the case at least in Asus X540NA
    SKU3 with Focaltech touchpad.

    When the pin is not properly configured it might result weird behaviour
    like interrupts suddenly stop firing completely and the touchpad stops
    responding to user input.

    Fix this by properly initializing the pin to GPIO mode also when it is
    used directly through irqchip.

    Fixes: 7981c0015af2 ("pinctrl: intel: Add Intel Sunrisepoint pin controller and GPIO support")
    Reported-by: Daniel Drake
    Reported-and-tested-by: Chris Chiu
    Signed-off-by: Mika Westerberg
    Signed-off-by: Linus Walleij
    Signed-off-by: Greg Kroah-Hartman

    Mika Westerberg
     
  • commit 544e92581a2ac44607d7cc602c6b54d18656f56d upstream.

    Fix an uninitialized variable warning in the Octeon EDAC driver, as seen
    in MIPS cavium_octeon_defconfig builds since v4.14 with Codescape GNU
    Tools 2016.05-03:

    drivers/edac/octeon_edac-lmc.c In function ‘octeon_lmc_edac_poll_o2’:
    drivers/edac/octeon_edac-lmc.c:87:24: warning: ‘((long unsigned int*)&int_reg)[1]’ may \
    be used uninitialized in this function [-Wmaybe-uninitialized]
    if (int_reg.s.sec_err || int_reg.s.ded_err) {
    ^
    Iinitialise the whole int_reg variable to zero before the conditional
    assignments in the error injection case.

    Signed-off-by: James Hogan
    Acked-by: David Daney
    Cc: linux-edac
    Cc: linux-mips@linux-mips.org
    Fixes: 1bc021e81565 ("EDAC: Octeon: Add error injection support")
    Link: http://lkml.kernel.org/r/20171113161206.20990-1-james.hogan@mips.com
    Signed-off-by: Borislav Petkov
    Signed-off-by: Greg Kroah-Hartman

    James Hogan
     
  • commit ca47480921587ae30417dd234a9f79af188e3666 upstream.

    Return 0 if the operation was successful, not the userspace memory
    value. Check that userspace value equals passed oldval, not itself.
    Don't update *uval if the value wasn't read from userspace memory.

    This fixes process hang due to infinite loop in futex_lock_pi.
    It also fixes a bunch of glibc tests nptl/tst-mutexpi*.

    Signed-off-by: Max Filippov
    Signed-off-by: Greg Kroah-Hartman

    Max Filippov
     
  • commit 4b01abdb32fc36abe877503bfbd33019159fad71 upstream.

    Since version 4.9, the kernel automatically breaks printk calls into
    multiple newlines unless pr_cont is used. Fix the alpha stacktrace code,
    so that it prints stack trace in four columns, as it was initially
    intended.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Matt Turner
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 55fc633c41a08ce9244ff5f528f420b16b1e04d6 upstream.

    We need to define NEED_SRM_SAVE_RESTORE on the Avanti, otherwise we get
    machine check exception when attempting to reboot the machine.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Matt Turner
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 84e455361ec97ea6037d31d42a2955628ea2094b upstream.

    Fix the typo (mixed up arguments) in the EXC macro in the futex
    definitions introduced by commit ca282f697381 (alpha: add a
    helper for emitting exception table entries).

    Signed-off-by: Michael Cree
    Signed-off-by: Matt Turner
    Signed-off-by: Greg Kroah-Hartman

    Michael Cree
     
  • commit 47669fb6b5951d0e09fc99719653e0ac92b50b99 upstream.

    There was a typo in the new version of put_tv32() that caused an unguarded
    access of a user space pointer, and failed to return the correct result in
    gettimeofday(), wait4(), usleep_thread() and old_adjtimex().

    This fixes it to give the correct behavior again.

    Fixes: 1cc6c4635e9f ("osf_sys.c: switch handling of timeval32/itimerval32 to copy_{to,from}_user()")
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Al Viro
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     
  • commit 21ffceda1c8b3807615c40d440d7815e0c85d366 upstream.

    On alpha, a process will crash if it attempts to start a thread and a
    signal is delivered at the same time. The crash can be reproduced with
    this program: https://cygwin.com/ml/cygwin/2014-11/msg00473.html

    The reason for the crash is this:
    * we call the clone syscall
    * we go to the function copy_process
    * copy process calls copy_thread_tls, it is a wrapper around copy_thread
    * copy_thread sets the tls pointer: childti->pcb.unique = regs->r20
    * copy_thread sets regs->r20 to zero
    * we go back to copy_process
    * copy process checks "if (signal_pending(current))" and returns
    -ERESTARTNOINTR
    * the clone syscall is restarted, but this time, regs->r20 is zero, so
    the new thread is created with zero tls pointer
    * the new thread crashes in start_thread when attempting to access tls

    The comment in the code says that setting the register r20 is some
    compatibility with OSF/1. But OSF/1 doesn't use the CLONE_SETTLS flag, so
    we don't have to zero r20 if CLONE_SETTLS is set. This patch fixes the bug
    by zeroing regs->r20 only if CLONE_SETTLS is not set.

    Signed-off-by: Mikulas Patocka
    Signed-off-by: Matt Turner
    Signed-off-by: Greg Kroah-Hartman

    Mikulas Patocka
     
  • commit 0e88bb002a9b2ee8cc3cc9478ce2dc126f849696 upstream.

    Set si_signo.

    Cc: Yoshinori Sato
    Cc: Rich Felker
    Cc: Paul Mundt
    Cc: linux-sh@vger.kernel.org
    Fixes: 0983b31849bb ("sh: Wire up division and address error exceptions on SH-2A.")
    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • commit 500d58300571b6602341b041f97c082a461ef994 upstream.

    While reviewing the signal sending on openrisc the do_unaligned_access
    function stood out because it is obviously wrong. A comment about an
    si_code set above when actually si_code is never set. Leading to a
    random si_code being sent to userspace in the event of an unaligned
    access.

    Looking further SIGBUS BUS_ADRALN is the proper pair of signal and
    si_code to send for an unaligned access. That is what other
    architectures do and what is required by posix.

    Given that do_unaligned_access is broken in a way that no one can be
    relying on it on openrisc fix the code to just do the right thing.

    Fixes: 769a8a96229e ("OpenRISC: Traps")
    Cc: Jonas Bonn
    Cc: Stefan Kristiansson
    Cc: Stafford Horne
    Cc: Arnd Bergmann
    Cc: openrisc@lists.librecores.org
    Acked-by: Stafford Horne
    Signed-off-by: "Eric W. Biederman"
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • commit 5516e21a1e95e9b9f39985598431a25477d91643 upstream.

    Currently a crash can be seen if we reach the "err"
    label in dmi_add_platform_ipmi(), calling
    platform_device_put(), like here:
    [ 7.270584] (null): ipmi:dmi: Unable to add resources: -16
    [ 7.330229] ------------[ cut here ]------------
    [ 7.334889] kernel BUG at mm/slub.c:3894!
    [ 7.338936] Internal error: Oops - BUG: 0 [#1] PREEMPT SMP
    [ 7.344475] Modules linked in:
    [ 7.347556] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 4.15.0-rc2-00004-gbe9cb7b-dirty #114
    [ 7.355907] Hardware name: Huawei Taishan 2280 /D05, BIOS Hisilicon D05 IT17 Nemo 2.0 RC0 11/29/2017
    [ 7.365137] task: 00000000c211f6d3 task.stack: 00000000f276e9af
    [ 7.371116] pstate: 60000005 (nZCv daif -PAN -UAO)
    [ 7.375957] pc : kfree+0x194/0x1b4
    [ 7.379389] lr : platform_device_release+0xcc/0xd8
    [ 7.384225] sp : ffff0000092dba90
    [ 7.387567] x29: ffff0000092dba90 x28: ffff000008a83000
    [ 7.392933] x27: ffff0000092dbc10 x26: 00000000000000e6
    [ 7.398297] x25: 0000000000000003 x24: ffff0000085b51e8
    [ 7.403662] x23: 0000000000000100 x22: ffff7e0000234cc0
    [ 7.409027] x21: ffff000008af3660 x20: ffff8017d21acc10
    [ 7.414392] x19: ffff8017d21acc00 x18: 0000000000000002
    [ 7.419757] x17: 0000000000000001 x16: 0000000000000008
    [ 7.425121] x15: 0000000000000001 x14: 6666666678303d65
    [ 7.430486] x13: 6469727265766f5f x12: 7265766972642e76
    [ 7.435850] x11: 6564703e2d617020 x10: 6530326435373638
    [ 7.441215] x9 : 3030303030303030 x8 : 3d76656420657361
    [ 7.446580] x7 : ffff000008f59df8 x6 : ffff8017fbe0ea50
    [ 7.451945] x5 : 0000000000000000 x4 : 0000000000000000
    [ 7.457309] x3 : ffffffffffffffff x2 : 0000000000000000
    [ 7.462674] x1 : 0fffc00000000800 x0 : ffff7e0000234ce0
    [ 7.468039] Process swapper/0 (pid: 1, stack limit = 0x00000000f276e9af)
    [ 7.474809] Call trace:
    [ 7.477272] kfree+0x194/0x1b4
    [ 7.480351] platform_device_release+0xcc/0xd8
    [ 7.484837] device_release+0x34/0x90
    [ 7.488531] kobject_put+0x70/0xcc
    [ 7.491961] put_device+0x14/0x1c
    [ 7.495304] platform_device_put+0x14/0x1c
    [ 7.499439] dmi_add_platform_ipmi+0x348/0x3ac
    [ 7.503923] scan_for_dmi_ipmi+0xfc/0x10c
    [ 7.507970] do_one_initcall+0x38/0x124
    [ 7.511840] kernel_init_freeable+0x188/0x228
    [ 7.516238] kernel_init+0x10/0x100
    [ 7.519756] ret_from_fork+0x10/0x18
    [ 7.523362] Code: f94002c0 37780080 f94012c0 37000040 (d4210000)
    [ 7.529552] ---[ end trace 11750e4787deef9e ]---
    [ 7.534228] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
    [ 7.534228]

    This is because when the device is released in
    platform_device_release(), we try to free
    pdev.driver_override. This is a const string, hence
    the crash.
    Fix by using dynamic memory for pdev->driver_override.

    Signed-off-by: John Garry
    [Removed the free of driver_override from ipmi_si_remove_by_dev(). The
    free is done in platform_device_release(), and would result in a double
    free, and ipmi_si_remove_by_dev() is called by non-platform devices.]
    Signed-off-by: Corey Minyard
    Signed-off-by: Greg Kroah-Hartman

    John Garry
     
  • commit 61f5acea8737d9b717fcc22bb6679924f3c82b98 upstream.

    Commit 7d06d5895c15 ("Revert "Bluetooth: btusb: fix QCA...suspend/resume"")
    removed the setting of the BTUSB_RESET_RESUME quirk for QCA Rome devices,
    instead favoring adding USB_QUIRK_RESET_RESUME quirks in usb/core/quirks.c.

    This was done because the DIY BTUSB_RESET_RESUME reset-resume handling
    has several issues (see the original commit message). An added advantage
    of moving over to the USB-core reset-resume handling is that it also
    disables autosuspend for these devices, which is similarly broken on these.

    But there are 2 issues with this approach:
    1) It leaves the broken DIY BTUSB_RESET_RESUME code in place for Realtek
    devices.
    2) Sofar only 2 of the 10 QCA devices known to the btusb code have been
    added to usb/core/quirks.c and if we fix the Realtek case the same way
    we need to add an additional 14 entries. So in essence we need to
    duplicate a large part of the usb_device_id table in btusb.c in
    usb/core/quirks.c and manually keep them in sync.

    This commit instead restores setting a reset-resume quirk for QCA devices
    in the btusb.c code, avoiding the duplicate usb_device_id table problem.

    This commit avoids the problems with the original DIY BTUSB_RESET_RESUME
    code by simply setting the USB_QUIRK_RESET_RESUME quirk directly on the
    usb_device.

    This commit also moves the BTUSB_REALTEK case over to directly setting the
    USB_QUIRK_RESET_RESUME on the usb_device and removes the now unused
    BTUSB_RESET_RESUME code.

    BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
    Fixes: 7d06d5895c15 ("Revert "Bluetooth: btusb: fix QCA...suspend/resume"")
    Cc: Leif Liddy
    Cc: Matthias Kaehlcke
    Cc: Brian Norris
    Cc: Daniel Drake
    Cc: Kai-Heng Feng
    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 7d06d5895c159f64c46560dc258e553ad8670fe0 upstream.

    This reverts commit fd865802c66bc451dc515ed89360f84376ce1a56.

    This commit causes a regression on some QCA ROME chips. The USB device
    reset happens in btusb_open(), hence firmware loading gets interrupted.

    Furthermore, this commit stops working after commit
    ("a0085f2510e8976614ad8f766b209448b385492f Bluetooth: btusb: driver to
    enable the usb-wakeup feature"). Reset-resume quirk only gets enabled in
    btusb_suspend() when it's not a wakeup source.

    If we really want to reset the USB device, we need to do it before
    btusb_open(). Let's handle it in drivers/usb/core/quirks.c.

    Cc: Leif Liddy
    Cc: Matthias Kaehlcke
    Cc: Brian Norris
    Cc: Daniel Drake
    Signed-off-by: Kai-Heng Feng
    Reviewed-by: Brian Norris
    Tested-by: Brian Norris
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Kai-Heng Feng
     
  • commit b4cdaba274247c9c841c6a682c08fa91fb3aa549 upstream.

    BCM43341 devices soldered onto the PCB (non-removable) always (AFAICT)
    use an UART connection for bluetooth. But they also advertise btsdio
    support on their 3th sdio function, this causes 2 problems:

    1) A non functioning BT HCI getting registered

    2) Since the btsdio driver does not have suspend/resume callbacks,
    mmc_sdio_pre_suspend will return -ENOSYS, causing mmc_pm_notify()
    to react as if the SDIO-card is removed and since the slot is
    marked as non-removable it will never get detected as inserted again.
    Which results in wifi no longer working after a suspend/resume.

    This commit fixes both by making btsdio ignore BCM43341 devices
    when connected to a slot which is marked non-removable.

    Signed-off-by: Hans de Goede
    Signed-off-by: Marcel Holtmann
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit edfc3722cfef4217c7fe92b272cbe0288ba1ff57 upstream.

    The Toshiba Click Mini uses an i2c attached keyboard/touchpad combo
    (single i2c_hid device for both) which has a vid:pid of 04F3:0401,
    which is also used by a bunch of Elan touchpads which are handled by the
    drivers/input/mouse/elan_i2c driver, but that driver deals with pure
    touchpads and does not work for a combo device such as the one on the
    Toshiba Click Mini.

    The combo on the Mini has an ACPI id of ELAN0800, which is not claimed
    by the elan_i2c driver, so check for that and if it is found do not ignore
    the device. This fixes the keyboard/touchpad combo on the Mini not working
    (although with the touchpad in mouse emulation mode).

    Signed-off-by: Hans de Goede
    Signed-off-by: Jiri Kosina
    Signed-off-by: Greg Kroah-Hartman

    Hans de Goede
     
  • commit 9903a91c763ecdae333a04a9d89d79d2b8966503 upstream.

    With pipe-user-pages-hard set to 'N', users were actually only allowed up
    to 'N - 1' buffers; and likewise for pipe-user-pages-soft.

    Fix this to allow up to 'N' buffers, as would be expected.

    Link: http://lkml.kernel.org/r/20180111052902.14409-5-ebiggers3@gmail.com
    Fixes: b0b91d18e2e9 ("pipe: fix limit checking in pipe_set_size()")
    Signed-off-by: Eric Biggers
    Acked-by: Willy Tarreau
    Acked-by: Kees Cook
    Acked-by: Joe Lawrence
    Cc: Alexander Viro
    Cc: "Luis R . Rodriguez"
    Cc: Michael Kerrisk
    Cc: Mikulas Patocka
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Eric Biggers
     
  • commit 85c2dd5473b2718b4b63e74bfeb1ca876868e11f upstream.

    pipe-user-pages-hard and pipe-user-pages-soft are only supposed to apply
    to unprivileged users, as documented in both Documentation/sysctl/fs.txt
    and the pipe(7) man page.

    However, the capabilities are actually only checked when increasing a
    pipe's size using F_SETPIPE_SZ, not when creating a new pipe. Therefore,
    if pipe-user-pages-hard has been set, the root user can run into it and be
    unable to create pipes. Similarly, if pipe-user-pages-soft has been set,
    the root user can run into it and have their pipes limited to 1 page each.

    Fix this by allowing the privileged override in both cases.

    Link: http://lkml.kernel.org/r/20180111052902.14409-4-ebiggers3@gmail.com
    Fixes: 759c01142a5d ("pipe: limit the per-user amount of pages allocated in pipes")
    Signed-off-by: Eric Biggers
    Acked-by: Kees Cook
    Acked-by: Joe Lawrence
    Cc: Alexander Viro
    Cc: "Luis R . Rodriguez"
    Cc: Michael Kerrisk
    Cc: Mikulas Patocka
    Cc: Willy Tarreau
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Eric Biggers
     
  • commit a1be1f3931bfe0a42b46fef77a04593c2b136e7f upstream.

    This reverts commit ba62bafe942b ("kernel/relay.c: fix potential memory leak").

    This commit introduced a double free bug, because 'chan' is already
    freed by the line:

    kref_put(&chan->kref, relay_destroy_channel);

    This bug was found by syzkaller, using the BLKTRACESETUP ioctl.

    Link: http://lkml.kernel.org/r/20180127004759.101823-1-ebiggers3@gmail.com
    Fixes: ba62bafe942b ("kernel/relay.c: fix potential memory leak")
    Signed-off-by: Eric Biggers
    Reported-by: syzbot
    Reviewed-by: Andrew Morton
    Cc: Zhouyi Zhou
    Cc: Jens Axboe
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Eric Biggers
     
  • commit 4f7e988e63e336827f4150de48163bed05d653bd upstream.

    This reverts commit 92266d6ef60c ("async: simplify lowest_in_progress()")
    which was simply wrong: In the case where domain is NULL, we now use the
    wrong offsetof() in the list_first_entry macro, so we don't actually
    fetch the ->cookie value, but rather the eight bytes located
    sizeof(struct list_head) further into the struct async_entry.

    On 64 bit, that's the data member, while on 32 bit, that's a u64 built
    from func and data in some order.

    I think the bug happens to be harmless in practice: It obviously only
    affects callers which pass a NULL domain, and AFAICT the only such
    caller is

    async_synchronize_full() ->
    async_synchronize_full_domain(NULL) ->
    async_synchronize_cookie_domain(ASYNC_COOKIE_MAX, NULL)

    and the ASYNC_COOKIE_MAX means that in practice we end up waiting for
    the async_global_pending list to be empty - but it would break if
    somebody happened to pass (void*)-1 as the data element to
    async_schedule, and of course also if somebody ever does a
    async_synchronize_cookie_domain(, NULL) with a "finite" cookie value.

    Maybe the "harmless in practice" means this isn't -stable material. But
    I'm not completely confident my quick git grep'ing is enough, and there
    might be affected code in one of the earlier kernels that has since been
    removed, so I'll leave the decision to the stable guys.

    Link: http://lkml.kernel.org/r/20171128104938.3921-1-linux@rasmusvillemoes.dk
    Fixes: 92266d6ef60c "async: simplify lowest_in_progress()"
    Signed-off-by: Rasmus Villemoes
    Acked-by: Tejun Heo
    Cc: Arjan van de Ven
    Cc: Adam Wallis
    Cc: Lai Jiangshan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Rasmus Villemoes
     
  • commit d0290bc20d4739b7a900ae37eb5d4cc3be2b393f upstream.

    Commit df04abfd181a ("fs/proc/kcore.c: Add bounce buffer for ktext
    data") added a bounce buffer to avoid hardened usercopy checks. Copying
    to the bounce buffer was implemented with a simple memcpy() assuming
    that it is always valid to read from kernel memory iff the
    kern_addr_valid() check passed.

    A simple, but pointless, test case like "dd if=/proc/kcore of=/dev/null"
    now can easily crash the kernel, since the former execption handling on
    invalid kernel addresses now doesn't work anymore.

    Also adding a kern_addr_valid() implementation wouldn't help here. Most
    architectures simply return 1 here, while a couple implemented a page
    table walk to figure out if something is mapped at the address in
    question.

    With DEBUG_PAGEALLOC active mappings are established and removed all the
    time, so that relying on the result of kern_addr_valid() before
    executing the memcpy() also doesn't work.

    Therefore simply use probe_kernel_read() to copy to the bounce buffer.
    This also allows to simplify read_kcore().

    At least on s390 this fixes the observed crashes and doesn't introduce
    warnings that were removed with df04abfd181a ("fs/proc/kcore.c: Add
    bounce buffer for ktext data"), even though the generic
    probe_kernel_read() implementation uses uaccess functions.

    While looking into this I'm also wondering if kern_addr_valid() could be
    completely removed...(?)

    Link: http://lkml.kernel.org/r/20171202132739.99971-1-heiko.carstens@de.ibm.com
    Fixes: df04abfd181a ("fs/proc/kcore.c: Add bounce buffer for ktext data")
    Fixes: f5509cc18daa ("mm: Hardened usercopy")
    Signed-off-by: Heiko Carstens
    Acked-by: Kees Cook
    Cc: Jiri Olsa
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Heiko Carstens
     
  • commit 9893b905e743ded332575ca04486bd586c0772f7 upstream.

    The XC2028_I2C_FLUSH only needs to be implemented on a few
    devices. Others can safely ignore it.

    That prevents filling the dmesg with lots of messages like:

    dib0700: stk7700ph_xc3028_callback: unknown command 2, arg 0

    Fixes: 4d37ece757a8 ("[media] tuner/xc2028: Add I2C flush callback")
    Reported-by: Enrico Mioso
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Greg Kroah-Hartman

    Mauro Carvalho Chehab
     
  • commit 81742be14b6a90c9fd0ff6eb4218bdf696ad8e46 upstream.

    Before this patch, when compiled for arm32, the signal strength
    were reported as:

    Lock (0x1f) Signal= 4294908.66dBm C/N= 12.79dB

    Because of a 32 bit integer overflow. After it, it is properly
    reported as:

    Lock (0x1f) Signal= -58.64dBm C/N= 12.79dB

    Fixes: 0f91c9d6bab9 ("[media] TS2020: Calculate tuner gain correctly")
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Greg Kroah-Hartman

    Mauro Carvalho Chehab
     
  • commit 3cd890dbe2a4f14cc44c85bb6cf37e5e22d4dd0e upstream.

    A typical code fragment was copied across many dvb-frontend drivers and
    causes large stack frames when built with with CONFIG_KASAN on gcc-5/6/7:

    drivers/media/dvb-frontends/cxd2841er.c:3225:1: error: the frame size of 3992 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
    drivers/media/dvb-frontends/cxd2841er.c:3404:1: error: the frame size of 3136 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
    drivers/media/dvb-frontends/stv0367.c:3143:1: error: the frame size of 4016 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
    drivers/media/dvb-frontends/stv090x.c:3430:1: error: the frame size of 5312 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]
    drivers/media/dvb-frontends/stv090x.c:4248:1: error: the frame size of 4872 bytes is larger than 3072 bytes [-Werror=frame-larger-than=]

    gcc-8 now solves this by consolidating the stack slots for the argument
    variables, but on older compilers we can get the same behavior by taking
    the pointer of a local variable rather than the inline function argument.

    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715

    Signed-off-by: Arnd Bergmann
    Signed-off-by: Mauro Carvalho Chehab
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     
  • commit e7c52b84fb18f08ce49b6067ae6285aca79084a8 upstream.

    We get a lot of very large stack frames using gcc-7.0.1 with the default
    -fsanitize-address-use-after-scope --param asan-stack=1 options, which can
    easily cause an overflow of the kernel stack, e.g.

    drivers/gpu/drm/i915/gvt/handlers.c:2434:1: warning: the frame size of 46176 bytes is larger than 3072 bytes
    drivers/net/wireless/ralink/rt2x00/rt2800lib.c:5650:1: warning: the frame size of 23632 bytes is larger than 3072 bytes
    lib/atomic64_test.c:250:1: warning: the frame size of 11200 bytes is larger than 3072 bytes
    drivers/gpu/drm/i915/gvt/handlers.c:2621:1: warning: the frame size of 9208 bytes is larger than 3072 bytes
    drivers/media/dvb-frontends/stv090x.c:3431:1: warning: the frame size of 6816 bytes is larger than 3072 bytes
    fs/fscache/stats.c:287:1: warning: the frame size of 6536 bytes is larger than 3072 bytes

    To reduce this risk, -fsanitize-address-use-after-scope is now split out
    into a separate CONFIG_KASAN_EXTRA Kconfig option, leading to stack
    frames that are smaller than 2 kilobytes most of the time on x86_64. An
    earlier version of this patch also prevented combining KASAN_EXTRA with
    KASAN_INLINE, but that is no longer necessary with gcc-7.0.1.

    All patches to get the frame size below 2048 bytes with CONFIG_KASAN=y
    and CONFIG_KASAN_EXTRA=n have been merged by maintainers now, so we can
    bring back that default now. KASAN_EXTRA=y still causes lots of
    warnings but now defaults to !COMPILE_TEST to disable it in
    allmodconfig, and it remains disabled in all other defconfigs since it
    is a new option. I arbitrarily raise the warning limit for KASAN_EXTRA
    to 3072 to reduce the noise, but an allmodconfig kernel still has around
    50 warnings on gcc-7.

    I experimented a bit more with smaller stack frames and have another
    follow-up series that reduces the warning limit for 64-bit architectures
    to 1280 bytes (without CONFIG_KASAN).

    With earlier versions of this patch series, I also had patches to address
    the warnings we get with KASAN and/or KASAN_EXTRA, using a
    "noinline_if_stackbloat" annotation.

    That annotation now got replaced with a gcc-8 bugfix (see
    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715) and a workaround for
    older compilers, which means that KASAN_EXTRA is now just as bad as
    before and will lead to an instant stack overflow in a few extreme
    cases.

    This reverts parts of commit 3f181b4d8652 ("lib/Kconfig.debug: disable
    -Wframe-larger-than warnings with KASAN=y"). Two patches in linux-next
    should be merged first to avoid introducing warnings in an allmodconfig
    build:
    3cd890dbe2a4 ("media: dvb-frontends: fix i2c access helpers for KASAN")
    16c3ada89cff ("media: r820t: fix r820t_write_reg for KASAN")

    Do we really need to backport this?

    I think we do: without this patch, enabling KASAN will lead to
    unavoidable kernel stack overflow in certain device drivers when built
    with gcc-7 or higher on linux-4.10+ or any version that contains a
    backport of commit c5caf21ab0cf8. Most people are probably still on
    older compilers, but it will get worse over time as they upgrade their
    distros.

    The warnings we get on kernels older than this should all be for code
    that uses dangerously large stack frames, though most of them do not
    cause an actual stack overflow by themselves.The asan-stack option was
    added in linux-4.0, and commit 3f181b4d8652 ("lib/Kconfig.debug:
    disable -Wframe-larger-than warnings with KASAN=y") effectively turned
    off the warning for allmodconfig kernels, so I would like to see this
    fix backported to any kernels later than 4.0.

    I have done dozens of fixes for individual functions with stack frames
    larger than 2048 bytes with asan-stack, and I plan to make sure that
    all those fixes make it into the stable kernels as well (most are
    already there).

    Part of the complication here is that asan-stack (from 4.0) was
    originally assumed to always require much larger stacks, but that
    turned out to be a combination of multiple gcc bugs that we have now
    worked around and fixed, but sanitize-address-use-after-scope (from
    v4.10) has a much higher inherent stack usage and also suffers from at
    least three other problems that we have analyzed but not yet fixed
    upstream, each of them makes the stack usage more severe than it should
    be.

    Link: http://lkml.kernel.org/r/20171221134744.2295529-1-arnd@arndb.de
    Signed-off-by: Arnd Bergmann
    Acked-by: Andrey Ryabinin
    Cc: Mauro Carvalho Chehab
    Cc: Andrey Ryabinin
    Cc: Alexander Potapenko
    Cc: Dmitry Vyukov
    Cc: Andrey Konovalov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     
  • commit 0e410e158e5baa1300bdf678cea4f4e0cf9d8b94 upstream.

    With KASAN enabled the kernel has two different memset() functions, one
    with KASAN checks (memset) and one without (__memset). KASAN uses some
    macro tricks to use the proper version where required. For example
    memset() calls in mm/slub.c are without KASAN checks, since they operate
    on poisoned slab object metadata.

    The issue is that clang emits memset() calls even when there is no
    memset() in the source code. They get linked with improper memset()
    implementation and the kernel fails to boot due to a huge amount of KASAN
    reports during early boot stages.

    The solution is to add -fno-builtin flag for files with KASAN_SANITIZE :=
    n marker.

    Link: http://lkml.kernel.org/r/8ffecfffe04088c52c42b92739c2bd8a0bcb3f5e.1516384594.git.andreyknvl@google.com
    Signed-off-by: Andrey Konovalov
    Acked-by: Nick Desaulniers
    Cc: Masahiro Yamada
    Cc: Michal Marek
    Cc: Andrey Ryabinin
    Cc: Alexander Potapenko
    Cc: Dmitry Vyukov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Andrey Konovalov
     
  • commit 0198e5b707cfeb5defbd1b71b1ec6e71580d7db9 upstream.

    Bio iterated by set_bio_pages_uptodate() is raid56 internal one, so it
    will never be a BIO_CLONED bio, and since this is called by end_io
    functions, bio->bi_iter.bi_size is zero, we mustn't use
    bio_for_each_segment() as that is a no-op if bi_size is zero.

    Fixes: 6592e58c6b68e61f003a01ba29a3716e7e2e9484 ("Btrfs: fix write corruption due to bio cloning on raid5/6")
    Signed-off-by: Liu Bo
    Signed-off-by: David Sterba
    Signed-off-by: Greg Kroah-Hartman

    Liu Bo
     
  • commit 0be267255cef64e1c58475baa7b25568355a3816 upstream.

    When the watchdog device is suspended, its timeout is set to the maximum
    value. During resume, the previously set timeout should be restored.
    This does not work at the moment.

    The suspend function calls

    imx2_wdt_set_timeout(wdog, IMX2_WDT_MAX_TIME);

    and resume reverts this by calling

    imx2_wdt_set_timeout(wdog, wdog->timeout);

    However, imx2_wdt_set_timeout() updates wdog->timeout. Therefore,
    wdog->timeout is set to IMX2_WDT_MAX_TIME when we enter the resume
    function.

    Fix this by adding a new function __imx2_wdt_set_timeout() which
    only updates the hardware settings. imx2_wdt_set_timeout() now calls
    __imx2_wdt_set_timeout() and then saves the new timeout to
    wdog->timeout.

    During suspend, we call __imx2_wdt_set_timeout() directly so that
    wdog->timeout won't be updated and we can restore the previous value
    during resume. This approach makes wdog->timeout different from the
    actual setting in the hardware which is usually not a good thing.
    However, the two differ only while we're suspended and no kernel code is
    running, so it should be ok in this case.

    Signed-off-by: Martin Kaiser
    Reviewed-by: Guenter Roeck
    Signed-off-by: Guenter Roeck
    Signed-off-by: Wim Van Sebroeck
    Signed-off-by: Greg Kroah-Hartman

    Martin Kaiser
     
  • commit 20a1ea2222e7cbf96e9bf8579362e971491e6aea upstream.

    I got the following kernel warning when loading snd-soc-skl module on
    Dell Latitude 7270 laptop:
    memremap attempted on mixed range 0x0000000000000000 size: 0x0
    WARNING: CPU: 0 PID: 484 at kernel/memremap.c:98 memremap+0x8a/0x180
    Call Trace:
    skl_nhlt_init+0x82/0xf0 [snd_soc_skl]
    skl_probe+0x2ee/0x7c0 [snd_soc_skl]
    ....

    It seems that the machine doesn't support the SKL DSP gives the empty
    NHLT entry, and it triggers the warning. For avoiding it, let do the
    zero check before calling memremap().

    Signed-off-by: Takashi Iwai
    Signed-off-by: Mark Brown
    Signed-off-by: Greg Kroah-Hartman

    Takashi Iwai
     
  • commit c66234cfedfc3e6e3b62563a5f2c1562be09a35d upstream.

    When restoring registers during runtime resume, we must not write to
    I2S_TXDR which is the transmit FIFO as this queues up a sample to be
    output and pushes all of the output channels down by one.

    This can be demonstrated with the speaker-test utility:

    for i in a b c; do speaker-test -c 2 -s 1; done

    which should play a test through the left speaker three times but if the
    I2S hardware starts runtime suspended the first sample will be played
    through the right speaker.

    Fix this by marking I2S_TXDR as volatile (which also requires marking it
    as readble, even though it technically isn't). This seems to be the
    most robust fix, the alternative of giving I2S_TXDR a default value is
    more fragile since it does not prevent regcache writing to the register
    in all circumstances.

    While here, also fix the configuration of I2S_RXDR and I2S_FIFOLR; these
    are not writable so they do not suffer from the same problem as I2S_TXDR
    but reading from I2S_RXDR does suffer from a similar problem.

    Fixes: f0447f6cbb20 ("ASoC: rockchip: i2s: restore register during runtime_suspend/resume cycle", 2016-09-07)
    Signed-off-by: John Keeping
    Signed-off-by: Mark Brown
    Signed-off-by: Greg Kroah-Hartman

    John Keeping
     
  • commit 57ea5f161a7de5b1913c212d04f57a175b159fdf upstream.

    Commit 76d837a4c0f9 ("KVM: PPC: Book3S PR: Don't include SPAPR TCE code
    on non-pseries platforms") added a reference to the globally undefined
    symbol PPC_SERIES. Looking at the rest of the commit, PPC_PSERIES was
    probably intended.

    Change PPC_SERIES to PPC_PSERIES.

    Discovered with the
    https://github.com/ulfalizer/Kconfiglib/blob/master/examples/list_undefined.py
    script.

    Fixes: 76d837a4c0f9 ("KVM: PPC: Book3S PR: Don't include SPAPR TCE code on non-pseries platforms")
    Signed-off-by: Ulf Magnusson
    Signed-off-by: Paul Mackerras
    Signed-off-by: Greg Kroah-Hartman

    Ulf Magnusson
     
  • commit 58d6b15e9da5042a99c9c30ad725792e4569150e upstream.

    cpu_pm_enter() calls the pm notifier chain with CPU_PM_ENTER, then if
    there is a failure: CPU_PM_ENTER_FAILED.

    When KVM receives CPU_PM_ENTER it calls cpu_hyp_reset() which will
    return us to the hyp-stub. If we subsequently get a CPU_PM_ENTER_FAILED,
    KVM does nothing, leaving the CPU running with the hyp-stub, at odds
    with kvm_arm_hardware_enabled.

    Add CPU_PM_ENTER_FAILED as a fallthrough for CPU_PM_EXIT, this reloads
    KVM based on kvm_arm_hardware_enabled. This is safe even if CPU_PM_ENTER
    never gets as far as KVM, as cpu_hyp_reinit() calls cpu_hyp_reset()
    to make sure the hyp-stub is loaded before reloading KVM.

    Fixes: 67f691976662 ("arm64: kvm: allows kvm cpu hotplug")
    CC: Lorenzo Pieralisi
    Reviewed-by: Christoffer Dall
    Signed-off-by: James Morse
    Signed-off-by: Christoffer Dall
    Signed-off-by: Greg Kroah-Hartman

    James Morse
     
  • commit 36ee41d161c67a6fcf696d4817a0da31f778938c upstream.

    Running with CONFIG_DEBUG_ATOMIC_SLEEP reveals that HV KVM tries to
    read guest memory, in order to emulate guest instructions, while
    preempt is disabled and a vcore lock is held. This occurs in
    kvmppc_handle_exit_hv(), called from post_guest_process(), when
    emulating guest doorbell instructions on POWER9 systems, and also
    when checking whether we have hit a hypervisor breakpoint.
    Reading guest memory can cause a page fault and thus cause the
    task to sleep, so we need to avoid reading guest memory while
    holding a spinlock or when preempt is disabled.

    To fix this, we move the preempt_enable() in kvmppc_run_core() to
    before the loop that calls post_guest_process() for each vcore that
    has just run, and we drop and re-take the vcore lock around the calls
    to kvmppc_emulate_debug_inst() and kvmppc_emulate_doorbell_instr().

    Dropping the lock is safe with respect to the iteration over the
    runnable vcpus in post_guest_process(); for_each_runnable_thread
    is actually safe to use locklessly. It is possible for a vcpu
    to become runnable and add itself to the runnable_threads array
    (code near the beginning of kvmppc_run_vcpu()) and then get included
    in the iteration in post_guest_process despite the fact that it
    has not just run. This is benign because vcpu->arch.trap and
    vcpu->arch.ceded will be zero.

    Fixes: 579006944e0d ("KVM: PPC: Book3S HV: Virtualize doorbell facility on POWER9")
    Signed-off-by: Paul Mackerras
    Signed-off-by: Greg Kroah-Hartman

    Paul Mackerras