Skip to content
  1. Dec 22, 2021
    • Tony Lindgren's avatar
      bus: ti-sysc: Fix variable set but not used warning for reinit_modules · e24fc898
      Tony Lindgren authored
      commit 1b1da99b upstream.
      
      Fix drivers/bus/ti-sysc.c:2494:13: error: variable 'error' set but not
      used introduced by commit 9d881361
      
       ("bus: ti-sysc: Add quirk handling
      for reinit on context lost").
      
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e24fc898
    • Paul E. McKenney's avatar
      rcu: Mark accesses to rcu_state.n_force_qs · 70692b06
      Paul E. McKenney authored
      commit 2431774f
      
       upstream.
      
      This commit marks accesses to the rcu_state.n_force_qs.  These data
      races are hard to make happen, but syzkaller was equal to the task.
      
      Reported-by: default avatar <syzbot+e08a83a1940ec3846cd5@syzkaller.appspotmail.com>
      Acked-by: default avatarMarco Elver <elver@google.com>
      Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      70692b06
    • George Kennedy's avatar
      scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select() · a9078e79
      George Kennedy authored
      commit e0a2c28d
      
       upstream.
      
      In resp_mode_select() sanity check the block descriptor len to avoid UAF.
      
      BUG: KASAN: use-after-free in resp_mode_select+0xa4c/0xb40 drivers/scsi/scsi_debug.c:2509
      Read of size 1 at addr ffff888026670f50 by task scsicmd/15032
      
      CPU: 1 PID: 15032 Comm: scsicmd Not tainted 5.15.0-01d0625 #15
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
      Call Trace:
       <TASK>
       dump_stack_lvl+0x89/0xb5 lib/dump_stack.c:107
       print_address_description.constprop.9+0x28/0x160 mm/kasan/report.c:257
       kasan_report.cold.14+0x7d/0x117 mm/kasan/report.c:443
       __asan_report_load1_noabort+0x14/0x20 mm/kasan/report_generic.c:306
       resp_mode_select+0xa4c/0xb40 drivers/scsi/scsi_debug.c:2509
       schedule_resp+0x4af/0x1a10 drivers/scsi/scsi_debug.c:5483
       scsi_debug_queuecommand+0x8c9/0x1e70 drivers/scsi/scsi_debug.c:7537
       scsi_queue_rq+0x16b4/0x2d10 drivers/scsi/scsi_lib.c:1521
       blk_mq_dispatch_rq_list+0xb9b/0x2700 block/blk-mq.c:1640
       __blk_mq_sched_dispatch_requests+0x28f/0x590 block/blk-mq-sched.c:325
       blk_mq_sched_dispatch_requests+0x105/0x190 block/blk-mq-sched.c:358
       __blk_mq_run_hw_queue+0xe5/0x150 block/blk-mq.c:1762
       __blk_mq_delay_run_hw_queue+0x4f8/0x5c0 block/blk-mq.c:1839
       blk_mq_run_hw_queue+0x18d/0x350 block/blk-mq.c:1891
       blk_mq_sched_insert_request+0x3db/0x4e0 block/blk-mq-sched.c:474
       blk_execute_rq_nowait+0x16b/0x1c0 block/blk-exec.c:63
       sg_common_write.isra.18+0xeb3/0x2000 drivers/scsi/sg.c:837
       sg_new_write.isra.19+0x570/0x8c0 drivers/scsi/sg.c:775
       sg_ioctl_common+0x14d6/0x2710 drivers/scsi/sg.c:941
       sg_ioctl+0xa2/0x180 drivers/scsi/sg.c:1166
       __x64_sys_ioctl+0x19d/0x220 fs/ioctl.c:52
       do_syscall_64+0x3a/0x80 arch/x86/entry/common.c:50
       entry_SYSCALL_64_after_hwframe+0x44/0xae arch/x86/entry/entry_64.S:113
      
      Link: https://lore.kernel.org/r/1637262208-28850-1-git-send-email-george.kennedy@oracle.com
      Reported-by: default avatarsyzkaller <syzkaller@googlegroups.com>
      Acked-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
      Signed-off-by: default avatarGeorge Kennedy <george.kennedy@oracle.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a9078e79
    • George Kennedy's avatar
      scsi: scsi_debug: Fix type in min_t to avoid stack OOB · bdb854f1
      George Kennedy authored
      commit 36e07d7e
      
       upstream.
      
      Change min_t() to use type "u32" instead of type "int" to avoid stack out
      of bounds. With min_t() type "int" the values get sign extended and the
      larger value gets used causing stack out of bounds.
      
      BUG: KASAN: stack-out-of-bounds in memcpy include/linux/fortify-string.h:191 [inline]
      BUG: KASAN: stack-out-of-bounds in sg_copy_buffer+0x1de/0x240 lib/scatterlist.c:976
      Read of size 127 at addr ffff888072607128 by task syz-executor.7/18707
      
      CPU: 1 PID: 18707 Comm: syz-executor.7 Not tainted 5.15.0-syzk #1
      Hardware name: Red Hat KVM, BIOS 1.13.0-2
      Call Trace:
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x89/0xb5 lib/dump_stack.c:106
       print_address_description.constprop.9+0x28/0x160 mm/kasan/report.c:256
       __kasan_report mm/kasan/report.c:442 [inline]
       kasan_report.cold.14+0x7d/0x117 mm/kasan/report.c:459
       check_region_inline mm/kasan/generic.c:183 [inline]
       kasan_check_range+0x1a3/0x210 mm/kasan/generic.c:189
       memcpy+0x23/0x60 mm/kasan/shadow.c:65
       memcpy include/linux/fortify-string.h:191 [inline]
       sg_copy_buffer+0x1de/0x240 lib/scatterlist.c:976
       sg_copy_from_buffer+0x33/0x40 lib/scatterlist.c:1000
       fill_from_dev_buffer.part.34+0x82/0x130 drivers/scsi/scsi_debug.c:1162
       fill_from_dev_buffer drivers/scsi/scsi_debug.c:1888 [inline]
       resp_readcap16+0x365/0x3b0 drivers/scsi/scsi_debug.c:1887
       schedule_resp+0x4d8/0x1a70 drivers/scsi/scsi_debug.c:5478
       scsi_debug_queuecommand+0x8c9/0x1ec0 drivers/scsi/scsi_debug.c:7533
       scsi_dispatch_cmd drivers/scsi/scsi_lib.c:1520 [inline]
       scsi_queue_rq+0x16b0/0x2d40 drivers/scsi/scsi_lib.c:1699
       blk_mq_dispatch_rq_list+0xb9b/0x2700 block/blk-mq.c:1639
       __blk_mq_sched_dispatch_requests+0x28f/0x590 block/blk-mq-sched.c:325
       blk_mq_sched_dispatch_requests+0x105/0x190 block/blk-mq-sched.c:358
       __blk_mq_run_hw_queue+0xe5/0x150 block/blk-mq.c:1761
       __blk_mq_delay_run_hw_queue+0x4f8/0x5c0 block/blk-mq.c:1838
       blk_mq_run_hw_queue+0x18d/0x350 block/blk-mq.c:1891
       blk_mq_sched_insert_request+0x3db/0x4e0 block/blk-mq-sched.c:474
       blk_execute_rq_nowait+0x16b/0x1c0 block/blk-exec.c:62
       sg_common_write.isra.18+0xeb3/0x2000 drivers/scsi/sg.c:836
       sg_new_write.isra.19+0x570/0x8c0 drivers/scsi/sg.c:774
       sg_ioctl_common+0x14d6/0x2710 drivers/scsi/sg.c:939
       sg_ioctl+0xa2/0x180 drivers/scsi/sg.c:1165
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:874 [inline]
       __se_sys_ioctl fs/ioctl.c:860 [inline]
       __x64_sys_ioctl+0x19d/0x220 fs/ioctl.c:860
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x3a/0x80 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Link: https://lore.kernel.org/r/1636484247-21254-1-git-send-email-george.kennedy@oracle.com
      Reported-by: default avatarsyzkaller <syzkaller@googlegroups.com>
      Acked-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
      Signed-off-by: default avatarGeorge Kennedy <george.kennedy@oracle.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bdb854f1
    • George Kennedy's avatar
      scsi: scsi_debug: Don't call kcalloc() if size arg is zero · aa1f9127
      George Kennedy authored
      commit 3344b58b
      
       upstream.
      
      If the size arg to kcalloc() is zero, it returns ZERO_SIZE_PTR.  Because of
      that, for a following NULL pointer check to work on the returned pointer,
      kcalloc() must not be called with the size arg equal to zero. Return early
      without error before the kcalloc() call if size arg is zero.
      
      BUG: KASAN: null-ptr-deref in memcpy include/linux/fortify-string.h:191 [inline]
      BUG: KASAN: null-ptr-deref in sg_copy_buffer+0x138/0x240 lib/scatterlist.c:974
      Write of size 4 at addr 0000000000000010 by task syz-executor.1/22789
      
      CPU: 1 PID: 22789 Comm: syz-executor.1 Not tainted 5.15.0-syzk #1
      Hardware name: Red Hat KVM, BIOS 1.13.0-2
      Call Trace:
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x89/0xb5 lib/dump_stack.c:106
       __kasan_report mm/kasan/report.c:446 [inline]
       kasan_report.cold.14+0x112/0x117 mm/kasan/report.c:459
       check_region_inline mm/kasan/generic.c:183 [inline]
       kasan_check_range+0x1a3/0x210 mm/kasan/generic.c:189
       memcpy+0x3b/0x60 mm/kasan/shadow.c:66
       memcpy include/linux/fortify-string.h:191 [inline]
       sg_copy_buffer+0x138/0x240 lib/scatterlist.c:974
       do_dout_fetch drivers/scsi/scsi_debug.c:2954 [inline]
       do_dout_fetch drivers/scsi/scsi_debug.c:2946 [inline]
       resp_verify+0x49e/0x930 drivers/scsi/scsi_debug.c:4276
       schedule_resp+0x4d8/0x1a70 drivers/scsi/scsi_debug.c:5478
       scsi_debug_queuecommand+0x8c9/0x1ec0 drivers/scsi/scsi_debug.c:7533
       scsi_dispatch_cmd drivers/scsi/scsi_lib.c:1520 [inline]
       scsi_queue_rq+0x16b0/0x2d40 drivers/scsi/scsi_lib.c:1699
       blk_mq_dispatch_rq_list+0xb9b/0x2700 block/blk-mq.c:1639
       __blk_mq_sched_dispatch_requests+0x28f/0x590 block/blk-mq-sched.c:325
       blk_mq_sched_dispatch_requests+0x105/0x190 block/blk-mq-sched.c:358
       __blk_mq_run_hw_queue+0xe5/0x150 block/blk-mq.c:1761
       __blk_mq_delay_run_hw_queue+0x4f8/0x5c0 block/blk-mq.c:1838
       blk_mq_run_hw_queue+0x18d/0x350 block/blk-mq.c:1891
       blk_mq_sched_insert_request+0x3db/0x4e0 block/blk-mq-sched.c:474
       blk_execute_rq_nowait+0x16b/0x1c0 block/blk-exec.c:62
       blk_execute_rq+0xdb/0x360 block/blk-exec.c:102
       sg_scsi_ioctl drivers/scsi/scsi_ioctl.c:621 [inline]
       scsi_ioctl+0x8bb/0x15c0 drivers/scsi/scsi_ioctl.c:930
       sg_ioctl_common+0x172d/0x2710 drivers/scsi/sg.c:1112
       sg_ioctl+0xa2/0x180 drivers/scsi/sg.c:1165
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:874 [inline]
       __se_sys_ioctl fs/ioctl.c:860 [inline]
       __x64_sys_ioctl+0x19d/0x220 fs/ioctl.c:860
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x3a/0x80 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Link: https://lore.kernel.org/r/1636056397-13151-1-git-send-email-george.kennedy@oracle.com
      Reported-by: default avatarsyzkaller <syzkaller@googlegroups.com>
      Acked-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
      Signed-off-by: default avatarGeorge Kennedy <george.kennedy@oracle.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      aa1f9127
    • Miklos Szeredi's avatar
      ovl: fix warning in ovl_create_real() · 6859985a
      Miklos Szeredi authored
      commit 1f5573cf
      
       upstream.
      
      Syzbot triggered the following warning in ovl_workdir_create() ->
      ovl_create_real():
      
      	if (!err && WARN_ON(!newdentry->d_inode)) {
      
      The reason is that the cgroup2 filesystem returns from mkdir without
      instantiating the new dentry.
      
      Weird filesystems such as this will be rejected by overlayfs at a later
      stage during setup, but to prevent such a warning, call ovl_mkdir_real()
      directly from ovl_workdir_create() and reject this case early.
      
      Reported-and-tested-by: default avatar <syzbot+75eab84fd0af9e8bf66b@syzkaller.appspotmail.com>
      Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6859985a
    • Miklos Szeredi's avatar
      fuse: annotate lock in fuse_reverse_inval_entry() · 5fd7d62d
      Miklos Szeredi authored
      commit bda9a719
      
       upstream.
      
      Add missing inode lock annotatation; found by syzbot.
      
      Reported-and-tested-by: default avatar <syzbot+9f747458f5990eaa8d43@syzkaller.appspotmail.com>
      Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5fd7d62d
    • Pavel Skripkin's avatar
      media: mxl111sf: change mutex_init() location · b99bdf12
      Pavel Skripkin authored
      commit 44870a9e
      
       upstream.
      
      Syzbot reported, that mxl111sf_ctrl_msg() uses uninitialized
      mutex. The problem was in wrong mutex_init() location.
      
      Previous mutex_init(&state->msg_lock) call was in ->init() function, but
      dvb_usbv2_init() has this order of calls:
      
      	dvb_usbv2_init()
      	  dvb_usbv2_adapter_init()
      	    dvb_usbv2_adapter_frontend_init()
      	      props->frontend_attach()
      
      	  props->init()
      
      Since mxl111sf_* devices call mxl111sf_ctrl_msg() in ->frontend_attach()
      internally we need to initialize state->msg_lock before
      frontend_attach(). To achieve it, ->probe() call added to all mxl111sf_*
      devices, which will simply initiaize mutex.
      
      Reported-and-tested-by: default avatar <syzbot+5ca0bf339f13c4243001@syzkaller.appspotmail.com>
      
      Fixes: 85722118
      
       ("[media] mxl111sf: convert to new DVB USB")
      Signed-off-by: default avatarPavel Skripkin <paskripkin@gmail.com>
      Signed-off-by: default avatarSean Young <sean@mess.org>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b99bdf12
    • Magnus Karlsson's avatar
      xsk: Do not sleep in poll() when need_wakeup set · 0413f7a1
      Magnus Karlsson authored
      commit bd0687c1 upstream.
      
      Do not sleep in poll() when the need_wakeup flag is set. When this
      flag is set, the application needs to explicitly wake up the driver
      with a syscall (poll, recvmsg, sendmsg, etc.) to guarantee that Rx
      and/or Tx processing will be processed promptly. But the current code
      in poll(), sleeps first then wakes up the driver. This means that no
      driver processing will occur (baring any interrupts) until the timeout
      has expired.
      
      Fix this by checking the need_wakeup flag first and if set, wake the
      driver and return to the application. Only if need_wakeup is not set
      should the process sleep if there is a timeout set in the poll() call.
      
      Fixes: 77cd0d7b
      
       ("xsk: add support for need_wakeup flag in AF_XDP rings")
      Reported-by: default avatarKeith Wiles <keith.wiles@intel.com>
      Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
      Link: https://lore.kernel.org/bpf/20211214102607.7677-1-magnus.karlsson@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0413f7a1
    • Fabio Estevam's avatar
      ARM: dts: imx6ull-pinfunc: Fix CSI_DATA07__ESAI_TX0 pad name · 6b8d8ecd
      Fabio Estevam authored
      commit 737e65c7 upstream.
      
      According to the i.MX6ULL Reference Manual, pad CSI_DATA07 may
      have the ESAI_TX0 functionality, not ESAI_T0.
      
      Also, NXP's i.MX Config Tools 10.0 generates dtsi with the
      MX6ULL_PAD_CSI_DATA07__ESAI_TX0 naming, so fix it accordingly.
      
      There are no devicetree users in mainline that use the old name,
      so just remove the old entry.
      
      Fixes: c201369d
      
       ("ARM: dts: imx6ull: add imx6ull support")
      Reported-by: default avatarGeorge Makarov <georgemakarov1@gmail.com>
      Signed-off-by: default avatarFabio Estevam <festevam@gmail.com>
      Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6b8d8ecd
    • Nathan Chancellor's avatar
      Input: touchscreen - avoid bitwise vs logical OR warning · 8affa1b6
      Nathan Chancellor authored
      commit a02dcde5
      
       upstream.
      
      A new warning in clang points out a few places in this driver where a
      bitwise OR is being used with boolean types:
      
      drivers/input/touchscreen.c:81:17: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
              data_present = touchscreen_get_prop_u32(dev, "touchscreen-min-x",
                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      This use of a bitwise OR is intentional, as bitwise operations do not
      short circuit, which allows all the calls to touchscreen_get_prop_u32()
      to happen so that the last parameter is initialized while coalescing the
      results of the calls to make a decision after they are all evaluated.
      
      To make this clearer to the compiler, use the '|=' operator to assign
      the result of each touchscreen_get_prop_u32() call to data_present,
      which keeps the meaning of the code the same but makes it obvious that
      every one of these calls is expected to happen.
      
      Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Reported-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Link: https://lore.kernel.org/r/20211014205757.3474635-1-nathan@kernel.org
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarAnders Roxell <anders.roxell@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8affa1b6
    • Le Ma's avatar
      drm/amdgpu: correct register access for RLC_JUMP_TABLE_RESTORE · aec5897b
      Le Ma authored
      commit f3a8076e
      
       upstream.
      
      should count on GC IP base address
      
      Signed-off-by: default avatarLe Ma <le.ma@amd.com>
      Signed-off-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
      Reviewed-by: default avatarHawking Zhang <Hawking.Zhang@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      aec5897b
    • George Kennedy's avatar
      libata: if T_LENGTH is zero, dma direction should be DMA_NONE · c1d51926
      George Kennedy authored
      commit 5da5231b
      
       upstream.
      
      Avoid data corruption by rejecting pass-through commands where
      T_LENGTH is zero (No data is transferred) and the dma direction
      is not DMA_NONE.
      
      Cc: <stable@vger.kernel.org>
      Reported-by: default avatar <syzkaller&lt;syzkaller@googlegroups.com>
      Signed-off-by: default avatarGeorge <Kennedy&lt;george.kennedy@oracle.com>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c1d51926
    • Yu Liao's avatar
      timekeeping: Really make sure wall_to_monotonic isn't positive · a9f2c6af
      Yu Liao authored
      commit 4e8c11b6 upstream.
      
      Even after commit e1d7ba87 ("time: Always make sure wall_to_monotonic
      isn't positive") it is still possible to make wall_to_monotonic positive
      by running the following code:
      
          int main(void)
          {
              struct timespec time;
      
              clock_gettime(CLOCK_MONOTONIC, &time);
              time.tv_nsec = 0;
              clock_settime(CLOCK_REALTIME, &time);
              return 0;
          }
      
      The reason is that the second parameter of timespec64_compare(), ts_delta,
      may be unnormalized because the delta is calculated with an open coded
      substraction which causes the comparison of tv_sec to yield the wrong
      result:
      
        wall_to_monotonic = { .tv_sec = -10, .tv_nsec =  900000000 }
        ts_delta 	    = { .tv_sec =  -9, .tv_nsec = -900000000 }
      
      That makes timespec64_compare() claim that wall_to_monotonic < ts_delta,
      but actually the result should be wall_to_monotonic > ts_delta.
      
      After normalization, the result of timespec64_compare() is correct because
      the tv_sec comparison is not longer misleading:
      
        wall_to_monotonic = { .tv_sec = -10, .tv_nsec =  900000000 }
        ts_delta 	    = { .tv_sec = -10, .tv_nsec =  100000000 }
      
      Use timespec64_sub() to ensure that ts_delta is normalized, which fixes the
      issue.
      
      Fixes: e1d7ba87
      
       ("time: Always make sure wall_to_monotonic isn't positive")
      Signed-off-by: default avatarYu Liao <liaoyu15@huawei.com>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20211213135727.1656662-1-liaoyu15@huawei.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a9f2c6af
    • Ji-Ze Hong (Peter Hong)'s avatar
      serial: 8250_fintek: Fix garbled text for console · 6471ebcd
      Ji-Ze Hong (Peter Hong) authored
      commit 6c33ff72 upstream.
      
      Commit fab8a02b ("serial: 8250_fintek: Enable high speed mode on Fintek F81866")
      introduced support to use high baudrate with Fintek SuperIO UARTs. It'll
      change clocksources when the UART probed.
      
      But when user add kernel parameter "console=ttyS0,115200 console=tty0" to make
      the UART as console output, the console will output garbled text after the
      following kernel message.
      
      [    3.681188] Serial: 8250/16550 driver, 32 ports, IRQ sharing enabled
      
      The issue is occurs in following step:
      	probe_setup_port() -> fintek_8250_goto_highspeed()
      
      It change clocksource from 115200 to 921600 with wrong time, it should change
      clocksource in set_termios() not in probed. The following 3 patches are
      implemented change clocksource in fintek_8250_set_termios().
      
      Commit 58178914 ("serial: 8250_fintek: UART dynamic clocksource on Fintek F81216H")
      Commit 195638b6 ("serial: 8250_fintek: UART dynamic clocksource on Fintek F81866")
      Commit 423d9118 ("serial: 8250_fintek: Add F81966 Support")
      
      Due to the high baud rate had implemented above 3 patches and the patch
      Commit fab8a02b ("serial: 8250_fintek: Enable high speed mode on Fintek F81866")
      is bugged, So this patch will remove it.
      
      Fixes: fab8a02b
      
       ("serial: 8250_fintek: Enable high speed mode on Fintek F81866")
      Signed-off-by: default avatarJi-Ze Hong (Peter Hong) <hpeter+linux_kernel@gmail.com>
      Link: https://lore.kernel.org/r/20211215075835.2072-1-hpeter+linux_kernel@gmail.com
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6471ebcd
    • Tejun Heo's avatar
      iocost: Fix divide-by-zero on donation from low hweight cgroup · a7c80674
      Tejun Heo authored
      commit edaa2633 upstream.
      
      The donation calculation logic assumes that the donor has non-zero
      after-donation hweight, so the lowest active hweight a donating cgroup can
      have is 2 so that it can donate 1 while keeping the other 1 for itself.
      Earlier, we only donated from cgroups with sizable surpluses so this
      condition was always true. However, with the precise donation algorithm
      implemented, f1de2439
      
       ("blk-iocost: revamp donation amount
      determination") made the donation amount calculation exact enabling even low
      hweight cgroups to donate.
      
      This means that in rare occasions, a cgroup with active hweight of 1 can
      enter donation calculation triggering the following warning and then a
      divide-by-zero oops.
      
       WARNING: CPU: 4 PID: 0 at block/blk-iocost.c:1928 transfer_surpluses.cold+0x0/0x53 [884/94867]
       ...
       RIP: 0010:transfer_surpluses.cold+0x0/0x53
       Code: 92 ff 48 c7 c7 28 d1 ab b5 65 48 8b 34 25 00 ae 01 00 48 81 c6 90 06 00 00 e8 8b 3f fe ff 48 c7 c0 ea ff ff ff e9 95 ff 92 ff <0f> 0b 48 c7 c7 30 da ab b5 e8 71 3f fe ff 4c 89 e8 4d 85 ed 74 0
      4
       ...
       Call Trace:
        <IRQ>
        ioc_timer_fn+0x1043/0x1390
        call_timer_fn+0xa1/0x2c0
        __run_timers.part.0+0x1ec/0x2e0
        run_timer_softirq+0x35/0x70
       ...
       iocg: invalid donation weights in /a/b: active=1 donating=1 after=0
      
      Fix it by excluding cgroups w/ active hweight < 2 from donating. Excluding
      these extreme low hweight donations shouldn't affect work conservation in
      any meaningful way.
      
      Signed-off-by: default avatarTejun Heo <tj@kernel.org>
      Fixes: f1de2439
      
       ("blk-iocost: revamp donation amount determination")
      Cc: stable@vger.kernel.org # v5.10+
      Link: https://lore.kernel.org/r/Ybfh86iSvpWKxhVM@slm.duckdns.org
      Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a7c80674
    • Naohiro Aota's avatar
      zonefs: add MODULE_ALIAS_FS · bcebb8eb
      Naohiro Aota authored
      commit 8ffea259 upstream.
      
      Add MODULE_ALIAS_FS() to load the module automatically when you do "mount
      -t zonefs".
      
      Fixes: 8dcc1a9d
      
       ("fs: New zonefs file system")
      Cc: stable <stable@vger.kernel.org> # 5.6+
      Signed-off-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
      Reviewed-by: default avatarJohannes Thumshirn <jth@kernel.org>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bcebb8eb
    • Filipe Manana's avatar
      btrfs: fix double free of anon_dev after failure to create subvolume · 1c414ff6
      Filipe Manana authored
      commit 33fab972 upstream.
      
      When creating a subvolume, at create_subvol(), we allocate an anonymous
      device and later call btrfs_get_new_fs_root(), which in turn just calls
      btrfs_get_root_ref(). There we call btrfs_init_fs_root() which assigns
      the anonymous device to the root, but if after that call there's an error,
      when we jump to 'fail' label, we call btrfs_put_root(), which frees the
      anonymous device and then returns an error that is propagated back to
      create_subvol(). Than create_subvol() frees the anonymous device again.
      
      When this happens, if the anonymous device was not reallocated after
      the first time it was freed with btrfs_put_root(), we get a kernel
      message like the following:
      
        (...)
        [13950.282466] BTRFS: error (device dm-0) in create_subvol:663: errno=-5 IO failure
        [13950.283027] ida_free called for id=65 which is not allocated.
        [13950.285974] BTRFS info (device dm-0): forced readonly
        (...)
      
      If the anonymous device gets reallocated by another btrfs filesystem
      or any other kernel subsystem, then bad things can happen.
      
      So fix this by setting the root's anonymous device to 0 at
      btrfs_get_root_ref(), before we call btrfs_put_root(), if an error
      happened.
      
      Fixes: 2dfb1e43
      
       ("btrfs: preallocate anon block device at first phase of snapshot creation")
      CC: stable@vger.kernel.org # 5.10+
      Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
      Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1c414ff6
    • Jianglei Nie's avatar
      btrfs: fix memory leak in __add_inode_ref() · 005d9292
      Jianglei Nie authored
      commit f35838a6 upstream.
      
      Line 1169 (#3) allocates a memory chunk for victim_name by kmalloc(),
      but  when the function returns in line 1184 (#4) victim_name allocated
      by line 1169 (#3) is not freed, which will lead to a memory leak.
      There is a similar snippet of code in this function as allocating a memory
      chunk for victim_name in line 1104 (#1) as well as releasing the memory
      in line 1116 (#2).
      
      We should kfree() victim_name when the return value of backref_in_log()
      is less than zero and before the function returns in line 1184 (#4).
      
      1057 static inline int __add_inode_ref(struct btrfs_trans_handle *trans,
      1058 				  struct btrfs_root *root,
      1059 				  struct btrfs_path *path,
      1060 				  struct btrfs_root *log_root,
      1061 				  struct btrfs_inode *dir,
      1062 				  struct btrfs_inode *inode,
      1063 				  u64 inode_objectid, u64 parent_objectid,
      1064 				  u64 ref_index, char *name, int namelen,
      1065 				  int *search_done)
      1066 {
      
      1104 	victim_name = kmalloc(victim_name_len, GFP_NOFS);
      	// #1: kmalloc (victim_name-1)
      1105 	if (!victim_name)
      1106 		return -ENOMEM;
      
      1112	ret = backref_in_log(log_root, &search_key,
      1113			parent_objectid, victim_name,
      1114			victim_name_len);
      1115	if (ret < 0) {
      1116		kfree(victim_name); // #2: kfree (victim_name-1)
      1117		return ret;
      1118	} else if (!ret) {
      
      1169 	victim_name = kmalloc(victim_name_len, GFP_NOFS);
      	// #3: kmalloc (victim_name-2)
      1170 	if (!victim_name)
      1171 		return -ENOMEM;
      
      1180 	ret = backref_in_log(log_root, &search_key,
      1181 			parent_objectid, victim_name,
      1182 			victim_name_len);
      1183 	if (ret < 0) {
      1184 		return ret; // #4: missing kfree (victim_name-2)
      1185 	} else if (!ret) {
      
      1241 	return 0;
      1242 }
      
      Fixes: d3316c82
      
       ("btrfs: Properly handle backref_in_log retval")
      CC: stable@vger.kernel.org # 5.10+
      Reviewed-by: default avatarQu Wenruo <wqu@suse.com>
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarJianglei Nie <niejianglei2021@163.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      005d9292
    • Daniele Palmas's avatar
      USB: serial: option: add Telit FN990 compositions · cd98cb52
      Daniele Palmas authored
      commit 2b503c85
      
       upstream.
      
      Add the following Telit FN990 compositions:
      
      0x1070: tty, adb, rmnet, tty, tty, tty, tty
      0x1071: tty, adb, mbim, tty, tty, tty, tty
      0x1072: rndis, tty, adb, tty, tty, tty, tty
      0x1073: tty, adb, ecm, tty, tty, tty, tty
      
      Signed-off-by: default avatarDaniele Palmas <dnlplm@gmail.com>
      Link: https://lore.kernel.org/r/20211210100714.22587-1-dnlplm@gmail.com
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cd98cb52
    • Johan Hovold's avatar
      USB: serial: cp210x: fix CP2105 GPIO registration · 5c93584d
      Johan Hovold authored
      commit 83b67041
      
       upstream.
      
      When generalising GPIO support and adding support for CP2102N, the GPIO
      registration for some CP2105 devices accidentally broke. Specifically,
      when all the pins of a port are in "modem" mode, and thus unavailable
      for GPIO use, the GPIO chip would now be registered without having
      initialised the number of GPIO lines. This would in turn be rejected by
      gpiolib and some errors messages would be printed (but importantly probe
      would still succeed).
      
      Fix this by initialising the number of GPIO lines before registering the
      GPIO chip.
      
      Note that as for the other device types, and as when all CP2105 pins are
      muxed for LED function, the GPIO chip is registered also when no pins
      are available for GPIO use.
      
      Reported-by: default avatarMaarten Brock <m.brock@vanmierlo.com>
      Link: https://lore.kernel.org/r/5eb560c81d2ea1a2b4602a92d9f48a89@vanmierlo.com
      Fixes: c8acfe0a
      
       ("USB: serial: cp210x: implement GPIO support for CP2102N")
      Cc: stable@vger.kernel.org      # 4.19
      Cc: Karoly Pados <pados@pados.hu>
      Link: https://lore.kernel.org/r/20211126094348.31698-1-johan@kernel.org
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Tested-by: default avatarMaarten Brock <m.brock@vanmierlo.com>
      Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5c93584d
    • Nehal Bakulchandra Shah's avatar
      usb: xhci: Extend support for runtime power management for AMD's Yellow carp. · 8f207f12
      Nehal Bakulchandra Shah authored
      commit f886d4fb
      
       upstream.
      
      AMD's Yellow Carp platform has few more XHCI controllers,
      enable the runtime power management support for the same.
      
      Signed-off-by: default avatarNehal Bakulchandra Shah <Nehal-Bakulchandra.shah@amd.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211215093216.1839065-1-Nehal-Bakulchandra.shah@amd.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8f207f12
    • Stefan Roese's avatar
      PCI/MSI: Mask MSI-X vectors only on success · e5949933
      Stefan Roese authored
      commit 83dbf898 upstream.
      
      Masking all unused MSI-X entries is done to ensure that a crash kernel
      starts from a clean slate, which correponds to the reset state of the
      device as defined in the PCI-E specificion 3.0 and later:
      
       Vector Control for MSI-X Table Entries
       --------------------------------------
      
       "00: Mask bit:  When this bit is set, the function is prohibited from
                       sending a message using this MSI-X Table entry.
                       ...
                       This bit’s state after reset is 1 (entry is masked)."
      
      A Marvell NVME device fails to deliver MSI interrupts after trying to
      enable MSI-X interrupts due to that masking. It seems to take the MSI-X
      mask bits into account even when MSI-X is disabled.
      
      While not specification compliant, this can be cured by moving the masking
      into the success path, so that the MSI-X table entries stay in device reset
      state when the MSI-X setup fails.
      
      [ tglx: Move it into the success path, add comment and amend changelog ]
      
      Fixes: aa8092c1
      
       ("PCI/MSI: Mask all unused MSI-X entries")
      Signed-off-by: default avatarStefan Roese <sr@denx.de>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Cc: linux-pci@vger.kernel.org
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Michal Simek <michal.simek@xilinx.com>
      Cc: Marek Vasut <marex@denx.de>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20211210161025.3287927-1-sr@denx.de
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e5949933
    • Thomas Gleixner's avatar
      PCI/MSI: Clear PCI_MSIX_FLAGS_MASKALL on error · f8aa0918
      Thomas Gleixner authored
      commit 94185adb upstream.
      
      PCI_MSIX_FLAGS_MASKALL is set in the MSI-X control register at MSI-X
      interrupt setup time. It's cleared on success, but the error handling path
      only clears the PCI_MSIX_FLAGS_ENABLE bit.
      
      That's incorrect as the reset state of the PCI_MSIX_FLAGS_MASKALL bit is
      zero. That can be observed via lspci:
      
              Capabilities: [b0] MSI-X: Enable- Count=67 Masked+
      
      Clear the bit in the error path to restore the reset state.
      
      Fixes: 43855395
      
       ("PCI/MSI: Enable and mask MSI-X early")
      Reported-by: default avatarStefan Roese <sr@denx.de>
      Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
      Tested-by: default avatarStefan Roese <sr@denx.de>
      Cc: linux-pci@vger.kernel.org
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Cc: Michal Simek <michal.simek@xilinx.com>
      Cc: Marek Vasut <marex@denx.de>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/87tufevoqx.ffs@tglx
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f8aa0918
    • Amelie Delaunay's avatar
      usb: dwc2: fix STM ID/VBUS detection startup delay in dwc2_driver_probe · d17c5a38
      Amelie Delaunay authored
      commit fac6bf87 upstream.
      
      When activate_stm_id_vb_detection is enabled, ID and Vbus detection relies
      on sensing comparators. This detection needs time to stabilize.
      A delay was already applied in dwc2_resume() when reactivating the
      detection, but it wasn't done in dwc2_probe().
      This patch adds delay after enabling STM ID/VBUS detection. Then, ID state
      is good when initializing gadget and host, and avoid to get a wrong
      Connector ID Status Change interrupt.
      
      Fixes: a415083a
      
       ("usb: dwc2: add support for STM32MP15 SoCs USB OTG HS and FS")
      Cc: stable <stable@vger.kernel.org>
      Acked-by: default avatarMinas Harutyunyan <Minas.Harutyunyan@synopsys.com>
      Signed-off-by: default avatarAmelie Delaunay <amelie.delaunay@foss.st.com>
      Link: https://lore.kernel.org/r/20211207124510.268841-1-amelie.delaunay@foss.st.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d17c5a38
    • Jimmy Wang's avatar
      USB: NO_LPM quirk Lenovo USB-C to Ethernet Adapher(RTL8153-04) · 2b2edc8f
      Jimmy Wang authored
      commit 0ad3bd56
      
       upstream.
      
      This device doesn't work well with LPM, losing connectivity intermittently.
      Disable LPM to resolve the issue.
      
      Reviewed-by: default avatar <markpearson@lenovo.com>
      Signed-off-by: default avatarJimmy Wang <wangjm221@gmail.com>
      Cc: stable <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211214012652.4898-1-wangjm221@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2b2edc8f
    • Tetsuo Handa's avatar
      tty: n_hdlc: make n_hdlc_tty_wakeup() asynchronous · fd623e16
      Tetsuo Handa authored
      commit 1ee33b1c
      
       upstream.
      
      syzbot is reporting that an unprivileged user who logged in from tty
      console can crash the system using a reproducer shown below [1], for
      n_hdlc_tty_wakeup() is synchronously calling n_hdlc_send_frames().
      
      ----------
        #include <sys/ioctl.h>
        #include <unistd.h>
      
        int main(int argc, char *argv[])
        {
          const int disc = 0xd;
      
          ioctl(1, TIOCSETD, &disc);
          while (1) {
            ioctl(1, TCXONC, 0);
            write(1, "", 1);
            ioctl(1, TCXONC, 1); /* Kernel panic - not syncing: scheduling while atomic */
          }
        }
      ----------
      
      Linus suspected that "struct tty_ldisc"->ops->write_wakeup() must not
      sleep, and Jiri confirmed it from include/linux/tty_ldisc.h. Thus, defer
      n_hdlc_send_frames() from n_hdlc_tty_wakeup() to a WQ context like
      net/nfc/nci/uart.c does.
      
      Link: https://syzkaller.appspot.com/bug?extid=5f47a8cea6a12b77a876 [1]
      Reported-by: default avatarsyzbot <syzbot+5f47a8cea6a12b77a876@syzkaller.appspotmail.com>
      Cc: stable <stable@vger.kernel.org>
      Analyzed-by: default avatarFabio M. De Francesco <fmdefrancesco@gmail.com>
      Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Confirmed-by: default avatarJiri Slaby <jirislaby@kernel.org>
      Reviewed-by: default avatarFabio M. De Francesco <fmdefrancesco@gmail.com>
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Link: https://lore.kernel.org/r/40de8b7e-a3be-4486-4e33-1b1d1da452f8@i-love.sakura.ne.jp
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fd623e16
    • Vitaly Kuznetsov's avatar
      KVM: x86: Drop guest CPUID check for host initiated writes to MSR_IA32_PERF_CAPABILITIES · 9439fabf
      Vitaly Kuznetsov authored
      [ Upstream commit 1aa2abb3 ]
      
      The ability to write to MSR_IA32_PERF_CAPABILITIES from the host should
      not depend on guest visible CPUID entries, even if just to allow
      creating/restoring guest MSRs and CPUIDs in any sequence.
      
      Fixes: 27461da3
      
       ("KVM: x86/pmu: Support full width counting")
      Suggested-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
      Message-Id: <20211216165213.338923-3-vkuznets@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9439fabf
    • Greg Kroah-Hartman's avatar
      Revert "usb: early: convert to readl_poll_timeout_atomic()" · 5fe305c6
      Greg Kroah-Hartman authored
      [ Upstream commit c4d936ef ]
      
      This reverts commit 796eed4b
      
      .
      
      This change causes boot lockups when using "arlyprintk=xdbc" because
      ktime can not be used at this point in time in the boot process.  Also,
      it is not needed for very small delays like this.
      
      Reported-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Reported-by: default avatarPeter Zijlstra <peterz@infradead.org>
      Cc: Jann Horn <jannh@google.com>
      Cc: Chunfeng Yun <chunfeng.yun@mediatek.com>
      Fixes: 796eed4b
      
       ("usb: early: convert to readl_poll_timeout_atomic()")
      Link: https://lore.kernel.org/r/c2b5c9bb-1b75-bf56-3754-b5b18812d65e@linux.intel.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      5fe305c6
    • Greg Kroah-Hartman's avatar
      USB: gadget: bRequestType is a bitfield, not a enum · 2b54f485
      Greg Kroah-Hartman authored
      [ Upstream commit f08adf5a ]
      
      Szymon rightly pointed out that the previous check for the endpoint
      direction in bRequestType was not looking at only the bit involved, but
      rather the whole value.  Normally this is ok, but for some request
      types, bits other than bit 8 could be set and the check for the endpoint
      length could not stall correctly.
      
      Fix that up by only checking the single bit.
      
      Fixes: 153a2d7e
      
       ("USB: gadget: detect too-big endpoint 0 requests")
      Cc: Felipe Balbi <balbi@kernel.org>
      Reported-by: default avatarSzymon Heidrich <szymon.heidrich@gmail.com>
      Link: https://lore.kernel.org/r/20211214184621.385828-1-gregkh@linuxfoundation.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2b54f485
    • Xiaoming Ni's avatar
      powerpc/85xx: Fix oops when CONFIG_FSL_PMC=n · 151ffac3
      Xiaoming Ni authored
      [ Upstream commit 3dc709e5 ]
      
      When CONFIG_FSL_PMC is set to n, no value is assigned to cpu_up_prepare
      in the mpc85xx_pm_ops structure. As a result, oops is triggered in
      smp_85xx_start_cpu().
      
        smp: Bringing up secondary CPUs ...
        kernel tried to execute user page (0) - exploit attempt? (uid: 0)
        BUG: Unable to handle kernel instruction fetch (NULL pointer?)
        Faulting instruction address: 0x00000000
        Oops: Kernel access of bad area, sig: 11 [#1]
        ...
        NIP [00000000] 0x0
        LR [c0021d2c] smp_85xx_kick_cpu+0xe8/0x568
        Call Trace:
        [c1051da8] [c0021cb8] smp_85xx_kick_cpu+0x74/0x568 (unreliable)
        [c1051de8] [c0011460] __cpu_up+0xc0/0x228
        [c1051e18] [c0031bbc] bringup_cpu+0x30/0x224
        [c1051e48] [c0031f3c] cpu_up.constprop.0+0x180/0x33c
        [c1051e88] [c00322e8] bringup_nonboot_cpus+0x88/0xc8
        [c1051eb8] [c07e67bc] smp_init+0x30/0x78
        [c1051ed8] [c07d9e28] kernel_init_freeable+0x118/0x2a8
        [c1051f18] [c00032d8] kernel_init+0x14/0x124
        [c1051f38] [c0010278] ret_from_kernel_thread+0x14/0x1c
      
      Fixes: c45361ab
      
       ("powerpc/85xx: fix timebase sync issue when CONFIG_HOTPLUG_CPU=n")
      Reported-by: default avatarMartin Kennedy <hurricos@gmail.com>
      Signed-off-by: default avatarXiaoming Ni <nixiaoming@huawei.com>
      Tested-by: default avatarMartin Kennedy <hurricos@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20211126041153.16926-1-nixiaoming@huawei.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      151ffac3
    • Martin KaFai Lau's avatar
      bpf, selftests: Fix racing issue in btf_skc_cls_ingress test · fcf9194d
      Martin KaFai Lau authored
      [ Upstream commit c2fcbf81 ]
      
      The libbpf CI reported occasional failure in btf_skc_cls_ingress:
      
        test_syncookie:FAIL:Unexpected syncookie states gen_cookie:80326634 recv_cookie:0
        bpf prog error at line 97
      
      "error at line 97" means the bpf prog cannot find the listening socket
      when the final ack is received.  It then skipped processing
      the syncookie in the final ack which then led to "recv_cookie:0".
      
      The problem is the userspace program did not do accept() and went
      ahead to close(listen_fd) before the kernel (and the bpf prog) had
      a chance to process the final ack.
      
      The fix is to add accept() call so that the userspace will wait for
      the kernel to finish processing the final ack first before close()-ing
      everything.
      
      Fixes: 9a856cae
      
       ("bpf: selftest: Add test_btf_skc_cls_ingress")
      Reported-by: default avatarAndrii Nakryiko <andrii@kernel.org>
      Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
      Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
      Link: https://lore.kernel.org/bpf/20211216191630.466151-1-kafai@fb.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      fcf9194d
    • Eric Dumazet's avatar
      sit: do not call ipip6_dev_free() from sit_init_net() · 6f46c59e
      Eric Dumazet authored
      [ Upstream commit e28587cc ]
      
      ipip6_dev_free is sit dev->priv_destructor, already called
      by register_netdevice() if something goes wrong.
      
      Alternative would be to make ipip6_dev_free() robust against
      multiple invocations, but other drivers do not implement this
      strategy.
      
      syzbot reported:
      
      dst_release underflow
      WARNING: CPU: 0 PID: 5059 at net/core/dst.c:173 dst_release+0xd8/0xe0 net/core/dst.c:173
      Modules linked in:
      CPU: 1 PID: 5059 Comm: syz-executor.4 Not tainted 5.16.0-rc5-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      RIP: 0010:dst_release+0xd8/0xe0 net/core/dst.c:173
      Code: 4c 89 f2 89 d9 31 c0 5b 41 5e 5d e9 da d5 44 f9 e8 1d 90 5f f9 c6 05 87 48 c6 05 01 48 c7 c7 80 44 99 8b 31 c0 e8 e8 67 29 f9 <0f> 0b eb 85 0f 1f 40 00 53 48 89 fb e8 f7 8f 5f f9 48 83 c3 a8 48
      RSP: 0018:ffffc9000aa5faa0 EFLAGS: 00010246
      RAX: d6894a925dd15a00 RBX: 00000000ffffffff RCX: 0000000000040000
      RDX: ffffc90005e19000 RSI: 000000000003ffff RDI: 0000000000040000
      RBP: 0000000000000000 R08: ffffffff816a1f42 R09: ffffed1017344f2c
      R10: ffffed1017344f2c R11: 0000000000000000 R12: 0000607f462b1358
      R13: 1ffffffff1bfd305 R14: ffffe8ffffcb1358 R15: dffffc0000000000
      FS:  00007f66c71a2700(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f88aaed5058 CR3: 0000000023e0f000 CR4: 00000000003506f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <TASK>
       dst_cache_destroy+0x107/0x1e0 net/core/dst_cache.c:160
       ipip6_dev_free net/ipv6/sit.c:1414 [inline]
       sit_init_net+0x229/0x550 net/ipv6/sit.c:1936
       ops_init+0x313/0x430 net/core/net_namespace.c:140
       setup_net+0x35b/0x9d0 net/core/net_namespace.c:326
       copy_net_ns+0x359/0x5c0 net/core/net_namespace.c:470
       create_new_namespaces+0x4ce/0xa00 kernel/nsproxy.c:110
       unshare_nsproxy_namespaces+0x11e/0x180 kernel/nsproxy.c:226
       ksys_unshare+0x57d/0xb50 kernel/fork.c:3075
       __do_sys_unshare kernel/fork.c:3146 [inline]
       __se_sys_unshare kernel/fork.c:3144 [inline]
       __x64_sys_unshare+0x34/0x40 kernel/fork.c:3144
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x44/0xd0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      RIP: 0033:0x7f66c882ce99
      Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 bc ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007f66c71a2168 EFLAGS: 00000246 ORIG_RAX: 0000000000000110
      RAX: ffffffffffffffda RBX: 00007f66c893ff60 RCX: 00007f66c882ce99
      RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000048040200
      RBP: 00007f66c8886ff1 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      R13: 00007fff6634832f R14: 00007f66c71a2300 R15: 0000000000022000
       </TASK>
      
      Fixes: cf124db5
      
       ("net: Fix inconsistent teardown and release of private netdev state.")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Link: https://lore.kernel.org/r/20211216111741.1387540-1-eric.dumazet@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6f46c59e
    • Florian Fainelli's avatar
      net: systemport: Add global locking for descriptor lifecycle · 6e1011cd
      Florian Fainelli authored
      [ Upstream commit 8b8e6e78 ]
      
      The descriptor list is a shared resource across all of the transmit queues, and
      the locking mechanism used today only protects concurrency across a given
      transmit queue between the transmit and reclaiming. This creates an opportunity
      for the SYSTEMPORT hardware to work on corrupted descriptors if we have
      multiple producers at once which is the case when using multiple transmit
      queues.
      
      This was particularly noticeable when using multiple flows/transmit queues and
      it showed up in interesting ways in that UDP packets would get a correct UDP
      header checksum being calculated over an incorrect packet length. Similarly TCP
      packets would get an equally correct checksum computed by the hardware over an
      incorrect packet length.
      
      The SYSTEMPORT hardware maintains an internal descriptor list that it re-arranges
      when the driver produces a new descriptor anytime it writes to the
      WRITE_PORT_{HI,LO} registers, there is however some delay in the hardware to
      re-organize its descriptors and it is possible that concurrent TX queues
      eventually break this internal allocation scheme to the point where the
      length/status part of the descriptor gets used for an incorrect data buffer.
      
      The fix is to impose a global serialization for all TX queues in the short
      section where we are writing to the WRITE_PORT_{HI,LO} registers which solves
      the corruption even with multiple concurrent TX queues being used.
      
      Fixes: 80105bef
      
       ("net: systemport: add Broadcom SYSTEMPORT Ethernet MAC driver")
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Link: https://lore.kernel.org/r/20211215202450.4086240-1-f.fainelli@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6e1011cd
    • D. Wythe's avatar
      net/smc: Prevent smc_release() from long blocking · d1765f98
      D. Wythe authored
      [ Upstream commit 5c15b312 ]
      
      In nginx/wrk benchmark, there's a hung problem with high probability
      on case likes that: (client will last several minutes to exit)
      
      server: smc_run nginx
      
      client: smc_run wrk -c 10000 -t 1 http://server
      
      Client hangs with the following backtrace:
      
      0 [ffffa7ce8Of3bbf8] __schedule at ffffffff9f9eOd5f
      1 [ffffa7ce8Of3bc88] schedule at ffffffff9f9eløe6
      2 [ffffa7ce8Of3bcaO] schedule_timeout at ffffffff9f9e3f3c
      3 [ffffa7ce8Of3bd2O] wait_for_common at ffffffff9f9el9de
      4 [ffffa7ce8Of3bd8O] __flush_work at ffffffff9fOfeOl3
      5 [ffffa7ce8øf3bdfO] smc_release at ffffffffcO697d24 [smc]
      6 [ffffa7ce8Of3be2O] __sock_release at ffffffff9f8O2e2d
      7 [ffffa7ce8Of3be4ø] sock_close at ffffffff9f8ø2ebl
      8 [ffffa7ce8øf3be48] __fput at ffffffff9f334f93
      9 [ffffa7ce8Of3be78] task_work_run at ffffffff9flOlff5
      10 [ffffa7ce8Of3beaO] do_exit at ffffffff9fOe5Ol2
      11 [ffffa7ce8Of3bflO] do_group_exit at ffffffff9fOe592a
      12 [ffffa7ce8Of3bf38] __x64_sys_exit_group at ffffffff9fOe5994
      13 [ffffa7ce8Of3bf4O] do_syscall_64 at ffffffff9f9d4373
      14 [ffffa7ce8Of3bfsO] entry_SYSCALL_64_after_hwframe at ffffffff9fa0007c
      
      This issue dues to flush_work(), which is used to wait for
      smc_connect_work() to finish in smc_release(). Once lots of
      smc_connect_work() was pending or all executing work dangling,
      smc_release() has to block until one worker comes to free, which
      is equivalent to wait another smc_connnect_work() to finish.
      
      In order to fix this, There are two changes:
      
      1. For those idle smc_connect_work(), cancel it from the workqueue; for
         executing smc_connect_work(), waiting for it to finish. For that
         purpose, replace flush_work() with cancel_work_sync().
      
      2. Since smc_connect() hold a reference for passive closing, if
         smc_connect_work() has been cancelled, release the reference.
      
      Fixes: 24ac3a08
      
       ("net/smc: rebuild nonblocking connect")
      Reported-by: default avatarTony Lu <tonylu@linux.alibaba.com>
      Tested-by: default avatarDust Li <dust.li@linux.alibaba.com>
      Reviewed-by: default avatarDust Li <dust.li@linux.alibaba.com>
      Reviewed-by: default avatarTony Lu <tonylu@linux.alibaba.com>
      Signed-off-by: default avatarD. Wythe <alibuda@linux.alibaba.com>
      Acked-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
      Link: https://lore.kernel.org/r/1639571361-101128-1-git-send-email-alibuda@linux.alibaba.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d1765f98
    • Gal Pressman's avatar
      net: Fix double 0x prefix print in SKB dump · 337bb7bf
      Gal Pressman authored
      [ Upstream commit 8a03ef67 ]
      
      When printing netdev features %pNF already takes care of the 0x prefix,
      remove the explicit one.
      
      Fixes: 6413139d
      
       ("skbuff: increase verbosity when dumping skb data")
      Signed-off-by: default avatarGal Pressman <gal@nvidia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      337bb7bf
    • 蒋家盛's avatar
      sfc_ef100: potential dereference of null pointer · 734a3f31
      蒋家盛 authored
      [ Upstream commit 407ecd1b ]
      
      The return value of kmalloc() needs to be checked.
      To avoid use in efx_nic_update_stats() in case of the failure of alloc.
      
      Fixes: b593b6f1
      
       ("sfc_ef100: statistics gathering")
      Signed-off-by: default avatarJiasheng Jiang <jiasheng@iscas.ac.cn>
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      734a3f31
    • Willem de Bruijn's avatar
      net/packet: rx_owner_map depends on pg_vec · 7da349f0
      Willem de Bruijn authored
      [ Upstream commit ec6af094 ]
      
      Packet sockets may switch ring versions. Avoid misinterpreting state
      between versions, whose fields share a union. rx_owner_map is only
      allocated with a packet ring (pg_vec) and both are swapped together.
      If pg_vec is NULL, meaning no packet ring was allocated, then neither
      was rx_owner_map. And the field may be old state from a tpacket_v3.
      
      Fixes: 61fad681
      
       ("net/packet: tpacket_rcv: avoid a producer race condition")
      Reported-by: default avatarSyzbot <syzbot+1ac0994a0a0c55151121@syzkaller.appspotmail.com>
      Signed-off-by: default avatarWillem de Bruijn <willemb@google.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20211215143937.106178-1-willemdebruijn.kernel@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7da349f0
    • Haimin Zhang's avatar
      netdevsim: Zero-initialize memory for new map's value in function nsim_bpf_map_alloc · 1a34fb9e
      Haimin Zhang authored
      [ Upstream commit 48122177 ]
      
      Zero-initialize memory for new map's value in function nsim_bpf_map_alloc
      since it may cause a potential kernel information leak issue, as follows:
      1. nsim_bpf_map_alloc calls nsim_map_alloc_elem to allocate elements for
      a new map.
      2. nsim_map_alloc_elem uses kmalloc to allocate map's value, but doesn't
      zero it.
      3. A user application can use IOCTL BPF_MAP_LOOKUP_ELEM to get specific
      element's information in the map.
      4. The kernel function map_lookup_elem will call bpf_map_copy_value to get
      the information allocated at step-2, then use copy_to_user to copy to the
      user buffer.
      This can only leak information for an array map.
      
      Fixes: 395cacb5
      
       ("netdevsim: bpf: support fake map offload")
      Suggested-by: default avatarJakub Kicinski <kuba@kernel.org>
      Acked-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarHaimin Zhang <tcs.kernel@gmail.com>
      Link: https://lore.kernel.org/r/20211215111530.72103-1-tcs.kernel@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1a34fb9e
    • Cyril Novikov's avatar
      ixgbe: set X550 MDIO speed before talking to PHY · d3e1f545
      Cyril Novikov authored
      [ Upstream commit bf0a3750 ]
      
      The MDIO bus speed must be initialized before talking to the PHY the first
      time in order to avoid talking to it using a speed that the PHY doesn't
      support.
      
      This fixes HW initialization error -17 (IXGBE_ERR_PHY_ADDR_INVALID) on
      Denverton CPUs (a.k.a. the Atom C3000 family) on ports with a 10Gb network
      plugged in. On those devices, HLREG0[MDCSPD] resets to 1, which combined
      with the 10Gb network results in a 24MHz MDIO speed, which is apparently
      too fast for the connected PHY. PHY register reads over MDIO bus return
      garbage, leading to initialization failure.
      
      Reproduced with Linux kernel 4.19 and 5.15-rc7. Can be reproduced using
      the following setup:
      
      * Use an Atom C3000 family system with at least one X552 LAN on the SoC
      * Disable PXE or other BIOS network initialization if possible
        (the interface must not be initialized before Linux boots)
      * Connect a live 10Gb Ethernet cable to an X550 port
      * Power cycle (not reset, doesn't always work) the system and boot Linux
      * Observe: ixgbe interfaces w/ 10GbE cables plugged in fail with error -17
      
      Fixes: e84db727
      
       ("ixgbe: Introduce function to control MDIO speed")
      Signed-off-by: default avatarCyril Novikov <cnovikov@lynx.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d3e1f545