Skip to content
  1. Jul 31, 2020
  2. Jul 29, 2020
    • Greg Kroah-Hartman's avatar
    • Mark O'Donovan's avatar
      ath9k: Fix regression with Atheros 9271 · d560e7b5
      Mark O'Donovan authored
      commit 92f53e2f upstream.
      
      This fix allows ath9k_htc modules to connect to WLAN once again.
      
      Fixes: 2bbcaaee
      
       ("ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb")
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=208251
      Signed-off-by: default avatarMark O'Donovan <shiftee@posteo.net>
      Reported-by: default avatarRoman Mamedov <rm@romanrm.net>
      Tested-by: default avatarViktor Jägersküpper <viktor_jaegerskuepper@freenet.de>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20200711043324.8079-1-shiftee@posteo.net
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d560e7b5
    • Qiujun Huang's avatar
      ath9k: Fix general protection fault in ath9k_hif_usb_rx_cb · ecb8ccca
      Qiujun Huang authored
      commit 2bbcaaee
      
       upstream.
      
      In ath9k_hif_usb_rx_cb interface number is assumed to be 0.
      usb_ifnum_to_if(urb->dev, 0)
      But it isn't always true.
      
      The case reported by syzbot:
      https://lore.kernel.org/linux-usb/000000000000666c9c05a1c05d12@google.com
      usb 2-1: new high-speed USB device number 2 using dummy_hcd
      usb 2-1: config 1 has an invalid interface number: 2 but max is 0
      usb 2-1: config 1 has no interface number 0
      usb 2-1: New USB device found, idVendor=0cf3, idProduct=9271, bcdDevice=
      1.08
      usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
      general protection fault, probably for non-canonical address
      0xdffffc0000000015: 0000 [#1] SMP KASAN
      KASAN: null-ptr-deref in range [0x00000000000000a8-0x00000000000000af]
      CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.6.0-rc5-syzkaller #0
      
      Call Trace
      __usb_hcd_giveback_urb+0x29a/0x550 drivers/usb/core/hcd.c:1650
      usb_hcd_giveback_urb+0x368/0x420 drivers/usb/core/hcd.c:1716
      dummy_timer+0x1258/0x32ae drivers/usb/gadget/udc/dummy_hcd.c:1966
      call_timer_fn+0x195/0x6f0 kernel/time/timer.c:1404
      expire_timers kernel/time/timer.c:1449 [inline]
      __run_timers kernel/time/timer.c:1773 [inline]
      __run_timers kernel/time/timer.c:1740 [inline]
      run_timer_softirq+0x5f9/0x1500 kernel/time/timer.c:1786
      __do_softirq+0x21e/0x950 kernel/softirq.c:292
      invoke_softirq kernel/softirq.c:373 [inline]
      irq_exit+0x178/0x1a0 kernel/softirq.c:413
      exiting_irq arch/x86/include/asm/apic.h:546 [inline]
      smp_apic_timer_interrupt+0x141/0x540 arch/x86/kernel/apic/apic.c:1146
      apic_timer_interrupt+0xf/0x20 arch/x86/entry/entry_64.S:829
      
      Reported-and-tested-by: default avatar <syzbot+40d5d2e8a4680952f042@syzkaller.appspotmail.com>
      Signed-off-by: default avatarQiujun Huang <hqjagain@gmail.com>
      Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
      Link: https://lore.kernel.org/r/20200404041838.10426-6-hqjagain@gmail.com
      Cc: Viktor Jägersküpper <viktor_jaegerskuepper@freenet.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ecb8ccca
    • John David Anglin's avatar
      parisc: Add atomic64_set_release() define to avoid CPU soft lockups · 438d9636
      John David Anglin authored
      commit be6577af
      
       upstream.
      
      Stalls are quite frequent with recent kernels. I enabled
      CONFIG_SOFTLOCKUP_DETECTOR and I caught the following stall:
      
      watchdog: BUG: soft lockup - CPU#0 stuck for 22s! [cc1:22803]
      CPU: 0 PID: 22803 Comm: cc1 Not tainted 5.6.17+ #3
      Hardware name: 9000/800/rp3440
       IAOQ[0]: d_alloc_parallel+0x384/0x688
       IAOQ[1]: d_alloc_parallel+0x388/0x688
       RP(r2): d_alloc_parallel+0x134/0x688
      Backtrace:
       [<000000004036974c>] __lookup_slow+0xa4/0x200
       [<0000000040369fc8>] walk_component+0x288/0x458
       [<000000004036a9a0>] path_lookupat+0x88/0x198
       [<000000004036e748>] filename_lookup+0xa0/0x168
       [<000000004036e95c>] user_path_at_empty+0x64/0x80
       [<000000004035d93c>] vfs_statx+0x104/0x158
       [<000000004035dfcc>] __do_sys_lstat64+0x44/0x80
       [<000000004035e5a0>] sys_lstat64+0x20/0x38
       [<0000000040180054>] syscall_exit+0x0/0x14
      
      The code was stuck in this loop in d_alloc_parallel:
      
          4037d414:   0e 00 10 dc     ldd 0(r16),ret0
          4037d418:   c7 fc 5f ed     bb,< ret0,1f,4037d414 <d_alloc_parallel+0x384>
          4037d41c:   08 00 02 40     nop
      
      This is the inner loop of bit_spin_lock which is called by hlist_bl_unlock in
      d_alloc_parallel:
      
      static inline void bit_spin_lock(int bitnum, unsigned long *addr)
      {
              /*
               * Assuming the lock is uncontended, this never enters
               * the body of the outer loop. If it is contended, then
               * within the inner loop a non-atomic test is used to
               * busywait with less bus contention for a good time to
               * attempt to acquire the lock bit.
               */
              preempt_disable();
      #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
              while (unlikely(test_and_set_bit_lock(bitnum, addr))) {
                      preempt_enable();
                      do {
                              cpu_relax();
                      } while (test_bit(bitnum, addr));
                      preempt_disable();
              }
      #endif
              __acquire(bitlock);
      }
      
      After consideration, I realized that we must be losing bit unlocks.
      Then, I noticed that we missed defining atomic64_set_release().
      Adding this define fixes the stalls in bit operations.
      
      Signed-off-by: default avatarDave Anglin <dave.anglin@bell.net>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      438d9636
    • Michael J. Ruhl's avatar
      io-mapping: indicate mapping failure · 01f2b73e
      Michael J. Ruhl authored
      commit e0b3e0b1 upstream.
      
      The !ATOMIC_IOMAP version of io_maping_init_wc will always return
      success, even when the ioremap fails.
      
      Since the ATOMIC_IOMAP version returns NULL when the init fails, and
      callers check for a NULL return on error this is unexpected.
      
      During a device probe, where the ioremap failed, a crash can look like
      this:
      
          BUG: unable to handle page fault for address: 0000000000210000
           #PF: supervisor write access in kernel mode
           #PF: error_code(0x0002) - not-present page
           Oops: 0002 [#1] PREEMPT SMP
           CPU: 0 PID: 177 Comm:
           RIP: 0010:fill_page_dma [i915]
             gen8_ppgtt_create [i915]
             i915_ppgtt_create [i915]
             intel_gt_init [i915]
             i915_gem_init [i915]
             i915_driver_probe [i915]
             pci_device_probe
             really_probe
             driver_probe_device
      
      The remap failure occurred much earlier in the probe.  If it had been
      propagated, the driver would have exited with an error.
      
      Return NULL on ioremap failure.
      
      [akpm@linux-foundation.org: detect ioremap_wc() errors earlier]
      
      Fixes: cafaf14a
      
       ("io-mapping: Always create a struct to hold metadata about the io-mapping")
      Signed-off-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Cc: Mike Rapoport <rppt@linux.ibm.com>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Chris Wilson <chris@chris-wilson.co.uk>
      Cc: Daniel Vetter <daniel@ffwll.ch>
      Cc: <stable@vger.kernel.org>
      Link: http://lkml.kernel.org/r/20200721171936.81563-1-michael.j.ruhl@intel.com
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      01f2b73e
    • Hugh Dickins's avatar
      mm/memcg: fix refcount error while moving and swapping · a0c48746
      Hugh Dickins authored
      commit 8d22a935 upstream.
      
      It was hard to keep a test running, moving tasks between memcgs with
      move_charge_at_immigrate, while swapping: mem_cgroup_id_get_many()'s
      refcount is discovered to be 0 (supposedly impossible), so it is then
      forced to REFCOUNT_SATURATED, and after thousands of warnings in quick
      succession, the test is at last put out of misery by being OOM killed.
      
      This is because of the way moved_swap accounting was saved up until the
      task move gets completed in __mem_cgroup_clear_mc(), deferred from when
      mem_cgroup_move_swap_account() actually exchanged old and new ids.
      Concurrent activity can free up swap quicker than the task is scanned,
      bringing id refcount down 0 (which should only be possible when
      offlining).
      
      Just skip that optimization: do that part of the accounting immediately.
      
      Fixes: 615d66c3
      
       ("mm: memcontrol: fix memcg id ref counter on swap charge move")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarAlex Shi <alex.shi@linux.alibaba.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Alex Shi <alex.shi@linux.alibaba.com>
      Cc: Shakeel Butt <shakeelb@google.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Cc: <stable@vger.kernel.org>
      Link: http://lkml.kernel.org/r/alpine.LSU.2.11.2007071431050.4726@eggly.anvils
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a0c48746
    • Fangrui Song's avatar
      Makefile: Fix GCC_TOOLCHAIN_DIR prefix for Clang cross compilation · 71749b11
      Fangrui Song authored
      commit ca9b31f6
      
       upstream.
      
      When CROSS_COMPILE is set (e.g. aarch64-linux-gnu-), if
      $(CROSS_COMPILE)elfedit is found at /usr/bin/aarch64-linux-gnu-elfedit,
      GCC_TOOLCHAIN_DIR will be set to /usr/bin/.  --prefix= will be set to
      /usr/bin/ and Clang as of 11 will search for both
      $(prefix)aarch64-linux-gnu-$needle and $(prefix)$needle.
      
      GCC searchs for $(prefix)aarch64-linux-gnu/$version/$needle,
      $(prefix)aarch64-linux-gnu/$needle and $(prefix)$needle. In practice,
      $(prefix)aarch64-linux-gnu/$needle rarely contains executables.
      
      To better model how GCC's -B/--prefix takes in effect in practice, newer
      Clang (since
      https://github.com/llvm/llvm-project/commit/3452a0d8c17f7166f479706b293caf6ac76ffd90)
      only searches for $(prefix)$needle. Currently it will find /usr/bin/as
      instead of /usr/bin/aarch64-linux-gnu-as.
      
      Set --prefix= to $(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
      (/usr/bin/aarch64-linux-gnu-) so that newer Clang can find the
      appropriate cross compiling GNU as (when -no-integrated-as is in
      effect).
      
      Cc: stable@vger.kernel.org
      Reported-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: default avatarFangrui Song <maskray@google.com>
      Reviewed-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Tested-by: default avatarNathan Chancellor <natechancellor@gmail.com>
      Tested-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Link: https://github.com/ClangBuiltLinux/linux/issues/1099
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      71749b11
    • Tetsuo Handa's avatar
      vt: Reject zero-sized screen buffer size. · 7cecdf96
      Tetsuo Handa authored
      commit ce684552
      
       upstream.
      
      syzbot is reporting general protection fault in do_con_write() [1] caused
      by vc->vc_screenbuf == ZERO_SIZE_PTR caused by vc->vc_screenbuf_size == 0
      caused by vc->vc_cols == vc->vc_rows == vc->vc_size_row == 0 caused by
      fb_set_var() from ioctl(FBIOPUT_VSCREENINFO) on /dev/fb0 , for
      gotoxy(vc, 0, 0) from reset_terminal() from vc_init() from vc_allocate()
       from con_install() from tty_init_dev() from tty_open() on such console
      causes vc->vc_pos == 0x10000000e due to
      ((unsigned long) ZERO_SIZE_PTR) + -1U * 0 + (-1U << 1).
      
      I don't think that a console with 0 column or 0 row makes sense. And it
      seems that vc_do_resize() does not intend to allow resizing a console to
      0 column or 0 row due to
      
        new_cols = (cols ? cols : vc->vc_cols);
        new_rows = (lines ? lines : vc->vc_rows);
      
      exception.
      
      Theoretically, cols and rows can be any range as long as
      0 < cols * rows * 2 <= KMALLOC_MAX_SIZE is satisfied (e.g.
      cols == 1048576 && rows == 2 is possible) because of
      
        vc->vc_size_row = vc->vc_cols << 1;
        vc->vc_screenbuf_size = vc->vc_rows * vc->vc_size_row;
      
      in visual_init() and kzalloc(vc->vc_screenbuf_size) in vc_allocate().
      
      Since we can detect cols == 0 or rows == 0 via screenbuf_size = 0 in
      visual_init(), we can reject kzalloc(0). Then, vc_allocate() will return
      an error, and con_write() will not be called on a console with 0 column
      or 0 row.
      
      We need to make sure that integer overflow in visual_init() won't happen.
      Since vc_do_resize() restricts cols <= 32767 and rows <= 32767, applying
      1 <= cols <= 32767 and 1 <= rows <= 32767 restrictions to vc_allocate()
      will be practically fine.
      
      This patch does not touch con_init(), for returning -EINVAL there
      does not help when we are not returning -ENOMEM.
      
      [1] https://syzkaller.appspot.com/bug?extid=017265e8553724e514e8
      
      Reported-and-tested-by: default avatarsyzbot <syzbot+017265e8553724e514e8@syzkaller.appspotmail.com>
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200712111013.11881-1-penguin-kernel@I-love.SAKURA.ne.jp
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7cecdf96
    • Tetsuo Handa's avatar
      fbdev: Detect integer underflow at "struct fbcon_ops"->clear_margins. · c388072f
      Tetsuo Handa authored
      commit 033724d6
      
       upstream.
      
      syzbot is reporting general protection fault in bitfill_aligned() [1]
      caused by integer underflow in bit_clear_margins(). The cause of this
      problem is when and how do_vc_resize() updates vc->vc_{cols,rows}.
      
      If vc_do_resize() fails (e.g. kzalloc() fails) when var.xres or var.yres
      is going to shrink, vc->vc_{cols,rows} will not be updated. This allows
      bit_clear_margins() to see info->var.xres < (vc->vc_cols * cw) or
      info->var.yres < (vc->vc_rows * ch). Unexpectedly large rw or bh will
      try to overrun the __iomem region and causes general protection fault.
      
      Also, vc_resize(vc, 0, 0) does not set vc->vc_{cols,rows} = 0 due to
      
        new_cols = (cols ? cols : vc->vc_cols);
        new_rows = (lines ? lines : vc->vc_rows);
      
      exception. Since cols and lines are calculated as
      
        cols = FBCON_SWAP(ops->rotate, info->var.xres, info->var.yres);
        rows = FBCON_SWAP(ops->rotate, info->var.yres, info->var.xres);
        cols /= vc->vc_font.width;
        rows /= vc->vc_font.height;
        vc_resize(vc, cols, rows);
      
      in fbcon_modechanged(), var.xres < vc->vc_font.width makes cols = 0
      and var.yres < vc->vc_font.height makes rows = 0. This means that
      
        const int fd = open("/dev/fb0", O_ACCMODE);
        struct fb_var_screeninfo var = { };
        ioctl(fd, FBIOGET_VSCREENINFO, &var);
        var.xres = var.yres = 1;
        ioctl(fd, FBIOPUT_VSCREENINFO, &var);
      
      easily reproduces integer underflow bug explained above.
      
      Of course, callers of vc_resize() are not handling vc_do_resize() failure
      is bad. But we can't avoid vc_resize(vc, 0, 0) which returns 0. Therefore,
      as a band-aid workaround, this patch checks integer underflow in
      "struct fbcon_ops"->clear_margins call, assuming that
      vc->vc_cols * vc->vc_font.width and vc->vc_rows * vc->vc_font.heigh do not
      cause integer overflow.
      
      [1] https://syzkaller.appspot.com/bug?id=a565882df74fa76f10d3a6fec4be31098dbb37c6
      
      Reported-and-tested-by: default avatarsyzbot <syzbot+e5fd3e65515b48c02a30@syzkaller.appspotmail.com>
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Acked-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200715015102.3814-1-penguin-kernel@I-love.SAKURA.ne.jp
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c388072f
    • Serge Semin's avatar
      serial: 8250_mtk: Fix high-speed baud rates clamping · ead742ad
      Serge Semin authored
      commit 551e553f upstream.
      
      Commit 7b668c06 ("serial: 8250: Fix max baud limit in generic 8250
      port") fixed limits of a baud rate setting for a generic 8250 port.
      In other words since that commit the baud rate has been permitted to be
      within [uartclk / 16 / UART_DIV_MAX; uartclk / 16], which is absolutely
      normal for a standard 8250 UART port. But there are custom 8250 ports,
      which provide extended baud rate limits. In particular the Mediatek 8250
      port can work with baud rates up to "uartclk" speed.
      
      Normally that and any other peculiarity is supposed to be handled in a
      custom set_termios() callback implemented in the vendor-specific
      8250-port glue-driver. Currently that is how it's done for the most of
      the vendor-specific 8250 ports, but for some reason for Mediatek a
      solution has been spread out to both the glue-driver and to the generic
      8250-port code. Due to that a bug has been introduced, which permitted the
      extended baud rate limit for all even for standard 8250-ports. The bug
      has been fixed by the commit 7b668c06 ("serial: 8250: Fix max baud
      limit in generic 8250 port") by narrowing the baud rates limit back down to
      the normal bounds. Unfortunately by doing so we also broke the
      Mediatek-specific extended bauds feature.
      
      A fix of the problem described above is twofold. First since we can't get
      back the extended baud rate limits feature to the generic set_termios()
      function and that method supports only a standard baud rates range, the
      requested baud rate must be locally stored before calling it and then
      restored back to the new termios structure after the generic set_termios()
      finished its magic business. By doing so we still use the
      serial8250_do_set_termios() method to set the LCR/MCR/FCR/etc. registers,
      while the extended baud rate setting procedure will be performed later in
      the custom Mediatek-specific set_termios() callback. Second since a true
      baud rate is now fully calculated in the custom set_termios() method we
      need to locally update the port timeout by calling the
      uart_update_timeout() function. After the fixes described above are
      implemented in the 8250_mtk.c driver, the Mediatek 8250-port should
      get back to normally working with extended baud rates.
      
      Link: https://lore.kernel.org/linux-serial/20200701211337.3027448-1-danielwinkler@google.com
      
      Fixes: 7b668c06
      
       ("serial: 8250: Fix max baud limit in generic 8250 port")
      Reported-by: default avatarDaniel Winkler <danielwinkler@google.com>
      Signed-off-by: default avatarSerge Semin <Sergey.Semin@baikalelectronics.ru>
      Cc: stable <stable@vger.kernel.org>
      Tested-by: default avatarClaire Chang <tientzu@chromium.org>
      Link: https://lore.kernel.org/r/20200714124113.20918-1-Sergey.Semin@baikalelectronics.ru
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ead742ad
    • Yang Yingliang's avatar
      serial: 8250: fix null-ptr-deref in serial8250_start_tx() · c5760ab7
      Yang Yingliang authored
      commit f4c23a14
      
       upstream.
      
      I got null-ptr-deref in serial8250_start_tx():
      
      [   78.114630] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
      [   78.123778] Mem abort info:
      [   78.126560]   ESR = 0x86000007
      [   78.129603]   EC = 0x21: IABT (current EL), IL = 32 bits
      [   78.134891]   SET = 0, FnV = 0
      [   78.137933]   EA = 0, S1PTW = 0
      [   78.141064] user pgtable: 64k pages, 48-bit VAs, pgdp=00000027d41a8600
      [   78.147562] [0000000000000000] pgd=00000027893f0003, p4d=00000027893f0003, pud=00000027893f0003, pmd=00000027c9a20003, pte=0000000000000000
      [   78.160029] Internal error: Oops: 86000007 [#1] SMP
      [   78.164886] Modules linked in: sunrpc vfat fat aes_ce_blk crypto_simd cryptd aes_ce_cipher crct10dif_ce ghash_ce sha2_ce sha256_arm64 sha1_ce ses enclosure sg sbsa_gwdt ipmi_ssif spi_dw_mmio sch_fq_codel vhost_net tun vhost vhost_iotlb tap ip_tables ext4 mbcache jbd2 ahci hisi_sas_v3_hw libahci hisi_sas_main libsas hns3 scsi_transport_sas hclge libata megaraid_sas ipmi_si hnae3 ipmi_devintf ipmi_msghandler br_netfilter bridge stp llc nvme nvme_core xt_sctp sctp libcrc32c dm_mod nbd
      [   78.207383] CPU: 11 PID: 23258 Comm: null-ptr Not tainted 5.8.0-rc6+ #48
      [   78.214056] Hardware name: Huawei TaiShan 2280 V2/BC82AMDC, BIOS 2280-V2 CS V3.B210.01 03/12/2020
      [   78.222888] pstate: 80400089 (Nzcv daIf +PAN -UAO BTYPE=--)
      [   78.228435] pc : 0x0
      [   78.230618] lr : serial8250_start_tx+0x160/0x260
      [   78.235215] sp : ffff800062eefb80
      [   78.238517] x29: ffff800062eefb80 x28: 0000000000000fff
      [   78.243807] x27: ffff800062eefd80 x26: ffff202fd83b3000
      [   78.249098] x25: ffff800062eefd80 x24: ffff202fd83b3000
      [   78.254388] x23: ffff002fc5e50be8 x22: 0000000000000002
      [   78.259679] x21: 0000000000000001 x20: 0000000000000000
      [   78.264969] x19: ffffa688827eecc8 x18: 0000000000000000
      [   78.270259] x17: 0000000000000000 x16: 0000000000000000
      [   78.275550] x15: ffffa68881bc67a8 x14: 00000000000002e6
      [   78.280841] x13: ffffa68881bc67a8 x12: 000000000000c539
      [   78.286131] x11: d37a6f4de9bd37a7 x10: ffffa68881cccff0
      [   78.291421] x9 : ffffa68881bc6000 x8 : ffffa688819daa88
      [   78.296711] x7 : ffffa688822a0f20 x6 : ffffa688819e0000
      [   78.302002] x5 : ffff800062eef9d0 x4 : ffffa68881e707a8
      [   78.307292] x3 : 0000000000000000 x2 : 0000000000000002
      [   78.312582] x1 : 0000000000000001 x0 : ffffa688827eecc8
      [   78.317873] Call trace:
      [   78.320312]  0x0
      [   78.322147]  __uart_start.isra.9+0x64/0x78
      [   78.326229]  uart_start+0xb8/0x1c8
      [   78.329620]  uart_flush_chars+0x24/0x30
      [   78.333442]  n_tty_receive_buf_common+0x7b0/0xc30
      [   78.338128]  n_tty_receive_buf+0x44/0x2c8
      [   78.342122]  tty_ioctl+0x348/0x11f8
      [   78.345599]  ksys_ioctl+0xd8/0xf8
      [   78.348903]  __arm64_sys_ioctl+0x2c/0xc8
      [   78.352812]  el0_svc_common.constprop.2+0x88/0x1b0
      [   78.357583]  do_el0_svc+0x44/0xd0
      [   78.360887]  el0_sync_handler+0x14c/0x1d0
      [   78.364880]  el0_sync+0x140/0x180
      [   78.368185] Code: bad PC value
      
      SERIAL_PORT_DFNS is not defined on each arch, if it's not defined,
      serial8250_set_defaults() won't be called in serial8250_isa_init_ports(),
      so the p->serial_in pointer won't be initialized, and it leads a null-ptr-deref.
      Fix this problem by calling serial8250_set_defaults() after init uart port.
      
      Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200721143852.4058352-1-yangyingliang@huawei.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c5760ab7
    • Ian Abbott's avatar
      staging: comedi: addi_apci_1564: check INSN_CONFIG_DIGITAL_TRIG shift · 46308fd3
      Ian Abbott authored
      commit 926234f1 upstream.
      
      The `INSN_CONFIG` comedi instruction with sub-instruction code
      `INSN_CONFIG_DIGITAL_TRIG` includes a base channel in `data[3]`. This is
      used as a right shift amount for other bitmask values without being
      checked.  Shift amounts greater than or equal to 32 will result in
      undefined behavior.  Add code to deal with this.
      
      Fixes: 1e15687e
      
       ("staging: comedi: addi_apci_1564: add Change-of-State interrupt subdevice and required functions")
      Cc: <stable@vger.kernel.org> #3.17+
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Link: https://lore.kernel.org/r/20200717145257.112660-4-abbotti@mev.co.uk
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      46308fd3
    • Ian Abbott's avatar
      staging: comedi: addi_apci_1500: check INSN_CONFIG_DIGITAL_TRIG shift · 1eddbd3d
      Ian Abbott authored
      commit fc846e9d upstream.
      
      The `INSN_CONFIG` comedi instruction with sub-instruction code
      `INSN_CONFIG_DIGITAL_TRIG` includes a base channel in `data[3]`. This is
      used as a right shift amount for other bitmask values without being
      checked.  Shift amounts greater than or equal to 32 will result in
      undefined behavior.  Add code to deal with this, adjusting the checks
      for invalid channels so that enabled channel bits that would have been
      lost by shifting are also checked for validity.  Only channels 0 to 15
      are valid.
      
      Fixes: a8c66b68 ("staging: comedi: addi_apci_1500: rewrite the subdevice support functions")
      Cc: <stable@vger.kernel.org> #4.0+: ef75e14a
      
      : staging: comedi: verify array index is correct before using it
      Cc: <stable@vger.kernel.org> #4.0+
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Link: https://lore.kernel.org/r/20200717145257.112660-5-abbotti@mev.co.uk
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1eddbd3d
    • Ian Abbott's avatar
      staging: comedi: ni_6527: fix INSN_CONFIG_DIGITAL_TRIG support · 7358de4a
      Ian Abbott authored
      commit f07804ec upstream.
      
      `ni6527_intr_insn_config()` processes `INSN_CONFIG` comedi instructions
      for the "interrupt" subdevice.  When `data[0]` is
      `INSN_CONFIG_DIGITAL_TRIG` it is configuring the digital trigger.  When
      `data[2]` is `COMEDI_DIGITAL_TRIG_ENABLE_EDGES` it is configuring rising
      and falling edge detection for the digital trigger, using a base channel
      number (or shift amount) in `data[3]`, a rising edge bitmask in
      `data[4]` and falling edge bitmask in `data[5]`.
      
      If the base channel number (shift amount) is greater than or equal to
      the number of channels (24) of the digital input subdevice, there are no
      changes to the rising and falling edges, so the mask of channels to be
      changed can be set to 0, otherwise the mask of channels to be changed,
      and the rising and falling edge bitmasks are shifted by the base channel
      number before calling `ni6527_set_edge_detection()` to change the
      appropriate registers.  Unfortunately, the code is comparing the base
      channel (shift amount) to the interrupt subdevice's number of channels
      (1) instead of the digital input subdevice's number of channels (24).
      Fix it by comparing to 32 because all shift amounts for an `unsigned
      int` must be less than that and everything from bit 24 upwards is
      ignored by `ni6527_set_edge_detection()` anyway.
      
      Fixes: 110f9e68
      
       ("staging: comedi: ni_6527: support INSN_CONFIG_DIGITAL_TRIG")
      Cc: <stable@vger.kernel.org> # 3.17+
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Link: https://lore.kernel.org/r/20200717145257.112660-2-abbotti@mev.co.uk
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7358de4a
    • Ian Abbott's avatar
      staging: comedi: addi_apci_1032: check INSN_CONFIG_DIGITAL_TRIG shift · b567ecda
      Ian Abbott authored
      commit 0bd0db42 upstream.
      
      The `INSN_CONFIG` comedi instruction with sub-instruction code
      `INSN_CONFIG_DIGITAL_TRIG` includes a base channel in `data[3]`. This is
      used as a right shift amount for other bitmask values without being
      checked.  Shift amounts greater than or equal to 32 will result in
      undefined behavior.  Add code to deal with this.
      
      Fixes: 33cdce62
      
       ("staging: comedi: addi_apci_1032: conform to new INSN_CONFIG_DIGITAL_TRIG")
      Cc: <stable@vger.kernel.org> #3.8+
      Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
      Link: https://lore.kernel.org/r/20200717145257.112660-3-abbotti@mev.co.uk
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b567ecda
    • Rustam Kovhaev's avatar
      staging: wlan-ng: properly check endpoint types · 27e29448
      Rustam Kovhaev authored
      commit faaff976
      
       upstream.
      
      As syzkaller detected, wlan-ng driver does not do sanity check of
      endpoints in prism2sta_probe_usb(), add check for xfer direction and type
      
      Reported-and-tested-by: default avatar <syzbot+c2a1fa67c02faa0de723@syzkaller.appspotmail.com>
      Link: https://syzkaller.appspot.com/bug?extid=c2a1fa67c02faa0de723
      Signed-off-by: default avatarRustam Kovhaev <rkovhaev@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200722161052.999754-1-rkovhaev@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      27e29448
    • Steve French's avatar
      Revert "cifs: Fix the target file was deleted when rename failed." · a9fb0709
      Steve French authored
      commit 0e670518 upstream.
      
      This reverts commit 9ffad926
      
      .
      
      Upon additional testing with older servers, it was found that
      the original commit introduced a regression when using the old SMB1
      dialect and rsyncing over an existing file.
      
      The patch will need to be respun to address this, likely including
      a larger refactoring of the SMB1 and SMB3 rename code paths to make
      it less confusing and also to address some additional rename error
      cases that SMB3 may be able to workaround.
      
      Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
      Reported-by: default avatarPatrick Fernie <patrick.fernie@gmail.com>
      CC: Stable <stable@vger.kernel.org>
      Acked-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
      Acked-by: default avatarPavel Shilovsky <pshilov@microsoft.com>
      Acked-by: default avatarZhang Xiaoxu <zhangxiaoxu5@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a9fb0709
    • Forest Crossman's avatar
      usb: xhci: Fix ASM2142/ASM3142 DMA addressing · 70db3c5e
      Forest Crossman authored
      commit dbb0897e
      
       upstream.
      
      The ASM2142/ASM3142 (same PCI IDs) does not support full 64-bit DMA
      addresses, which can cause silent memory corruption or IOMMU errors on
      platforms that use the upper bits. Add the XHCI_NO_64BIT_SUPPORT quirk
      to fix this issue.
      
      Signed-off-by: default avatarForest Crossman <cyrozap@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20200717112734.328432-1-cyrozap@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      70db3c5e
    • Chunfeng Yun's avatar
      usb: xhci-mtk: fix the failure of bandwidth allocation · ec9b2626
      Chunfeng Yun authored
      commit 5ce1a24d upstream.
      
      The wMaxPacketSize field of endpoint descriptor may be zero
      as default value in alternate interface, and they are not
      actually selected when start stream, so skip them when try to
      allocate bandwidth.
      
      Cc: stable <stable@vger.kernel.org>
      Fixes: 0cbd4b34
      
       ("xhci: mediatek: support MTK xHCI host controller")
      Signed-off-by: default avatarChunfeng Yun <chunfeng.yun@mediatek.com>
      Link: https://lore.kernel.org/r/1594360672-2076-1-git-send-email-chunfeng.yun@mediatek.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ec9b2626
    • Tetsuo Handa's avatar
      binder: Don't use mmput() from shrinker function. · d5a5f0e7
      Tetsuo Handa authored
      commit f867c771 upstream.
      
      syzbot is reporting that mmput() from shrinker function has a risk of
      deadlock [1], for delayed_uprobe_add() from update_ref_ctr() calls
      kzalloc(GFP_KERNEL) with delayed_uprobe_lock held, and
      uprobe_clear_state() from __mmput() also holds delayed_uprobe_lock.
      
      Commit a1b2289c
      
       ("android: binder: drop lru lock in isolate
      callback") replaced mmput() with mmput_async() in order to avoid sleeping
      with spinlock held. But this patch replaces mmput() with mmput_async() in
      order not to start __mmput() from shrinker context.
      
      [1] https://syzkaller.appspot.com/bug?id=bc9e7303f537c41b2b0cc2dfcea3fc42964c2d45
      
      Reported-by: default avatarsyzbot <syzbot+1068f09c44d151250c33@syzkaller.appspotmail.com>
      Reported-by: default avatarsyzbot <syzbot+e5344baa319c9a96edec@syzkaller.appspotmail.com>
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Reviewed-by: default avatarMichal Hocko <mhocko@suse.com>
      Acked-by: default avatarTodd Kjos <tkjos@google.com>
      Acked-by: default avatarChristian Brauner <christian.brauner@ubuntu.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/4ba9adb2-43f5-2de0-22de-f6075c1fab50@i-love.sakura.ne.jp
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d5a5f0e7
    • Arnd Bergmann's avatar
      x86: math-emu: Fix up 'cmp' insn for clang ias · ae3f1e02
      Arnd Bergmann authored
      [ Upstream commit 81e96851
      
       ]
      
      The clang integrated assembler requires the 'cmp' instruction to
      have a length prefix here:
      
      arch/x86/math-emu/wm_sqrt.S:212:2: error: ambiguous instructions require an explicit suffix (could be 'cmpb', 'cmpw', or 'cmpl')
       cmp $0xffffffff,-24(%ebp)
       ^
      
      Make this a 32-bit comparison, which it was clearly meant to be.
      
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Link: https://lkml.kernel.org/r/20200527135352.1198078-1-arnd@arndb.de
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      ae3f1e02
    • Will Deacon's avatar
      arm64: Use test_tsk_thread_flag() for checking TIF_SINGLESTEP · 887e5064
      Will Deacon authored
      [ Upstream commit 5afc7855
      
       ]
      
      Rather than open-code test_tsk_thread_flag() at each callsite, simply
      replace the couple of offenders with calls to test_tsk_thread_flag()
      directly.
      
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      887e5064
    • Evgeny Novikov's avatar
      usb: gadget: udc: gr_udc: fix memleak on error handling path in gr_ep_init() · 02879288
      Evgeny Novikov authored
      [ Upstream commit c8f8529e
      
       ]
      
      gr_ep_init() does not assign the allocated request anywhere if allocation
      of memory for the buffer fails. This is a memory leak fixed by the given
      patch.
      
      Found by Linux Driver Verification project (linuxtesting.org).
      
      Signed-off-by: default avatarEvgeny Novikov <novikov@ispras.ru>
      Signed-off-by: default avatarFelipe Balbi <balbi@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      02879288
    • Ilya Katsnelson's avatar
      Input: synaptics - enable InterTouch for ThinkPad X1E 1st gen · 95a3bd3f
      Ilya Katsnelson authored
      [ Upstream commit dcb00fc7
      
       ]
      
      Tested on my own laptop, touchpad feels slightly more responsive with
      this on, though it might just be placebo.
      
      Signed-off-by: default avatarIlya Katsnelson <me@0upti.me>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Link: https://lore.kernel.org/r/20200703143457.132373-1-me@0upti.me
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      95a3bd3f
    • Leonid Ravich's avatar
      dmaengine: ioat setting ioat timeout as module parameter · 89ee7f7d
      Leonid Ravich authored
      [ Upstream commit 87730ccb
      
       ]
      
      DMA transaction time to completion is a function of PCI bandwidth,
      transaction size and a queue depth.  So hard coded value for timeouts
      might be wrong for some scenarios.
      
      Signed-off-by: default avatarLeonid Ravich <Leonid.Ravich@emc.com>
      Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
      Link: https://lore.kernel.org/r/20200701184816.29138-1-leonid.ravich@dell.com
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      89ee7f7d
    • Evgeny Novikov's avatar
      hwmon: (aspeed-pwm-tacho) Avoid possible buffer overflow · a8626d1e
      Evgeny Novikov authored
      [ Upstream commit bc4071aa
      
       ]
      
      aspeed_create_fan() reads a pwm_port value using of_property_read_u32().
      If pwm_port will be more than ARRAY_SIZE(pwm_port_params), there will be
      a buffer overflow in
      aspeed_create_pwm_port()->aspeed_set_pwm_port_enable(). The patch fixes
      the potential buffer overflow.
      
      Found by Linux Driver Verification project (linuxtesting.org).
      
      Signed-off-by: default avatarEvgeny Novikov <novikov@ispras.ru>
      Link: https://lore.kernel.org/r/20200703111518.9644-1-novikov@ispras.ru
      Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a8626d1e
    • Marc Kleine-Budde's avatar
      regmap: dev_get_regmap_match(): fix string comparison · bfdfb71f
      Marc Kleine-Budde authored
      [ Upstream commit e84861fe
      
       ]
      
      This function is used by dev_get_regmap() to retrieve a regmap for the
      specified device. If the device has more than one regmap, the name parameter
      can be used to specify one.
      
      The code here uses a pointer comparison to check for equal strings. This
      however will probably always fail, as the regmap->name is allocated via
      kstrdup_const() from the regmap's config->name.
      
      Fix this by using strcmp() instead.
      
      Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
      Link: https://lore.kernel.org/r/20200703103315.267996-1-mkl@pengutronix.de
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bfdfb71f
    • leilk.liu's avatar
      spi: mediatek: use correct SPI_CFG2_REG MACRO · 153b6cb8
      leilk.liu authored
      [ Upstream commit 44b37eb7
      
       ]
      
      this patch use correct SPI_CFG2_REG offset.
      
      Signed-off-by: default avatarleilk.liu <leilk.liu@mediatek.com>
      Link: https://lore.kernel.org/r/20200701090020.7935-1-leilk.liu@mediatek.com
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      153b6cb8
    • Merlijn Wajer's avatar
      Input: add `SW_MACHINE_COVER` · d8b49f70
      Merlijn Wajer authored
      [ Upstream commit c463bb2a
      
       ]
      
      This event code represents the state of a removable cover of a device.
      Value 0 means that the cover is open or removed, value 1 means that the
      cover is closed.
      
      Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      Acked-by: default avatarTony Lindgren <tony@atomide.com>
      Signed-off-by: default avatarMerlijn Wajer <merlijn@wizzup.org>
      Link: https://lore.kernel.org/r/20200612125402.18393-2-merlijn@wizzup.org
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d8b49f70
    • Dinghao Liu's avatar
      dmaengine: tegra210-adma: Fix runtime PM imbalance on error · 7db83a5c
      Dinghao Liu authored
      [ Upstream commit 5b78fac4
      
       ]
      
      pm_runtime_get_sync() increments the runtime PM usage counter even
      when it returns an error code. Thus a pairing decrement is needed on
      the error handling path to keep the counter balanced.
      
      Signed-off-by: default avatarDinghao Liu <dinghao.liu@zju.edu.cn>
      Reviewed-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Link: https://lore.kernel.org/r/20200624064626.19855-1-dinghao.liu@zju.edu.cn
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7db83a5c
    • Hans de Goede's avatar
      HID: apple: Disable Fn-key key-re-mapping on clone keyboards · 5a8f385e
      Hans de Goede authored
      [ Upstream commit a5d81646
      
       ]
      
      The Maxxter KB-BT-001 Bluetooth keyboard, which looks somewhat like the
      Apple Wireless Keyboard, is using the vendor and product IDs (05AC:0239)
      of the Apple Wireless Keyboard (2009 ANSI version) <sigh>.
      
      But its F1 - F10 keys are marked as sending F1 - F10, not the special
      functions hid-apple.c maps them too; and since its descriptors do not
      contain the HID_UP_CUSTOM | 0x0003 usage apple-hid looks for for the
      Fn-key, apple_setup_input() never gets called, so F1 - F6 are mapped
      to key-codes which have not been set in the keybit array causing them
      to not send any events at all.
      
      The lack of a usage code matching the Fn key in the clone is actually
      useful as this allows solving this problem in a generic way.
      
      This commits adds a fn_found flag and it adds a input_configured
      callback which checks if this flag is set once all usages have been
      mapped. If it is not set, then assume this is a clone and clear the
      quirks bitmap so that the hid-apple code does not add any special
      handling to this keyboard.
      
      This fixes F1 - F6 not sending anything at all and F7 - F12 sending
      the wrong codes on the Maxxter KB-BT-001 Bluetooth keyboard and on
      similar clones.
      
      Cc: Joao Moreno <mail@joaomoreno.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5a8f385e
    • Federico Ricchiuto's avatar
      HID: i2c-hid: add Mediacom FlexBook edge13 to descriptor override · 9861c68e
      Federico Ricchiuto authored
      [ Upstream commit 43e666ac
      
       ]
      
      The Mediacom FlexBook edge13 uses the SIPODEV SP1064 touchpad, which does not
      supply descriptors, so it has to be added to the override list.
      
      Signed-off-by: default avatarFederico Ricchiuto <fed.ricchiuto@gmail.com>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9861c68e
    • Pi-Hsun Shih's avatar
      scripts/decode_stacktrace: strip basepath from all paths · 0280a1eb
      Pi-Hsun Shih authored
      [ Upstream commit d178770d ]
      
      Currently the basepath is removed only from the beginning of the string.
      When the symbol is inlined and there's multiple line outputs of
      addr2line, only the first line would have basepath removed.
      
      Change to remove the basepath prefix from all lines.
      
      Fixes: 31013836
      
       ("scripts/decode_stacktrace: match basepath using shell prefix operator, not regex")
      Co-developed-by: default avatarShik Chen <shik@chromium.org>
      Signed-off-by: default avatarPi-Hsun Shih <pihsun@chromium.org>
      Signed-off-by: default avatarShik Chen <shik@chromium.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
      Cc: Sasha Levin <sashal@kernel.org>
      Cc: Nicolas Boichat <drinkcat@chromium.org>
      Cc: Jiri Slaby <jslaby@suse.cz>
      Link: http://lkml.kernel.org/r/20200720082709.252805-1-pihsun@chromium.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0280a1eb
    • Matthew Howell's avatar
      serial: exar: Fix GPIO configuration for Sealevel cards based on XR17V35X · 7b8d75ae
      Matthew Howell authored
      [ Upstream commit 5fdbe136 ]
      
      Sealevel XR17V35X based devices are inoperable on kernel versions
      4.11 and above due to a change in the GPIO preconfiguration introduced in
      commit
      7dea8165. This patch fixes this by preconfiguring the GPIO on Sealevel
      cards to the value (0x00) used prior to commit 7dea8165
      
      With GPIOs preconfigured as per commit 7dea8165 all ports on
      Sealevel XR17V35X based devices become stuck in high impedance
      mode, regardless of dip-switch or software configuration. This
      causes the device to become effectively unusable. This patch (in
      various forms) has been distributed to our customers and no issues
      related to it have been reported.
      
      Fixes: 7dea8165
      
       ("serial: exar: Preconfigure xr17v35x MPIOs as output")
      Signed-off-by: default avatarMatthew Howell <matthew.howell@sealevel.com>
      Link: https://lore.kernel.org/r/alpine.DEB.2.21.2007221605270.13247@tstest-VirtualBox
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7b8d75ae
    • Cong Wang's avatar
      bonding: check return value of register_netdevice() in bond_newlink() · 96b61dc0
      Cong Wang authored
      [ Upstream commit c75d1d52 ]
      
      Very similar to commit 544f287b
      ("bonding: check error value of register_netdevice() immediately"),
      we should immediately check the return value of register_netdevice()
      before doing anything else.
      
      Fixes: 005db31d
      
       ("bonding: set carrier off for devices created through netlink")
      Reported-and-tested-by: default avatar <syzbot+bbc3a11c4da63c1b74d6@syzkaller.appspotmail.com>
      Cc: Beniamino Galvani <bgalvani@redhat.com>
      Cc: Taehee Yoo <ap420073@gmail.com>
      Cc: Jay Vosburgh <j.vosburgh@gmail.com>
      Signed-off-by: default avatarCong Wang <xiyou.wangcong@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      96b61dc0
    • Wolfram Sang's avatar
      i2c: rcar: always clear ICSAR to avoid side effects · a48f663b
      Wolfram Sang authored
      [ Upstream commit eb015971 ]
      
      On R-Car Gen2, we get a timeout when reading from the address set in
      ICSAR, even though the slave interface is disabled. Clearing it fixes
      this situation. Note that Gen3 is not affected.
      
      To reproduce: bind and undbind an I2C slave on some bus, run
      'i2cdetect' on that bus.
      
      Fixes: de20d185
      
       ("i2c: rcar: add slave support")
      Signed-off-by: default avatarWolfram Sang <wsa+renesas@sang-engineering.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a48f663b
    • guodeqing's avatar
      ipvs: fix the connection sync failed in some cases · eaca5d0e
      guodeqing authored
      [ Upstream commit 8210e344 ]
      
      The sync_thread_backup only checks sk_receive_queue is empty or not,
      there is a situation which cannot sync the connection entries when
      sk_receive_queue is empty and sk_rmem_alloc is larger than sk_rcvbuf,
      the sync packets are dropped in __udp_enqueue_schedule_skb, this is
      because the packets in reader_queue is not read, so the rmem is
      not reclaimed.
      
      Here I add the check of whether the reader_queue of the udp sock is
      empty or not to solve this problem.
      
      Fixes: 2276f58a
      
       ("udp: use a separate rx queue for packet reception")
      Reported-by: default avatarzhouxudong <zhouxudong8@huawei.com>
      Signed-off-by: default avatarguodeqing <geffrey.guo@huawei.com>
      Acked-by: default avatarJulian Anastasov <ja@ssi.bg>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      eaca5d0e
    • Liu Jian's avatar
      mlxsw: destroy workqueue when trap_register in mlxsw_emad_init · e5c48bab
      Liu Jian authored
      [ Upstream commit 5dbaeb87 ]
      
      When mlxsw_core_trap_register fails in mlxsw_emad_init,
      destroy_workqueue() shouled be called to destroy mlxsw_core->emad_wq.
      
      Fixes: d965465b
      
       ("mlxsw: core: Fix possible deadlock")
      Signed-off-by: default avatarLiu Jian <liujian56@huawei.com>
      Reviewed-by: default avatarIdo Schimmel <idosch@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e5c48bab
    • Taehee Yoo's avatar
      bonding: check error value of register_netdevice() immediately · 5ef388cb
      Taehee Yoo authored
      [ Upstream commit 544f287b ]
      
      If register_netdevice() is failed, net_device should not be used
      because variables are uninitialized or freed.
      So, the routine should be stopped immediately.
      But, bond_create() doesn't check return value of register_netdevice()
      immediately. That will result in a panic because of using uninitialized
      or freed memory.
      
      Test commands:
          modprobe netdev-notifier-error-inject
          echo -22 > /sys/kernel/debug/notifier-error-inject/netdev/\
      actions/NETDEV_REGISTER/error
          modprobe bonding max_bonds=3
      
      Splat looks like:
      [  375.028492][  T193] general protection fault, probably for non-canonical address 0x6b6b6b6b6b6b6b6b: 0000 [#1] SMP DEBUG_PAGEALLOC PTI
      [  375.033207][  T193] CPU: 2 PID: 193 Comm: kworker/2:2 Not tainted 5.8.0-rc4+ #645
      [  375.036068][  T193] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1ubuntu1 04/01/2014
      [  375.039673][  T193] Workqueue: events linkwatch_event
      [  375.041557][  T193] RIP: 0010:dev_activate+0x4a/0x340
      [  375.043381][  T193] Code: 40 a8 04 0f 85 db 00 00 00 8b 83 08 04 00 00 85 c0 0f 84 0d 01 00 00 31 d2 89 d0 48 8d 04 40 48 c1 e0 07 48 03 83 00 04 00 00 <48> 8b 48 10 f6 41 10 01 75 08 f0 80 a1 a0 01 00 00 fd 48 89 48 08
      [  375.050267][  T193] RSP: 0018:ffff9f8facfcfdd8 EFLAGS: 00010202
      [  375.052410][  T193] RAX: 6b6b6b6b6b6b6b6b RBX: ffff9f8fae6ea000 RCX: 0000000000000006
      [  375.055178][  T193] RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff9f8fae6ea000
      [  375.057762][  T193] RBP: ffff9f8fae6ea000 R08: 0000000000000000 R09: 0000000000000000
      [  375.059810][  T193] R10: 0000000000000001 R11: 0000000000000000 R12: ffff9f8facfcfe08
      [  375.061892][  T193] R13: ffffffff883587e0 R14: 0000000000000000 R15: ffff9f8fae6ea580
      [  375.063931][  T193] FS:  0000000000000000(0000) GS:ffff9f8fbae00000(0000) knlGS:0000000000000000
      [  375.066239][  T193] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  375.067841][  T193] CR2: 00007f2f542167a0 CR3: 000000012cee6002 CR4: 00000000003606e0
      [  375.069657][  T193] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      [  375.071471][  T193] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      [  375.073269][  T193] Call Trace:
      [  375.074005][  T193]  linkwatch_do_dev+0x4d/0x50
      [  375.075052][  T193]  __linkwatch_run_queue+0x10b/0x200
      [  375.076244][  T193]  linkwatch_event+0x21/0x30
      [  375.077274][  T193]  process_one_work+0x252/0x600
      [  375.078379][  T193]  ? process_one_work+0x600/0x600
      [  375.079518][  T193]  worker_thread+0x3c/0x380
      [  375.080534][  T193]  ? process_one_work+0x600/0x600
      [  375.081668][  T193]  kthread+0x139/0x150
      [  375.082567][  T193]  ? kthread_park+0x90/0x90
      [  375.083567][  T193]  ret_from_fork+0x22/0x30
      
      Fixes: e826eafa
      
       ("bonding: Call netif_carrier_off after register_netdevice")
      Signed-off-by: default avatarTaehee Yoo <ap420073@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5ef388cb