óÐÉÓÏË ÉÚÍÅÎÅÎÉÊ × Linux 4.4.300

 
ACPICA: Executer: Fix the REFCLASS_REFOF case in acpi_ex_opcode_1A_0T_1R() [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Wed Dec 22 17:31:05 2021 +0100

    ACPICA: Executer: Fix the REFCLASS_REFOF case in acpi_ex_opcode_1A_0T_1R()
    
    [ Upstream commit 24ea5f90ec9548044a6209685c5010edd66ffe8f ]
    
    ACPICA commit d984f12041392fa4156b52e2f7e5c5e7bc38ad9e
    
    If Operand[0] is a reference of the ACPI_REFCLASS_REFOF class,
    acpi_ex_opcode_1A_0T_1R () calls acpi_ns_get_attached_object () to
    obtain return_desc which may require additional resolution with
    the help of acpi_ex_read_data_from_field (). If the latter fails,
    the reference counter of the original return_desc is decremented
    which is incorrect, because acpi_ns_get_attached_object () does not
    increment the reference counter of the object returned by it.
    
    This issue may lead to premature deletion of the attached object
    while it is still attached and a use-after-free and crash in the
    host OS.  For example, this may happen when on evaluation of ref_of()
    a local region field where there is no registered handler for the
    given Operation Region.
    
    Fix it by making acpi_ex_opcode_1A_0T_1R () return Status right away
    after a acpi_ex_read_data_from_field () failure.
    
    Link: https://github.com/acpica/acpica/commit/d984f120
    Link: https://github.com/acpica/acpica/pull/685
    Reported-by: Lenny Szubowicz <lszubowi@redhat.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Bob Moore <robert.moore@intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ACPICA: Utilities: Avoid deleting the same object twice in a row [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Wed Dec 22 17:29:45 2021 +0100

    ACPICA: Utilities: Avoid deleting the same object twice in a row
    
    [ Upstream commit 1cdfe9e346b4c5509ffe19ccde880fd259d9f7a3 ]
    
    ACPICA commit c11af67d8f7e3d381068ce7771322f2b5324d687
    
    If original_count is 0 in acpi_ut_update_ref_count (),
    acpi_ut_delete_internal_obj () is invoked for the target object, which is
    incorrect, because that object has been deleted once already and the
    memory allocated to store it may have been reclaimed and allocated
    for a different purpose by the host OS.  Moreover, a confusing debug
    message following the "Reference Count is already zero, cannot
    decrement" warning is printed in that case.
    
    To fix this issue, make acpi_ut_update_ref_count () return after finding
    that original_count is 0 and printing the above warning.
    
    Link: https://github.com/acpica/acpica/commit/c11af67d
    Link: https://github.com/acpica/acpica/pull/652
    Reported-by: Mark Asselstine <mark.asselstine@windriver.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Bob Moore <robert.moore@intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
af_unix: annote lockless accesses to unix_tot_inflight & gc_in_progress [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Jan 14 08:43:28 2022 -0800

    af_unix: annote lockless accesses to unix_tot_inflight & gc_in_progress
    
    commit 9d6d7f1cb67cdee15f1a0e85aacfb924e0e02435 upstream.
    
    wait_for_unix_gc() reads unix_tot_inflight & gc_in_progress
    without synchronization.
    
    Adds READ_ONCE()/WRITE_ONCE() and their associated comments
    to better document the intent.
    
    BUG: KCSAN: data-race in unix_inflight / wait_for_unix_gc
    
    write to 0xffffffff86e2b7c0 of 4 bytes by task 9380 on cpu 0:
     unix_inflight+0x1e8/0x260 net/unix/scm.c:63
     unix_attach_fds+0x10c/0x1e0 net/unix/scm.c:121
     unix_scm_to_skb net/unix/af_unix.c:1674 [inline]
     unix_dgram_sendmsg+0x679/0x16b0 net/unix/af_unix.c:1817
     unix_seqpacket_sendmsg+0xcc/0x110 net/unix/af_unix.c:2258
     sock_sendmsg_nosec net/socket.c:704 [inline]
     sock_sendmsg net/socket.c:724 [inline]
     ____sys_sendmsg+0x39a/0x510 net/socket.c:2409
     ___sys_sendmsg net/socket.c:2463 [inline]
     __sys_sendmmsg+0x267/0x4c0 net/socket.c:2549
     __do_sys_sendmmsg net/socket.c:2578 [inline]
     __se_sys_sendmmsg net/socket.c:2575 [inline]
     __x64_sys_sendmmsg+0x53/0x60 net/socket.c:2575
     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
    
    read to 0xffffffff86e2b7c0 of 4 bytes by task 9375 on cpu 1:
     wait_for_unix_gc+0x24/0x160 net/unix/garbage.c:196
     unix_dgram_sendmsg+0x8e/0x16b0 net/unix/af_unix.c:1772
     unix_seqpacket_sendmsg+0xcc/0x110 net/unix/af_unix.c:2258
     sock_sendmsg_nosec net/socket.c:704 [inline]
     sock_sendmsg net/socket.c:724 [inline]
     ____sys_sendmsg+0x39a/0x510 net/socket.c:2409
     ___sys_sendmsg net/socket.c:2463 [inline]
     __sys_sendmmsg+0x267/0x4c0 net/socket.c:2549
     __do_sys_sendmmsg net/socket.c:2578 [inline]
     __se_sys_sendmmsg net/socket.c:2575 [inline]
     __x64_sys_sendmmsg+0x53/0x60 net/socket.c:2575
     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
    
    value changed: 0x00000002 -> 0x00000004
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 1 PID: 9375 Comm: syz-executor.1 Not tainted 5.16.0-rc7-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    
    Fixes: 9915672d4127 ("af_unix: limit unix_tot_inflight")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Link: https://lore.kernel.org/r/20220114164328.2038499-1-eric.dumazet@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ALSA: hda: Add missing rwsem around snd_ctl_remove() calls [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Nov 16 08:13:14 2021 +0100

    ALSA: hda: Add missing rwsem around snd_ctl_remove() calls
    
    [ Upstream commit 80bd64af75b4bb11c0329bc66c35da2ddfb66d88 ]
    
    snd_ctl_remove() has to be called with card->controls_rwsem held (when
    called after the card instantiation).  This patch add the missing
    rwsem calls around it.
    
    Fixes: d13bd412dce2 ("ALSA: hda - Manage kcontrol lists")
    Link: https://lore.kernel.org/r/20211116071314.15065-3-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: jack: Add missing rwsem around snd_ctl_remove() calls [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Nov 16 08:13:12 2021 +0100

    ALSA: jack: Add missing rwsem around snd_ctl_remove() calls
    
    [ Upstream commit 06764dc931848c3a9bc01a63bbf76a605408bb54 ]
    
    snd_ctl_remove() has to be called with card->controls_rwsem held (when
    called after the card instantiation).  This patch add the missing
    rwsem calls around it.
    
    Fixes: 9058cbe1eed2 ("ALSA: jack: implement kctl creating for jack devices")
    Link: https://lore.kernel.org/r/20211116071314.15065-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: oss: fix compile error when OSS_DEBUG is enabled [+ + +]
Author: Bixuan Cui <cuibixuan@linux.alibaba.com>
Date:   Wed Dec 1 16:58:54 2021 +0800

    ALSA: oss: fix compile error when OSS_DEBUG is enabled
    
    [ Upstream commit 8e7daf318d97f25e18b2fc7eb5909e34cd903575 ]
    
    Fix compile error when OSS_DEBUG is enabled:
        sound/core/oss/pcm_oss.c: In function 'snd_pcm_oss_set_trigger':
        sound/core/oss/pcm_oss.c:2055:10: error: 'substream' undeclared (first
        use in this function); did you mean 'csubstream'?
          pcm_dbg(substream->pcm, "pcm_oss: trigger = 0x%x\n", trigger);
                  ^
    
    Fixes: 61efcee8608c ("ALSA: oss: Use standard printk helpers")
    Signed-off-by: Bixuan Cui <cuibixuan@linux.alibaba.com>
    Link: https://lore.kernel.org/r/1638349134-110369-1-git-send-email-cuibixuan@linux.alibaba.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: PCM: Add missing rwsem around snd_ctl_remove() calls [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Nov 16 08:13:13 2021 +0100

    ALSA: PCM: Add missing rwsem around snd_ctl_remove() calls
    
    [ Upstream commit 5471e9762e1af4b7df057a96bfd46cc250979b88 ]
    
    snd_ctl_remove() has to be called with card->controls_rwsem held (when
    called after the card instantiation).  This patch add the missing
    rwsem calls around it.
    
    Fixes: a8ff48cb7083 ("ALSA: pcm: Free chmap at PCM free callback, too")
    Link: https://lore.kernel.org/r/20211116071314.15065-2-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: seq: Set upper limit of processed events [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Dec 7 17:51:46 2021 +0100

    ALSA: seq: Set upper limit of processed events
    
    [ Upstream commit 6fadb494a638d8b8a55864ecc6ac58194f03f327 ]
    
    Currently ALSA sequencer core tries to process the queued events as
    much as possible when they become dispatchable.  If applications try
    to queue too massive events to be processed at the very same timing,
    the sequencer core would still try to process such all events, either
    in the interrupt context or via some notifier; in either away, it
    might be a cause of RCU stall or such problems.
    
    As a potential workaround for those problems, this patch adds the
    upper limit of the amount of events to be processed.  The remaining
    events are processed in the next batch, so they won't be lost.
    
    For the time being, it's limited up to 1000 events per queue, which
    should be high enough for any normal usages.
    
    Reported-by: Zqiang <qiang.zhang1211@gmail.com>
    Reported-by: syzbot+bb950e68b400ab4f65f8@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/20211102033222.3849-1-qiang.zhang1211@gmail.com
    Link: https://lore.kernel.org/r/20211207165146.2888-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ar5523: Fix null-ptr-deref with unexpected WDCMSG_TARGET_START reply [+ + +]
Author: Zekun Shen <bruceshenzk@gmail.com>
Date:   Thu Oct 28 18:37:49 2021 -0400

    ar5523: Fix null-ptr-deref with unexpected WDCMSG_TARGET_START reply
    
    [ Upstream commit ae80b6033834342601e99f74f6a62ff5092b1cee ]
    
    Unexpected WDCMSG_TARGET_START replay can lead to null-ptr-deref
    when ar->tx_cmd->odata is NULL. The patch adds a null check to
    prevent such case.
    
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
     ar5523_cmd+0x46a/0x581 [ar5523]
     ar5523_probe.cold+0x1b7/0x18da [ar5523]
     ? ar5523_cmd_rx_cb+0x7a0/0x7a0 [ar5523]
     ? __pm_runtime_set_status+0x54a/0x8f0
     ? _raw_spin_trylock_bh+0x120/0x120
     ? pm_runtime_barrier+0x220/0x220
     ? __pm_runtime_resume+0xb1/0xf0
     usb_probe_interface+0x25b/0x710
     really_probe+0x209/0x5d0
     driver_probe_device+0xc6/0x1b0
     device_driver_attach+0xe2/0x120
    
    I found the bug using a custome USBFuzz port. It's a research work
    to fuzz USB stack/drivers. I modified it to fuzz ath9k driver only,
    providing hand-crafted usb descriptors to QEMU.
    
    After fixing the code (fourth byte in usb packet) to WDCMSG_TARGET_START,
    I got the null-ptr-deref bug. I believe the bug is triggerable whenever
    cmd->odata is NULL. After patching, I tested with the same input and no
    longer see the KASAN report.
    
    This was NOT tested on a real device.
    
    Signed-off-by: Zekun Shen <bruceshenzk@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/YXsmPQ3awHFLuAj2@10-18-43-117.dynapool.wireless.nyu.edu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: qcom: msm8916: fix MMC controller aliases [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Wed Dec 1 05:05:59 2021 +0300

    arm64: dts: qcom: msm8916: fix MMC controller aliases
    
    [ Upstream commit b0293c19d42f6d6951c2fab9a47fed50baf2c14d ]
    
    Change sdhcN aliases to mmcN to make them actually work. Currently the
    board uses non-standard aliases sdhcN, which do not work, resulting in
    mmc0 and mmc1 hosts randomly changing indices between boots.
    
    Fixes: c4da5a561627 ("arm64: dts: qcom: Add msm8916 sdhci configuration nodes")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
    Link: https://lore.kernel.org/r/20211201020559.1611890-1-dmitry.baryshkov@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: samsung: idma: Check of ioremap return value [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Tue Dec 28 11:40:26 2021 +0800

    ASoC: samsung: idma: Check of ioremap return value
    
    [ Upstream commit 3ecb46755eb85456b459a1a9f952c52986bce8ec ]
    
    Because of the potential failure of the ioremap(), the buf->area could
    be NULL.
    Therefore, we need to check it and return -ENOMEM in order to transfer
    the error.
    
    Fixes: f09aecd50f39 ("ASoC: SAMSUNG: Add I2S0 internal dma driver")
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Link: https://lore.kernel.org/r/20211228034026.1659385-1-jiasheng@iscas.ac.cn
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ath9k: Fix out-of-bound memcpy in ath9k_hif_usb_rx_stream [+ + +]
Author: Zekun Shen <bruceshenzk@gmail.com>
Date:   Thu Oct 28 18:21:42 2021 -0400

    ath9k: Fix out-of-bound memcpy in ath9k_hif_usb_rx_stream
    
    [ Upstream commit 6ce708f54cc8d73beca213cec66ede5ce100a781 ]
    
    Large pkt_len can lead to out-out-bound memcpy. Current
    ath9k_hif_usb_rx_stream allows combining the content of two urb
    inputs to one pkt. The first input can indicate the size of the
    pkt. Any remaining size is saved in hif_dev->rx_remain_len.
    While processing the next input, memcpy is used with rx_remain_len.
    
    4-byte pkt_len can go up to 0xffff, while a single input is 0x4000
    maximum in size (MAX_RX_BUF_SIZE). Thus, the patch adds a check for
    pkt_len which must not exceed 2 * MAX_RX_BUG_SIZE.
    
    BUG: KASAN: slab-out-of-bounds in ath9k_hif_usb_rx_cb+0x490/0xed7 [ath9k_htc]
    Read of size 46393 at addr ffff888018798000 by task kworker/0:1/23
    
    CPU: 0 PID: 23 Comm: kworker/0:1 Not tainted 5.6.0 #63
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
    BIOS rel-1.10.2-0-g5f4c7b1-prebuilt.qemu-project.org 04/01/2014
    Workqueue: events request_firmware_work_func
    Call Trace:
     <IRQ>
     dump_stack+0x76/0xa0
     print_address_description.constprop.0+0x16/0x200
     ? ath9k_hif_usb_rx_cb+0x490/0xed7 [ath9k_htc]
     ? ath9k_hif_usb_rx_cb+0x490/0xed7 [ath9k_htc]
     __kasan_report.cold+0x37/0x7c
     ? ath9k_hif_usb_rx_cb+0x490/0xed7 [ath9k_htc]
     kasan_report+0xe/0x20
     check_memory_region+0x15a/0x1d0
     memcpy+0x20/0x50
     ath9k_hif_usb_rx_cb+0x490/0xed7 [ath9k_htc]
     ? hif_usb_mgmt_cb+0x2d9/0x2d9 [ath9k_htc]
     ? _raw_spin_lock_irqsave+0x7b/0xd0
     ? _raw_spin_trylock_bh+0x120/0x120
     ? __usb_unanchor_urb+0x12f/0x210
     __usb_hcd_giveback_urb+0x1e4/0x380
     usb_giveback_urb_bh+0x241/0x4f0
     ? __hrtimer_run_queues+0x316/0x740
     ? __usb_hcd_giveback_urb+0x380/0x380
     tasklet_action_common.isra.0+0x135/0x330
     __do_softirq+0x18c/0x634
     irq_exit+0x114/0x140
     smp_apic_timer_interrupt+0xde/0x380
     apic_timer_interrupt+0xf/0x20
    
    I found the bug using a custome USBFuzz port. It's a research work
    to fuzz USB stack/drivers. I modified it to fuzz ath9k driver only,
    providing hand-crafted usb descriptors to QEMU.
    
    After fixing the value of pkt_tag to ATH_USB_RX_STREAM_MODE_TAG in QEMU
    emulation, I found the KASAN report. The bug is triggerable whenever
    pkt_len is above two MAX_RX_BUG_SIZE. I used the same input that crashes
    to test the driver works when applying the patch.
    
    Signed-off-by: Zekun Shen <bruceshenzk@gmail.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://lore.kernel.org/r/YXsidrRuK6zBJicZ@10-18-43-117.dynapool.wireless.nyu.edu
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bcmgenet: add WOL IRQ check [+ + +]
Author: Sergey Shtylyov <s.shtylyov@omp.ru>
Date:   Thu Jan 13 22:46:07 2022 +0300

    bcmgenet: add WOL IRQ check
    
    commit 9deb48b53e7f4056c2eaa2dc2ee3338df619e4f6 upstream.
    
    The driver neglects to check the result of platform_get_irq_optional()'s
    call and blithely passes the negative error codes to devm_request_irq()
    (which takes *unsigned* IRQ #), causing it to fail with -EINVAL.
    Stop calling devm_request_irq() with the invalid IRQ #s.
    
    Fixes: 8562056f267d ("net: bcmgenet: request Wake-on-LAN interrupt")
    Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Acked-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Bluetooth: bfusb: fix division by zero in send path [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Oct 25 13:39:44 2021 +0200

    Bluetooth: bfusb: fix division by zero in send path
    
    commit b5e6fa7a12572c82f1e7f2f51fbb02a322291291 upstream.
    
    Add the missing bulk-out endpoint sanity check to probe() to avoid
    division by zero in bfusb_send_frame() in case a malicious device has
    broken descriptors (or when doing descriptor fuzz testing).
    
    Note that USB core will reject URBs submitted for endpoints with zero
    wMaxPacketSize but that drivers doing packet-size calculations still
    need to handle this (cf. commit 2548288b4fb0 ("USB: Fix: Don't skip
    endpoint descriptors with maxpacket=0")).
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Bluetooth: cmtp: fix possible panic when cmtp_init_sockets() fails [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Mon Oct 25 21:10:12 2021 +0800

    Bluetooth: cmtp: fix possible panic when cmtp_init_sockets() fails
    
    [ Upstream commit 2a7ca7459d905febf519163bd9e3eed894de6bb7 ]
    
    I got a kernel BUG report when doing fault injection test:
    
    ------------[ cut here ]------------
    kernel BUG at lib/list_debug.c:45!
    ...
    RIP: 0010:__list_del_entry_valid.cold+0x12/0x4d
    ...
    Call Trace:
     proto_unregister+0x83/0x220
     cmtp_cleanup_sockets+0x37/0x40 [cmtp]
     cmtp_exit+0xe/0x1f [cmtp]
     do_syscall_64+0x35/0xb0
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    If cmtp_init_sockets() in cmtp_init() fails, cmtp_init() still returns
    success. This will cause a kernel bug when accessing uncreated ctmp
    related data when the module exits.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: Fix debugfs entry leak in hci_register_dev() [+ + +]
Author: Wei Yongjun <weiyongjun1@huawei.com>
Date:   Wed Oct 13 16:55:46 2021 +0800

    Bluetooth: Fix debugfs entry leak in hci_register_dev()
    
    [ Upstream commit 5a4bb6a8e981d3d0d492aa38412ee80b21033177 ]
    
    Fault injection test report debugfs entry leak as follows:
    
    debugfs: Directory 'hci0' with parent 'bluetooth' already present!
    
    When register_pm_notifier() failed in hci_register_dev(), the debugfs
    create by debugfs_create_dir() do not removed in the error handing path.
    
    Add the remove debugfs code to fix it.
    
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: stop proccessing malicious adv data [+ + +]
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Mon Nov 1 10:12:12 2021 +0300

    Bluetooth: stop proccessing malicious adv data
    
    [ Upstream commit 3a56ef719f0b9682afb8a86d64b2399e36faa4e6 ]
    
    Syzbot reported slab-out-of-bounds read in hci_le_adv_report_evt(). The
    problem was in missing validaion check.
    
    We should check if data is not malicious and we can read next data block.
    If we won't check ptr validness, code can read a way beyond skb->end and
    it can cause problems, of course.
    
    Fixes: e95beb414168 ("Bluetooth: hci_le_adv_report_evt code refactoring")
    Reported-and-tested-by: syzbot+e3fcb9c4f3c2a931dc40@syzkaller.appspotmail.com
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: remove BUG_ON(!eie) in find_parent_nodes [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Nov 5 16:45:35 2021 -0400

    btrfs: remove BUG_ON(!eie) in find_parent_nodes
    
    [ Upstream commit 9f05c09d6baef789726346397438cca4ec43c3ee ]
    
    If we're looking for leafs that point to a data extent we want to record
    the extent items that point at our bytenr.  At this point we have the
    reference and we know for a fact that this leaf should have a reference
    to our bytenr.  However if there's some sort of corruption we may not
    find any references to our leaf, and thus could end up with eie == NULL.
    Replace this BUG_ON() with an ASSERT() and then return -EUCLEAN for the
    mortals.
    
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: remove BUG_ON() in find_parent_nodes() [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Fri Nov 5 16:45:34 2021 -0400

    btrfs: remove BUG_ON() in find_parent_nodes()
    
    [ Upstream commit fcba0120edf88328524a4878d1d6f4ad39f2ec81 ]
    
    We search for an extent entry with .offset = -1, which shouldn't be a
    thing, but corruption happens.  Add an ASSERT() for the developers,
    return -EUCLEAN for mortals.
    
    Signed-off-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: gs_usb: fix use of uninitialized variable, detach device on reception of invalid USB data [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Fri Dec 10 10:03:09 2021 +0100

    can: gs_usb: fix use of uninitialized variable, detach device on reception of invalid USB data
    
    commit 4a8737ff068724f509d583fef404d349adba80d6 upstream.
    
    The received data contains the channel the received data is associated
    with. If the channel number is bigger than the actual number of
    channels assume broken or malicious USB device and shut it down.
    
    This fixes the error found by clang:
    
    | drivers/net/can/usb/gs_usb.c:386:6: error: variable 'dev' is used
    |                                     uninitialized whenever 'if' condition is true
    |         if (hf->channel >= GS_MAX_INTF)
    |             ^~~~~~~~~~~~~~~~~~~~~~~~~~
    | drivers/net/can/usb/gs_usb.c:474:10: note: uninitialized use occurs here
    |                           hf, dev->gs_hf_size, gs_usb_receive_bulk_callback,
    |                               ^~~
    
    Link: https://lore.kernel.org/all/20211210091158.408326-1-mkl@pengutronix.de
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: gs_usb: gs_can_start_xmit(): zero-initialize hf->{flags,reserved} [+ + +]
Author: Brian Silverman <brian.silverman@bluerivertech.com>
Date:   Wed Jan 5 16:29:50 2022 -0800

    can: gs_usb: gs_can_start_xmit(): zero-initialize hf->{flags,reserved}
    
    commit 89d58aebe14a365c25ba6645414afdbf4e41cea4 upstream.
    
    No information is deliberately sent in hf->flags in host -> device
    communications, but the open-source candleLight firmware echoes it
    back, which can result in the GS_CAN_FLAG_OVERFLOW flag being set and
    generating spurious ERRORFRAMEs.
    
    While there also initialize the reserved member with 0.
    
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Link: https://lore.kernel.org/all/20220106002952.25883-1-brian.silverman@bluerivertech.com
    Link: https://github.com/candle-usb/candleLight_fw/issues/87
    Cc: stable@vger.kernel.org
    Signed-off-by: Brian Silverman <brian.silverman@bluerivertech.com>
    [mkl: initialize the reserved member, too]
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: softing: softing_startstop(): fix set but not used variable warning [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Sat Jan 8 21:57:51 2022 +0100

    can: softing: softing_startstop(): fix set but not used variable warning
    
    [ Upstream commit 370d988cc529598ebaec6487d4f84c2115dc696b ]
    
    In the function softing_startstop() the variable error_reporting is
    assigned but not used. The code that uses this variable is commented
    out. Its stated that the functionality is not finally verified.
    
    To fix the warning:
    
    | drivers/net/can/softing/softing_fw.c:424:9: error: variable 'error_reporting' set but not used [-Werror,-Wunused-but-set-variable]
    
    remove the comment, activate the code, but add a "0 &&" to the if
    expression and rely on the optimizer rather than the preprocessor to
    remove the code.
    
    Link: https://lore.kernel.org/all/20220109103126.1872833-1-mkl@pengutronix.de
    Fixes: 03fd3cf5a179 ("can: add driver for Softing card")
    Cc: Kurt Van Dijck <dev.kurt@vandijck-laurijssen.be>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: softing_cs: softingcs_probe(): fix memleak on registration failure [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Dec 22 11:48:43 2021 +0100

    can: softing_cs: softingcs_probe(): fix memleak on registration failure
    
    commit ced4913efb0acc844ed65cc01d091a85d83a2082 upstream.
    
    In case device registration fails during probe, the driver state and
    the embedded platform device structure needs to be freed using
    platform_device_put() to properly free all resources (e.g. the device
    name).
    
    Fixes: 0a0b7a5f7a04 ("can: add driver for Softing card")
    Link: https://lore.kernel.org/all/20211222104843.6105-1-johan@kernel.org
    Cc: stable@vger.kernel.org # 2.6.38
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: xilinx_can: xcan_probe(): check for error irq [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Fri Dec 24 10:13:24 2021 +0800

    can: xilinx_can: xcan_probe(): check for error irq
    
    [ Upstream commit c6564c13dae25cd7f8e1de5127b4da4500ee5844 ]
    
    For the possible failure of the platform_get_irq(), the returned irq
    could be error number and will finally cause the failure of the
    request_irq().
    
    Consider that platform_get_irq() can now in certain cases return
    -EPROBE_DEFER, and the consequences of letting request_irq()
    effectively convert that into -EINVAL, even at probe time rather than
    later on. So it might be better to check just now.
    
    Fixes: b1201e44f50b ("can: xilinx CAN controller support")
    Link: https://lore.kernel.org/all/20211224021324.1447494-1-jiasheng@iscas.ac.cn
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
char/mwave: Adjust io port register size [+ + +]
Author: Kees Cook <keescook@chromium.org>
Date:   Fri Dec 3 00:42:06 2021 -0800

    char/mwave: Adjust io port register size
    
    [ Upstream commit f5912cc19acd7c24b2dbf65a6340bf194244f085 ]
    
    Using MKWORD() on a byte-sized variable results in OOB read. Expand the
    size of the reserved area so both MKWORD and MKBYTE continue to work
    without overflow. Silences this warning on a -Warray-bounds build:
    
    drivers/char/mwave/3780i.h:346:22: error: array subscript 'short unsigned int[0]' is partly outside array bounds of 'DSP_ISA_SLAVE_CONTROL[1]' [-Werror=array-bounds]
      346 | #define MKWORD(var) (*((unsigned short *)(&var)))
          |                     ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/char/mwave/3780i.h:356:40: note: in definition of macro 'OutWordDsp'
      356 | #define OutWordDsp(index,value)   outw(value,usDspBaseIO+index)
          |                                        ^~~~~
    drivers/char/mwave/3780i.c:373:41: note: in expansion of macro 'MKWORD'
      373 |         OutWordDsp(DSP_IsaSlaveControl, MKWORD(rSlaveControl));
          |                                         ^~~~~~
    drivers/char/mwave/3780i.c:358:31: note: while referencing 'rSlaveControl'
      358 |         DSP_ISA_SLAVE_CONTROL rSlaveControl;
          |                               ^~~~~~~~~~~~~
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20211203084206.3104326-1-keescook@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: qce - fix uaf on qce_ahash_register_one [+ + +]
Author: Chengfeng Ye <cyeaa@connect.ust.hk>
Date:   Thu Nov 4 06:38:31 2021 -0700

    crypto: qce - fix uaf on qce_ahash_register_one
    
    [ Upstream commit b4cb4d31631912842eb7dce02b4350cbb7562d5e ]
    
    Pointer base points to sub field of tmpl, it
    is dereferenced after tmpl is freed. Fix
    this by accessing base before free tmpl.
    
    Fixes: ec8f5d8f ("crypto: qce - Qualcomm crypto engine driver")
    Signed-off-by: Chengfeng Ye <cyeaa@connect.ust.hk>
    Acked-by: Thara Gopinath <thara.gopinath@linaro.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm btree: add a defensive bounds check to insert_at() [+ + +]
Author: Joe Thornber <ejt@redhat.com>
Date:   Fri Dec 10 13:44:13 2021 +0000

    dm btree: add a defensive bounds check to insert_at()
    
    [ Upstream commit 85bca3c05b6cca31625437eedf2060e846c4bbad ]
    
    Corrupt metadata could trigger an out of bounds write.
    
    Signed-off-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm space map common: add bounds check to sm_ll_lookup_bitmap() [+ + +]
Author: Joe Thornber <ejt@redhat.com>
Date:   Fri Dec 10 13:49:53 2021 +0000

    dm space map common: add bounds check to sm_ll_lookup_bitmap()
    
    [ Upstream commit cba23ac158db7f3cd48a923d6861bee2eb7a2978 ]
    
    Corrupted metadata could warrant returning error from sm_ll_lookup_bitmap().
    
    Signed-off-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dmaengine: at_xdmac: Don't start transactions at tx_submit level [+ + +]
Author: Tudor Ambarus <tudor.ambarus@microchip.com>
Date:   Wed Dec 15 13:01:04 2021 +0200

    dmaengine: at_xdmac: Don't start transactions at tx_submit level
    
    commit bccfb96b59179d4f96cbbd1ddff8fac6d335eae4 upstream.
    
    tx_submit is supposed to push the current transaction descriptor to a
    pending queue, waiting for issue_pending() to be called. issue_pending()
    must start the transfer, not tx_submit(), thus remove
    at_xdmac_start_xfer() from at_xdmac_tx_submit(). Clients of at_xdmac that
    assume that tx_submit() starts the transfer must be updated and call
    dma_async_issue_pending() if they miss to call it (one example is
    atmel_serial).
    
    As the at_xdmac_start_xfer() is now called only from
    at_xdmac_advance_work() when !at_xdmac_chan_is_enabled(), the
    at_xdmac_chan_is_enabled() check is no longer needed in
    at_xdmac_start_xfer(), thus remove it.
    
    Fixes: e1f7c9eee707 ("dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver")
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Link: https://lore.kernel.org/r/20211215110115.191749-2-tudor.ambarus@microchip.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: at_xdmac: Fix at_xdmac_lld struct definition [+ + +]
Author: Tudor Ambarus <tudor.ambarus@microchip.com>
Date:   Wed Dec 15 13:01:13 2021 +0200

    dmaengine: at_xdmac: Fix at_xdmac_lld struct definition
    
    commit 912f7c6f7fac273f40e621447cf17d14b50d6e5b upstream.
    
    The hardware channel next descriptor view structure contains just
    fields of 32 bits, while dma_addr_t can be of type u64 or u32
    depending on CONFIG_ARCH_DMA_ADDR_T_64BIT. Force u32 to comply with
    what the hardware expects.
    
    Fixes: e1f7c9eee707 ("dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver")
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Link: https://lore.kernel.org/r/20211215110115.191749-11-tudor.ambarus@microchip.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: at_xdmac: Fix lld view setting [+ + +]
Author: Tudor Ambarus <tudor.ambarus@microchip.com>
Date:   Wed Dec 15 13:01:12 2021 +0200

    dmaengine: at_xdmac: Fix lld view setting
    
    commit 1385eb4d14d447cc5d744bc2ac34f43be66c9963 upstream.
    
    AT_XDMAC_CNDC_NDVIEW_NDV3 was set even for AT_XDMAC_MBR_UBC_NDV2,
    because of the wrong bit handling. Fix it.
    
    Fixes: ee0fe35c8dcd ("dmaengine: xdmac: Handle descriptor's view 3 registers")
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Link: https://lore.kernel.org/r/20211215110115.191749-10-tudor.ambarus@microchip.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: at_xdmac: Print debug message after realeasing the lock [+ + +]
Author: Tudor Ambarus <tudor.ambarus@microchip.com>
Date:   Wed Dec 15 13:01:06 2021 +0200

    dmaengine: at_xdmac: Print debug message after realeasing the lock
    
    commit 5edc24ac876a928f36f407a0fcdb33b94a3a210f upstream.
    
    It is desirable to do the prints without the lock held if possible, so
    move the print after the lock is released.
    
    Fixes: e1f7c9eee707 ("dmaengine: at_xdmac: creation of the atmel eXtended DMA Controller driver")
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Link: https://lore.kernel.org/r/20211215110115.191749-4-tudor.ambarus@microchip.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dmaengine: pxa/mmp: stop referencing config->slave_id [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Mon Nov 22 23:21:58 2021 +0100

    dmaengine: pxa/mmp: stop referencing config->slave_id
    
    [ Upstream commit 134c37fa250a87a7e77c80a7c59ae16c462e46e0 ]
    
    The last driver referencing the slave_id on Marvell PXA and MMP platforms
    was the SPI driver, but this stopped doing so a long time ago, so the
    TODO from the earlier patch can no be removed.
    
    Fixes: b729bf34535e ("spi/pxa2xx: Don't use slave_id of dma_slave_config")
    Fixes: 13b3006b8ebd ("dma: mmp_pdma: add filter function")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Acked-by: Mark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20211122222203.4103644-7-arnd@kernel.org
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu: Fix a NULL pointer dereference in amdgpu_connector_lcd_native_mode() [+ + +]
Author: Zhou Qingyang <zhou1615@umn.edu>
Date:   Fri Dec 3 00:17:36 2021 +0800

    drm/amdgpu: Fix a NULL pointer dereference in amdgpu_connector_lcd_native_mode()
    
    [ Upstream commit b220110e4cd442156f36e1d9b4914bb9e87b0d00 ]
    
    In amdgpu_connector_lcd_native_mode(), the return value of
    drm_mode_duplicate() is assigned to mode, and there is a dereference
    of it in amdgpu_connector_lcd_native_mode(), which will lead to a NULL
    pointer dereference on failure of drm_mode_duplicate().
    
    Fix this bug add a check of mode.
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_DRM_AMDGPU=m show no new warnings, and
    our static analyzer no longer warns about this code.
    
    Fixes: d38ceaf99ed0 ("drm/amdgpu: add core driver (v4)")
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915: Avoid bitwise vs logical OR warning in snb_wm_latency_quirk() [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Thu Oct 14 14:19:16 2021 -0700

    drm/i915: Avoid bitwise vs logical OR warning in snb_wm_latency_quirk()
    
    commit 2e70570656adfe1c5d9a29940faa348d5f132199 upstream.
    
    A new warning in clang points out a place in this file where a bitwise
    OR is being used with boolean types:
    
    drivers/gpu/drm/i915/intel_pm.c:3066:12: warning: use of bitwise '|' with boolean operands [-Wbitwise-instead-of-logical]
            changed = ilk_increase_wm_latency(dev_priv, dev_priv->wm.pri_latency, 12) |
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    This construct is intentional, as it allows every one of the calls to
    ilk_increase_wm_latency() to occur (instead of short circuiting with
    logical OR) while still caring about the result of each call.
    
    To make this clearer to the compiler, use the '|=' operator to assign
    the result of each ilk_increase_wm_latency() call to changed, which
    keeps the meaning of the code the same but makes it obvious that every
    one of these calls is expected to happen.
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/1473
    Reported-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Suggested-by: Dávid Bolvanský <david.bolvansky@gmail.com>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20211014211916.3550122-1-nathan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ext4: avoid trim error on fs with small groups [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Fri Nov 12 16:22:02 2021 +0100

    ext4: avoid trim error on fs with small groups
    
    [ Upstream commit 173b6e383d2a204c9921ffc1eca3b87aa2106c33 ]
    
    A user reported FITRIM ioctl failing for him on ext4 on some devices
    without apparent reason.  After some debugging we've found out that
    these devices (being LVM volumes) report rather large discard
    granularity of 42MB and the filesystem had 1k blocksize and thus group
    size of 8MB. Because ext4 FITRIM implementation puts discard
    granularity into minlen, ext4_trim_fs() declared the trim request as
    invalid. However just silently doing nothing seems to be a more
    appropriate reaction to such combination of parameters since user did
    not specify anything wrong.
    
    CC: Lukas Czerner <lczerner@redhat.com>
    Fixes: 5c2ed62fd447 ("ext4: Adjust minlen with discard_granularity in the FITRIM ioctl")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211112152202.26614-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: don't use the orphan list when migrating an inode [+ + +]
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Wed Jan 5 23:59:56 2022 -0500

    ext4: don't use the orphan list when migrating an inode
    
    commit 6eeaf88fd586f05aaf1d48cb3a139d2a5c6eb055 upstream.
    
    We probably want to remove the indirect block to extents migration
    feature after a deprecation window, but until then, let's fix a
    potential data loss problem caused by the fact that we put the
    tmp_inode on the orphan list.  In the unlikely case where we crash and
    do a journal recovery, the data blocks belonging to the inode being
    migrated are also represented in the tmp_inode on the orphan list ---
    and so its data blocks will get marked unallocated, and available for
    reuse.
    
    Instead, stop putting the tmp_inode on the oprhan list.  So in the
    case where we crash while migrating the inode, we'll leak an inode,
    which is not a disaster.  It will be easily fixed the next time we run
    fsck, and it's better than potentially having blocks getting claimed
    by two different files, and losing data as a result.
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Lukas Czerner <lczerner@redhat.com>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: Fix BUG_ON in ext4_bread when write quota data [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Thu Dec 23 09:55:06 2021 +0800

    ext4: Fix BUG_ON in ext4_bread when write quota data
    
    commit 380a0091cab482489e9b19e07f2a166ad2b76d5c upstream.
    
    We got issue as follows when run syzkaller:
    [  167.936972] EXT4-fs error (device loop0): __ext4_remount:6314: comm rep: Abort forced by user
    [  167.938306] EXT4-fs (loop0): Remounting filesystem read-only
    [  167.981637] Assertion failure in ext4_getblk() at fs/ext4/inode.c:847: '(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_FC_REPLAY) || handle != NULL || create == 0'
    [  167.983601] ------------[ cut here ]------------
    [  167.984245] kernel BUG at fs/ext4/inode.c:847!
    [  167.984882] invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
    [  167.985624] CPU: 7 PID: 2290 Comm: rep Tainted: G    B             5.16.0-rc5-next-20211217+ #123
    [  167.986823] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20190727_073836-buildvm-ppc64le-16.ppc.fedoraproject.org-3.fc31 04/01/2014
    [  167.988590] RIP: 0010:ext4_getblk+0x17e/0x504
    [  167.989189] Code: c6 01 74 28 49 c7 c0 a0 a3 5c 9b b9 4f 03 00 00 48 c7 c2 80 9c 5c 9b 48 c7 c6 40 b6 5c 9b 48 c7 c7 20 a4 5c 9b e8 77 e3 fd ff <0f> 0b 8b 04 244
    [  167.991679] RSP: 0018:ffff8881736f7398 EFLAGS: 00010282
    [  167.992385] RAX: 0000000000000094 RBX: 1ffff1102e6dee75 RCX: 0000000000000000
    [  167.993337] RDX: 0000000000000001 RSI: ffffffff9b6e29e0 RDI: ffffed102e6dee66
    [  167.994292] RBP: ffff88816a076210 R08: 0000000000000094 R09: ffffed107363fa09
    [  167.995252] R10: ffff88839b1fd047 R11: ffffed107363fa08 R12: ffff88816a0761e8
    [  167.996205] R13: 0000000000000000 R14: 0000000000000021 R15: 0000000000000001
    [  167.997158] FS:  00007f6a1428c740(0000) GS:ffff88839b000000(0000) knlGS:0000000000000000
    [  167.998238] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  167.999025] CR2: 00007f6a140716c8 CR3: 0000000133216000 CR4: 00000000000006e0
    [  167.999987] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  168.000944] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  168.001899] Call Trace:
    [  168.002235]  <TASK>
    [  168.007167]  ext4_bread+0xd/0x53
    [  168.007612]  ext4_quota_write+0x20c/0x5c0
    [  168.010457]  write_blk+0x100/0x220
    [  168.010944]  remove_free_dqentry+0x1c6/0x440
    [  168.011525]  free_dqentry.isra.0+0x565/0x830
    [  168.012133]  remove_tree+0x318/0x6d0
    [  168.014744]  remove_tree+0x1eb/0x6d0
    [  168.017346]  remove_tree+0x1eb/0x6d0
    [  168.019969]  remove_tree+0x1eb/0x6d0
    [  168.022128]  qtree_release_dquot+0x291/0x340
    [  168.023297]  v2_release_dquot+0xce/0x120
    [  168.023847]  dquot_release+0x197/0x3e0
    [  168.024358]  ext4_release_dquot+0x22a/0x2d0
    [  168.024932]  dqput.part.0+0x1c9/0x900
    [  168.025430]  __dquot_drop+0x120/0x190
    [  168.025942]  ext4_clear_inode+0x86/0x220
    [  168.026472]  ext4_evict_inode+0x9e8/0xa22
    [  168.028200]  evict+0x29e/0x4f0
    [  168.028625]  dispose_list+0x102/0x1f0
    [  168.029148]  evict_inodes+0x2c1/0x3e0
    [  168.030188]  generic_shutdown_super+0xa4/0x3b0
    [  168.030817]  kill_block_super+0x95/0xd0
    [  168.031360]  deactivate_locked_super+0x85/0xd0
    [  168.031977]  cleanup_mnt+0x2bc/0x480
    [  168.033062]  task_work_run+0xd1/0x170
    [  168.033565]  do_exit+0xa4f/0x2b50
    [  168.037155]  do_group_exit+0xef/0x2d0
    [  168.037666]  __x64_sys_exit_group+0x3a/0x50
    [  168.038237]  do_syscall_64+0x3b/0x90
    [  168.038751]  entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    In order to reproduce this problem, the following conditions need to be met:
    1. Ext4 filesystem with no journal;
    2. Filesystem image with incorrect quota data;
    3. Abort filesystem forced by user;
    4. umount filesystem;
    
    As in ext4_quota_write:
    ...
             if (EXT4_SB(sb)->s_journal && !handle) {
                     ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
                             " cancelled because transaction is not started",
                             (unsigned long long)off, (unsigned long long)len);
                     return -EIO;
             }
    ...
    We only check handle if NULL when filesystem has journal. There is need
    check handle if NULL even when filesystem has no journal.
    
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20211223015506.297766-1-yebin10@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ext4: set csum seed in tmp inode while migrating to extents [+ + +]
Author: Luís Henriques <lhenriques@suse.de>
Date:   Tue Dec 14 17:50:58 2021 +0000

    ext4: set csum seed in tmp inode while migrating to extents
    
    commit e81c9302a6c3c008f5c30beb73b38adb0170ff2d upstream.
    
    When migrating to extents, the temporary inode will have it's own checksum
    seed.  This means that, when swapping the inodes data, the inode checksums
    will be incorrect.
    
    This can be fixed by recalculating the extents checksums again.  Or simply
    by copying the seed into the temporary inode.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=213357
    Reported-by: Jeroen van Wolffelaar <jeroen@wolffelaar.nl>
    Signed-off-by: Luís Henriques <lhenriques@suse.de>
    Link: https://lore.kernel.org/r/20211214175058.19511-1-lhenriques@suse.de
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
floppy: Add max size check for user space request [+ + +]
Author: Xiongwei Song <sxwjean@gmail.com>
Date:   Tue Nov 16 21:10:33 2021 +0800

    floppy: Add max size check for user space request
    
    [ Upstream commit 545a32498c536ee152331cd2e7d2416aa0f20e01 ]
    
    We need to check the max request size that is from user space before
    allocating pages. If the request size exceeds the limit, return -EINVAL.
    This check can avoid the warning below from page allocator.
    
    WARNING: CPU: 3 PID: 16525 at mm/page_alloc.c:5344 current_gfp_context include/linux/sched/mm.h:195 [inline]
    WARNING: CPU: 3 PID: 16525 at mm/page_alloc.c:5344 __alloc_pages+0x45d/0x500 mm/page_alloc.c:5356
    Modules linked in:
    CPU: 3 PID: 16525 Comm: syz-executor.3 Not tainted 5.15.0-syzkaller #0
    Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.14.0-2 04/01/2014
    RIP: 0010:__alloc_pages+0x45d/0x500 mm/page_alloc.c:5344
    Code: be c9 00 00 00 48 c7 c7 20 4a 97 89 c6 05 62 32 a7 0b 01 e8 74 9a 42 07 e9 6a ff ff ff 0f 0b e9 a0 fd ff ff 40 80 e5 3f eb 88 <0f> 0b e9 18 ff ff ff 4c 89 ef 44 89 e6 45 31 ed e8 1e 76 ff ff e9
    RSP: 0018:ffffc90023b87850 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: 1ffff92004770f0b RCX: dffffc0000000000
    RDX: 0000000000000000 RSI: 0000000000000033 RDI: 0000000000010cc1
    RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
    R10: ffffffff81bb4686 R11: 0000000000000001 R12: ffffffff902c1960
    R13: 0000000000000033 R14: 0000000000000000 R15: ffff88804cf64a30
    FS:  0000000000000000(0000) GS:ffff88802cd00000(0063) knlGS:00000000f44b4b40
    CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
    CR2: 000000002c921000 CR3: 000000004f507000 CR4: 0000000000150ee0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     alloc_pages+0x1a7/0x300 mm/mempolicy.c:2191
     __get_free_pages+0x8/0x40 mm/page_alloc.c:5418
     raw_cmd_copyin drivers/block/floppy.c:3113 [inline]
     raw_cmd_ioctl drivers/block/floppy.c:3160 [inline]
     fd_locked_ioctl+0x12e5/0x2820 drivers/block/floppy.c:3528
     fd_ioctl drivers/block/floppy.c:3555 [inline]
     fd_compat_ioctl+0x891/0x1b60 drivers/block/floppy.c:3869
     compat_blkdev_ioctl+0x3b8/0x810 block/ioctl.c:662
     __do_compat_sys_ioctl+0x1c7/0x290 fs/ioctl.c:972
     do_syscall_32_irqs_on arch/x86/entry/common.c:112 [inline]
     __do_fast_syscall_32+0x65/0xf0 arch/x86/entry/common.c:178
     do_fast_syscall_32+0x2f/0x70 arch/x86/entry/common.c:203
     entry_SYSENTER_compat_after_hwframe+0x4d/0x5c
    
    Reported-by: syzbot+23a02c7df2cf2bc93fa2@syzkaller.appspotmail.com
    Link: https://lore.kernel.org/r/20211116131033.27685-1-sxwjean@me.com
    Signed-off-by: Xiongwei Song <sxwjean@gmail.com>
    Signed-off-by: Denis Efremov <efremov@linux.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

floppy: Fix hang in watchdog when disk is ejected [+ + +]
Author: Tasos Sahanidis <tasos@tasossah.com>
Date:   Fri Sep 3 09:47:58 2021 +0300

    floppy: Fix hang in watchdog when disk is ejected
    
    [ Upstream commit fb48febce7e30baed94dd791e19521abd2c3fd83 ]
    
    When the watchdog detects a disk change, it calls cancel_activity(),
    which in turn tries to cancel the fd_timer delayed work.
    
    In the above scenario, fd_timer_fn is set to fd_watchdog(), meaning
    it is trying to cancel its own work.
    This results in a hang as cancel_delayed_work_sync() is waiting for the
    watchdog (itself) to return, which never happens.
    
    This can be reproduced relatively consistently by attempting to read a
    broken floppy, and ejecting it while IO is being attempted and retried.
    
    To resolve this, this patch calls cancel_delayed_work() instead, which
    cancels the work without waiting for the watchdog to return and finish.
    
    Before this regression was introduced, the code in this section used
    del_timer(), and not del_timer_sync() to delete the watchdog timer.
    
    Link: https://lore.kernel.org/r/399e486c-6540-db27-76aa-7a271b061f76@tasossah.com
    Fixes: 070ad7e793dc ("floppy: convert to delayed work and single-thread wq")
    Signed-off-by: Tasos Sahanidis <tasos@tasossah.com>
    Signed-off-by: Denis Efremov <efremov@linux.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs: dlm: filter user dlm messages for kernel locks [+ + +]
Author: Alexander Aring <aahringo@redhat.com>
Date:   Tue Nov 2 15:17:24 2021 -0400

    fs: dlm: filter user dlm messages for kernel locks
    
    [ Upstream commit 6c2e3bf68f3e5e5a647aa52be246d5f552d7496d ]
    
    This patch fixes the following crash by receiving a invalid message:
    
    [  160.672220] ==================================================================
    [  160.676206] BUG: KASAN: user-memory-access in dlm_user_add_ast+0xc3/0x370
    [  160.679659] Read of size 8 at addr 00000000deadbeef by task kworker/u32:13/319
    [  160.681447]
    [  160.681824] CPU: 10 PID: 319 Comm: kworker/u32:13 Not tainted 5.14.0-rc2+ #399
    [  160.683472] Hardware name: Red Hat KVM/RHEL-AV, BIOS 1.14.0-1.module+el8.6.0+12648+6ede71a5 04/01/2014
    [  160.685574] Workqueue: dlm_recv process_recv_sockets
    [  160.686721] Call Trace:
    [  160.687310]  dump_stack_lvl+0x56/0x6f
    [  160.688169]  ? dlm_user_add_ast+0xc3/0x370
    [  160.689116]  kasan_report.cold.14+0x116/0x11b
    [  160.690138]  ? dlm_user_add_ast+0xc3/0x370
    [  160.690832]  dlm_user_add_ast+0xc3/0x370
    [  160.691502]  _receive_unlock_reply+0x103/0x170
    [  160.692241]  _receive_message+0x11df/0x1ec0
    [  160.692926]  ? rcu_read_lock_sched_held+0xa1/0xd0
    [  160.693700]  ? rcu_read_lock_bh_held+0xb0/0xb0
    [  160.694427]  ? lock_acquire+0x175/0x400
    [  160.695058]  ? do_purge.isra.51+0x200/0x200
    [  160.695744]  ? lock_acquired+0x360/0x5d0
    [  160.696400]  ? lock_contended+0x6a0/0x6a0
    [  160.697055]  ? lock_release+0x21d/0x5e0
    [  160.697686]  ? lock_is_held_type+0xe0/0x110
    [  160.698352]  ? lock_is_held_type+0xe0/0x110
    [  160.699026]  ? ___might_sleep+0x1cc/0x1e0
    [  160.699698]  ? dlm_wait_requestqueue+0x94/0x140
    [  160.700451]  ? dlm_process_requestqueue+0x240/0x240
    [  160.701249]  ? down_write_killable+0x2b0/0x2b0
    [  160.701988]  ? do_raw_spin_unlock+0xa2/0x130
    [  160.702690]  dlm_receive_buffer+0x1a5/0x210
    [  160.703385]  dlm_process_incoming_buffer+0x726/0x9f0
    [  160.704210]  receive_from_sock+0x1c0/0x3b0
    [  160.704886]  ? dlm_tcp_shutdown+0x30/0x30
    [  160.705561]  ? lock_acquire+0x175/0x400
    [  160.706197]  ? rcu_read_lock_sched_held+0xa1/0xd0
    [  160.706941]  ? rcu_read_lock_bh_held+0xb0/0xb0
    [  160.707681]  process_recv_sockets+0x32/0x40
    [  160.708366]  process_one_work+0x55e/0xad0
    [  160.709045]  ? pwq_dec_nr_in_flight+0x110/0x110
    [  160.709820]  worker_thread+0x65/0x5e0
    [  160.710423]  ? process_one_work+0xad0/0xad0
    [  160.711087]  kthread+0x1ed/0x220
    [  160.711628]  ? set_kthread_struct+0x80/0x80
    [  160.712314]  ret_from_fork+0x22/0x30
    
    The issue is that we received a DLM message for a user lock but the
    destination lock is a kernel lock. Note that the address which is trying
    to derefence is 00000000deadbeef, which is in a kernel lock
    lkb->lkb_astparam, this field should never be derefenced by the DLM
    kernel stack. In case of a user lock lkb->lkb_astparam is lkb->lkb_ua
    (memory is shared by a union field). The struct lkb_ua will be handled
    by the DLM kernel stack but on a kernel lock it will contain invalid
    data and ends in most likely crashing the kernel.
    
    It can be reproduced with two cluster nodes.
    
    node 2:
    dlm_tool join test
    echo "862 fooobaar 1 2 1" > /sys/kernel/debug/dlm/test_locks
    echo "862 3 1" > /sys/kernel/debug/dlm/test_waiters
    
    node 1:
    dlm_tool join test
    
    python:
    foo = DLM(h_cmd=3, o_nextcmd=1, h_nodeid=1, h_lockspace=0x77222027, \
              m_type=7, m_flags=0x1, m_remid=0x862, m_result=0xFFFEFFFE)
    newFile = open("/sys/kernel/debug/dlm/comms/2/rawmsg", "wb")
    newFile.write(bytes(foo))
    
    Signed-off-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: David Teigland <teigland@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
HID: uhid: Fix worker destroying device without any protection [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Fri Jan 14 14:33:30 2022 +0100

    HID: uhid: Fix worker destroying device without any protection
    
    commit 4ea5763fb79ed89b3bdad455ebf3f33416a81624 upstream.
    
    uhid has to run hid_add_device() from workqueue context while allowing
    parallel use of the userspace API (which is protected with ->devlock).
    But hid_add_device() can fail. Currently, that is handled by immediately
    destroying the associated HID device, without using ->devlock - but if
    there are concurrent requests from userspace, that's wrong and leads to
    NULL dereferences and/or memory corruption (via use-after-free).
    
    Fix it by leaving the HID device as-is in the worker. We can clean it up
    later, either in the UHID_DESTROY command handler or in the ->release()
    handler.
    
    Cc: stable@vger.kernel.org
    Fixes: 67f8ecc550b5 ("HID: uhid: fix timeout when probe races with IO")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HSI: core: Fix return freed object in hsi_new_client [+ + +]
Author: Chengfeng Ye <cyeaa@connect.ust.hk>
Date:   Fri Nov 5 06:45:07 2021 -0700

    HSI: core: Fix return freed object in hsi_new_client
    
    [ Upstream commit a1ee1c08fcd5af03187dcd41dcab12fd5b379555 ]
    
    cl is freed on error of calling device_register, but this
    object is return later, which will cause uaf issue. Fix it
    by return NULL on error.
    
    Signed-off-by: Chengfeng Ye <cyeaa@connect.ust.hk>
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: designware-pci: Fix to change data types of hcnt and lcnt parameters [+ + +]
Author: Lakshmi Sowjanya D <lakshmi.sowjanya.d@intel.com>
Date:   Wed Dec 15 17:12:01 2021 +0200

    i2c: designware-pci: Fix to change data types of hcnt and lcnt parameters
    
    [ Upstream commit d52097010078c1844348dc0e467305e5f90fd317 ]
    
    The data type of hcnt and lcnt in the struct dw_i2c_dev is of type u16.
    It's better to have same data type in struct dw_scl_sda_cfg as well.
    
    Reported-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Lakshmi Sowjanya D <lakshmi.sowjanya.d@intel.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: i801: Don't silently correct invalid transfer size [+ + +]
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Sun Nov 7 22:57:00 2021 +0100

    i2c: i801: Don't silently correct invalid transfer size
    
    [ Upstream commit effa453168a7eeb8a562ff4edc1dbf9067360a61 ]
    
    If an invalid block size is provided, reject it instead of silently
    changing it to a supported value. Especially critical I see the case of
    a write transfer with block length 0. In this case we have no guarantee
    that the byte we would write is valid. When silently reducing a read to
    32 bytes then we don't return an error and the caller may falsely
    assume that we returned the full requested data.
    
    If this change should break any (broken) caller, then I think we should
    fix the caller.
    
    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Reviewed-by: Jean Delvare <jdelvare@suse.de>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: mpc: Correct I2C reset procedure [+ + +]
Author: Joakim Tjernlund <joakim.tjernlund@infinera.com>
Date:   Thu May 11 14:20:33 2017 +0200

    i2c: mpc: Correct I2C reset procedure
    
    [ Upstream commit ebe82cf92cd4825c3029434cabfcd2f1780e64be ]
    
    Current I2C reset procedure is broken in two ways:
    1) It only generate 1 START instead of 9 STARTs and STOP.
    2) It leaves the bus Busy so every I2C xfer after the first
       fixup calls the reset routine again, for every xfer there after.
    
    This fixes both errors.
    
    Signed-off-by: Joakim Tjernlund <joakim.tjernlund@infinera.com>
    Acked-by: Scott Wood <oss@buserror.net>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iwlwifi: mvm: synchronize with FW after multicast commands [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Sat Dec 4 08:35:45 2021 +0200

    iwlwifi: mvm: synchronize with FW after multicast commands
    
    [ Upstream commit db66abeea3aefed481391ecc564fb7b7fb31d742 ]
    
    If userspace installs a lot of multicast groups very quickly, then
    we may run out of command queue space as we send the updates in an
    asynchronous fashion (due to locking concerns), and the CPU can
    create them faster than the firmware can process them. This is true
    even when mac80211 has a work struct that gets scheduled.
    
    Fix this by synchronizing with the firmware after sending all those
    commands - outside of the iteration we can send a synchronous echo
    command that just has the effect of the CPU waiting for the prior
    asynchronous commands to finish. This also will cause fewer of the
    commands to be sent to the firmware overall, because the work will
    only run once when rescheduled multiple times while it's running.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=213649
    Suggested-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
    Reported-by: Maximilian Ernestus <maximilian@ernestus.de>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Link: https://lore.kernel.org/r/iwlwifi.20211204083238.51aea5b79ea4.I88a44798efda16e9fe480fb3e94224931d311b29@changeid
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib82596: Fix IRQ check in sni_82596_probe [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Fri Jan 14 06:57:24 2022 +0000

    lib82596: Fix IRQ check in sni_82596_probe
    
    commit 99218cbf81bf21355a3de61cd46a706d36e900e6 upstream.
    
    platform_get_irq() returns negative error number instead 0 on failure.
    And the doc of platform_get_irq() provides a usage example:
    
        int irq = platform_get_irq(pdev, 0);
        if (irq < 0)
            return irq;
    
    Fix the check of return value to catch errors correctly.
    
    Fixes: 115978859272 ("i825xx: Move the Intel 82586/82593/82596 based drivers")
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 4.4.300 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Jan 27 08:46:21 2022 +0100

    Linux 4.4.300
    
    Link: https://lore.kernel.org/r/20220124183927.095545464@linuxfoundation.org
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>                              =
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
media: b2c2: Add missing check in flexcop_pci_isr: [+ + +]
Author: Zheyu Ma <zheyuma97@gmail.com>
Date:   Tue May 11 10:00:03 2021 +0100

    media: b2c2: Add missing check in flexcop_pci_isr:
    
    [ Upstream commit b13203032e679674c7c518f52a7ec0801ca3a829 ]
    
    A out-of-bounds bug can be triggered by an interrupt, the reason for
    this bug is the lack of checking of register values.
    
    In flexcop_pci_isr, the driver reads value from a register and uses it as
    a dma address. Finally, this address will be passed to the count parameter
    of find_next_packet. If this value is larger than the size of dma, the
    index of buffer will be out-of-bounds.
    
    Fix this by adding a check after reading the value of the register.
    
    The following KASAN report reveals it:
    
    BUG: KASAN: slab-out-of-bounds in find_next_packet
    drivers/media/dvb-core/dvb_demux.c:528 [inline]
    BUG: KASAN: slab-out-of-bounds in _dvb_dmx_swfilter
    drivers/media/dvb-core/dvb_demux.c:572 [inline]
    BUG: KASAN: slab-out-of-bounds in dvb_dmx_swfilter+0x3fa/0x420
    drivers/media/dvb-core/dvb_demux.c:603
    Read of size 1 at addr ffff8880608c00a0 by task swapper/2/0
    
    CPU: 2 PID: 0 Comm: swapper/2 Not tainted 4.19.177-gdba4159c14ef #25
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.org 04/01/2014
    Call Trace:
     <IRQ>
     __dump_stack lib/dump_stack.c:77 [inline]
     dump_stack+0xec/0x156 lib/dump_stack.c:118
     print_address_description+0x78/0x290 mm/kasan/report.c:256
     kasan_report_error mm/kasan/report.c:354 [inline]
     kasan_report+0x25b/0x380 mm/kasan/report.c:412
     __asan_report_load1_noabort+0x19/0x20 mm/kasan/report.c:430
     find_next_packet drivers/media/dvb-core/dvb_demux.c:528 [inline]
     _dvb_dmx_swfilter drivers/media/dvb-core/dvb_demux.c:572 [inline]
     dvb_dmx_swfilter+0x3fa/0x420 drivers/media/dvb-core/dvb_demux.c:603
     flexcop_pass_dmx_data+0x2e/0x40 drivers/media/common/b2c2/flexcop.c:167
     flexcop_pci_isr+0x3d1/0x5d0 drivers/media/pci/b2c2/flexcop-pci.c:212
     __handle_irq_event_percpu+0xfb/0x770 kernel/irq/handle.c:149
     handle_irq_event_percpu+0x79/0x150 kernel/irq/handle.c:189
     handle_irq_event+0xac/0x140 kernel/irq/handle.c:206
     handle_fasteoi_irq+0x232/0x5c0 kernel/irq/chip.c:725
     generic_handle_irq_desc include/linux/irqdesc.h:155 [inline]
     handle_irq+0x230/0x3a0 arch/x86/kernel/irq_64.c:87
     do_IRQ+0xa7/0x1e0 arch/x86/kernel/irq.c:247
     common_interrupt+0xf/0xf arch/x86/entry/entry_64.S:670
     </IRQ>
    RIP: 0010:native_safe_halt+0x28/0x30 arch/x86/include/asm/irqflags.h:61
    Code: 00 00 55 be 04 00 00 00 48 c7 c7 00 62 2f 8c 48 89 e5 e8 fb 31
    e8 f8 8b 05 75 4f 8e 03 85 c0 7e 07 0f 00 2d 8a 61 66 00 fb f4 <5d> c3
    90 90 90 90 90 90 0f 1f 44 00 00 55 48 89 e5 41 57 41 56 41
    RSP: 0018:ffff88806b71fcc8 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffde
    RAX: 0000000000000000 RBX: ffffffff8bde44c8 RCX: ffffffff88a11285
    RDX: 0000000000000000 RSI: 0000000000000004 RDI: ffffffff8c2f6200
    RBP: ffff88806b71fcc8 R08: fffffbfff185ec40 R09: fffffbfff185ec40
    R10: 0000000000000001 R11: fffffbfff185ec40 R12: 0000000000000002
    R13: ffffffff8be9d6e0 R14: 0000000000000000 R15: 0000000000000000
     arch_safe_halt arch/x86/include/asm/paravirt.h:94 [inline]
     default_idle+0x6f/0x360 arch/x86/kernel/process.c:557
     arch_cpu_idle+0xf/0x20 arch/x86/kernel/process.c:548
     default_idle_call+0x3b/0x60 kernel/sched/idle.c:93
     cpuidle_idle_call kernel/sched/idle.c:153 [inline]
     do_idle+0x2ab/0x3c0 kernel/sched/idle.c:263
     cpu_startup_entry+0xcb/0xe0 kernel/sched/idle.c:369
     start_secondary+0x3b8/0x4e0 arch/x86/kernel/smpboot.c:271
     secondary_startup_64+0xa4/0xb0 arch/x86/kernel/head_64.S:243
    
    Allocated by task 1:
     save_stack+0x43/0xd0 mm/kasan/kasan.c:448
     set_track mm/kasan/kasan.c:460 [inline]
     kasan_kmalloc+0xad/0xe0 mm/kasan/kasan.c:553
     kasan_slab_alloc+0x11/0x20 mm/kasan/kasan.c:490
     slab_post_alloc_hook mm/slab.h:445 [inline]
     slab_alloc_node mm/slub.c:2741 [inline]
     slab_alloc mm/slub.c:2749 [inline]
     kmem_cache_alloc+0xeb/0x280 mm/slub.c:2754
     kmem_cache_zalloc include/linux/slab.h:699 [inline]
     __kernfs_new_node+0xe2/0x6f0 fs/kernfs/dir.c:633
     kernfs_new_node+0x9a/0x120 fs/kernfs/dir.c:693
     __kernfs_create_file+0x5f/0x340 fs/kernfs/file.c:992
     sysfs_add_file_mode_ns+0x22a/0x4e0 fs/sysfs/file.c:306
     create_files fs/sysfs/group.c:63 [inline]
     internal_create_group+0x34e/0xc30 fs/sysfs/group.c:147
     sysfs_create_group fs/sysfs/group.c:173 [inline]
     sysfs_create_groups+0x9c/0x140 fs/sysfs/group.c:200
     driver_add_groups+0x3e/0x50 drivers/base/driver.c:129
     bus_add_driver+0x3a5/0x790 drivers/base/bus.c:684
     driver_register+0x1cd/0x410 drivers/base/driver.c:170
     __pci_register_driver+0x197/0x200 drivers/pci/pci-driver.c:1411
     cx88_audio_pci_driver_init+0x23/0x25 drivers/media/pci/cx88/cx88-alsa.c:
     1017
     do_one_initcall+0xe0/0x610 init/main.c:884
     do_initcall_level init/main.c:952 [inline]
     do_initcalls init/main.c:960 [inline]
     do_basic_setup init/main.c:978 [inline]
     kernel_init_freeable+0x4d0/0x592 init/main.c:1145
     kernel_init+0x18/0x190 init/main.c:1062
     ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:415
    
    Freed by task 0:
    (stack is not available)
    
    The buggy address belongs to the object at ffff8880608c0000
     which belongs to the cache kernfs_node_cache of size 160
    The buggy address is located 0 bytes to the right of
     160-byte region [ffff8880608c0000, ffff8880608c00a0)
    The buggy address belongs to the page:
    page:ffffea0001823000 count:1 mapcount:0 mapping:ffff88806bed1e00
    index:0x0 compound_mapcount: 0
    flags: 0x100000000008100(slab|head)
    raw: 0100000000008100 dead000000000100 dead000000000200 ffff88806bed1e00
    raw: 0000000000000000 0000000000240024 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff8880608bff80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     ffff8880608c0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    >ffff8880608c0080: 00 00 00 00 fc fc fc fc fc fc fc fc 00 00 00 00
                                   ^
     ffff8880608c0100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     ffff8880608c0180: fc fc fc fc fc fc fc fc 00 00 00 00 00 00 00 00
    ==================================================================
    
    Link: https://lore.kernel.org/linux-media/1620723603-30912-1-git-send-email-zheyuma97@gmail.com
    Reported-by: Zheyu Ma <zheyuma97@gmail.com>
    Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: dib0700: fix undefined behavior in tuner shutdown [+ + +]
Author: Michael Kuron <michael.kuron@gmail.com>
Date:   Sun Sep 26 21:51:26 2021 +0100

    media: dib0700: fix undefined behavior in tuner shutdown
    
    commit f7b77ebe6d2f49c7747b2d619586d1aa33f9ea91 upstream.
    
    This fixes a problem where closing the tuner would leave it in a state
    where it would not tune to any channel when reopened. This problem was
    discovered as part of https://github.com/hselasky/webcamd/issues/16.
    
    Since adap->id is 0 or 1, this bit-shift overflows, which is undefined
    behavior. The driver still worked in practice as the overflow would in
    most environments result in 0, which rendered the line a no-op. When
    running the driver as part of webcamd however, the overflow could lead
    to 0xff due to optimizations by the compiler, which would, in the end,
    improperly shut down the tuner.
    
    The bug is a regression introduced in the commit referenced below. The
    present patch causes identical behavior to before that commit for
    adap->id equal to 0 or 1. The driver does not contain support for
    dib0700 devices with more adapters, assuming such even exist.
    
    Tests have been performed with the Xbox One Digital TV Tuner on amd64.
    Not all dib0700 devices are expected to be affected by the regression;
    this code path is only taken by those with incorrect endpoint numbers.
    
    Link: https://lore.kernel.org/linux-media/1d2fc36d94ced6f67c7cc21dcc469d5e5bdd8201.1632689033.git.mchehab+huawei@kernel.org
    
    Cc: stable@vger.kernel.org
    Fixes: 7757ddda6f4f ("[media] DiB0700: add function to change I2C-speed")
    Signed-off-by: Michael Kuron <michael.kuron@gmail.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: dib8000: Fix a memleak in dib8000_init() [+ + +]
Author: Zhou Qingyang <zhou1615@umn.edu>
Date:   Tue Nov 30 16:38:05 2021 +0100

    media: dib8000: Fix a memleak in dib8000_init()
    
    [ Upstream commit 8dbdcc7269a83305ee9d677b75064d3530a48ee2 ]
    
    In dib8000_init(), the variable fe is not freed or passed out on the
    failure of dib8000_identify(&state->i2c), which could lead to a memleak.
    
    Fix this bug by adding a kfree of fe in the error path.
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_DVB_DIB8000=m show no new warnings,
    and our static analyzer no longer warns about this code.
    
    Fixes: 77e2c0f5d471 ("V4L/DVB (12900): DiB8000: added support for DiBcom ISDB-T/ISDB-Tsb demodulator DiB8000")
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: em28xx: fix control-message timeouts [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Oct 25 13:16:38 2021 +0100

    media: em28xx: fix control-message timeouts
    
    commit d9b7e8df3aa9b8c10708aab60e72e79ac08237e4 upstream.
    
    USB control-message timeouts are specified in milliseconds and should
    specifically not vary with CONFIG_HZ.
    
    Fixes: a6c2ba283565 ("[PATCH] v4l: 716: support for em28xx board family")
    Cc: stable@vger.kernel.org      # 2.6.16
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: igorplugusb: receiver overflow should be reported [+ + +]
Author: Sean Young <sean@mess.org>
Date:   Tue Nov 30 23:58:19 2021 +0100

    media: igorplugusb: receiver overflow should be reported
    
    [ Upstream commit 8fede658e7ddb605bbd68ed38067ddb0af033db4 ]
    
    Without this, some IR will be missing mid-stream and we might decode
    something which never really occurred.
    
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: m920x: don't use stack on USB reads [+ + +]
Author: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Date:   Mon Dec 6 15:34:19 2021 +0100

    media: m920x: don't use stack on USB reads
    
    [ Upstream commit a2ab06d7c4d6bfd0b545a768247a70463e977e27 ]
    
    Using stack-allocated pointers for USB message data don't work.
    This driver is almost OK with that, except for the I2C read
    logic.
    
    Fix it by using a temporary read buffer, just like on all other
    calls to m920x_read().
    
    Link: https://lore.kernel.org/all/ccc99e48-de4f-045e-0fe4-61e3118e3f74@mida.se/
    Reported-by: rkardell@mida.se
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: mceusb: fix control-message timeouts [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Oct 25 13:16:34 2021 +0100

    media: mceusb: fix control-message timeouts
    
    commit 16394e998cbb050730536bdf7e89f5a70efbd974 upstream.
    
    USB control-message timeouts are specified in milliseconds and should
    specifically not vary with CONFIG_HZ.
    
    Fixes: 66e89522aff7 ("V4L/DVB: IR: add mceusb IR receiver driver")
    Cc: stable@vger.kernel.org      # 2.6.36
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: msi001: fix possible null-ptr-deref in msi001_probe() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Tue Oct 26 13:23:48 2021 +0200

    media: msi001: fix possible null-ptr-deref in msi001_probe()
    
    [ Upstream commit 3d5831a40d3464eea158180eb12cbd81c5edfb6a ]
    
    I got a null-ptr-deref report:
    
    BUG: kernel NULL pointer dereference, address: 0000000000000060
    ...
    RIP: 0010:v4l2_ctrl_auto_cluster+0x57/0x270
    ...
    Call Trace:
     msi001_probe+0x13b/0x24b [msi001]
     spi_probe+0xeb/0x130
    ...
     do_syscall_64+0x35/0xb0
    
    In msi001_probe(), if the creation of control for bandwidth_auto
    fails, there will be a null-ptr-deref issue when it is used in
    v4l2_ctrl_auto_cluster().
    
    Check dev->hdl.error before v4l2_ctrl_auto_cluster() to fix this bug.
    
    Link: https://lore.kernel.org/linux-media/20211026112348.2878040-1-wanghai38@huawei.com
    Fixes: 93203dd6c7c4 ("[media] msi001: Mirics MSi001 silicon tuner driver")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: pvrusb2: fix control-message timeouts [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Oct 25 13:16:39 2021 +0100

    media: pvrusb2: fix control-message timeouts
    
    commit b82bf9b9dc305d7d3d93eab106d70dbf2171b43e upstream.
    
    USB control-message timeouts are specified in milliseconds and should
    specifically not vary with CONFIG_HZ.
    
    Fixes: d855497edbfb ("V4L/DVB (4228a): pvrusb2 to kernel 2.6.18")
    Cc: stable@vger.kernel.org      # 2.6.18
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: saa7146: hexium_gemini: Fix a NULL pointer dereference in hexium_attach() [+ + +]
Author: Zhou Qingyang <zhou1615@umn.edu>
Date:   Fri Dec 3 16:40:30 2021 +0100

    media: saa7146: hexium_gemini: Fix a NULL pointer dereference in hexium_attach()
    
    [ Upstream commit 3af86b046933ba513d08399dba0d4d8b50d607d0 ]
    
    In hexium_attach(dev, info), saa7146_vv_init() is called to allocate
    a new memory for dev->vv_data. saa7146_vv_release() will be called on
    failure of saa7146_register_device(). There is a dereference of
    dev->vv_data in saa7146_vv_release(), which could lead to a NULL
    pointer dereference on failure of saa7146_vv_init().
    
    Fix this bug by adding a check of saa7146_vv_init().
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_VIDEO_HEXIUM_GEMINI=m show no new warnings,
    and our static analyzer no longer warns about this code.
    
    Link: https://lore.kernel.org/linux-media/20211203154030.111210-1-zhou1615@umn.edu
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: saa7146: hexium_orion: Fix a NULL pointer dereference in hexium_attach() [+ + +]
Author: Zhou Qingyang <zhou1615@umn.edu>
Date:   Tue Nov 30 17:25:49 2021 +0100

    media: saa7146: hexium_orion: Fix a NULL pointer dereference in hexium_attach()
    
    [ Upstream commit 348df8035301dd212e3cc2860efe4c86cb0d3303 ]
    
    In hexium_attach(dev, info), saa7146_vv_init() is called to allocate
    a new memory for dev->vv_data. In hexium_detach(), saa7146_vv_release()
    will be called and there is a dereference of dev->vv_data in
    saa7146_vv_release(), which could lead to a NULL pointer dereference
    on failure of saa7146_vv_init() according to the following logic.
    
    Both hexium_attach() and hexium_detach() are callback functions of
    the variable 'extension', so there exists a possible call chain directly
    from hexium_attach() to hexium_detach():
    
    hexium_attach(dev, info) -- fail to alloc memory to dev->vv_data
            |                               in saa7146_vv_init().
            |
            |
    hexium_detach() -- a dereference of dev->vv_data in saa7146_vv_release()
    
    Fix this bug by adding a check of saa7146_vv_init().
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_VIDEO_HEXIUM_ORION=m show no new warnings,
    and our static analyzer no longer warns about this code.
    
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: saa7146: mxb: Fix a NULL pointer dereference in mxb_attach() [+ + +]
Author: Zhou Qingyang <zhou1615@umn.edu>
Date:   Tue Nov 30 17:34:44 2021 +0100

    media: saa7146: mxb: Fix a NULL pointer dereference in mxb_attach()
    
    [ Upstream commit 0407c49ebe330333478440157c640fffd986f41b ]
    
    In mxb_attach(dev, info), saa7146_vv_init() is called to allocate a
    new memory for dev->vv_data. saa7146_vv_release() will be called on
    failure of mxb_probe(dev). There is a dereference of dev->vv_data
    in saa7146_vv_release(), which could lead to a NULL pointer dereference
    on failure of saa7146_vv_init().
    
    Fix this bug by adding a check of saa7146_vv_init().
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_VIDEO_MXB=m show no new warnings,
    and our static analyzer no longer warns about this code.
    
    Fixes: 03b1930efd3c ("V4L/DVB: saa7146: fix regression of the av7110/budget-av driver")
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: stk1160: fix control-message timeouts [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Oct 25 13:16:41 2021 +0100

    media: stk1160: fix control-message timeouts
    
    commit 6aa6e70cdb5b863a57bad61310bf89b6617a5d2d upstream.
    
    USB control-message timeouts are specified in milliseconds and should
    specifically not vary with CONFIG_HZ.
    
    Fixes: 9cb2173e6ea8 ("[media] media: Add stk1160 new driver (easycap replacement)")
    Cc: stable@vger.kernel.org      # 3.7
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: uvcvideo: fix division by zero at stream start [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Oct 26 11:55:11 2021 +0200

    media: uvcvideo: fix division by zero at stream start
    
    commit 8aa637bf6d70d2fb2ad4d708d8b9dd02b1c095df upstream.
    
    Add the missing bulk-endpoint max-packet sanity check to
    uvc_video_start_transfer() to avoid division by zero in
    uvc_alloc_urb_buffers() in case a malicious device has broken
    descriptors (or when doing descriptor fuzz testing).
    
    Note that USB core will reject URBs submitted for endpoints with zero
    wMaxPacketSize but that drivers doing packet-size calculations still
    need to handle this (cf. commit 2548288b4fb0 ("USB: Fix: Don't skip
    endpoint descriptors with maxpacket=0")).
    
    Fixes: c0efd232929c ("V4L/DVB (8145a): USB Video Class driver")
    Cc: stable@vger.kernel.org      # 2.6.26
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mfd: intel-lpss: Fix too early PM enablement in the ACPI ->probe() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Mon Nov 1 21:00:08 2021 +0200

    mfd: intel-lpss: Fix too early PM enablement in the ACPI ->probe()
    
    commit c9e143084d1a602f829115612e1ec79df3727c8b upstream.
    
    The runtime PM callback may be called as soon as the runtime PM facility
    is enabled and activated. It means that ->suspend() may be called before
    we finish probing the device in the ACPI case. Hence, NULL pointer
    dereference:
    
      intel-lpss INT34BA:00: IRQ index 0 not found
      BUG: kernel NULL pointer dereference, address: 0000000000000030
      ...
      Workqueue: pm pm_runtime_work
      RIP: 0010:intel_lpss_suspend+0xb/0x40 [intel_lpss]
    
    To fix this, first try to register the device and only after that enable
    runtime PM facility.
    
    Fixes: 4b45efe85263 ("mfd: Add support for Intel Sunrisepoint LPSS devices")
    Reported-by: Orlando Chamberlain <redecorating@protonmail.com>
    Reported-by: Aditya Garg <gargaditya08@live.com>
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Tested-by: Aditya Garg <gargaditya08@live.com>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Link: https://lore.kernel.org/r/20211101190008.86473-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mips: bcm63xx: add support for clk_set_parent() [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Tue Dec 28 16:05:53 2021 -0800

    mips: bcm63xx: add support for clk_set_parent()
    
    [ Upstream commit 6f03055d508ff4feb8db02ba3df9303a1db8d381 ]
    
    The MIPS BMC63XX subarch does not provide/support clk_set_parent().
    This causes build errors in a few drivers, so add a simple implementation
    of that function so that callers of it will build without errors.
    
    Fixes these build errors:
    
    ERROR: modpost: "clk_set_parent" [sound/soc/jz4740/snd-soc-jz4740-i2s.ko] undefined!
    ERROR: modpost: "clk_set_parent" [sound/soc/atmel/snd-soc-atmel-i2s.ko] undefined!
    
    Fixes: e7300d04bd08 ("MIPS: BCM63xx: Add support for the Broadcom BCM63xx family of SOCs." )
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Acked-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mips: lantiq: add support for clk_set_parent() [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Tue Dec 28 16:03:45 2021 -0800

    mips: lantiq: add support for clk_set_parent()
    
    [ Upstream commit 76f66dfd60dc5d2f9dec22d99091fea1035c5d03 ]
    
    Provide a simple implementation of clk_set_parent() in the lantiq
    subarch so that callers of it will build without errors.
    
    Fixes these build errors:
    
    ERROR: modpost: "clk_set_parent" [sound/soc/jz4740/snd-soc-jz4740-i2s.ko] undefined!
    ERROR: modpost: "clk_set_parent" [sound/soc/atmel/snd-soc-atmel-i2s.ko] undefined!
    
    Fixes: 171bb2f19ed6 ("MIPS: Lantiq: Add initial support for Lantiq SoCs")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reported-by: kernel test robot <lkp@intel.com>
    --to=linux-mips@vger.kernel.org --cc="John Crispin <john@phrozen.org>" --cc="Jonathan Cameron <jic23@kernel.org>" --cc="Russell King <linux@armlinux.org.uk>" --cc="Andy Shevchenko <andy.shevchenko@gmail.com>" --cc=alsa-devel@alsa-project.org --to="Thomas Bogendoerfer <tsbogend@alpha.franken.de>"
    Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: Octeon: Fix build errors using clang [+ + +]
Author: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
Date:   Thu Dec 16 17:50:14 2021 +0800

    MIPS: Octeon: Fix build errors using clang
    
    [ Upstream commit 95339b70677dc6f9a2d669c4716058e71b8dc1c7 ]
    
    A large number of the following errors is reported when compiling
    with clang:
    
      cvmx-bootinfo.h:326:3: error: adding 'int' to a string does not append to the string [-Werror,-Wstring-plus-int]
                      ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL)
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      cvmx-bootinfo.h:321:20: note: expanded from macro 'ENUM_BRD_TYPE_CASE'
              case x: return(#x + 16);        /* Skip CVMX_BOARD_TYPE_ */
                             ~~~^~~~
      cvmx-bootinfo.h:326:3: note: use array indexing to silence this warning
      cvmx-bootinfo.h:321:20: note: expanded from macro 'ENUM_BRD_TYPE_CASE'
              case x: return(#x + 16);        /* Skip CVMX_BOARD_TYPE_ */
                              ^
    
    Follow the prompts to use the address operator '&' to fix this error.
    
    Signed-off-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
misc: lattice-ecp3-config: Fix task hung when firmware load failed [+ + +]
Author: Wei Yongjun <weiyongjun1@huawei.com>
Date:   Tue Dec 28 12:55:22 2021 +0000

    misc: lattice-ecp3-config: Fix task hung when firmware load failed
    
    [ Upstream commit fcee5ce50bdb21116711e38635e3865594af907e ]
    
    When firmware load failed, kernel report task hung as follows:
    
    INFO: task xrun:5191 blocked for more than 147 seconds.
          Tainted: G        W         5.16.0-rc5-next-20211220+ #11
    "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
    task:xrun            state:D stack:    0 pid: 5191 ppid:   270 flags:0x00000004
    Call Trace:
     __schedule+0xc12/0x4b50 kernel/sched/core.c:4986
     schedule+0xd7/0x260 kernel/sched/core.c:6369 (discriminator 1)
     schedule_timeout+0x7aa/0xa80 kernel/time/timer.c:1857
     wait_for_completion+0x181/0x290 kernel/sched/completion.c:85
     lattice_ecp3_remove+0x32/0x40 drivers/misc/lattice-ecp3-config.c:221
     spi_remove+0x72/0xb0 drivers/spi/spi.c:409
    
    lattice_ecp3_remove() wait for signals from firmware loading, but when
    load failed, firmware_load() does not send this signal. This cause
    device remove hung. Fix it by sending signal even if load failed.
    
    Fixes: 781551df57c7 ("misc: Add Lattice ECP3 FPGA configuration via SPI")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Link: https://lore.kernel.org/r/20211228125522.3122284-1-weiyongjun1@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mwifiex: Fix skb_over_panic in mwifiex_usb_recv() [+ + +]
Author: Zekun Shen <bruceshenzk@gmail.com>
Date:   Sat Oct 30 22:42:50 2021 -0400

    mwifiex: Fix skb_over_panic in mwifiex_usb_recv()
    
    [ Upstream commit 04d80663f67ccef893061b49ec8a42ff7045ae84 ]
    
    Currently, with an unknown recv_type, mwifiex_usb_recv
    just return -1 without restoring the skb. Next time
    mwifiex_usb_rx_complete is invoked with the same skb,
    calling skb_put causes skb_over_panic.
    
    The bug is triggerable with a compromised/malfunctioning
    usb device. After applying the patch, skb_over_panic
    no longer shows up with the same input.
    
    Attached is the panic report from fuzzing.
    skbuff: skb_over_panic: text:000000003bf1b5fa
     len:2048 put:4 head:00000000dd6a115b data:000000000a9445d8
     tail:0x844 end:0x840 dev:<NULL>
    kernel BUG at net/core/skbuff.c:109!
    invalid opcode: 0000 [#1] SMP KASAN NOPTI
    CPU: 0 PID: 198 Comm: in:imklog Not tainted 5.6.0 #60
    RIP: 0010:skb_panic+0x15f/0x161
    Call Trace:
     <IRQ>
     ? mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb]
     skb_put.cold+0x24/0x24
     mwifiex_usb_rx_complete+0x26b/0xfcd [mwifiex_usb]
     __usb_hcd_giveback_urb+0x1e4/0x380
     usb_giveback_urb_bh+0x241/0x4f0
     ? __hrtimer_run_queues+0x316/0x740
     ? __usb_hcd_giveback_urb+0x380/0x380
     tasklet_action_common.isra.0+0x135/0x330
     __do_softirq+0x18c/0x634
     irq_exit+0x114/0x140
     smp_apic_timer_interrupt+0xde/0x380
     apic_timer_interrupt+0xf/0x20
     </IRQ>
    
    Reported-by: Brendan Dolan-Gavitt <brendandg@nyu.edu>
    Signed-off-by: Zekun Shen <bruceshenzk@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Link: https://lore.kernel.org/r/YX4CqjfRcTa6bVL+@Zekuns-MBP-16.fios-router.home
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module [+ + +]
Author: Tobias Waldekranz <tobias@waldekranz.com>
Date:   Tue Jan 18 22:50:53 2022 +0100

    net/fsl: xgmac_mdio: Fix incorrect iounmap when removing module
    
    commit 3f7c239c7844d2044ed399399d97a5f1c6008e1b upstream.
    
    As reported by sparse: In the remove path, the driver would attempt to
    unmap its own priv pointer - instead of the io memory that it mapped
    in probe.
    
    Fixes: 9f35a7342cff ("net/fsl: introduce Freescale 10G MDIO driver")
    Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: axienet: fix number of TX ring slots for available check [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Tue Jan 18 15:41:30 2022 -0600

    net: axienet: fix number of TX ring slots for available check
    
    commit aba57a823d2985a2cc8c74a2535f3a88e68d9424 upstream.
    
    The check for the number of available TX ring slots was off by 1 since a
    slot is required for the skb header as well as each fragment. This could
    result in overwriting a TX ring slot that was still in use.
    
    Fixes: 8a3b7a252dca9 ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: axienet: Wait for PhyRstCmplt after core reset [+ + +]
Author: Robert Hancock <robert.hancock@calian.com>
Date:   Tue Jan 18 15:41:25 2022 -0600

    net: axienet: Wait for PhyRstCmplt after core reset
    
    commit b400c2f4f4c53c86594dd57098970d97d488bfde upstream.
    
    When resetting the device, wait for the PhyRstCmplt bit to be set
    in the interrupt status register before continuing initialization, to
    ensure that the core is actually ready. When using an external PHY, this
    also ensures we do not start trying to access the PHY while it is still
    in reset. The PHY reset is initiated by the core reset which is
    triggered just above, but remains asserted for 5ms after the core is
    reset according to the documentation.
    
    The MgtRdy bit could also be waited for, but unfortunately when using
    7-series devices, the bit does not appear to work as documented (it
    seems to behave as some sort of link state indication and not just an
    indication the transceiver is ready) so it can't really be relied on for
    this purpose.
    
    Fixes: 8a3b7a252dca9 ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
    Signed-off-by: Robert Hancock <robert.hancock@calian.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: bonding: debug: avoid printing debug logs when bond is not notifying peers [+ + +]
Author: Suresh Kumar <surkumar@redhat.com>
Date:   Mon Dec 13 11:17:09 2021 +0530

    net: bonding: debug: avoid printing debug logs when bond is not notifying peers
    
    [ Upstream commit fee32de284ac277ba434a2d59f8ce46528ff3946 ]
    
    Currently "bond_should_notify_peers: slave ..." messages are printed whenever
    "bond_should_notify_peers" function is called.
    
    +++
    Dec 12 12:33:26 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:26 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:26 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:26 node1 kernel: bond0: (slave enp0s25): Received LACPDU on port 1
    Dec 12 12:33:26 node1 kernel: bond0: (slave enp0s25): Rx Machine: Port=1, Last State=6, Curr State=6
    Dec 12 12:33:26 node1 kernel: bond0: (slave enp0s25): partner sync=1
    Dec 12 12:33:26 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:26 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:26 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    ...
    Dec 12 12:33:30 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:30 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:30 node1 kernel: bond0: (slave enp4s3): Received LACPDU on port 2
    Dec 12 12:33:30 node1 kernel: bond0: (slave enp4s3): Rx Machine: Port=2, Last State=6, Curr State=6
    Dec 12 12:33:30 node1 kernel: bond0: (slave enp4s3): partner sync=1
    Dec 12 12:33:30 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:30 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    Dec 12 12:33:30 node1 kernel: bond0: bond_should_notify_peers: slave enp0s25
    +++
    
    This is confusing and can also clutter up debug logs.
    Print logs only when the peer notification happens.
    
    Signed-off-by: Suresh Kumar <suresh2514@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mcs7830: handle usb read errors properly [+ + +]
Author: Pavel Skripkin <paskripkin@gmail.com>
Date:   Fri Jan 7 01:57:16 2022 +0300

    net: mcs7830: handle usb read errors properly
    
    [ Upstream commit d668769eb9c52b150753f1653f7f5a0aeb8239d2 ]
    
    Syzbot reported uninit value in mcs7830_bind(). The problem was in
    missing validation check for bytes read via usbnet_read_cmd().
    
    usbnet_read_cmd() internally calls usb_control_msg(), that returns
    number of bytes read. Code should validate that requested number of bytes
    was actually read.
    
    So, this patch adds missing size validation check inside
    mcs7830_get_reg() to prevent uninit value bugs
    
    Reported-and-tested-by: syzbot+003c0a286b9af5412510@syzkaller.appspotmail.com
    Fixes: 2a36d7083438 ("USB: driver for mcs7830 (aka DeLOCK) USB ethernet adapter")
    Signed-off-by: Pavel Skripkin <paskripkin@gmail.com>
    Reviewed-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20220106225716.7425-1-paskripkin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mdio: Demote probed message to debug print [+ + +]
Author: Florian Fainelli <f.fainelli@gmail.com>
Date:   Mon Jan 3 11:40:24 2022 -0800

    net: mdio: Demote probed message to debug print
    
    [ Upstream commit 7590fc6f80ac2cbf23e6b42b668bbeded070850b ]
    
    On systems with large numbers of MDIO bus/muxes the message indicating
    that a given MDIO bus has been successfully probed is repeated for as
    many buses we have, which can eat up substantial boot time for no
    reason, demote to a debug print.
    
    Reported-by: Maxime Bizon <mbizon@freebox.fr>
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20220103194024.2620-1-f.fainelli@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net_sched: restore "mpu xxx" handling [+ + +]
Author: Kevin Bracey <kevin@bracey.fi>
Date:   Wed Jan 12 19:02:10 2022 +0200

    net_sched: restore "mpu xxx" handling
    
    commit fb80445c438c78b40b547d12b8d56596ce4ccfeb upstream.
    
    commit 56b765b79e9a ("htb: improved accuracy at high rates") broke
    "overhead X", "linklayer atm" and "mpu X" attributes.
    
    "overhead X" and "linklayer atm" have already been fixed. This restores
    the "mpu X" handling, as might be used by DOCSIS or Ethernet shaping:
    
        tc class add ... htb rate X overhead 4 mpu 64
    
    The code being fixed is used by htb, tbf and act_police. Cake has its
    own mpu handling. qdisc_calculate_pkt_len still uses the size table
    containing values adjusted for mpu by user space.
    
    iproute2 tc has always passed mpu into the kernel via a tc_ratespec
    structure, but the kernel never directly acted on it, merely stored it
    so that it could be read back by `tc class show`.
    
    Rather, tc would generate length-to-time tables that included the mpu
    (and linklayer) in their construction, and the kernel used those tables.
    
    Since v3.7, the tables were no longer used. Along with "mpu", this also
    broke "overhead" and "linklayer" which were fixed in 01cb71d2d47b
    ("net_sched: restore "overhead xxx" handling", v3.10) and 8a8e3d84b171
    ("net_sched: restore "linklayer atm" handling", v3.11).
    
    "overhead" was fixed by simply restoring use of tc_ratespec::overhead -
    this had originally been used by the kernel but was initially omitted
    from the new non-table-based calculations.
    
    "linklayer" had been handled in the table like "mpu", but the mode was
    not originally passed in tc_ratespec. The new implementation was made to
    handle it by getting new versions of tc to pass the mode in an extended
    tc_ratespec, and for older versions of tc the table contents were analysed
    at load time to deduce linklayer.
    
    As "mpu" has always been given to the kernel in tc_ratespec,
    accompanying the mpu-based table, we can restore system functionality
    with no userspace change by making the kernel act on the tc_ratespec
    value.
    
    Fixes: 56b765b79e9a ("htb: improved accuracy at high rates")
    Signed-off-by: Kevin Bracey <kevin@bracey.fi>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Jiri Pirko <jiri@resnulli.us>
    Cc: Vimalkumar <j.vimal@gmail.com>
    Link: https://lore.kernel.org/r/20220112170210.1014351-1-kevin@bracey.fi
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: bridge: add support for pppoe filtering [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Nov 23 12:50:31 2021 +0100

    netfilter: bridge: add support for pppoe filtering
    
    [ Upstream commit 28b78ecffea8078d81466b2e01bb5a154509f1ba ]
    
    This makes 'bridge-nf-filter-pppoe-tagged' sysctl work for
    bridged traffic.
    
    Looking at the original commit it doesn't appear this ever worked:
    
     static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
    [..]
            if (skb->protocol == htons(ETH_P_8021Q)) {
                    skb_pull(skb, VLAN_HLEN);
                    skb->network_header += VLAN_HLEN;
    +       } else if (skb->protocol == htons(ETH_P_PPP_SES)) {
    +               skb_pull(skb, PPPOE_SES_HLEN);
    +               skb->network_header += PPPOE_SES_HLEN;
            }
     [..]
            NF_HOOK(... POST_ROUTING, ...)
    
    ... but the adjusted offsets are never restored.
    
    The alternative would be to rip this code out for good,
    but otoh we'd have to keep this anyway for the vlan handling
    (which works because vlan tag info is in the skb, not the packet
     payload).
    
    Reported-and-tested-by: Amish Chana <amish@3g.co.za>
    Fixes: 516299d2f5b6f97 ("[NETFILTER]: bridge-nf: filter bridged IPv4/IPv6 encapsulated in pppoe traffic")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netns: add schedule point in ops_exit_list() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Jan 18 03:43:40 2022 -0800

    netns: add schedule point in ops_exit_list()
    
    commit 2836615aa22de55b8fca5e32fe1b27a67cda625e upstream.
    
    When under stress, cleanup_net() can have to dismantle
    netns in big numbers. ops_exit_list() currently calls
    many helpers [1] that have no schedule point, and we can
    end up with soft lockups, particularly on hosts
    with many cpus.
    
    Even for moderate amount of netns processed by cleanup_net()
    this patch avoids latency spikes.
    
    [1] Some of these helpers like fib_sync_up() and fib_sync_down_dev()
    are very slow because net/ipv4/fib_semantics.c uses host-wide hash tables,
    and ifindex is used as the only input of two hash functions.
        ifindexes tend to be the same for all netns (lo.ifindex==1 per instance)
        This will be fixed in a separate patch.
    
    Fixes: 72ad937abd0a ("net: Add support for batching network namespace cleanups")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfc: llcp: fix NULL error pointer dereference on sendmsg() after failed bind() [+ + +]
Author: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Date:   Wed Jan 19 08:48:16 2022 +0100

    nfc: llcp: fix NULL error pointer dereference on sendmsg() after failed bind()
    
    commit dded08927ca3c31a5c37f8e7f95fe98770475dd4 upstream.
    
    Syzbot detected a NULL pointer dereference of nfc_llcp_sock->dev pointer
    (which is a 'struct nfc_dev *') with calls to llcp_sock_sendmsg() after
    a failed llcp_sock_bind(). The message being sent is a SOCK_DGRAM.
    
    KASAN report:
    
      BUG: KASAN: null-ptr-deref in nfc_alloc_send_skb+0x2d/0xc0
      Read of size 4 at addr 00000000000005c8 by task llcp_sock_nfc_a/899
    
      CPU: 5 PID: 899 Comm: llcp_sock_nfc_a Not tainted 5.16.0-rc6-next-20211224-00001-gc6437fbf18b0 #125
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
      Call Trace:
       <TASK>
       dump_stack_lvl+0x45/0x59
       ? nfc_alloc_send_skb+0x2d/0xc0
       __kasan_report.cold+0x117/0x11c
       ? mark_lock+0x480/0x4f0
       ? nfc_alloc_send_skb+0x2d/0xc0
       kasan_report+0x38/0x50
       nfc_alloc_send_skb+0x2d/0xc0
       nfc_llcp_send_ui_frame+0x18c/0x2a0
       ? nfc_llcp_send_i_frame+0x230/0x230
       ? __local_bh_enable_ip+0x86/0xe0
       ? llcp_sock_connect+0x470/0x470
       ? llcp_sock_connect+0x470/0x470
       sock_sendmsg+0x8e/0xa0
       ____sys_sendmsg+0x253/0x3f0
       ...
    
    The issue was visible only with multiple simultaneous calls to bind() and
    sendmsg(), which resulted in most of the bind() calls to fail.  The
    bind() was failing on checking if there is available WKS/SDP/SAP
    (respective bit in 'struct nfc_llcp_local' fields).  When there was no
    available WKS/SDP/SAP, the bind returned error but the sendmsg() to such
    socket was able to trigger mentioned NULL pointer dereference of
    nfc_llcp_sock->dev.
    
    The code looks simply racy and currently it protects several paths
    against race with checks for (!nfc_llcp_sock->local) which is NULL-ified
    in error paths of bind().  The llcp_sock_sendmsg() did not have such
    check but called function nfc_llcp_send_ui_frame() had, although not
    protected with lock_sock().
    
    Therefore the race could look like (same socket is used all the time):
      CPU0                                     CPU1
      ====                                     ====
      llcp_sock_bind()
      - lock_sock()
        - success
      - release_sock()
      - return 0
                                               llcp_sock_sendmsg()
                                               - lock_sock()
                                               - release_sock()
      llcp_sock_bind(), same socket
      - lock_sock()
        - error
                                               - nfc_llcp_send_ui_frame()
                                                 - if (!llcp_sock->local)
        - llcp_sock->local = NULL
        - nfc_put_device(dev)
                                                 - dereference llcp_sock->dev
      - release_sock()
      - return -ERRNO
    
    The nfc_llcp_send_ui_frame() checked llcp_sock->local outside of the
    lock, which is racy and ineffective check.  Instead, its caller
    llcp_sock_sendmsg(), should perform the check inside lock_sock().
    
    Reported-and-tested-by: syzbot+7f23bcddf626e0593a39@syzkaller.appspotmail.com
    Fixes: b874dec21d1c ("NFC: Implement LLCP connection less Tx path")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
parisc: Avoid calling faulthandler_disabled() twice [+ + +]
Author: John David Anglin <dave.anglin@bell.net>
Date:   Wed Dec 22 16:52:26 2021 +0000

    parisc: Avoid calling faulthandler_disabled() twice
    
    [ Upstream commit 9e9d4b460f23bab61672eae397417d03917d116c ]
    
    In handle_interruption(), we call faulthandler_disabled() to check whether the
    fault handler is not disabled. If the fault handler is disabled, we immediately
    call do_page_fault(). It then calls faulthandler_disabled(). If disabled,
    do_page_fault() attempts to fixup the exception by jumping to no_context:
    
    no_context:
    
            if (!user_mode(regs) && fixup_exception(regs)) {
                    return;
            }
    
            parisc_terminate("Bad Address (null pointer deref?)", regs, code, address);
    
    Apart from the error messages, the two blocks of code perform the same
    function.
    
    We can avoid two calls to faulthandler_disabled() by a simple revision
    to the code in handle_interruption().
    
    Note: I didn't try to fix the formatting of this code block.
    
    Signed-off-by: John David Anglin <dave.anglin@bell.net>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

parisc: pdc_stable: Fix memory leak in pdcs_register_pathentries [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Thu Jan 20 12:18:12 2022 +0000

    parisc: pdc_stable: Fix memory leak in pdcs_register_pathentries
    
    commit d24846a4246b6e61ecbd036880a4adf61681d241 upstream.
    
    kobject_init_and_add() takes reference even when it fails.
    According to the doc of kobject_init_and_add():
    
       If this function returns an error, kobject_put() must be called to
       properly clean up the memory associated with the object.
    
    Fix memory leak by calling kobject_put().
    
    Fixes: 73f368cf679b ("Kobject: change drivers/parisc/pdc_stable.c to use kobject_init_and_add")
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
PCI: Add function 1 DMA alias quirk for Marvell 88SE9125 SATA controller [+ + +]
Author: Yifeng Li <tomli@tomli.me>
Date:   Thu Dec 2 06:35:21 2021 +0000

    PCI: Add function 1 DMA alias quirk for Marvell 88SE9125 SATA controller
    
    commit e445375882883f69018aa669b67cbb37ec873406 upstream.
    
    Like other SATA controller chips in the Marvell 88SE91xx series, the
    Marvell 88SE9125 has the same DMA requester ID hardware bug that prevents
    it from working under IOMMU.  Add it to the list of devices that need the
    quirk.
    
    Without this patch, device initialization fails with DMA errors:
    
      ata8: softreset failed (1st FIS failed)
      DMAR: DRHD: handling fault status reg 2
      DMAR: [DMA Write NO_PASID] Request device [03:00.1] fault addr 0xfffc0000 [fault reason 0x02] Present bit in context entry is clear
      DMAR: DRHD: handling fault status reg 2
      DMAR: [DMA Read NO_PASID] Request device [03:00.1] fault addr 0xfffc0000 [fault reason 0x02] Present bit in context entry is clear
    
    After applying the patch, the controller can be successfully initialized:
    
      ata8: SATA link up 1.5 Gbps (SStatus 113 SControl 330)
      ata8.00: ATAPI: PIONEER BD-RW   BDR-207M, 1.21, max UDMA/100
      ata8.00: configured for UDMA/100
      scsi 7:0:0:0: CD-ROM            PIONEER  BD-RW   BDR-207M 1.21 PQ: 0 ANSI: 5
    
    Link: https://lore.kernel.org/r/YahpKVR+McJVDdkD@work
    Reported-by: Sam Bingner <sam@bingner.com>
    Tested-by: Sam Bingner <sam@bingner.com>
    Tested-by: Yifeng Li <tomli@tomli.me>
    Signed-off-by: Yifeng Li <tomli@tomli.me>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Krzysztof Wilczyński <kw@linux.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pcmcia: fix setting of kthread task states [+ + +]
Author: Dominik Brodowski <linux@dominikbrodowski.net>
Date:   Sun Jan 9 10:02:51 2022 +0100

    pcmcia: fix setting of kthread task states
    
    [ Upstream commit fbb3485f1f931102d8ba606f1c28123f5b48afa3 ]
    
    We need to set TASK_INTERRUPTIBLE before calling kthread_should_stop().
    Otherwise, kthread_stop() might see that the pccardd thread is still
    in TASK_RUNNING state and fail to wake it up.
    
    Additionally, we only need to set the state back to TASK_RUNNING if
    kthread_should_stop() breaks the loop.
    
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Fixes: d3046ba809ce ("pcmcia: fix a boot time warning in pcmcia cs code")
    Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pcmcia: rsrc_nonstatic: Fix a NULL pointer dereference in __nonstatic_find_io_region() [+ + +]
Author: Zhou Qingyang <zhou1615@umn.edu>
Date:   Wed Dec 1 00:59:23 2021 +0800

    pcmcia: rsrc_nonstatic: Fix a NULL pointer dereference in __nonstatic_find_io_region()
    
    [ Upstream commit ca0fe0d7c35c97528bdf621fdca75f13157c27af ]
    
    In __nonstatic_find_io_region(), pcmcia_make_resource() is assigned to
    res and used in pci_bus_alloc_resource(). There is a dereference of res
    in pci_bus_alloc_resource(), which could lead to a NULL pointer
    dereference on failure of pcmcia_make_resource().
    
    Fix this bug by adding a check of res.
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_PCCARD_NONSTATIC=y show no new warnings,
    and our static analyzer no longer warns about this code.
    
    Fixes: 49b1153adfe1 ("pcmcia: move all pcmcia_resource_ops providers into one module")
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    [linux@dominikbrodowski.net: Fix typo in commit message]
    Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

pcmcia: rsrc_nonstatic: Fix a NULL pointer dereference in nonstatic_find_mem_region() [+ + +]
Author: Zhou Qingyang <zhou1615@umn.edu>
Date:   Wed Dec 1 02:11:40 2021 +0800

    pcmcia: rsrc_nonstatic: Fix a NULL pointer dereference in nonstatic_find_mem_region()
    
    [ Upstream commit 977d2e7c63c3d04d07ba340b39987742e3241554 ]
    
    In nonstatic_find_mem_region(), pcmcia_make_resource() is assigned to
    res and used in pci_bus_alloc_resource(). There a dereference of res
    in pci_bus_alloc_resource(), which could lead to a NULL pointer
    dereference on failure of pcmcia_make_resource().
    
    Fix this bug by adding a check of res.
    
    This bug was found by a static analyzer. The analysis employs
    differential checking to identify inconsistent security operations
    (e.g., checks or kfrees) between two code paths and confirms that the
    inconsistent operations are not recovered in the current function or
    the callers, so they constitute bugs.
    
    Note that, as a bug found by static analysis, it can be a false
    positive or hard to trigger. Multiple researchers have cross-reviewed
    the bug.
    
    Builds with CONFIG_PCCARD_NONSTATIC=y show no new warnings,
    and our static analyzer no longer warns about this code.
    
    Fixes: 49b1153adfe1 ("pcmcia: move all pcmcia_resource_ops providers into one module")
    Signed-off-by: Zhou Qingyang <zhou1615@umn.edu>
    Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
power: bq25890: Enable continuous conversion for ADC at charging [+ + +]
Author: Yauhen Kharuzhy <jekhor@gmail.com>
Date:   Sun Nov 7 23:20:01 2021 +0300

    power: bq25890: Enable continuous conversion for ADC at charging
    
    [ Upstream commit 80211be1b9dec04cc2805d3d81e2091ecac289a1 ]
    
    Instead of one shot run of ADC at beginning of charging, run continuous
    conversion to ensure that all charging-related values are monitored
    properly (input voltage, input current, themperature etc.).
    
    Signed-off-by: Yauhen Kharuzhy <jekhor@gmail.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/6xx: add missing of_node_put [+ + +]
Author: Julia Lawall <Julia.Lawall@lip6.fr>
Date:   Fri Nov 20 20:33:19 2015 +0000

    powerpc/6xx: add missing of_node_put
    
    [ Upstream commit f6e82647ff71d427d4148964b71f239fba9d7937 ]
    
    for_each_compatible_node performs an of_node_get on each iteration, so
    a break out of the loop requires an of_node_put.
    
    A simplified version of the semantic patch that fixes this problem is as
    follows (http://coccinelle.lip6.fr):
    
    // <smpl>
    @@
    expression e;
    local idexpression n;
    @@
    
    @@
    local idexpression n;
    expression e;
    @@
    
     for_each_compatible_node(n,...) {
       ...
    (
       of_node_put(n);
    |
       e = n
    |
    +  of_node_put(n);
    ?  break;
    )
       ...
     }
    ... when != n
    // </smpl>
    
    Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/1448051604-25256-2-git-send-email-Julia.Lawall@lip6.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/btext: add missing of_node_put [+ + +]
Author: Julia Lawall <Julia.Lawall@lip6.fr>
Date:   Fri Nov 20 20:33:23 2015 +0000

    powerpc/btext: add missing of_node_put
    
    [ Upstream commit a1d2b210ffa52d60acabbf7b6af3ef7e1e69cda0 ]
    
    for_each_node_by_type performs an of_node_get on each iteration, so
    a break out of the loop requires an of_node_put.
    
    A simplified version of the semantic patch that fixes this problem is as
    follows (http://coccinelle.lip6.fr):
    
    // <smpl>
    @@
    local idexpression n;
    expression e;
    @@
    
     for_each_node_by_type(n,...) {
       ...
    (
       of_node_put(n);
    |
       e = n
    |
    +  of_node_put(n);
    ?  break;
    )
       ...
     }
    ... when != n
    // </smpl>
    
    Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/1448051604-25256-6-git-send-email-Julia.Lawall@lip6.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/cell: add missing of_node_put [+ + +]
Author: Julia Lawall <Julia.Lawall@lip6.fr>
Date:   Fri Nov 20 21:33:24 2015 +0100

    powerpc/cell: add missing of_node_put
    
    [ Upstream commit a841fd009e51c8c0a8f07c942e9ab6bb48da8858 ]
    
    for_each_node_by_name performs an of_node_get on each iteration, so
    a break out of the loop requires an of_node_put.
    
    A simplified version of the semantic patch that fixes this problem is as
    follows (http://coccinelle.lip6.fr):
    
    // <smpl>
    @@
    expression e,e1;
    local idexpression n;
    @@
    
     for_each_node_by_name(n, e1) {
       ... when != of_node_put(n)
           when != e = n
    (
       return n;
    |
    +  of_node_put(n);
    ?  return ...;
    )
       ...
     }
    // </smpl>
    
    Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/1448051604-25256-7-git-send-email-Julia.Lawall@lip6.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses [+ + +]
Author: Tobias Waldekranz <tobias@waldekranz.com>
Date:   Tue Jan 18 22:50:52 2022 +0100

    powerpc/fsl/dts: Enable WA for erratum A-009885 on fman3l MDIO buses
    
    commit 0d375d610fa96524e2ee2b46830a46a7bfa92a9f upstream.
    
    This block is used in (at least) T1024 and T1040, including their
    variants like T1023 etc.
    
    Fixes: d55ad2967d89 ("powerpc/mpc85xx: Create dts components for the FSL QorIQ DPAA FMan")
    Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc/powernv: add missing of_node_put [+ + +]
Author: Julia Lawall <Julia.Lawall@lip6.fr>
Date:   Fri Nov 20 20:33:21 2015 +0000

    powerpc/powernv: add missing of_node_put
    
    [ Upstream commit 7d405a939ca960162eb30c1475759cb2fdf38f8c ]
    
    for_each_compatible_node performs an of_node_get on each iteration, so
    a break out of the loop requires an of_node_put.
    
    A simplified version of the semantic patch that fixes this problem is as
    follows (http://coccinelle.lip6.fr):
    
    // <smpl>
    @@
    local idexpression n;
    expression e;
    @@
    
     for_each_compatible_node(n,...) {
       ...
    (
       of_node_put(n);
    |
       e = n
    |
    +  of_node_put(n);
    ?  break;
    )
       ...
     }
    ... when != n
    // </smpl>
    
    Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/1448051604-25256-4-git-send-email-Julia.Lawall@lip6.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/prom_init: Fix improper check of prom_getprop() [+ + +]
Author: Peiwei Hu <jlu.hpw@foxmail.com>
Date:   Fri Nov 19 17:12:18 2021 +0800

    powerpc/prom_init: Fix improper check of prom_getprop()
    
    [ Upstream commit 869fb7e5aecbc163003f93f36dcc26d0554319f6 ]
    
    prom_getprop() can return PROM_ERROR. Binary operator can not identify
    it.
    
    Fixes: 94d2dde738a5 ("[POWERPC] Efika: prune fixups and make them more carefull")
    Signed-off-by: Peiwei Hu <jlu.hpw@foxmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/tencent_BA28CC6897B7C95A92EB8C580B5D18589105@qq.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/smp: Move setup_profiling_timer() under CONFIG_PROFILING [+ + +]
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Wed Nov 24 20:32:53 2021 +1100

    powerpc/smp: Move setup_profiling_timer() under CONFIG_PROFILING
    
    [ Upstream commit a4ac0d249a5db80e79d573db9e4ad29354b643a8 ]
    
    setup_profiling_timer() is only needed when CONFIG_PROFILING is enabled.
    
    Fixes the following W=1 warning when CONFIG_PROFILING=n:
      linux/arch/powerpc/kernel/smp.c:1638:5: error: no previous prototype for ‘setup_profiling_timer’
    
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20211124093254.1054750-5-mpe@ellerman.id.au
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ppp: ensure minimum packet size in ppp_write() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jan 5 03:48:42 2022 -0800

    ppp: ensure minimum packet size in ppp_write()
    
    [ Upstream commit 44073187990d5629804ce0627525f6ea5cfef171 ]
    
    It seems pretty clear ppp layer assumed user space
    would always be kind to provide enough data
    in their write() to a ppp device.
    
    This patch makes sure user provides at least
    2 bytes.
    
    It adds PPP_PROTO_LEN macro that could replace
    in net-next many occurrences of hard-coded 2 value.
    
    I replaced only one occurrence to ease backports
    to stable kernels.
    
    The bug manifests in the following report:
    
    BUG: KMSAN: uninit-value in ppp_send_frame+0x28d/0x27c0 drivers/net/ppp/ppp_generic.c:1740
     ppp_send_frame+0x28d/0x27c0 drivers/net/ppp/ppp_generic.c:1740
     __ppp_xmit_process+0x23e/0x4b0 drivers/net/ppp/ppp_generic.c:1640
     ppp_xmit_process+0x1fe/0x480 drivers/net/ppp/ppp_generic.c:1661
     ppp_write+0x5cb/0x5e0 drivers/net/ppp/ppp_generic.c:513
     do_iter_write+0xb0c/0x1500 fs/read_write.c:853
     vfs_writev fs/read_write.c:924 [inline]
     do_writev+0x645/0xe00 fs/read_write.c:967
     __do_sys_writev fs/read_write.c:1040 [inline]
     __se_sys_writev fs/read_write.c:1037 [inline]
     __x64_sys_writev+0xe5/0x120 fs/read_write.c:1037
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:82
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Uninit was created at:
     slab_post_alloc_hook mm/slab.h:524 [inline]
     slab_alloc_node mm/slub.c:3251 [inline]
     __kmalloc_node_track_caller+0xe0c/0x1510 mm/slub.c:4974
     kmalloc_reserve net/core/skbuff.c:354 [inline]
     __alloc_skb+0x545/0xf90 net/core/skbuff.c:426
     alloc_skb include/linux/skbuff.h:1126 [inline]
     ppp_write+0x11d/0x5e0 drivers/net/ppp/ppp_generic.c:501
     do_iter_write+0xb0c/0x1500 fs/read_write.c:853
     vfs_writev fs/read_write.c:924 [inline]
     do_writev+0x645/0xe00 fs/read_write.c:967
     __do_sys_writev fs/read_write.c:1040 [inline]
     __se_sys_writev fs/read_write.c:1037 [inline]
     __x64_sys_writev+0xe5/0x120 fs/read_write.c:1037
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:82
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: linux-ppp@vger.kernel.org
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Acked-by: Guillaume Nault <gnault@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/core: Let ib_find_gid() continue search even after empty entry [+ + +]
Author: Avihai Horon <avihaih@nvidia.com>
Date:   Thu Dec 9 15:16:06 2021 +0200

    RDMA/core: Let ib_find_gid() continue search even after empty entry
    
    [ Upstream commit 483d805191a23191f8294bbf9b4e94836f5d92e4 ]
    
    Currently, ib_find_gid() will stop searching after encountering the first
    empty GID table entry. This behavior is wrong since neither IB nor RoCE
    spec enforce tightly packed GID tables.
    
    For example, when a valid GID entry exists at index N, and if a GID entry
    is empty at index N-1, ib_find_gid() will fail to find the valid entry.
    
    Fix it by making ib_find_gid() continue searching even after encountering
    missing entries.
    
    Fixes: 5eb620c81ce3 ("IB/core: Add helpers for uncached GID and P_Key searches")
    Link: https://lore.kernel.org/r/e55d331b96cecfc2cf19803d16e7109ea966882d.1639055490.git.leonro@nvidia.com
    Signed-off-by: Avihai Horon <avihaih@nvidia.com>
    Reviewed-by: Mark Zhang <markzhang@nvidia.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/cxgb4: Set queue pair state when being queried [+ + +]
Author: Kamal Heib <kamalheib1@gmail.com>
Date:   Mon Dec 20 17:25:30 2021 +0200

    RDMA/cxgb4: Set queue pair state when being queried
    
    [ Upstream commit e375b9c92985e409c4bb95dd43d34915ea7f5e28 ]
    
    The API for ib_query_qp requires the driver to set cur_qp_state on return,
    add the missing set.
    
    Fixes: 67bbc05512d8 ("RDMA/cxgb4: Add query_qp support")
    Link: https://lore.kernel.org/r/20211220152530.60399-1-kamalheib1@gmail.com
    Signed-off-by: Kamal Heib <kamalheib1@gmail.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtc: cmos: take rtc_lock while reading from CMOS [+ + +]
Author: Mateusz Jończyk <mat.jonczyk@o2.pl>
Date:   Fri Dec 10 21:01:23 2021 +0100

    rtc: cmos: take rtc_lock while reading from CMOS
    
    commit 454f47ff464325223129b9b5b8d0b61946ec704d upstream.
    
    Reading from the CMOS involves writing to the index register and then
    reading from the data register. Therefore access to the CMOS has to be
    serialized with rtc_lock. This invocation of CMOS_READ was not
    serialized, which could cause trouble when other code is accessing CMOS
    at the same time.
    
    Use spin_lock_irq() like the rest of the function.
    
    Nothing in kernel modifies the RTC_DM_BINARY bit, so there could be a
    separate pair of spin_lock_irq() / spin_unlock_irq() before doing the
    math.
    
    Signed-off-by: Mateusz Jończyk <mat.jonczyk@o2.pl>
    Reviewed-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
    Cc: Alessandro Zummo <a.zummo@towertech.it>
    Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Link: https://lore.kernel.org/r/20211210200131.153887-2-mat.jonczyk@o2.pl
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rtlwifi: rtl8192cu: Fix WARNING when calling local_irq_restore() with interrupts enabled [+ + +]
Author: Larry Finger <Larry.Finger@lwfinger.net>
Date:   Wed Dec 15 11:11:05 2021 -0600

    rtlwifi: rtl8192cu: Fix WARNING when calling local_irq_restore() with interrupts enabled
    
    commit 8b144dedb928e4e2f433a328d58f44c3c098d63e upstream.
    
    Syzbot reports the following WARNING:
    
    [200~raw_local_irq_restore() called with IRQs enabled
    WARNING: CPU: 1 PID: 1206 at kernel/locking/irqflag-debug.c:10
       warn_bogus_irq_restore+0x1d/0x20 kernel/locking/irqflag-debug.c:10
    
    Hardware initialization for the rtl8188cu can run for as long as 350 ms,
    and the routine may be called with interrupts disabled. To avoid locking
    the machine for this long, the current routine saves the interrupt flags
    and enables local interrupts. The problem is that it restores the flags
    at the end without disabling local interrupts first.
    
    This patch fixes commit a53268be0cb9 ("rtlwifi: rtl8192cu: Fix too long
    disable of IRQs").
    
    Reported-by: syzbot+cce1ee31614c171f5595@syzkaller.appspotmail.com
    Cc: stable@vger.kernel.org
    Fixes: a53268be0cb9 ("rtlwifi: rtl8192cu: Fix too long disable of IRQs")
    Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20211215171105.20623-1-Larry.Finger@lwfinger.net
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: sr: Don't use GFP_DMA [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Dec 22 10:08:42 2021 +0100

    scsi: sr: Don't use GFP_DMA
    
    [ Upstream commit d94d94969a4ba07a43d62429c60372320519c391 ]
    
    The allocated buffers are used as a command payload, for which the block
    layer and/or DMA API do the proper bounce buffering if needed.
    
    Link: https://lore.kernel.org/r/20211222090842.920724-1-hch@lst.de
    Reported-by: Baoquan He <bhe@redhat.com>
    Reviewed-by: Baoquan He <bhe@redhat.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
serial: amba-pl011: do not request memory region twice [+ + +]
Author: Lino Sanfilippo <LinoSanfilippo@gmx.de>
Date:   Mon Nov 29 18:42:38 2021 +0100

    serial: amba-pl011: do not request memory region twice
    
    [ Upstream commit d1180405c7b5c7a1c6bde79d5fc24fe931430737 ]
    
    With commit 3873e2d7f63a ("drivers: PL011: refactor pl011_probe()") the
    function devm_ioremap() called from pl011_setup_port() was replaced with
    devm_ioremap_resource(). Since this function not only remaps but also
    requests the ports io memory region it now collides with the .config_port()
    callback which requests the same region at uart port registration.
    
    Since devm_ioremap_resource() already claims the memory successfully, the
    request in .config_port() fails.
    
    Later at uart port deregistration the attempt to release the unclaimed
    memory also fails. The failure results in a “Trying to free nonexistent
    resource" warning.
    
    Fix these issues by removing the callbacks that implement the redundant
    memory allocation/release. Also make sure that changing the drivers io
    memory base address via TIOCSSERIAL is not allowed any more.
    
    Fixes: 3873e2d7f63a ("drivers: PL011: refactor pl011_probe()")
    Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de>
    Link: https://lore.kernel.org/r/20211129174238.8333-1-LinoSanfilippo@gmx.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: core: Keep mctrl register state and cached copy in sync [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Sun Jan 2 18:52:44 2022 +0100

    serial: core: Keep mctrl register state and cached copy in sync
    
    [ Upstream commit 93a770b7e16772530196674ffc79bb13fa927dc6 ]
    
    struct uart_port contains a cached copy of the Modem Control signals.
    It is used to skip register writes in uart_update_mctrl() if the new
    signal state equals the old signal state.  It also avoids a register
    read to obtain the current state of output signals.
    
    When a uart_port is registered, uart_configure_port() changes signal
    state but neglects to keep the cached copy in sync.  That may cause
    a subsequent register write to be incorrectly skipped.  Fix it before
    it trips somebody up.
    
    This behavior has been present ever since the serial core was introduced
    in 2002:
    https://git.kernel.org/history/history/c/33c0d1b0c3eb
    
    So far it was never an issue because the cached copy is initialized to 0
    by kzalloc() and when uart_configure_port() is executed, at most DTR has
    been set by uart_set_options() or sunsu_console_setup().  Therefore,
    a stable designation seems unnecessary.
    
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Link: https://lore.kernel.org/r/bceeaba030b028ed810272d55d5fc6f3656ddddb.1641129752.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: pl010: Drop CR register reset on set_termios [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Sun Jan 2 18:42:44 2022 +0100

    serial: pl010: Drop CR register reset on set_termios
    
    [ Upstream commit 08a0c6dff91c965e39905cf200d22db989203ccb ]
    
    pl010_set_termios() briefly resets the CR register to zero.
    
    Where does this register write come from?
    
    The PL010 driver's IRQ handler ambauart_int() originally modified the CR
    register without holding the port spinlock.  ambauart_set_termios() also
    modified that register.  To prevent concurrent read-modify-writes by the
    IRQ handler and to prevent transmission while changing baudrate,
    ambauart_set_termios() had to disable interrupts.  That is achieved by
    writing zero to the CR register.
    
    However in 2004 the PL010 driver was amended to acquire the port
    spinlock in the IRQ handler, obviating the need to disable interrupts in
    ->set_termios():
    https://git.kernel.org/history/history/c/157c0342e591
    
    That rendered the CR register write obsolete.  Drop it.
    
    Cc: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Link: https://lore.kernel.org/r/fcaff16e5b1abb4cc3da5a2879ac13f278b99ed0.1641128728.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: spi-meson-spifc: Add missing pm_runtime_disable() in meson_spifc_probe [+ + +]
Author: Miaoqian Lin <linmq006@gmail.com>
Date:   Fri Jan 7 07:54:24 2022 +0000

    spi: spi-meson-spifc: Add missing pm_runtime_disable() in meson_spifc_probe
    
    [ Upstream commit 69c1b87516e327a60b39f96b778fe683259408bf ]
    
    If the probe fails, we should use pm_runtime_disable() to balance
    pm_runtime_enable().
    Add missing pm_runtime_disable() for meson_spifc_probe.
    
    Fixes: c3e4bc5434d2 ("spi: meson: Add support for Amlogic Meson SPIFC")
    Signed-off-by: Miaoqian Lin <linmq006@gmail.com>
    Link: https://lore.kernel.org/r/20220107075424.7774-1-linmq006@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tty: serial: atmel: Call dma_async_issue_pending() [+ + +]
Author: Tudor Ambarus <tudor.ambarus@microchip.com>
Date:   Thu Nov 25 11:00:18 2021 +0200

    tty: serial: atmel: Call dma_async_issue_pending()
    
    [ Upstream commit 4f4b9b5895614eb2e2b5f4cab7858f44bd113e1b ]
    
    The driver wrongly assummed that tx_submit() will start the transfer,
    which is not the case, now that the at_xdmac driver is fixed. tx_submit
    is supposed to push the current transaction descriptor to a pending queue,
    waiting for issue_pending to be called. issue_pending must start the
    transfer, not tx_submit.
    
    Fixes: 34df42f59a60 ("serial: at91: add rx dma support")
    Fixes: 08f738be88bb ("serial: at91: add tx dma support")
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Link: https://lore.kernel.org/r/20211125090028.786832-4-tudor.ambarus@microchip.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tty: serial: atmel: Check return code of dmaengine_submit() [+ + +]
Author: Tudor Ambarus <tudor.ambarus@microchip.com>
Date:   Thu Nov 25 11:00:17 2021 +0200

    tty: serial: atmel: Check return code of dmaengine_submit()
    
    [ Upstream commit 1e67bd2b8cb90b66e89562598e9c2046246832d3 ]
    
    The tx_submit() method of struct dma_async_tx_descriptor is entitled
    to do sanity checks and return errors if encountered. It's not the
    case for the DMA controller drivers that this client is using
    (at_h/xdmac), because they currently don't do sanity checks and always
    return a positive cookie at tx_submit() method. In case the controller
    drivers will implement sanity checks and return errors, print a message
    so that the client will be informed that something went wrong at
    tx_submit() level.
    
    Fixes: 08f738be88bb ("serial: at91: add tx dma support")
    Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
    Acked-by: Richard Genoud <richard.genoud@gmail.com>
    Link: https://lore.kernel.org/r/20211125090028.786832-3-tudor.ambarus@microchip.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ubifs: Error path in ubifs_remount_rw() seems to wrongly free write buffers [+ + +]
Author: Petr Cvachoucek <cvachoucek@gmail.com>
Date:   Mon Aug 30 21:20:37 2021 +0200

    ubifs: Error path in ubifs_remount_rw() seems to wrongly free write buffers
    
    commit 3fea4d9d160186617ff40490ae01f4f4f36b28ff upstream.
    
    it seems freeing the write buffers in the error path of the
    ubifs_remount_rw() is wrong. It leads later to a kernel oops like this:
    
    [10016.431274] UBIFS (ubi0:0): start fixing up free space
    [10090.810042] UBIFS (ubi0:0): free space fixup complete
    [10090.814623] UBIFS error (ubi0:0 pid 512): ubifs_remount_fs: cannot
    spawn "ubifs_bgt0_0", error -4
    [10101.915108] UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started,
    PID 517
    [10105.275498] Unable to handle kernel NULL pointer dereference at
    virtual address 0000000000000030
    [10105.284352] Mem abort info:
    [10105.287160]   ESR = 0x96000006
    [10105.290252]   EC = 0x25: DABT (current EL), IL = 32 bits
    [10105.295592]   SET = 0, FnV = 0
    [10105.298652]   EA = 0, S1PTW = 0
    [10105.301848] Data abort info:
    [10105.304723]   ISV = 0, ISS = 0x00000006
    [10105.308573]   CM = 0, WnR = 0
    [10105.311564] user pgtable: 4k pages, 48-bit VAs, pgdp=00000000f03d1000
    [10105.318034] [0000000000000030] pgd=00000000f6cee003,
    pud=00000000f4884003, pmd=0000000000000000
    [10105.326783] Internal error: Oops: 96000006 [#1] PREEMPT SMP
    [10105.332355] Modules linked in: ath10k_pci ath10k_core ath mac80211
    libarc4 cfg80211 nvme nvme_core cryptodev(O)
    [10105.342468] CPU: 3 PID: 518 Comm: touch Tainted: G           O
    5.4.3 #1
    [10105.349517] Hardware name: HYPEX CPU (DT)
    [10105.353525] pstate: 40000005 (nZcv daif -PAN -UAO)
    [10105.358324] pc : atomic64_try_cmpxchg_acquire.constprop.22+0x8/0x34
    [10105.364596] lr : mutex_lock+0x1c/0x34
    [10105.368253] sp : ffff000075633aa0
    [10105.371563] x29: ffff000075633aa0 x28: 0000000000000001
    [10105.376874] x27: ffff000076fa80c8 x26: 0000000000000004
    [10105.382185] x25: 0000000000000030 x24: 0000000000000000
    [10105.387495] x23: 0000000000000000 x22: 0000000000000038
    [10105.392807] x21: 000000000000000c x20: ffff000076fa80c8
    [10105.398119] x19: ffff000076fa8000 x18: 0000000000000000
    [10105.403429] x17: 0000000000000000 x16: 0000000000000000
    [10105.408741] x15: 0000000000000000 x14: fefefefefefefeff
    [10105.414052] x13: 0000000000000000 x12: 0000000000000fe0
    [10105.419364] x11: 0000000000000fe0 x10: ffff000076709020
    [10105.424675] x9 : 0000000000000000 x8 : 00000000000000a0
    [10105.429986] x7 : ffff000076fa80f4 x6 : 0000000000000030
    [10105.435297] x5 : 0000000000000000 x4 : 0000000000000000
    [10105.440609] x3 : 0000000000000000 x2 : ffff00006f276040
    [10105.445920] x1 : ffff000075633ab8 x0 : 0000000000000030
    [10105.451232] Call trace:
    [10105.453676]  atomic64_try_cmpxchg_acquire.constprop.22+0x8/0x34
    [10105.459600]  ubifs_garbage_collect+0xb4/0x334
    [10105.463956]  ubifs_budget_space+0x398/0x458
    [10105.468139]  ubifs_create+0x50/0x180
    [10105.471712]  path_openat+0x6a0/0x9b0
    [10105.475284]  do_filp_open+0x34/0x7c
    [10105.478771]  do_sys_open+0x78/0xe4
    [10105.482170]  __arm64_sys_openat+0x1c/0x24
    [10105.486180]  el0_svc_handler+0x84/0xc8
    [10105.489928]  el0_svc+0x8/0xc
    [10105.492808] Code: 52800013 17fffffb d2800003 f9800011 (c85ffc05)
    [10105.498903] ---[ end trace 46b721d93267a586 ]---
    
    To reproduce the problem:
    
    1. Filesystem initially mounted read-only, free space fixup flag set.
    
    2. mount -o remount,rw <mountpoint>
    
    3. it takes some time (free space fixup running)
        ... try to terminate running mount by CTRL-C
        ... does not respond, only after free space fixup is complete
        ... then "ubifs_remount_fs: cannot spawn "ubifs_bgt0_0", error -4"
    
    4. mount -o remount,rw <mountpoint>
        ... now finished instantly (fixup already done).
    
    5. Create file or just unmount the filesystem and we get the oops.
    
    Cc: <stable@vger.kernel.org>
    Fixes: b50b9f408502 ("UBIFS: do not free write-buffers when in R/O mode")
    Signed-off-by: Petr Cvachoucek <cvachoucek@gmail.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
um: registers: Rename function names to avoid conflicts and build problems [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Sun Sep 12 23:12:52 2021 -0700

    um: registers: Rename function names to avoid conflicts and build problems
    
    [ Upstream commit 077b7320942b64b0da182aefd83c374462a65535 ]
    
    The function names init_registers() and restore_registers() are used
    in several net/ethernet/ and gpu/drm/ drivers for other purposes (not
    calls to UML functions), so rename them.
    
    This fixes multiple build errors.
    
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Jeff Dike <jdike@addtoit.com>
    Cc: Richard Weinberger <richard@nod.at>
    Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com>
    Cc: linux-um@lists.infradead.org
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: core: Fix bug in resuming hub's handling of wakeup requests [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Sat Jan 1 14:52:14 2022 -0500

    USB: core: Fix bug in resuming hub's handling of wakeup requests
    
    commit 0f663729bb4afc92a9986b66131ebd5b8a9254d1 upstream.
    
    Bugzilla #213839 reports a 7-port hub that doesn't work properly when
    devices are plugged into some of the ports; the kernel goes into an
    unending disconnect/reinitialize loop as shown in the bug report.
    
    This "7-port hub" comprises two four-port hubs with one plugged into
    the other; the failures occur when a device is plugged into one of the
    downstream hub's ports.  (These hubs have other problems too.  For
    example, they bill themselves as USB-2.0 compliant but they only run
    at full speed.)
    
    It turns out that the failures are caused by bugs in both the kernel
    and the hub.  The hub's bug is that it reports a different
    bmAttributes value in its configuration descriptor following a remote
    wakeup (0xe0 before, 0xc0 after -- the wakeup-support bit has
    changed).
    
    The kernel's bug is inside the hub driver's resume handler.  When
    hub_activate() sees that one of the hub's downstream ports got a
    wakeup request from a child device, it notes this fact by setting the
    corresponding bit in the hub->change_bits variable.  But this variable
    is meant for connection changes, not wakeup events; setting it causes
    the driver to believe the downstream port has been disconnected and
    then connected again (in addition to having received a wakeup
    request).
    
    Because of this, the hub driver then tries to check whether the device
    currently plugged into the downstream port is the same as the device
    that had been attached there before.  Normally this check succeeds and
    wakeup handling continues with no harm done (which is why the bug
    remained undetected until now).  But with these dodgy hubs, the check
    fails because the config descriptor has changed.  This causes the hub
    driver to reinitialize the child device, leading to the
    disconnect/reinitialize loop described in the bug report.
    
    The proper way to note reception of a downstream wakeup request is
    to set a bit in the hub->event_bits variable instead of
    hub->change_bits.  That way the hub driver will realize that something
    has happened to the port but will not think the port and child device
    have been disconnected.  This patch makes that change.
    
    Cc: <stable@vger.kernel.org>
    Tested-by: Jonathan McDowell <noodles@earth.li>
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Link: https://lore.kernel.org/r/YdCw7nSfWYPKWQoD@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

USB: Fix "slab-out-of-bounds Write" bug in usb_hcd_poll_rh_status [+ + +]
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Fri Dec 31 21:07:12 2021 -0500

    USB: Fix "slab-out-of-bounds Write" bug in usb_hcd_poll_rh_status
    
    commit 1d7d4c07932e04355d6e6528d44a2f2c9e354346 upstream.
    
    When the USB core code for getting root-hub status reports was
    originally written, it was assumed that the hub driver would be its
    only caller.  But this isn't true now; user programs can use usbfs to
    communicate with root hubs and get status reports.  When they do this,
    they may use a transfer_buffer that is smaller than the data returned
    by the HCD, which will lead to a buffer overflow error when
    usb_hcd_poll_rh_status() tries to store the status data.  This was
    discovered by syzbot:
    
    BUG: KASAN: slab-out-of-bounds in memcpy include/linux/fortify-string.h:225 [inline]
    BUG: KASAN: slab-out-of-bounds in usb_hcd_poll_rh_status+0x5f4/0x780 drivers/usb/core/hcd.c:776
    Write of size 2 at addr ffff88801da403c0 by task syz-executor133/4062
    
    This patch fixes the bug by reducing the amount of status data if it
    won't fit in the transfer_buffer.  If some data gets discarded then
    the URB's completion status is set to -EOVERFLOW rather than 0, to let
    the user know what happened.
    
    Reported-and-tested-by: syzbot+3ae6a2b06f131ab9849f@syzkaller.appspotmail.com
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/Yc+3UIQJ2STbxNua@rowland.harvard.edu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: ftdi-elan: fix memory leak on device disconnect [+ + +]
Author: Wei Yongjun <weiyongjun1@huawei.com>
Date:   Fri Dec 17 16:34:28 2021 +0800

    usb: ftdi-elan: fix memory leak on device disconnect
    
    [ Upstream commit 1646566b5e0c556f779180a8514e521ac735de1e ]
    
    'ftdi' is alloced when probe device, but not free on device disconnect,
    this cause a memory leak as follows:
    
    unreferenced object 0xffff88800d584000 (size 8400):
      comm "kworker/0:2", pid 3809, jiffies 4295453055 (age 13.784s)
      hex dump (first 32 bytes):
        00 40 58 0d 80 88 ff ff 00 40 58 0d 80 88 ff ff  .@X......@X.....
        00 00 00 00 00 00 00 00 00 00 00 00 ad 4e ad de  .............N..
      backtrace:
        [<000000000d47f947>] kmalloc_order_trace+0x19/0x110 mm/slab_common.c:960
        [<000000008548ac68>] ftdi_elan_probe+0x8c/0x880 drivers/usb/misc/ftdi-elan.c:2647
        [<000000007f73e422>] usb_probe_interface+0x31b/0x800 drivers/usb/core/driver.c:396
        [<00000000fe8d07fc>] really_probe+0x299/0xc30 drivers/base/dd.c:517
        [<0000000005da7d32>] __driver_probe_device+0x357/0x500 drivers/base/dd.c:751
        [<000000003c2c9579>] driver_probe_device+0x4e/0x140 drivers/base/dd.c:781
    
    Fix it by freeing 'ftdi' after nobody use it.
    
    Fixes: a5c66e4b2418 ("USB: ftdi-elan: client driver for ELAN Uxxx adapters")
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Link: https://lore.kernel.org/r/20211217083428.2441-1-weiyongjun1@huawei.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: f_fs: Use stream_open() for endpoint files [+ + +]
Author: Pavankumar Kondeti <quic_pkondeti@quicinc.com>
Date:   Fri Nov 12 15:54:40 2021 +0530

    usb: gadget: f_fs: Use stream_open() for endpoint files
    
    [ Upstream commit c76ef96fc00eb398c8fc836b0eb2f82bcc619dc7 ]
    
    Function fs endpoint file operations are synchronized via an interruptible
    mutex wait. However we see threads that do ep file operations concurrently
    are getting blocked for the mutex lock in __fdget_pos(). This is an
    uninterruptible wait and we see hung task warnings and kernel panic
    if hung_task_panic systcl is enabled if host does not send/receive
    the data for long time.
    
    The reason for threads getting blocked in __fdget_pos() is due to
    the file position protection introduced by the commit 9c225f2655e3
    ("vfs: atomic f_pos accesses as per POSIX"). Since function fs
    endpoint files does not have the notion of the file position, switch
    to the stream mode. This will bypass the file position mutex and
    threads will be blocked in interruptible state for the function fs
    mutex.
    
    It should not affects user space as we are only changing the task state
    changes the task state from UNINTERRUPTIBLE to INTERRUPTIBLE while waiting
    for the USB transfers to be finished. However there is a slight change to
    the O_NONBLOCK behavior. Earlier threads that are using O_NONBLOCK are also
    getting blocked inside fdget_pos(). Now they reach to function fs and error
    code is returned. The non blocking behavior is actually honoured now.
    
    Reviewed-by: John Keeping <john@metanate.com>
    Signed-off-by: Pavankumar Kondeti <quic_pkondeti@quicinc.com>
    Link: https://lore.kernel.org/r/1636712682-1226-1-git-send-email-quic_pkondeti@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: hub: Add delay for SuperSpeed hub resume to let links transit to U0 [+ + +]
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Wed Dec 15 20:01:06 2021 +0800

    usb: hub: Add delay for SuperSpeed hub resume to let links transit to U0
    
    [ Upstream commit 00558586382891540c59c9febc671062425a6e47 ]
    
    When a new USB device gets plugged to nested hubs, the affected hub,
    which connects to usb 2-1.4-port2, doesn't report there's any change,
    hence the nested hubs go back to runtime suspend like nothing happened:
    [  281.032951] usb usb2: usb wakeup-resume
    [  281.032959] usb usb2: usb auto-resume
    [  281.032974] hub 2-0:1.0: hub_resume
    [  281.033011] usb usb2-port1: status 0263 change 0000
    [  281.033077] hub 2-0:1.0: state 7 ports 4 chg 0000 evt 0000
    [  281.049797] usb 2-1: usb wakeup-resume
    [  281.069800] usb 2-1: Waited 0ms for CONNECT
    [  281.069810] usb 2-1: finish resume
    [  281.070026] hub 2-1:1.0: hub_resume
    [  281.070250] usb 2-1-port4: status 0203 change 0000
    [  281.070272] usb usb2-port1: resume, status 0
    [  281.070282] hub 2-1:1.0: state 7 ports 4 chg 0010 evt 0000
    [  281.089813] usb 2-1.4: usb wakeup-resume
    [  281.109792] usb 2-1.4: Waited 0ms for CONNECT
    [  281.109801] usb 2-1.4: finish resume
    [  281.109991] hub 2-1.4:1.0: hub_resume
    [  281.110147] usb 2-1.4-port2: status 0263 change 0000
    [  281.110234] usb 2-1-port4: resume, status 0
    [  281.110239] usb 2-1-port4: status 0203, change 0000, 10.0 Gb/s
    [  281.110266] hub 2-1.4:1.0: state 7 ports 4 chg 0000 evt 0000
    [  281.110426] hub 2-1.4:1.0: hub_suspend
    [  281.110565] usb 2-1.4: usb auto-suspend, wakeup 1
    [  281.130998] hub 2-1:1.0: hub_suspend
    [  281.137788] usb 2-1: usb auto-suspend, wakeup 1
    [  281.142935] hub 2-0:1.0: state 7 ports 4 chg 0000 evt 0000
    [  281.177828] usb 2-1: usb wakeup-resume
    [  281.197839] usb 2-1: Waited 0ms for CONNECT
    [  281.197850] usb 2-1: finish resume
    [  281.197984] hub 2-1:1.0: hub_resume
    [  281.198203] usb 2-1-port4: status 0203 change 0000
    [  281.198228] usb usb2-port1: resume, status 0
    [  281.198237] hub 2-1:1.0: state 7 ports 4 chg 0010 evt 0000
    [  281.217835] usb 2-1.4: usb wakeup-resume
    [  281.237834] usb 2-1.4: Waited 0ms for CONNECT
    [  281.237845] usb 2-1.4: finish resume
    [  281.237990] hub 2-1.4:1.0: hub_resume
    [  281.238067] usb 2-1.4-port2: status 0263 change 0000
    [  281.238148] usb 2-1-port4: resume, status 0
    [  281.238152] usb 2-1-port4: status 0203, change 0000, 10.0 Gb/s
    [  281.238166] hub 2-1.4:1.0: state 7 ports 4 chg 0000 evt 0000
    [  281.238385] hub 2-1.4:1.0: hub_suspend
    [  281.238523] usb 2-1.4: usb auto-suspend, wakeup 1
    [  281.258076] hub 2-1:1.0: hub_suspend
    [  281.265744] usb 2-1: usb auto-suspend, wakeup 1
    [  281.285976] hub 2-0:1.0: hub_suspend
    [  281.285988] usb usb2: bus auto-suspend, wakeup 1
    
    USB 3.2 spec, 9.2.5.4 "Changing Function Suspend State" says that "If
    the link is in a non-U0 state, then the device must transition the link
    to U0 prior to sending the remote wake message", but the hub only
    transits the link to U0 after signaling remote wakeup.
    
    So be more forgiving and use a 20ms delay to let the link transit to U0
    for remote wakeup.
    
    Suggested-by: Alan Stern <stern@rowland.harvard.edu>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Link: https://lore.kernel.org/r/20211215120108.336597-1-kai.heng.feng@canonical.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
w1: Misuse of get_user()/put_user() reported by sparse [+ + +]
Author: Christophe Leroy <christophe.leroy@csgroup.eu>
Date:   Fri Nov 26 18:06:46 2021 +0100

    w1: Misuse of get_user()/put_user() reported by sparse
    
    [ Upstream commit 33dc3e3e99e626ce51f462d883b05856c6c30b1d ]
    
    sparse warnings: (new ones prefixed by >>)
    >> drivers/w1/slaves/w1_ds28e04.c:342:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected char [noderef] __user *_pu_addr @@     got char *buf @@
       drivers/w1/slaves/w1_ds28e04.c:342:13: sparse:     expected char [noderef] __user *_pu_addr
       drivers/w1/slaves/w1_ds28e04.c:342:13: sparse:     got char *buf
    >> drivers/w1/slaves/w1_ds28e04.c:356:13: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected char const [noderef] __user *_gu_addr @@     got char const *buf @@
       drivers/w1/slaves/w1_ds28e04.c:356:13: sparse:     expected char const [noderef] __user *_gu_addr
       drivers/w1/slaves/w1_ds28e04.c:356:13: sparse:     got char const *buf
    
    The buffer buf is a failsafe buffer in kernel space, it's not user
    memory hence doesn't deserve the use of get_user() or put_user().
    
    Access 'buf' content directly.
    
    Link: https://lore.kernel.org/lkml/202111190526.K5vb7NWC-lkp@intel.com/T/
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Link: https://lore.kernel.org/r/d14ed8d71ad4372e6839ae427f91441d3ba0e94d.1637946316.git.christophe.leroy@csgroup.eu
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>