Skip to content
  1. Jan 05, 2022
    • Greg Kroah-Hartman's avatar
      Linux 4.19.224 · a94dc740
      Greg Kroah-Hartman authored
      
      
      Link: https://lore.kernel.org/r/20220103142052.162223000@linuxfoundation.org
      Tested-by: default avatarPavel Machek (CIP) <pavel@denx.de>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Tested-by: default avatarLinux Kernel Functional Testing <lkft@linaro.org>
      Tested-by: default avatarSudip Mukherjee <sudip.mukherjee@codethink.co.uk>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      v4.19.224
      a94dc740
    • Muchun Song's avatar
      net: fix use-after-free in tw_timer_handler · a8e1944b
      Muchun Song authored
      commit e22e45fc upstream.
      
      A real world panic issue was found as follow in Linux 5.4.
      
          BUG: unable to handle page fault for address: ffffde49a863de28
          PGD 7e6fe62067 P4D 7e6fe62067 PUD 7e6fe63067 PMD f51e064067 PTE 0
          RIP: 0010:tw_timer_handler+0x20/0x40
          Call Trace:
           <IRQ>
           call_timer_fn+0x2b/0x120
           run_timer_softirq+0x1ef/0x450
           __do_softirq+0x10d/0x2b8
           irq_exit+0xc7/0xd0
           smp_apic_timer_interrupt+0x68/0x120
           apic_timer_interrupt+0xf/0x20
      
      This issue was also reported since 2017 in the thread [1],
      unfortunately, the issue was still can be reproduced after fixing
      DCCP.
      
      The ipv4_mib_exit_net is called before tcp_sk_exit_batch when a net
      namespace is destroyed since tcp_sk_ops is registered befrore
      ipv4_mib_ops, which means tcp_sk_ops is in the front of ipv4_mib_ops
      in the list of pernet_list. There will be a use-after-free on
      net->mib.net_statistics in tw_timer_handler after ipv4_mib_exit_net
      if there are some inflight time-wait timers.
      
      This bug is not introduced by commit f2bf415c ("mib: add net to
      NET_ADD_STATS_BH") since the net_statistics is a global variable
      instead of dynamic allocation and freeing. Actually, commit
      61a7e260 ("mib: put net statistics on struct net") introduces
      the bug since it put net statistics on struct net and free it when
      net namespace is destroyed.
      
      Moving init_ipv4_mibs() to the front of tcp_init() to fix this bug
      and replace pr_crit() with panic() since continuing is meaningless
      when init_ipv4_mibs() fails.
      
      [1] https://groups.google.com/g/syzkaller/c/p1tn-_Kc6l4/m/smuL_FMAAgAJ?pli=1
      
      Fixes: 61a7e260
      
       ("mib: put net statistics on struct net")
      Signed-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
      Cc: Cong Wang <cong.wang@bytedance.com>
      Cc: Fam Zheng <fam.zheng@bytedance.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20211228104145.9426-1-songmuchun@bytedance.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a8e1944b
    • Leo L. Schwab's avatar
      Input: spaceball - fix parsing of movement data packets · 2731fad1
      Leo L. Schwab authored
      commit bc7ec917
      
       upstream.
      
      The spaceball.c module was not properly parsing the movement reports
      coming from the device.  The code read axis data as signed 16-bit
      little-endian values starting at offset 2.
      
      In fact, axis data in Spaceball movement reports are signed 16-bit
      big-endian values starting at offset 3.  This was determined first by
      visually inspecting the data packets, and later verified by consulting:
      http://spacemice.org/pdf/SpaceBall_2003-3003_Protocol.pdf
      
      If this ever worked properly, it was in the time before Git...
      
      Signed-off-by: default avatarLeo L. Schwab <ewhac@ewhac.org>
      Link: https://lore.kernel.org/r/20211221101630.1146385-1-ewhac@ewhac.org
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2731fad1
    • Pavel Skripkin's avatar
      Input: appletouch - initialize work before device registration · a02e1404
      Pavel Skripkin authored
      commit 9f3ccdc3 upstream.
      
      Syzbot has reported warning in __flush_work(). This warning is caused by
      work->func == NULL, which means missing work initialization.
      
      This may happen, since input_dev->close() calls
      cancel_work_sync(&dev->work), but dev->work initalization happens _after_
      input_register_device() call.
      
      So this patch moves dev->work initialization before registering input
      device
      
      Fixes: 5a6eb676
      
       ("Input: appletouch - improve powersaving for Geyser3 devices")
      Reported-and-tested-by: default avatar <syzbot+b88c5eae27386b252bbd@syzkaller.appspotmail.com>
      Signed-off-by: default avatarPavel Skripkin <paskripkin@gmail.com>
      Link: https://lore.kernel.org/r/20211230141151.17300-1-paskripkin@gmail.com
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a02e1404
    • Alexey Makhalov's avatar
      scsi: vmw_pvscsi: Set residual data length conditionally · 64c46a0c
      Alexey Makhalov authored
      commit 142c779d upstream.
      
      The PVSCSI implementation in the VMware hypervisor under specific
      configuration ("SCSI Bus Sharing" set to "Physical") returns zero dataLen
      in the completion descriptor for READ CAPACITY(16). As a result, the kernel
      can not detect proper disk geometry. This can be recognized by the kernel
      message:
      
        [ 0.776588] sd 1:0:0:0: [sdb] Sector size 0 reported, assuming 512.
      
      The PVSCSI implementation in QEMU does not set dataLen at all, keeping it
      zeroed. This leads to a boot hang as was reported by Shmulik Ladkani.
      
      It is likely that the controller returns the garbage at the end of the
      buffer. Residual length should be set by the driver in that case. The SCSI
      layer will erase corresponding data. See commit bdb2b8ca ("[SCSI] erase
      invalid data returned by device") for details.
      
      Commit e662502b ("scsi: vmw_pvscsi: Set correct residual data length")
      introduced the issue by setting residual length unconditionally, causing
      the SCSI layer to erase the useful payload beyond dataLen when this value
      is returned as 0.
      
      As a result, considering existing issues in implementations of PVSCSI
      controllers, we do not want to call scsi_set_resid() when dataLen ==
      0. Calling scsi_set_resid() has no effect if dataLen equals buffer length.
      
      Link: https://lore.kernel.org/lkml/20210824120028.30d9c071@blondie/
      Link: https://lore.kernel.org/r/20211220190514.55935-1-amakhalov@vmware.com
      Fixes: e662502b
      
       ("scsi: vmw_pvscsi: Set correct residual data length")
      Cc: Matt Wang <wwentao@vmware.com>
      Cc: Martin K. Petersen <martin.petersen@oracle.com>
      Cc: Vishal Bhakta <vbhakta@vmware.com>
      Cc: VMware PV-Drivers <pv-drivers@vmware.com>
      Cc: James E.J. Bottomley <jejb@linux.ibm.com>
      Cc: linux-scsi@vger.kernel.org
      Cc: stable@vger.kernel.org
      Reported-and-suggested-by: default avatarShmulik Ladkani <shmulik.ladkani@gmail.com>
      Signed-off-by: default avatarAlexey Makhalov <amakhalov@vmware.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      64c46a0c
    • Todd Kjos's avatar
      binder: fix async_free_space accounting for empty parcels · 7c706440
      Todd Kjos authored
      commit cfd0d84b upstream.
      
      In 4.13, commit 74310e06 ("android: binder: Move buffer out of area shared with user space")
      fixed a kernel structure visibility issue. As part of that patch,
      sizeof(void *) was used as the buffer size for 0-length data payloads so
      the driver could detect abusive clients sending 0-length asynchronous
      transactions to a server by enforcing limits on async_free_size.
      
      Unfortunately, on the "free" side, the accounting of async_free_space
      did not add the sizeof(void *) back. The result was that up to 8-bytes of
      async_free_space were leaked on every async transaction of 8-bytes or
      less.  These small transactions are uncommon, so this accounting issue
      has gone undetected for several years.
      
      The fix is to use "buffer_size" (the allocated buffer size) instead of
      "size" (the logical buffer size) when updating the async_free_space
      during the free operation. These are the same except for this
      corner case of asynchronous transactions with payloads < 8 bytes.
      
      Fixes: 74310e06
      
       ("android: binder: Move buffer out of area shared with user space")
      Signed-off-by: default avatarTodd Kjos <tkjos@google.com>
      Cc: stable@vger.kernel.org # 4.14+
      Link: https://lore.kernel.org/r/20211220190150.2107077-1-tkjos@google.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7c706440
    • Chunfeng Yun's avatar
      usb: mtu3: set interval of FS intr and isoc endpoint · d1405af5
      Chunfeng Yun authored
      commit 43f3b8cb upstream.
      
      Add support to set interval also for FS intr and isoc endpoint.
      
      Fixes: 4d79e042
      
       ("usb: mtu3: add support for usb3.1 IP")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarChunfeng Yun <chunfeng.yun@mediatek.com>
      Link: https://lore.kernel.org/r/20211218095749.6250-4-chunfeng.yun@mediatek.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d1405af5
    • Vincent Pelletier's avatar
      usb: gadget: f_fs: Clear ffs_eventfd in ffs_data_clear. · 33f6a0cb
      Vincent Pelletier authored
      commit b1e08873 upstream.
      
      ffs_data_clear is indirectly called from both ffs_fs_kill_sb and
      ffs_ep0_release, so it ends up being called twice when userland closes ep0
      and then unmounts f_fs.
      If userland provided an eventfd along with function's USB descriptors, it
      ends up calling eventfd_ctx_put as many times, causing a refcount
      underflow.
      NULL-ify ffs_eventfd to prevent these extraneous eventfd_ctx_put calls.
      
      Also, set epfiles to NULL right after de-allocating it, for readability.
      
      For completeness, ffs_data_clear actually ends up being called thrice, the
      last call being before the whole ffs structure gets freed, so when this
      specific sequence happens there is a second underflow happening (but not
      being reported):
      
      /sys/kernel/debug/tracing# modprobe usb_f_fs
      /sys/kernel/debug/tracing# echo ffs_data_clear > set_ftrace_filter
      /sys/kernel/debug/tracing# echo function > current_tracer
      /sys/kernel/debug/tracing# echo 1 > tracing_on
      (setup gadget, run and kill function userland process, teardown gadget)
      /sys/kernel/debug/tracing# echo 0 > tracing_on
      /sys/kernel/debug/tracing# cat trace
       smartcard-openp-436     [000] .....  1946.208786: ffs_data_clear <-ffs_data_closed
       smartcard-openp-431     [000] .....  1946.279147: ffs_data_clear <-ffs_data_closed
       smartcard-openp-431     [000] .n...  1946.905512: ffs_data_clear <-ffs_data_put
      
      Warning output corresponding to above trace:
      [ 1946.284139] WARNING: CPU: 0 PID: 431 at lib/refcount.c:28 refcount_warn_saturate+0x110/0x15c
      [ 1946.293094] refcount_t: underflow; use-after-free.
      [ 1946.298164] Modules linked in: usb_f_ncm(E) u_ether(E) usb_f_fs(E) hci_uart(E) btqca(E) btrtl(E) btbcm(E) btintel(E) bluetooth(E) nls_ascii(E) nls_cp437(E) vfat(E) fat(E) bcm2835_v4l2(CE) bcm2835_mmal_vchiq(CE) videobuf2_vmalloc(E) videobuf2_memops(E) sha512_generic(E) videobuf2_v4l2(E) sha512_arm(E) videobuf2_common(E) videodev(E) cpufreq_dt(E) snd_bcm2835(CE) brcmfmac(E) mc(E) vc4(E) ctr(E) brcmutil(E) snd_soc_core(E) snd_pcm_dmaengine(E) drbg(E) snd_pcm(E) snd_timer(E) snd(E) soundcore(E) drm_kms_helper(E) cec(E) ansi_cprng(E) rc_core(E) syscopyarea(E) raspberrypi_cpufreq(E) sysfillrect(E) sysimgblt(E) cfg80211(E) max17040_battery(OE) raspberrypi_hwmon(E) fb_sys_fops(E) regmap_i2c(E) ecdh_generic(E) rfkill(E) ecc(E) bcm2835_rng(E) rng_core(E) vchiq(CE) leds_gpio(E) libcomposite(E) fuse(E) configfs(E) ip_tables(E) x_tables(E) autofs4(E) ext4(E) crc16(E) mbcache(E) jbd2(E) crc32c_generic(E) sdhci_iproc(E) sdhci_pltfm(E) sdhci(E)
      [ 1946.399633] CPU: 0 PID: 431 Comm: smartcard-openp Tainted: G         C OE     5.15.0-1-rpi #1  Debian 5.15.3-1
      [ 1946.417950] Hardware name: BCM2835
      [ 1946.425442] Backtrace:
      [ 1946.432048] [<c08d60a0>] (dump_backtrace) from [<c08d62ec>] (show_stack+0x20/0x24)
      [ 1946.448226]  r7:00000009 r6:0000001c r5:c04a948c r4:c0a64e2c
      [ 1946.458412] [<c08d62cc>] (show_stack) from [<c08d9ae0>] (dump_stack+0x28/0x30)
      [ 1946.470380] [<c08d9ab8>] (dump_stack) from [<c0123500>] (__warn+0xe8/0x154)
      [ 1946.482067]  r5:c04a948c r4:c0a71dc8
      [ 1946.490184] [<c0123418>] (__warn) from [<c08d6948>] (warn_slowpath_fmt+0xa0/0xe4)
      [ 1946.506758]  r7:00000009 r6:0000001c r5:c0a71dc8 r4:c0a71e04
      [ 1946.517070] [<c08d68ac>] (warn_slowpath_fmt) from [<c04a948c>] (refcount_warn_saturate+0x110/0x15c)
      [ 1946.535309]  r8:c0100224 r7:c0dfcb84 r6:ffffffff r5:c3b84c00 r4:c24a17c0
      [ 1946.546708] [<c04a937c>] (refcount_warn_saturate) from [<c0380134>] (eventfd_ctx_put+0x48/0x74)
      [ 1946.564476] [<c03800ec>] (eventfd_ctx_put) from [<bf5464e8>] (ffs_data_clear+0xd0/0x118 [usb_f_fs])
      [ 1946.582664]  r5:c3b84c00 r4:c2695b00
      [ 1946.590668] [<bf546418>] (ffs_data_clear [usb_f_fs]) from [<bf547cc0>] (ffs_data_closed+0x9c/0x150 [usb_f_fs])
      [ 1946.609608]  r5:bf54d014 r4:c2695b00
      [ 1946.617522] [<bf547c24>] (ffs_data_closed [usb_f_fs]) from [<bf547da0>] (ffs_fs_kill_sb+0x2c/0x30 [usb_f_fs])
      [ 1946.636217]  r7:c0dfcb84 r6:c3a12260 r5:bf54d014 r4:c229f000
      [ 1946.646273] [<bf547d74>] (ffs_fs_kill_sb [usb_f_fs]) from [<c0326d50>] (deactivate_locked_super+0x54/0x9c)
      [ 1946.664893]  r5:bf54d014 r4:c229f000
      [ 1946.672921] [<c0326cfc>] (deactivate_locked_super) from [<c0326df8>] (deactivate_super+0x60/0x64)
      [ 1946.690722]  r5:c2a09000 r4:c229f000
      [ 1946.698706] [<c0326d98>] (deactivate_super) from [<c0349a28>] (cleanup_mnt+0xe4/0x14c)
      [ 1946.715553]  r5:c2a09000 r4:00000000
      [ 1946.723528] [<c0349944>] (cleanup_mnt) from [<c0349b08>] (__cleanup_mnt+0x1c/0x20)
      [ 1946.739922]  r7:c0dfcb84 r6:c3a12260 r5:c3a126fc r4:00000000
      [ 1946.750088] [<c0349aec>] (__cleanup_mnt) from [<c0143d10>] (task_work_run+0x84/0xb8)
      [ 1946.766602] [<c0143c8c>] (task_work_run) from [<c010bdc8>] (do_work_pending+0x470/0x56c)
      [ 1946.783540]  r7:5ac3c35a r6:c0d0424c r5:c200bfb0 r4:c200a000
      [ 1946.793614] [<c010b958>] (do_work_pending) from [<c01000c0>] (slow_work_pending+0xc/0x20)
      [ 1946.810553] Exception stack(0xc200bfb0 to 0xc200bff8)
      [ 1946.820129] bfa0:                                     00000000 00000000 000000aa b5e21430
      [ 1946.837104] bfc0: bef867a0 00000001 bef86840 00000034 bef86838 bef86790 bef86794 bef867a0
      [ 1946.854125] bfe0: 00000000 bef86798 b67b7a1c b6d626a4 60000010 b5a23760
      [ 1946.865335]  r10:00000000 r9:c200a000 r8:c0100224 r7:00000034 r6:bef86840 r5:00000001
      [ 1946.881914]  r4:bef867a0
      [ 1946.888793] ---[ end trace 7387f2a9725b28d0 ]---
      
      Fixes: 5e33f6fd
      
       ("usb: gadget: ffs: add eventfd notification about ffs events")
      Cc: stable <stable@vger.kernel.org>
      Signed-off-by: default avatarVincent Pelletier <plr.vincent@gmail.com>
      Link: https://lore.kernel.org/r/f79eeea29f3f98de6782a064ec0f7351ad2f598f.1639793920.git.plr.vincent@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      33f6a0cb
    • Mathias Nyman's avatar
      xhci: Fresco FL1100 controller should not have BROKEN_MSI quirk set. · a3d19b02
      Mathias Nyman authored
      commit e4844092 upstream.
      
      The Fresco Logic FL1100 controller needs the TRUST_TX_LENGTH quirk like
      other Fresco controllers, but should not have the BROKEN_MSI quirks set.
      
      BROKEN_MSI quirk causes issues in detecting usb drives connected to docks
      with this FL1100 controller.
      The BROKEN_MSI flag was apparently accidentally set together with the
      TRUST_TX_LENGTH quirk
      
      Original patch went to stable so this should go there as well.
      
      Fixes: ea0f69d8
      
       ("xhci: Enable trust tx length quirk for Fresco FL11 USB controller")
      Cc: stable@vger.kernel.org
      cc: Nikolay Martynov <mar.kolya@gmail.com>
      Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Link: https://lore.kernel.org/r/20211221112825.54690-2-mathias.nyman@linux.intel.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a3d19b02
    • Dmitry V. Levin's avatar
      uapi: fix linux/nfc.h userspace compilation errors · 89a25843
      Dmitry V. Levin authored
      commit 7175f02c upstream.
      
      Replace sa_family_t with __kernel_sa_family_t to fix the following
      linux/nfc.h userspace compilation errors:
      
      /usr/include/linux/nfc.h:266:2: error: unknown type name 'sa_family_t'
        sa_family_t sa_family;
      /usr/include/linux/nfc.h:274:2: error: unknown type name 'sa_family_t'
        sa_family_t sa_family;
      
      Fixes: 23b7869c ("NFC: add the NFC socket raw protocol")
      Fixes: d646960f
      
       ("NFC: Initial LLCP support")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarDmitry V. Levin <ldv@altlinux.org>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      89a25843
    • Krzysztof Kozlowski's avatar
      nfc: uapi: use kernel size_t to fix user-space builds · eeb9b115
      Krzysztof Kozlowski authored
      commit 79b69a83 upstream.
      
      Fix user-space builds if it includes /usr/include/linux/nfc.h before
      some of other headers:
      
        /usr/include/linux/nfc.h:281:9: error: unknown type name ‘size_t’
          281 |         size_t service_name_len;
              |         ^~~~~~
      
      Fixes: d646960f
      
       ("NFC: Initial LLCP support")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      eeb9b115
    • Pavel Skripkin's avatar
      i2c: validate user data in compat ioctl · 407c8708
      Pavel Skripkin authored
      [ Upstream commit bb436283
      
       ]
      
      Wrong user data may cause warning in i2c_transfer(), ex: zero msgs.
      Userspace should not be able to trigger warnings, so this patch adds
      validation checks for user data in compact ioctl to prevent reported
      warnings
      
      Reported-and-tested-by: default avatar <syzbot+e417648b303855b91d8a@syzkaller.appspotmail.com>
      Fixes: 7d5cb456
      
       ("i2c compat ioctls: move to ->compat_ioctl()")
      Signed-off-by: default avatarPavel Skripkin <paskripkin@gmail.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      407c8708
    • Miaoqian Lin's avatar
      fsl/fman: Fix missing put_device() call in fman_port_probe · 7ad47243
      Miaoqian Lin authored
      [ Upstream commit bf2b09fe ]
      
      The reference taken by 'of_find_device_by_node()' must be released when
      not needed anymore.
      Add the corresponding 'put_device()' in the and error handling paths.
      
      Fixes: 18a6c85f
      
       ("fsl/fman: Add FMan Port Support")
      Signed-off-by: default avatarMiaoqian Lin <linmq006@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7ad47243
    • wujianguo's avatar
      selftests/net: udpgso_bench_tx: fix dst ip argument · 690327ea
      wujianguo authored
      [ Upstream commit 9c1952ae ]
      
      udpgso_bench_tx call setup_sockaddr() for dest address before
      parsing all arguments, if we specify "-p ${dst_port}" after "-D ${dst_ip}",
      then ${dst_port} will be ignored, and using default cfg_port 8000.
      
      This will cause test case "multiple GRO socks" failed in udpgro.sh.
      
      Setup sockaddr after parsing all arguments.
      
      Fixes: 3a687bef
      
       ("selftests: udp gso benchmark")
      Signed-off-by: default avatarJianguo Wu <wujianguo@chinatelecom.cn>
      Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
      Link: https://lore.kernel.org/r/ff620d9f-5b52-06ab-5286-44b945453002@163.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      690327ea
    • Gal Pressman's avatar
      net/mlx5e: Fix wrong features assignment in case of error · 92f1b62f
      Gal Pressman authored
      [ Upstream commit 992d8a4e ]
      
      In case of an error in mlx5e_set_features(), 'netdev->features' must be
      updated with the correct state of the device to indicate which features
      were updated successfully.
      To do that we maintain a copy of 'netdev->features' and update it after
      successful feature changes, so we can assign it to back to
      'netdev->features' if needed.
      
      However, since not all netdev features are handled by the driver (e.g.
      GRO/TSO/etc), some features may not be updated correctly in case of an
      error updating another feature.
      
      For example, while requesting to disable TSO (feature which is not
      handled by the driver) and enable HW-GRO, if an error occurs during
      HW-GRO enable, 'oper_features' will be assigned with 'netdev->features'
      and HW-GRO turned off. TSO will remain enabled in such case, which is a
      bug.
      
      To solve that, instead of using 'netdev->features' as the baseline of
      'oper_features' and changing it on set feature success, use 'features'
      instead and update it in case of errors.
      
      Fixes: 75b81ce7
      
       ("net/mlx5e: Don't override netdev features field unless in error flow")
      Signed-off-by: default avatarGal Pressman <gal@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      92f1b62f
    • Wei Yongjun's avatar
      NFC: st21nfca: Fix memory leak in device probe and remove · a1e0080a
      Wei Yongjun authored
      [ Upstream commit 1b9dadba ]
      
      'phy->pending_skb' is alloced when device probe, but forgot to free
      in the error handling path and remove path, this cause memory leak
      as follows:
      
      unreferenced object 0xffff88800bc06800 (size 512):
        comm "8", pid 11775, jiffies 4295159829 (age 9.032s)
        hex dump (first 32 bytes):
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<00000000d66c09ce>] __kmalloc_node_track_caller+0x1ed/0x450
          [<00000000c93382b3>] kmalloc_reserve+0x37/0xd0
          [<000000005fea522c>] __alloc_skb+0x124/0x380
          [<0000000019f29f9a>] st21nfca_hci_i2c_probe+0x170/0x8f2
      
      Fix it by freeing 'pending_skb' in error and remove.
      
      Fixes: 68957303
      
       ("NFC: ST21NFCA: Add driver for STMicroelectronics ST21NFCA NFC Chip")
      Reported-by: default avatarHulk Robot <hulkci@huawei.com>
      Signed-off-by: default avatarWei Yongjun <weiyongjun1@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a1e0080a
    • Matthias-Christian Ott's avatar
      net: usb: pegasus: Do not drop long Ethernet frames · 44925c5b
      Matthias-Christian Ott authored
      [ Upstream commit ca506fca ]
      
      The D-Link DSB-650TX (2001:4002) is unable to receive Ethernet frames
      that are longer than 1518 octets, for example, Ethernet frames that
      contain 802.1Q VLAN tags.
      
      The frames are sent to the pegasus driver via USB but the driver
      discards them because they have the Long_pkt field set to 1 in the
      received status report. The function read_bulk_callback of the pegasus
      driver treats such received "packets" (in the terminology of the
      hardware) as errors but the field simply does just indicate that the
      Ethernet frame (MAC destination to FCS) is longer than 1518 octets.
      
      It seems that in the 1990s there was a distinction between
      "giant" (> 1518) and "runt" (< 64) frames and the hardware includes
      flags to indicate this distinction. It seems that the purpose of the
      distinction "giant" frames was to not allow infinitely long frames due
      to transmission errors and to allow hardware to have an upper limit of
      the frame size. However, the hardware already has such limit with its
      2048 octet receive buffer and, therefore, Long_pkt is merely a
      convention and should not be treated as a receive error.
      
      Actually, the hardware is even able to receive Ethernet frames with 2048
      octets which exceeds the claimed limit frame size limit of the driver of
      1536 octets (PEGASUS_MTU).
      
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarMatthias-Christian Ott <ott@mirix.org>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      44925c5b
    • Xin Long's avatar
      sctp: use call_rcu to free endpoint · af6e6e58
      Xin Long authored
      [ Upstream commit 5ec7d18d
      
       ]
      
      This patch is to delay the endpoint free by calling call_rcu() to fix
      another use-after-free issue in sctp_sock_dump():
      
        BUG: KASAN: use-after-free in __lock_acquire+0x36d9/0x4c20
        Call Trace:
          __lock_acquire+0x36d9/0x4c20 kernel/locking/lockdep.c:3218
          lock_acquire+0x1ed/0x520 kernel/locking/lockdep.c:3844
          __raw_spin_lock_bh include/linux/spinlock_api_smp.h:135 [inline]
          _raw_spin_lock_bh+0x31/0x40 kernel/locking/spinlock.c:168
          spin_lock_bh include/linux/spinlock.h:334 [inline]
          __lock_sock+0x203/0x350 net/core/sock.c:2253
          lock_sock_nested+0xfe/0x120 net/core/sock.c:2774
          lock_sock include/net/sock.h:1492 [inline]
          sctp_sock_dump+0x122/0xb20 net/sctp/diag.c:324
          sctp_for_each_transport+0x2b5/0x370 net/sctp/socket.c:5091
          sctp_diag_dump+0x3ac/0x660 net/sctp/diag.c:527
          __inet_diag_dump+0xa8/0x140 net/ipv4/inet_diag.c:1049
          inet_diag_dump+0x9b/0x110 net/ipv4/inet_diag.c:1065
          netlink_dump+0x606/0x1080 net/netlink/af_netlink.c:2244
          __netlink_dump_start+0x59a/0x7c0 net/netlink/af_netlink.c:2352
          netlink_dump_start include/linux/netlink.h:216 [inline]
          inet_diag_handler_cmd+0x2ce/0x3f0 net/ipv4/inet_diag.c:1170
          __sock_diag_cmd net/core/sock_diag.c:232 [inline]
          sock_diag_rcv_msg+0x31d/0x410 net/core/sock_diag.c:263
          netlink_rcv_skb+0x172/0x440 net/netlink/af_netlink.c:2477
          sock_diag_rcv+0x2a/0x40 net/core/sock_diag.c:274
      
      This issue occurs when asoc is peeled off and the old sk is freed after
      getting it by asoc->base.sk and before calling lock_sock(sk).
      
      To prevent the sk free, as a holder of the sk, ep should be alive when
      calling lock_sock(). This patch uses call_rcu() and moves sock_put and
      ep free into sctp_endpoint_destroy_rcu(), so that it's safe to try to
      hold the ep under rcu_read_lock in sctp_transport_traverse_process().
      
      If sctp_endpoint_hold() returns true, it means this ep is still alive
      and we have held it and can continue to dump it; If it returns false,
      it means this ep is dead and can be freed after rcu_read_unlock, and
      we should skip it.
      
      In sctp_sock_dump(), after locking the sk, if this ep is different from
      tsp->asoc->ep, it means during this dumping, this asoc was peeled off
      before calling lock_sock(), and the sk should be skipped; If this ep is
      the same with tsp->asoc->ep, it means no peeloff happens on this asoc,
      and due to lock_sock, no peeloff will happen either until release_sock.
      
      Note that delaying endpoint free won't delay the port release, as the
      port release happens in sctp_endpoint_destroy() before calling call_rcu().
      Also, freeing endpoint by call_rcu() makes it safe to access the sk by
      asoc->base.sk in sctp_assocs_seq_show() and sctp_rcv().
      
      Thanks Jones to bring this issue up.
      
      v1->v2:
        - improve the changelog.
        - add kfree(ep) into sctp_endpoint_destroy_rcu(), as Jakub noticed.
      
      Reported-by: default avatar <syzbot+9276d76e83e3bcde6c99@syzkaller.appspotmail.com>
      Reported-by: default avatarLee Jones <lee.jones@linaro.org>
      Fixes: d25adbeb
      
       ("sctp: fix an use-after-free issue in sctp_sock_dump")
      Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      af6e6e58
    • Coco Li's avatar
      selftests: Calculate udpgso segment count without header adjustment · cd045c46
      Coco Li authored
      [ Upstream commit 5471d522 ]
      
      The below referenced commit correctly updated the computation of number
      of segments (gso_size) by using only the gso payload size and
      removing the header lengths.
      
      With this change the regression test started failing. Update
      the tests to match this new behavior.
      
      Both IPv4 and IPv6 tests are updated, as a separate patch in this series
      will update udp_v6_send_skb to match this change in udp_send_skb.
      
      Fixes: 158390e4
      
       ("udp: using datalen to cap max gso segments")
      Signed-off-by: default avatarCoco Li <lixiaoyan@google.com>
      Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
      Link: https://lore.kernel.org/r/20211223222441.2975883-2-lixiaoyan@google.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      cd045c46
    • Coco Li's avatar
      udp: using datalen to cap ipv6 udp max gso segments · bbd9c712
      Coco Li authored
      [ Upstream commit 736ef37f ]
      
      The max number of UDP gso segments is intended to cap to
      UDP_MAX_SEGMENTS, this is checked in udp_send_skb().
      
      skb->len contains network and transport header len here, we should use
      only data len instead.
      
      This is the ipv6 counterpart to the below referenced commit,
      which missed the ipv6 change
      
      Fixes: 158390e4
      
       ("udp: using datalen to cap max gso segments")
      Signed-off-by: default avatarCoco Li <lixiaoyan@google.com>
      Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
      Link: https://lore.kernel.org/r/20211223222441.2975883-1-lixiaoyan@google.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bbd9c712
    • Dan Carpenter's avatar
      scsi: lpfc: Terminate string in lpfc_debugfs_nvmeio_trc_write() · dc3d2753
      Dan Carpenter authored
      [ Upstream commit 9020be11 ]
      
      The "mybuf" string comes from the user, so we need to ensure that it is NUL
      terminated.
      
      Link: https://lore.kernel.org/r/20211214070527.GA27934@kili
      Fixes: bd2cdd5e
      
       ("scsi: lpfc: NVME Initiator: Add debugfs support")
      Reviewed-by: default avatarJames Smart <jsmart2021@gmail.com>
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
      Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dc3d2753
    • Tom Rix's avatar
      selinux: initialize proto variable in selinux_ip_postroute_compat() · c34a0b5b
      Tom Rix authored
      commit 732bc2ff upstream.
      
      Clang static analysis reports this warning
      
      hooks.c:5765:6: warning: 4th function call argument is an uninitialized
                      value
              if (selinux_xfrm_postroute_last(sksec->sid, skb, &ad, proto))
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      selinux_parse_skb() can return ok without setting proto.  The later call
      to selinux_xfrm_postroute_last() does an early check of proto and can
      return ok if the garbage proto value matches.  So initialize proto.
      
      Cc: stable@vger.kernel.org
      Fixes: eef9b416
      
       ("selinux: cleanup selinux_xfrm_sock_rcv_skb() and selinux_xfrm_postroute_last()")
      Signed-off-by: default avatarTom Rix <trix@redhat.com>
      [PM: typo/spelling and checkpatch.pl description fixes]
      Signed-off-by: default avatarPaul Moore <paul@paul-moore.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c34a0b5b
    • Heiko Carstens's avatar
      recordmcount.pl: fix typo in s390 mcount regex · 200b63a1
      Heiko Carstens authored
      commit 4eb1782e upstream.
      
      Commit 85bf17b2
      
       ("recordmcount.pl: look for jgnop instruction as well
      as bcrl on s390") added a new alternative mnemonic for the existing brcl
      instruction. This is required for the combination old gcc version (pre 9.0)
      and binutils since version 2.37.
      However at the same time this commit introduced a typo, replacing brcl with
      bcrl. As a result no mcount locations are detected anymore with old gcc
      versions (pre 9.0) and binutils before version 2.37.
      Fix this by using the correct mnemonic again.
      
      Reported-by: default avatarMiroslav Benes <mbenes@suse.cz>
      Cc: Jerome Marchand <jmarchan@redhat.com>
      Cc: <stable@vger.kernel.org>
      Fixes: 85bf17b2
      
       ("recordmcount.pl: look for jgnop instruction as well as bcrl on s390")
      Link: https://lore.kernel.org/r/alpine.LSU.2.21.2112230949520.19849@pobox.suse.cz
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      200b63a1
    • Wang Qing's avatar
      platform/x86: apple-gmux: use resource_size() with res · 451dcbd4
      Wang Qing authored
      [ Upstream commit eb66fb03
      
       ]
      
      This should be (res->end - res->start + 1) here actually,
      use resource_size() derectly.
      
      Signed-off-by: default avatarWang Qing <wangqing@vivo.com>
      Link: https://lore.kernel.org/r/1639484316-75873-1-git-send-email-wangqing@vivo.com
      Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      451dcbd4
    • Samuel Čavoj's avatar
      Input: i8042 - enable deferred probe quirk for ASUS UM325UA · 31425ac9
      Samuel Čavoj authored
      [ Upstream commit 44ee250a
      
       ]
      
      The ASUS UM325UA suffers from the same issue as the ASUS UX425UA, which
      is a very similar laptop. The i8042 device is not usable immediately
      after boot and fails to initialize, requiring a deferred retry.
      
      Enable the deferred probe quirk for the UM325UA.
      
      BugLink: https://bugzilla.suse.com/show_bug.cgi?id=1190256
      Signed-off-by: default avatarSamuel Čavoj <samuel@cavoj.net>
      Link: https://lore.kernel.org/r/20211204015615.232948-1-samuel@cavoj.net
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      31425ac9
    • Takashi Iwai's avatar
      Input: i8042 - add deferred probe support · 68fdb049
      Takashi Iwai authored
      [ Upstream commit 9222ba68
      
       ]
      
      We've got a bug report about the non-working keyboard on ASUS ZenBook
      UX425UA.  It seems that the PS/2 device isn't ready immediately at
      boot but takes some seconds to get ready.  Until now, the only
      workaround is to defer the probe, but it's available only when the
      driver is a module.  However, many distros, including openSUSE as in
      the original report, build the PS/2 input drivers into kernel, hence
      it won't work easily.
      
      This patch adds the support for the deferred probe for i8042 stuff as
      a workaround of the problem above.  When the deferred probe mode is
      enabled and the device couldn't be probed, it'll be repeated with the
      standard deferred probe mechanism.
      
      The deferred probe mode is enabled either via the new option
      i8042.probe_defer or via the quirk table entry.  As of this patch, the
      quirk table contains only ASUS ZenBook UX425UA.
      
      The deferred probe part is based on Fabio's initial work.
      
      BugLink: https://bugzilla.suse.com/show_bug.cgi?id=1190256
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Tested-by: default avatarSamuel Čavoj <samuel@cavoj.net>
      Link: https://lore.kernel.org/r/20211117063757.11380-1-tiwai@suse.de
      
      Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      68fdb049
    • Jens Wiklander's avatar
      tee: handle lookup of shm with reference count 0 · b4a661b4
      Jens Wiklander authored
      commit dfd0743f upstream.
      
      Since the tee subsystem does not keep a strong reference to its idle
      shared memory buffers, it races with other threads that try to destroy a
      shared memory through a close of its dma-buf fd or by unmapping the
      memory.
      
      In tee_shm_get_from_id() when a lookup in teedev->idr has been
      successful, it is possible that the tee_shm is in the dma-buf teardown
      path, but that path is blocked by the teedev mutex. Since we don't have
      an API to tell if the tee_shm is in the dma-buf teardown path or not we
      must find another way of detecting this condition.
      
      Fix this by doing the reference counting directly on the tee_shm using a
      new refcount_t refcount field. dma-buf is replaced by using
      anon_inode_getfd() instead, this separates the life-cycle of the
      underlying file from the tee_shm. tee_shm_put() is updated to hold the
      mutex when decreasing the refcount to 0 and then remove the tee_shm from
      teedev->idr before releasing the mutex. This means that the tee_shm can
      never be found unless it has a refcount larger than 0.
      
      Fixes: 967c9cca
      
       ("tee: generic TEE subsystem")
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Reviewed-by: default avatarLars Persson <larper@axis.com>
      Reviewed-by: default avatarSumit Garg <sumit.garg@linaro.org>
      Reported-by: default avatarPatrik Lantz <patrik.lantz@axis.com>
      [JW: backport to 4.19-stable]
      Signed-off-by: default avatarJens Wiklander <jens.wiklander@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b4a661b4
    • Hans de Goede's avatar
      HID: asus: Add depends on USB_HID to HID_ASUS Kconfig option · 4376e3a8
      Hans de Goede authored
      commit c4f0126d upstream.
      
      Since commit 4bc43a42 ("HID: asus: Add
      hid_is_using_ll_driver(usb_hid_driver) check") the hid-asus.c depends
      on the usb_hid_driver symbol. Add a depends on USB_HID to Kconfig to
      fix missing symbols errors in hid-asus when USB_HID is not enabled.
      
      Fixes: 4bc43a42
      
       ("HID: asus: Add hid_is_using_ll_driver(usb_hid_driver) check")
      Reported-by: default avatarkbuild test robot <lkp@intel.com>
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
      Cc: Jason Self <jason@bluehome.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4376e3a8
  2. Dec 29, 2021