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

 
afs: Fix afs_getattr() to refetch file status if callback break occurred [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Sat May 21 08:18:28 2022 +0100

    afs: Fix afs_getattr() to refetch file status if callback break occurred
    
    [ Upstream commit 2aeb8c86d49967552394d5e723f87454cb53f501 ]
    
    If a callback break occurs (change notification), afs_getattr() needs to
    issue an FS.FetchStatus RPC operation to update the status of the file
    being examined by the stat-family of system calls.
    
    Fix afs_getattr() to do this if AFS_VNODE_CB_PROMISED has been cleared
    on a vnode by a callback break.  Skip this if AT_STATX_DONT_SYNC is set.
    
    This can be tested by appending to a file on one AFS client and then
    using "stat -L" to examine its length on a machine running kafs.  This
    can also be watched through tracing on the kafs machine.  The callback
    break is seen:
    
         kworker/1:1-46      [001] .....   978.910812: afs_cb_call: c=0000005f YFSCB.CallBack
         kworker/1:1-46      [001] ...1.   978.910829: afs_cb_break: 100058:23b4c:242d2c2 b=2 s=1 break-cb
         kworker/1:1-46      [001] .....   978.911062: afs_call_done:    c=0000005f ret=0 ab=0 [0000000082994ead]
    
    And then the stat command generated no traffic if unpatched, but with
    this change a call to fetch the status can be observed:
    
                stat-4471    [000] .....   986.744122: afs_make_fs_call: c=000000ab 100058:023b4c:242d2c2 YFS.FetchStatus
                stat-4471    [000] .....   986.745578: afs_call_done:    c=000000ab ret=0 ab=0 [0000000087fc8c84]
    
    Fixes: 08e0e7c82eea ("[AF_RXRPC]: Make the in-kernel AFS filesystem use AF_RXRPC.")
    Reported-by: Markus Suvanto <markus.suvanto@gmail.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    Tested-by: Markus Suvanto <markus.suvanto@gmail.com>
    Tested-by: kafs-testing+fedora34_64checkkafs-build-496@auristor.com
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=216010
    Link: https://lore.kernel.org/r/165308359800.162686.14122417881564420962.stgit@warthog.procyon.org.uk/ # v1
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: wavefront: Proper check of get_user() error [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue May 10 12:36:26 2022 +0200

    ALSA: wavefront: Proper check of get_user() error
    
    commit a34ae6c0660d3b96b0055f68ef74dc9478852245 upstream.
    
    The antient ISA wavefront driver reads its sample patch data (uploaded
    over an ioctl) via __get_user() with no good reason; likely just for
    some performance optimizations in the past.  Let's change this to the
    standard get_user() and the error check for handling the fault case
    properly.
    
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20220510103626.16635-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ARM: 9191/1: arm/stacktrace, kasan: Silence KASAN warnings in unwind_frame() [+ + +]
Author: linyujun <linyujun809@huawei.com>
Date:   Fri Apr 1 10:52:47 2022 +0100

    ARM: 9191/1: arm/stacktrace, kasan: Silence KASAN warnings in unwind_frame()
    
    [ Upstream commit 9be4c88bb7924f68f88cfd47d925c2d046f51a73 ]
    
    The following KASAN warning is detected by QEMU.
    
    ==================================================================
    BUG: KASAN: stack-out-of-bounds in unwind_frame+0x508/0x870
    Read of size 4 at addr c36bba90 by task cat/163
    
    CPU: 1 PID: 163 Comm: cat Not tainted 5.10.0-rc1 #40
    Hardware name: ARM-Versatile Express
    [<c0113fac>] (unwind_backtrace) from [<c010e71c>] (show_stack+0x10/0x14)
    [<c010e71c>] (show_stack) from [<c0b805b4>] (dump_stack+0x98/0xb0)
    [<c0b805b4>] (dump_stack) from [<c0b7d658>] (print_address_description.constprop.0+0x58/0x4bc)
    [<c0b7d658>] (print_address_description.constprop.0) from [<c031435c>] (kasan_report+0x154/0x170)
    [<c031435c>] (kasan_report) from [<c0113c44>] (unwind_frame+0x508/0x870)
    [<c0113c44>] (unwind_frame) from [<c010e298>] (__save_stack_trace+0x110/0x134)
    [<c010e298>] (__save_stack_trace) from [<c01ce0d8>] (stack_trace_save+0x8c/0xb4)
    [<c01ce0d8>] (stack_trace_save) from [<c0313520>] (kasan_set_track+0x38/0x60)
    [<c0313520>] (kasan_set_track) from [<c0314cb8>] (kasan_set_free_info+0x20/0x2c)
    [<c0314cb8>] (kasan_set_free_info) from [<c0313474>] (__kasan_slab_free+0xec/0x120)
    [<c0313474>] (__kasan_slab_free) from [<c0311e20>] (kmem_cache_free+0x7c/0x334)
    [<c0311e20>] (kmem_cache_free) from [<c01c35dc>] (rcu_core+0x390/0xccc)
    [<c01c35dc>] (rcu_core) from [<c01013a8>] (__do_softirq+0x180/0x518)
    [<c01013a8>] (__do_softirq) from [<c0135214>] (irq_exit+0x9c/0xe0)
    [<c0135214>] (irq_exit) from [<c01a40e4>] (__handle_domain_irq+0xb0/0x110)
    [<c01a40e4>] (__handle_domain_irq) from [<c0691248>] (gic_handle_irq+0xa0/0xb8)
    [<c0691248>] (gic_handle_irq) from [<c0100b0c>] (__irq_svc+0x6c/0x94)
    Exception stack(0xc36bb928 to 0xc36bb970)
    b920:                   c36bb9c0 00000000 c0126919 c0101228 c36bb9c0 b76d7730
    b940: c36b8000 c36bb9a0 c3335b00 c01ce0d8 00000003 c36bba3c c36bb940 c36bb978
    b960: c010e298 c011373c 60000013 ffffffff
    [<c0100b0c>] (__irq_svc) from [<c011373c>] (unwind_frame+0x0/0x870)
    [<c011373c>] (unwind_frame) from [<00000000>] (0x0)
    
    The buggy address belongs to the page:
    page:(ptrval) refcount:0 mapcount:0 mapping:00000000 index:0x0 pfn:0x636bb
    flags: 0x0()
    raw: 00000000 00000000 ef867764 00000000 00000000 00000000 ffffffff 00000000
    page dumped because: kasan: bad access detected
    
    addr c36bba90 is located in stack of task cat/163 at offset 48 in frame:
     stack_trace_save+0x0/0xb4
    
    this frame has 1 object:
     [32, 48) 'trace'
    
    Memory state around the buggy address:
     c36bb980: f1 f1 f1 f1 00 04 f2 f2 00 00 f3 f3 00 00 00 00
     c36bba00: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
    >c36bba80: 00 00 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
                     ^
     c36bbb00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     c36bbb80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    ==================================================================
    
    There is a same issue on x86 and has been resolved by the commit f7d27c35ddff
    ("x86/mm, kasan: Silence KASAN warnings in get_wchan()").
    The solution could be applied to arm architecture too.
    
    Signed-off-by: Lin Yujun <linyujun809@huawei.com>
    Reported-by: He Ying <heying24@huawei.com>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: 9196/1: spectre-bhb: enable for Cortex-A15 [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Wed Apr 20 09:44:51 2022 +0100

    ARM: 9196/1: spectre-bhb: enable for Cortex-A15
    
    [ Upstream commit 0dc14aa94ccd8ba35eb17a0f9b123d1566efd39e ]
    
    The Spectre-BHB mitigations were inadvertently left disabled for
    Cortex-A15, due to the fact that cpu_v7_bugs_init() is not called in
    that case. So fix that.
    
    Fixes: b9baf5c8c5c3 ("ARM: Spectre-BHB workaround")
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: 9197/1: spectre-bhb: fix loop8 sequence for Thumb2 [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Wed Apr 20 09:46:17 2022 +0100

    ARM: 9197/1: spectre-bhb: fix loop8 sequence for Thumb2
    
    [ Upstream commit 3cfb3019979666bdf33a1010147363cf05e0f17b ]
    
    In Thumb2, 'b . + 4' produces a branch instruction that uses a narrow
    encoding, and so it does not jump to the following instruction as
    expected. So use W(b) instead.
    
    Fixes: 6c7cb60bff7a ("ARM: fix Thumb2 regression with Spectre BHB")
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clk: at91: generated: consider range when calculating best rate [+ + +]
Author: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
Date:   Wed Apr 13 10:13:18 2022 +0300

    clk: at91: generated: consider range when calculating best rate
    
    [ Upstream commit d0031e6fbed955ff8d5f5bbc8fe7382482559cec ]
    
    clk_generated_best_diff() helps in finding the parent and the divisor to
    compute a rate closest to the required one. However, it doesn't take into
    account the request's range for the new rate. Make sure the new rate
    is within the required range.
    
    Fixes: 8a8f4bf0c480 ("clk: at91: clk-generated: create function to find best_diff")
    Signed-off-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
    Link: https://lore.kernel.org/r/20220413071318.244912-1-codrin.ciubotariu@microchip.com
    Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
crypto: qcom-rng - fix infinite loop on requests not multiple of WORD_SZ [+ + +]
Author: Ondrej Mosnacek <omosnace@redhat.com>
Date:   Tue May 3 13:50:10 2022 +0200

    crypto: qcom-rng - fix infinite loop on requests not multiple of WORD_SZ
    
    commit 16287397ec5c08aa58db6acf7dbc55470d78087d upstream.
    
    The commit referenced in the Fixes tag removed the 'break' from the else
    branch in qcom_rng_read(), causing an infinite loop whenever 'max' is
    not a multiple of WORD_SZ. This can be reproduced e.g. by running:
    
        kcapi-rng -b 67 >/dev/null
    
    There are many ways to fix this without adding back the 'break', but
    they all seem more awkward than simply adding it back, so do just that.
    
    Tested on a machine with Qualcomm Amberwing processor.
    
    Fixes: a680b1832ced ("crypto: qcom-rng - ensure buffer for generate is completely filled")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
    Reviewed-by: Brian Masney <bmasney@redhat.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

crypto: stm32 - fix reference leak in stm32_crc_remove [+ + +]
Author: Zheng Yongjun <zhengyongjun3@huawei.com>
Date:   Thu Mar 17 13:16:13 2022 +0000

    crypto: stm32 - fix reference leak in stm32_crc_remove
    
    [ Upstream commit e9a36feecee0ee5845f2e0656f50f9942dd0bed3 ]
    
    pm_runtime_get_sync() will increment pm usage counter even it
    failed. Forgetting to call pm_runtime_put_noidle will result
    in reference leak in stm32_crc_remove, so we should fix it.
    
    Signed-off-by: Zheng Yongjun <zhengyongjun3@huawei.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drbd: remove usage of list iterator variable after loop [+ + +]
Author: Jakob Koschel <jakobkoschel@gmail.com>
Date:   Fri Apr 1 00:03:48 2022 +0200

    drbd: remove usage of list iterator variable after loop
    
    [ Upstream commit 901aeda62efa21f2eae937bccb71b49ae531be06 ]
    
    In preparation to limit the scope of a list iterator to the list
    traversal loop, use a dedicated pointer to iterate through the list [1].
    
    Since that variable should not be used past the loop iteration, a
    separate variable is used to 'remember the current location within the
    loop'.
    
    To either continue iterating from that position or skip the iteration
    (if the previous iteration was complete) list_prepare_entry() is used.
    
    Link: https://lore.kernel.org/all/CAHk-=wgRr_D8CB-D9Kg-c=EHreAsk5SqXPwr9Y7k9sA6cWXJ6w@mail.gmail.com/ [1]
    Signed-off-by: Jakob Koschel <jakobkoschel@gmail.com>
    Link: https://lore.kernel.org/r/20220331220349.885126-1-jakobkoschel@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/dp/mst: fix a possible memory leak in fetch_monitor_name() [+ + +]
Author: Hangyu Hua <hbh25y@gmail.com>
Date:   Mon May 16 11:20:42 2022 +0800

    drm/dp/mst: fix a possible memory leak in fetch_monitor_name()
    
    commit 6e03b13cc7d9427c2c77feed1549191015615202 upstream.
    
    drm_dp_mst_get_edid call kmemdup to create mst_edid. So mst_edid need to be
    freed after use.
    
    Signed-off-by: Hangyu Hua <hbh25y@gmail.com>
    Reviewed-by: Lyude Paul <lyude@redhat.com>
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Cc: stable@vger.kernel.org
    Link: https://patchwork.freedesktop.org/patch/msgid/20220516032042.13166-1-hbh25y@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ethernet: tulip: fix missing pci_disable_device() on error in tulip_init_one() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Fri May 6 17:42:50 2022 +0800

    ethernet: tulip: fix missing pci_disable_device() on error in tulip_init_one()
    
    [ Upstream commit 51ca86b4c9c7c75f5630fa0dbe5f8f0bd98e3c3e ]
    
    Fix the missing pci_disable_device() before return
    from tulip_init_one() in the error handling case.
    
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20220506094250.3630615-1-yangyingliang@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Fix double fget() in vhost_net_set_backend() [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Mon May 16 16:42:13 2022 +0800

    Fix double fget() in vhost_net_set_backend()
    
    commit fb4554c2232e44d595920f4d5c66cf8f7d13f9bc upstream.
    
    Descriptor table is a shared resource; two fget() on the same descriptor
    may return different struct file references.  get_tap_ptr_ring() is
    called after we'd found (and pinned) the socket we'll be using and it
    tries to find the private tun/tap data structures associated with it.
    Redoing the lookup by the same file descriptor we'd used to get the
    socket is racy - we need to same struct file.
    
    Thanks to Jason for spotting a braino in the original variant of patch -
    I'd missed the use of fd == -1 for disabling backend, and in that case
    we can end up with sock == NULL and sock != oldsock.
    
    Cc: stable@kernel.org
    Acked-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
floppy: use a statically allocated error counter [+ + +]
Author: Willy Tarreau <w@1wt.eu>
Date:   Sun May 8 11:37:07 2022 +0200

    floppy: use a statically allocated error counter
    
    commit f71f01394f742fc4558b3f9f4c7ef4c4cf3b07c8 upstream.
    
    Interrupt handler bad_flp_intr() may cause a UAF on the recently freed
    request just to increment the error count.  There's no point keeping
    that one in the request anyway, and since the interrupt handler uses a
    static pointer to the error which cannot be kept in sync with the
    pending request, better make it use a static error counter that's reset
    for each new request.  This reset now happens when entering
    redo_fd_request() for a new request via set_next_request().
    
    One initial concern about a single error counter was that errors on one
    floppy drive could be reported on another one, but this problem is not
    real given that the driver uses a single drive at a time, as that
    PC-compatible controllers also have this limitation by using shared
    signals.  As such the error count is always for the "current" drive.
    
    Reported-by: Minh Yuan <yuanmingbuaa@gmail.com>
    Suggested-by: Linus Torvalds <torvalds@linuxfoundation.org>
    Tested-by: Denis Efremov <efremov@linux.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Denis Efremov <efremov@linux.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
gpio: gpio-vf610: do not touch other bits when set the target bit [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Wed May 11 10:15:04 2022 +0800

    gpio: gpio-vf610: do not touch other bits when set the target bit
    
    [ Upstream commit 9bf3ac466faa83d51a8fe9212131701e58fdef74 ]
    
    For gpio controller contain register PDDR, when set one target bit,
    current logic will clear all other bits, this is wrong. Use operator
    '|=' to fix it.
    
    Fixes: 659d8a62311f ("gpio: vf610: add imx7ulp support")
    Reviewed-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gpio: mvebu/pwm: Refuse requests with inverted polarity [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Wed May 11 09:58:56 2022 +0200

    gpio: mvebu/pwm: Refuse requests with inverted polarity
    
    [ Upstream commit 3ecb10175b1f776f076553c24e2689e42953fef5 ]
    
    The driver doesn't take struct pwm_state::polarity into account when
    configuring the hardware, so refuse requests for inverted polarity.
    
    Fixes: 757642f9a584 ("gpio: mvebu: Add limited PWM support")
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igb: skip phy status check where unavailable [+ + +]
Author: Kevin Mitchell <kevmitch@arista.com>
Date:   Tue May 17 11:01:05 2022 -0700

    igb: skip phy status check where unavailable
    
    [ Upstream commit 942d2ad5d2e0df758a645ddfadffde2795322728 ]
    
    igb_read_phy_reg() will silently return, leaving phy_data untouched, if
    hw->ops.read_reg isn't set. Depending on the uninitialized value of
    phy_data, this led to the phy status check either succeeding immediately
    or looping continuously for 2 seconds before emitting a noisy err-level
    timeout. This message went out to the console even though there was no
    actual problem.
    
    Instead, first check if there is read_reg function pointer. If not,
    proceed without trying to check the phy status register.
    
    Fixes: b72f3f72005d ("igb: When GbE link up, wait for Remote receiver status condition")
    Signed-off-by: Kevin Mitchell <kevmitch@arista.com>
    Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: add bounds checking to input_set_capability() [+ + +]
Author: Jeff LaBundy <jeff@labundy.com>
Date:   Sun Mar 20 21:55:27 2022 -0700

    Input: add bounds checking to input_set_capability()
    
    [ Upstream commit 409353cbe9fe48f6bc196114c442b1cff05a39bc ]
    
    Update input_set_capability() to prevent kernel panic in case the
    event code exceeds the bitmap for the given event type.
    
    Suggested-by: Tomasz Moń <tomasz.mon@camlingroup.com>
    Signed-off-by: Jeff LaBundy <jeff@labundy.com>
    Reviewed-by: Tomasz Moń <tomasz.mon@camlingroup.com>
    Link: https://lore.kernel.org/r/20220320032537.545250-1-jeff@labundy.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: stmfts - fix reference leak in stmfts_input_open [+ + +]
Author: Zheng Yongjun <zhengyongjun3@huawei.com>
Date:   Sun Mar 20 21:56:38 2022 -0700

    Input: stmfts - fix reference leak in stmfts_input_open
    
    [ Upstream commit 26623eea0da3476446909af96c980768df07bbd9 ]
    
    pm_runtime_get_sync() will increment pm usage counter even it
    failed. Forgetting to call pm_runtime_put_noidle will result
    in reference leak in stmfts_input_open, so we should fix it.
    
    Signed-off-by: Zheng Yongjun <zhengyongjun3@huawei.com>
    Link: https://lore.kernel.org/r/20220317131604.53538-1-zhengyongjun3@huawei.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 4.19.245 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed May 25 09:10:41 2022 +0200

    Linux 4.19.245
    
    Link: https://lore.kernel.org/r/20220523165752.797318097@linuxfoundation.org
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mac80211: fix rx reordering with non explicit / psmp ack policy [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Wed Apr 20 12:50:38 2022 +0200

    mac80211: fix rx reordering with non explicit / psmp ack policy
    
    [ Upstream commit 5e469ed9764d4722c59562da13120bd2dc6834c5 ]
    
    When the QoS ack policy was set to non explicit / psmp ack, frames are treated
    as not being part of a BA session, which causes extra latency on reordering.
    Fix this by only bypassing reordering for packets with no-ack policy
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20220420105038.36443-1-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: lantiq: check the return value of kzalloc() [+ + +]
Author: Xiaoke Wang <xkernel.wang@foxmail.com>
Date:   Fri Mar 25 19:49:41 2022 +0800

    MIPS: lantiq: check the return value of kzalloc()
    
    [ Upstream commit 34123208bbcc8c884a0489f543a23fe9eebb5514 ]
    
    kzalloc() is a memory allocation function which can return NULL when
    some internal memory errors happen. So it is better to check the
    return value of it to prevent potential wrong memory access or
    memory leak.
    
    Signed-off-by: Xiaoke Wang <xkernel.wang@foxmail.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mmc: block: Use generic_cmd6_time when modifying INAND_CMD38_ARG_EXT_CSD [+ + +]
Author: Ulf Hansson <ulf.hansson@linaro.org>
Date:   Thu May 19 11:45:35 2022 -0700

    mmc: block: Use generic_cmd6_time when modifying INAND_CMD38_ARG_EXT_CSD
    
    commit ad91619aa9d78ab1c6d4a969c3db68bc331ae76c upstream
    
    The INAND_CMD38_ARG_EXT_CSD is a vendor specific EXT_CSD register, which is
    used to prepare an erase/trim operation. However, it doesn't make sense to
    use a timeout of 10 minutes while updating the register, which becomes the
    case when the timeout_ms argument for mmc_switch() is set to zero.
    
    Instead, let's use the generic_cmd6_time, as that seems like a reasonable
    timeout to use for these cases.
    
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Link: https://lore.kernel.org/r/20200122142747.5690-3-ulf.hansson@linaro.org
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: core: Cleanup BKOPS support [+ + +]
Author: Ulf Hansson <ulf.hansson@linaro.org>
Date:   Thu May 19 11:45:33 2022 -0700

    mmc: core: Cleanup BKOPS support
    
    commit 0c204979c691f05666ecfb74501e7adfdde8fbf9 upstream
    
    It's been ~6 years ago since we introduced the BKOPS support for eMMC
    cards. The current code is a bit messy and primarily that's because it
    prepares to support running BKOPS in an asynchronous mode. However, that
    mode has never been fully implemented/enabled. Instead BKOPS is always
    executed in synchronously, when the card has reported an urgent BKOPS
    level.
    
    For these reasons, let's make the code more readable by dropping the unused
    parts. Let's also rename mmc_start_bkops() to mmc_run_bkops(), as to make
    it more descriptive.
    
    Cc: Jaehoon Chung <jh80.chung@samsung.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: core: Default to generic_cmd6_time as timeout in __mmc_switch() [+ + +]
Author: Ulf Hansson <ulf.hansson@linaro.org>
Date:   Thu May 19 11:45:36 2022 -0700

    mmc: core: Default to generic_cmd6_time as timeout in __mmc_switch()
    
    commit 533a6cfe08f96a7b5c65e06d20916d552c11b256 upstream
    
    All callers of __mmc_switch() should now be specifying a valid timeout for
    the CMD6 command. However, just to be sure, let's print a warning and
    default to use the generic_cmd6_time in case the provided timeout_ms
    argument is zero.
    
    In this context, let's also simplify some of the corresponding code and
    clarify some related comments.
    
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Link: https://lore.kernel.org/r/20200122142747.5690-4-ulf.hansson@linaro.org
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: core: Specify timeouts for BKOPS and CACHE_FLUSH for eMMC [+ + +]
Author: Ulf Hansson <ulf.hansson@linaro.org>
Date:   Thu May 19 11:45:34 2022 -0700

    mmc: core: Specify timeouts for BKOPS and CACHE_FLUSH for eMMC
    
    commit 24ed3bd01d6a844fd5e8a75f48d0a3d10ed71bf9 upstream
    
    The timeout values used while waiting for a CMD6 for BKOPS or a CACHE_FLUSH
    to complete, are not defined by the eMMC spec. However, a timeout of 10
    minutes as is currently being used, is just silly for both of these cases.
    Instead, let's specify more reasonable timeouts, 120s for BKOPS and 30s for
    CACHE_FLUSH.
    
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Link: https://lore.kernel.org/r/20200122142747.5690-2-ulf.hansson@linaro.org
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5e: Properly block LRO when XDP is enabled [+ + +]
Author: Maxim Mikityanskiy <maximmi@nvidia.com>
Date:   Tue Apr 12 18:37:03 2022 +0300

    net/mlx5e: Properly block LRO when XDP is enabled
    
    [ Upstream commit cf6e34c8c22fba66bd21244b95ea47e235f68974 ]
    
    LRO is incompatible and mutually exclusive with XDP. However, the needed
    checks are only made when enabling XDP. If LRO is enabled when XDP is
    already active, the command will succeed, and XDP will be skipped in the
    data path, although still enabled.
    
    This commit fixes the bug by checking the XDP status in
    mlx5e_fix_features and disabling LRO if XDP is enabled.
    
    Fixes: 86994156c736 ("net/mlx5e: XDP fast RX drop bpf programs support")
    Signed-off-by: Maxim Mikityanskiy <maximmi@nvidia.com>
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/qla3xxx: Fix a test in ql_reset_work() [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Sun May 15 20:07:02 2022 +0200

    net/qla3xxx: Fix a test in ql_reset_work()
    
    [ Upstream commit 5361448e45fac6fb96738df748229432a62d78b6 ]
    
    test_bit() tests if one bit is set or not.
    Here the logic seems to check of bit QL_RESET_PER_SCSI (i.e. 4) OR bit
    QL_RESET_START (i.e. 3) is set.
    
    In fact, it checks if bit 7 (4 | 3 = 7) is set, that is to say
    QL_ADAPTER_UP.
    
    This looks harmless, because this bit is likely be set, and when the
    ql_reset_work() delayed work is scheduled in ql3xxx_isr() (the only place
    that schedule this work), QL_RESET_START or QL_RESET_PER_SCSI is set.
    
    This has been spotted by smatch.
    
    Fixes: 5a4faa873782 ("[PATCH] qla3xxx NIC driver")
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/80e73e33f390001d9c0140ffa9baddf6466a41a2.1652637337.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: act_pedit: sanitize shift argument before usage [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Fri May 13 11:27:06 2022 +0200

    net/sched: act_pedit: sanitize shift argument before usage
    
    [ Upstream commit 4d42d54a7d6aa6d29221d3fd4f2ae9503e94f011 ]
    
    syzbot was able to trigger an Out-of-Bound on the pedit action:
    
    UBSAN: shift-out-of-bounds in net/sched/act_pedit.c:238:43
    shift exponent 1400735974 is too large for 32-bit type 'unsigned int'
    CPU: 0 PID: 3606 Comm: syz-executor151 Not tainted 5.18.0-rc5-syzkaller-00165-g810c2f0a3f86 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
     ubsan_epilogue+0xb/0x50 lib/ubsan.c:151
     __ubsan_handle_shift_out_of_bounds.cold+0xb1/0x187 lib/ubsan.c:322
     tcf_pedit_init.cold+0x1a/0x1f net/sched/act_pedit.c:238
     tcf_action_init_1+0x414/0x690 net/sched/act_api.c:1367
     tcf_action_init+0x530/0x8d0 net/sched/act_api.c:1432
     tcf_action_add+0xf9/0x480 net/sched/act_api.c:1956
     tc_ctl_action+0x346/0x470 net/sched/act_api.c:2015
     rtnetlink_rcv_msg+0x413/0xb80 net/core/rtnetlink.c:5993
     netlink_rcv_skb+0x153/0x420 net/netlink/af_netlink.c:2502
     netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline]
     netlink_unicast+0x543/0x7f0 net/netlink/af_netlink.c:1345
     netlink_sendmsg+0x904/0xe00 net/netlink/af_netlink.c:1921
     sock_sendmsg_nosec net/socket.c:705 [inline]
     sock_sendmsg+0xcf/0x120 net/socket.c:725
     ____sys_sendmsg+0x6e2/0x800 net/socket.c:2413
     ___sys_sendmsg+0xf3/0x170 net/socket.c:2467
     __sys_sendmsg+0xe5/0x1b0 net/socket.c:2496
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x44/0xae
    RIP: 0033:0x7fe36e9e1b59
    Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffef796fe88 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007fe36e9e1b59
    RDX: 0000000000000000 RSI: 0000000020000300 RDI: 0000000000000003
    RBP: 00007fe36e9a5d00 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00007fe36e9a5d90
    R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
     </TASK>
    
    The 'shift' field is not validated, and any value above 31 will
    trigger out-of-bounds. The issue predates the git history, but
    syzbot was able to trigger it only after the commit mentioned in
    the fixes tag, and this change only applies on top of such commit.
    
    Address the issue bounding the 'shift' value to the maximum allowed
    by the relevant operator.
    
    Reported-and-tested-by: syzbot+8ed8fc4c57e9dcf23ca6@syzkaller.appspotmail.com
    Fixes: 8b796475fd78 ("net/sched: act_pedit: really ensure the skb is writable")
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: af_key: add check for pfkey_broadcast in function pfkey_process [+ + +]
Author: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Date:   Tue May 17 17:42:31 2022 +0800

    net: af_key: add check for pfkey_broadcast in function pfkey_process
    
    [ Upstream commit 4dc2a5a8f6754492180741facf2a8787f2c415d7 ]
    
    If skb_clone() returns null pointer, pfkey_broadcast() will
    return error.
    Therefore, it should be better to check the return value of
    pfkey_broadcast() and return error if fails.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: atlantic: verify hw_head_ lies within TX buffer ring [+ + +]
Author: Grant Grundler <grundler@chromium.org>
Date:   Mon May 9 19:28:26 2022 -0700

    net: atlantic: verify hw_head_ lies within TX buffer ring
    
    [ Upstream commit 2120b7f4d128433ad8c5f503a9584deba0684901 ]
    
    Bounds check hw_head index provided by NIC to verify it lies
    within the TX buffer ring.
    
    Reported-by: Aashay Shringarpure <aashay@google.com>
    Reported-by: Yi Chou <yich@google.com>
    Reported-by: Shervin Oloumi <enlightened@google.com>
    Signed-off-by: Grant Grundler <grundler@chromium.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: bridge: Clear offload_fwd_mark when passing frame up bridge interface. [+ + +]
Author: Andrew Lunn <andrew@lunn.ch>
Date:   Wed May 18 02:58:40 2022 +0200

    net: bridge: Clear offload_fwd_mark when passing frame up bridge interface.
    
    [ Upstream commit fbb3abdf2223cd0dfc07de85fe5a43ba7f435bdf ]
    
    It is possible to stack bridges on top of each other. Consider the
    following which makes use of an Ethernet switch:
    
           br1
         /    \
        /      \
       /        \
     br0.11    wlan0
       |
       br0
     /  |  \
    p1  p2  p3
    
    br0 is offloaded to the switch. Above br0 is a vlan interface, for
    vlan 11. This vlan interface is then a slave of br1. br1 also has a
    wireless interface as a slave. This setup trunks wireless lan traffic
    over the copper network inside a VLAN.
    
    A frame received on p1 which is passed up to the bridge has the
    skb->offload_fwd_mark flag set to true, indicating that the switch has
    dealt with forwarding the frame out ports p2 and p3 as needed. This
    flag instructs the software bridge it does not need to pass the frame
    back down again. However, the flag is not getting reset when the frame
    is passed upwards. As a result br1 sees the flag, wrongly interprets
    it, and fails to forward the frame to wlan0.
    
    When passing a frame upwards, clear the flag. This is the Rx
    equivalent of br_switchdev_frame_unmark() in br_dev_xmit().
    
    Fixes: f1c2eddf4cb6 ("bridge: switchdev: Use an helper to clear forward mark")
    Signed-off-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Tested-by: Ido Schimmel <idosch@nvidia.com>
    Acked-by: Nikolay Aleksandrov <razor@blackwall.org>
    Link: https://lore.kernel.org/r/20220518005840.771575-1-andrew@lunn.ch
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: macb: Increment rx bd head after allocating skb and buffer [+ + +]
Author: Harini Katakam <harini.katakam@xilinx.com>
Date:   Thu May 12 22:49:00 2022 +0530

    net: macb: Increment rx bd head after allocating skb and buffer
    
    [ Upstream commit 9500acc631dbb8b73166e25700e656b11f6007b6 ]
    
    In gem_rx_refill rx_prepared_head is incremented at the beginning of
    the while loop preparing the skb and data buffers. If the skb or data
    buffer allocation fails, this BD will be unusable BDs until the head
    loops back to the same BD (and obviously buffer allocation succeeds).
    In the unlikely event that there's a string of allocation failures,
    there will be an equal number of unusable BDs and an inconsistent RX
    BD chain. Hence increment the head at the end of the while loop to be
    clean.
    
    Fixes: 4df95131ea80 ("net/macb: change RX path for GEM")
    Signed-off-by: Harini Katakam <harini.katakam@xilinx.com>
    Signed-off-by: Michal Simek <michal.simek@xilinx.com>
    Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
    Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20220512171900.32593-1-harini.katakam@xilinx.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: stmmac: fix missing pci_disable_device() on error in stmmac_pci_probe() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Tue May 10 11:13:16 2022 +0800

    net: stmmac: fix missing pci_disable_device() on error in stmmac_pci_probe()
    
    [ Upstream commit 0807ce0b010418a191e0e4009803b2d74c3245d5 ]
    
    Switch to using pcim_enable_device() to avoid missing pci_disable_device().
    
    Reported-by: Hulk Robot <hulkci@huawei.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20220510031316.1780409-1-yangyingliang@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: vmxnet3: fix possible NULL pointer dereference in vmxnet3_rq_cleanup() [+ + +]
Author: Zixuan Fu <r33s3n6@gmail.com>
Date:   Sat May 14 13:07:11 2022 +0800

    net: vmxnet3: fix possible NULL pointer dereference in vmxnet3_rq_cleanup()
    
    [ Upstream commit edf410cb74dc612fd47ef5be319c5a0bcd6e6ccd ]
    
    In vmxnet3_rq_create(), when dma_alloc_coherent() fails,
    vmxnet3_rq_destroy() is called. It sets rq->rx_ring[i].base to NULL. Then
    vmxnet3_rq_create() returns an error to its callers mxnet3_rq_create_all()
    -> vmxnet3_change_mtu(). Then vmxnet3_change_mtu() calls
    vmxnet3_force_close() -> dev_close() in error handling code. And the driver
    calls vmxnet3_close() -> vmxnet3_quiesce_dev() -> vmxnet3_rq_cleanup_all()
    -> vmxnet3_rq_cleanup(). In vmxnet3_rq_cleanup(),
    rq->rx_ring[ring_idx].base is accessed, but this variable is NULL, causing
    a NULL pointer dereference.
    
    To fix this possible bug, an if statement is added to check whether
    rq->rx_ring[0].base is NULL in vmxnet3_rq_cleanup() and exit early if so.
    
    The error log in our fault-injection testing is shown as follows:
    
    [   65.220135] BUG: kernel NULL pointer dereference, address: 0000000000000008
    ...
    [   65.222633] RIP: 0010:vmxnet3_rq_cleanup_all+0x396/0x4e0 [vmxnet3]
    ...
    [   65.227977] Call Trace:
    ...
    [   65.228262]  vmxnet3_quiesce_dev+0x80f/0x8a0 [vmxnet3]
    [   65.228580]  vmxnet3_close+0x2c4/0x3f0 [vmxnet3]
    [   65.228866]  __dev_close_many+0x288/0x350
    [   65.229607]  dev_close_many+0xa4/0x480
    [   65.231124]  dev_close+0x138/0x230
    [   65.231933]  vmxnet3_force_close+0x1f0/0x240 [vmxnet3]
    [   65.232248]  vmxnet3_change_mtu+0x75d/0x920 [vmxnet3]
    ...
    
    Fixes: d1a890fa37f27 ("net: VMware virtual Ethernet NIC driver: vmxnet3")
    Reported-by: TOTE Robot <oslab@tsinghua.edu.cn>
    Signed-off-by: Zixuan Fu <r33s3n6@gmail.com>
    Link: https://lore.kernel.org/r/20220514050711.2636709-1-r33s3n6@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: vmxnet3: fix possible use-after-free bugs in vmxnet3_rq_alloc_rx_buf() [+ + +]
Author: Zixuan Fu <r33s3n6@gmail.com>
Date:   Sat May 14 13:06:56 2022 +0800

    net: vmxnet3: fix possible use-after-free bugs in vmxnet3_rq_alloc_rx_buf()
    
    [ Upstream commit 9e7fef9521e73ca8afd7da9e58c14654b02dfad8 ]
    
    In vmxnet3_rq_alloc_rx_buf(), when dma_map_single() fails, rbi->skb is
    freed immediately. Similarly, in another branch, when dma_map_page() fails,
    rbi->page is also freed. In the two cases, vmxnet3_rq_alloc_rx_buf()
    returns an error to its callers vmxnet3_rq_init() -> vmxnet3_rq_init_all()
    -> vmxnet3_activate_dev(). Then vmxnet3_activate_dev() calls
    vmxnet3_rq_cleanup_all() in error handling code, and rbi->skb or rbi->page
    are freed again in vmxnet3_rq_cleanup_all(), causing use-after-free bugs.
    
    To fix these possible bugs, rbi->skb and rbi->page should be cleared after
    they are freed.
    
    The error log in our fault-injection testing is shown as follows:
    
    [   14.319016] BUG: KASAN: use-after-free in consume_skb+0x2f/0x150
    ...
    [   14.321586] Call Trace:
    ...
    [   14.325357]  consume_skb+0x2f/0x150
    [   14.325671]  vmxnet3_rq_cleanup_all+0x33a/0x4e0 [vmxnet3]
    [   14.326150]  vmxnet3_activate_dev+0xb9d/0x2ca0 [vmxnet3]
    [   14.326616]  vmxnet3_open+0x387/0x470 [vmxnet3]
    ...
    [   14.361675] Allocated by task 351:
    ...
    [   14.362688]  __netdev_alloc_skb+0x1b3/0x6f0
    [   14.362960]  vmxnet3_rq_alloc_rx_buf+0x1b0/0x8d0 [vmxnet3]
    [   14.363317]  vmxnet3_activate_dev+0x3e3/0x2ca0 [vmxnet3]
    [   14.363661]  vmxnet3_open+0x387/0x470 [vmxnet3]
    ...
    [   14.367309]
    [   14.367412] Freed by task 351:
    ...
    [   14.368932]  __dev_kfree_skb_any+0xd2/0xe0
    [   14.369193]  vmxnet3_rq_alloc_rx_buf+0x71e/0x8d0 [vmxnet3]
    [   14.369544]  vmxnet3_activate_dev+0x3e3/0x2ca0 [vmxnet3]
    [   14.369883]  vmxnet3_open+0x387/0x470 [vmxnet3]
    [   14.370174]  __dev_open+0x28a/0x420
    [   14.370399]  __dev_change_flags+0x192/0x590
    [   14.370667]  dev_change_flags+0x7a/0x180
    [   14.370919]  do_setlink+0xb28/0x3570
    [   14.371150]  rtnl_newlink+0x1160/0x1740
    [   14.371399]  rtnetlink_rcv_msg+0x5bf/0xa50
    [   14.371661]  netlink_rcv_skb+0x1cd/0x3e0
    [   14.371913]  netlink_unicast+0x5dc/0x840
    [   14.372169]  netlink_sendmsg+0x856/0xc40
    [   14.372420]  ____sys_sendmsg+0x8a7/0x8d0
    [   14.372673]  __sys_sendmsg+0x1c2/0x270
    [   14.372914]  do_syscall_64+0x41/0x90
    [   14.373145]  entry_SYSCALL_64_after_hwframe+0x44/0xae
    ...
    
    Fixes: 5738a09d58d5a ("vmxnet3: fix checks for dma mapping errors")
    Reported-by: TOTE Robot <oslab@tsinghua.edu.cn>
    Signed-off-by: Zixuan Fu <r33s3n6@gmail.com>
    Link: https://lore.kernel.org/r/20220514050656.2636588-1-r33s3n6@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Tue May 17 09:25:30 2022 +0800

    NFC: nci: fix sleep in atomic context bugs caused by nci_skb_alloc
    
    [ Upstream commit 23dd4581350d4ffa23d58976ec46408f8f4c1e16 ]
    
    There are sleep in atomic context bugs when the request to secure
    element of st-nci is timeout. The root cause is that nci_skb_alloc
    with GFP_KERNEL parameter is called in st_nci_se_wt_timeout which is
    a timer handler. The call paths that could trigger bugs are shown below:
    
        (interrupt context 1)
    st_nci_se_wt_timeout
      nci_hci_send_event
        nci_hci_send_data
          nci_skb_alloc(..., GFP_KERNEL) //may sleep
    
       (interrupt context 2)
    st_nci_se_wt_timeout
      nci_hci_send_event
        nci_hci_send_data
          nci_send_data
            nci_queue_tx_data_frags
              nci_skb_alloc(..., GFP_KERNEL) //may sleep
    
    This patch changes allocation mode of nci_skb_alloc from GFP_KERNEL to
    GFP_ATOMIC in order to prevent atomic context sleeping. The GFP_ATOMIC
    flag makes memory allocation operation could be used in atomic context.
    
    Fixes: ed06aeefdac3 ("nfc: st-nci: Rename st21nfcb to st-nci")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20220517012530.75714-1-duoming@zju.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: fix lockdep warnings during disk space reclamation [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Fri Apr 1 11:28:21 2022 -0700

    nilfs2: fix lockdep warnings during disk space reclamation
    
    [ Upstream commit 6e211930f79aa45d422009a5f2e5467d2369ffe5 ]
    
    During disk space reclamation, nilfs2 still emits the following lockdep
    warning due to page/folio operations on shadowed page caches that nilfs2
    uses to get a snapshot of DAT file in memory:
    
      WARNING: CPU: 0 PID: 2643 at include/linux/backing-dev.h:272 __folio_mark_dirty+0x645/0x670
      ...
      RIP: 0010:__folio_mark_dirty+0x645/0x670
      ...
      Call Trace:
        filemap_dirty_folio+0x74/0xd0
        __set_page_dirty_nobuffers+0x85/0xb0
        nilfs_copy_dirty_pages+0x288/0x510 [nilfs2]
        nilfs_mdt_save_to_shadow_map+0x50/0xe0 [nilfs2]
        nilfs_clean_segments+0xee/0x5d0 [nilfs2]
        nilfs_ioctl_clean_segments.isra.19+0xb08/0xf40 [nilfs2]
        nilfs_ioctl+0xc52/0xfb0 [nilfs2]
        __x64_sys_ioctl+0x11d/0x170
    
    This fixes the remaining warning by using inode objects to hold those
    page caches.
    
    Link: https://lkml.kernel.org/r/1647867427-30498-3-git-send-email-konishi.ryusuke@gmail.com
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Hao Sun <sunhao.th@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nilfs2: fix lockdep warnings in page operations for btree nodes [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Fri Apr 1 11:28:18 2022 -0700

    nilfs2: fix lockdep warnings in page operations for btree nodes
    
    [ Upstream commit e897be17a441fa637cd166fc3de1445131e57692 ]
    
    Patch series "nilfs2 lockdep warning fixes".
    
    The first two are to resolve the lockdep warning issue, and the last one
    is the accompanying cleanup and low priority.
    
    Based on your comment, this series solves the issue by separating inode
    object as needed.  Since I was worried about the impact of the object
    composition changes, I tested the series carefully not to cause
    regressions especially for delicate functions such like disk space
    reclamation and snapshots.
    
    This patch (of 3):
    
    If CONFIG_LOCKDEP is enabled, nilfs2 hits lockdep warnings at
    inode_to_wb() during page/folio operations for btree nodes:
    
      WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 inode_to_wb include/linux/backing-dev.h:269 [inline]
      WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 folio_account_dirtied mm/page-writeback.c:2460 [inline]
      WARNING: CPU: 0 PID: 6575 at include/linux/backing-dev.h:269 __folio_mark_dirty+0xa7c/0xe30 mm/page-writeback.c:2509
      Modules linked in:
      ...
      RIP: 0010:inode_to_wb include/linux/backing-dev.h:269 [inline]
      RIP: 0010:folio_account_dirtied mm/page-writeback.c:2460 [inline]
      RIP: 0010:__folio_mark_dirty+0xa7c/0xe30 mm/page-writeback.c:2509
      ...
      Call Trace:
        __set_page_dirty include/linux/pagemap.h:834 [inline]
        mark_buffer_dirty+0x4e6/0x650 fs/buffer.c:1145
        nilfs_btree_propagate_p fs/nilfs2/btree.c:1889 [inline]
        nilfs_btree_propagate+0x4ae/0xea0 fs/nilfs2/btree.c:2085
        nilfs_bmap_propagate+0x73/0x170 fs/nilfs2/bmap.c:337
        nilfs_collect_dat_data+0x45/0xd0 fs/nilfs2/segment.c:625
        nilfs_segctor_apply_buffers+0x14a/0x470 fs/nilfs2/segment.c:1009
        nilfs_segctor_scan_file+0x47a/0x700 fs/nilfs2/segment.c:1048
        nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1224 [inline]
        nilfs_segctor_collect fs/nilfs2/segment.c:1494 [inline]
        nilfs_segctor_do_construct+0x14f3/0x6c60 fs/nilfs2/segment.c:2036
        nilfs_segctor_construct+0x7a7/0xb30 fs/nilfs2/segment.c:2372
        nilfs_segctor_thread_construct fs/nilfs2/segment.c:2480 [inline]
        nilfs_segctor_thread+0x3c3/0xf90 fs/nilfs2/segment.c:2563
        kthread+0x405/0x4f0 kernel/kthread.c:327
        ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:295
    
    This is because nilfs2 uses two page caches for each inode and
    inode->i_mapping never points to one of them, the btree node cache.
    
    This causes inode_to_wb(inode) to refer to a different page cache than
    the caller page/folio operations such like __folio_start_writeback(),
    __folio_end_writeback(), or __folio_mark_dirty() acquired the lock.
    
    This patch resolves the issue by allocating and using an additional
    inode to hold the page cache of btree nodes.  The inode is attached
    one-to-one to the traditional nilfs2 inode if it requires a block
    mapping with b-tree.  This setup change is in memory only and does not
    affect the disk format.
    
    Link: https://lkml.kernel.org/r/1647867427-30498-1-git-send-email-konishi.ryusuke@gmail.com
    Link: https://lkml.kernel.org/r/1647867427-30498-2-git-send-email-konishi.ryusuke@gmail.com
    Link: https://lore.kernel.org/r/YXrYvIo8YRnAOJCj@casper.infradead.org
    Link: https://lore.kernel.org/r/9a20b33d-b38f-b4a2-4742-c1eb5b8e4d6c@redhat.com
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+0d5b462a6f07447991b3@syzkaller.appspotmail.com
    Reported-by: syzbot+34ef28bb2aeb28724aa0@syzkaller.appspotmail.com
    Reported-by: Hao Sun <sunhao.th@gmail.com>
    Reported-by: David Hildenbrand <david@redhat.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
PCI/PM: Avoid putting Elo i2 PCIe Ports in D3cold [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Thu Mar 31 19:38:51 2022 +0200

    PCI/PM: Avoid putting Elo i2 PCIe Ports in D3cold
    
    commit 92597f97a40bf661bebceb92e26ff87c76d562d4 upstream.
    
    If a Root Port on Elo i2 is put into D3cold and then back into D0, the
    downstream device becomes permanently inaccessible, so add a bridge D3 DMI
    quirk for that system.
    
    This was exposed by 14858dcc3b35 ("PCI: Use pci_update_current_state() in
    pci_enable_device_flags()"), but before that commit the Root Port in
    question had never been put into D3cold for real due to a mismatch between
    its power state retrieved from the PCI_PM_CTRL register (which was
    accessible even though the platform firmware indicated that the port was in
    D3cold) and the state of an ACPI power resource involved in its power
    management.
    
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=215715
    Link: https://lore.kernel.org/r/11980172.O9o76ZdvQC@kreacher
    Reported-by: Stefan Gottwald <gottwald@igel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Cc: stable@vger.kernel.org      # v5.15+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
perf bench numa: Address compiler error on s390 [+ + +]
Author: Thomas Richter <tmricht@linux.ibm.com>
Date:   Fri May 20 10:11:58 2022 +0200

    perf bench numa: Address compiler error on s390
    
    [ Upstream commit f8ac1c478424a9a14669b8cef7389b1e14e5229d ]
    
    The compilation on s390 results in this error:
    
      # make DEBUG=y bench/numa.o
      ...
      bench/numa.c: In function ‘__bench_numa’:
      bench/numa.c:1749:81: error: ‘%d’ directive output may be truncated
                  writing between 1 and 11 bytes into a region of size between
                  10 and 20 [-Werror=format-truncation=]
      1749 |        snprintf(tname, sizeof(tname), "process%d:thread%d", p, t);
                                                                   ^~
      ...
      bench/numa.c:1749:64: note: directive argument in the range
                     [-2147483647, 2147483646]
      ...
      #
    
    The maximum length of the %d replacement is 11 characters because of the
    negative sign.  Therefore extend the array by two more characters.
    
    Output after:
    
      # make  DEBUG=y bench/numa.o > /dev/null 2>&1; ll bench/numa.o
      -rw-r--r-- 1 root root 418320 May 19 09:11 bench/numa.o
      #
    
    Fixes: 3aff8ba0a4c9c919 ("perf bench numa: Avoid possible truncation when using snprintf()")
    Suggested-by: Namhyung Kim <namhyung@gmail.com>
    Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Sumanth Korikkar <sumanthk@linux.ibm.com>
    Cc: Sven Schnelle <svens@linux.ibm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220520081158.2990006-1-tmricht@linux.ibm.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
perf: Fix sys_perf_event_open() race against self [+ + +]
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Fri May 20 20:38:06 2022 +0200

    perf: Fix sys_perf_event_open() race against self
    
    commit 3ac6487e584a1eb54071dbe1212e05b884136704 upstream.
    
    Norbert reported that it's possible to race sys_perf_event_open() such
    that the looser ends up in another context from the group leader,
    triggering many WARNs.
    
    The move_group case checks for races against itself, but the
    !move_group case doesn't, seemingly relying on the previous
    group_leader->ctx == ctx check. However, that check is racy due to not
    holding any locks at that time.
    
    Therefore, re-check the result after acquiring locks and bailing
    if they no longer match.
    
    Additionally, clarify the not_move_group case from the
    move_group-vs-move_group race.
    
    Fixes: f63a8daa5812 ("perf: Fix event->ctx locking")
    Reported-by: Norbert Slusarek <nslusarek@gmx.net>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Reinstate some of "swiotlb: rework "fix info leak with DMA_FROM_DEVICE"" [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon Mar 28 11:37:05 2022 -0700

    Reinstate some of "swiotlb: rework "fix info leak with DMA_FROM_DEVICE""
    
    commit 901c7280ca0d5e2b4a8929fbe0bfb007ac2a6544 upstream.
    
    Halil Pasic points out [1] that the full revert of that commit (revert
    in bddac7c1e02b), and that a partial revert that only reverts the
    problematic case, but still keeps some of the cleanups is probably
    better.  
    
    And that partial revert [2] had already been verified by Oleksandr
    Natalenko to also fix the issue, I had just missed that in the long
    discussion.
    
    So let's reinstate the cleanups from commit aa6f8dcbab47 ("swiotlb:
    rework "fix info leak with DMA_FROM_DEVICE""), and effectively only
    revert the part that caused problems.
    
    Link: https://lore.kernel.org/all/20220328013731.017ae3e3.pasic@linux.ibm.com/ [1]
    Link: https://lore.kernel.org/all/20220324055732.GB12078@lst.de/ [2]
    Link: https://lore.kernel.org/all/4386660.LvFx2qVVIh@natalenko.name/ [3]
    Suggested-by: Halil Pasic <pasic@linux.ibm.com>
    Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
    Cc: Christoph Hellwig" <hch@lst.de>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [OP: backport to 4.19: adjusted context]
    Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: qla2xxx: Fix missed DMA unmap for aborted commands [+ + +]
Author: Gleb Chesnokov <Chesnokov.G@raidix.com>
Date:   Fri Apr 15 12:42:29 2022 +0000

    scsi: qla2xxx: Fix missed DMA unmap for aborted commands
    
    [ Upstream commit 26f9ce53817a8fd84b69a73473a7de852a24c897 ]
    
    Aborting commands that have already been sent to the firmware can
    cause BUG in qlt_free_cmd(): BUG_ON(cmd->sg_mapped)
    
    For instance:
    
     - Command passes rdx_to_xfer state, maps sgl, sends to the firmware
    
     - Reset occurs, qla2xxx performs ISP error recovery, aborts the command
    
     - Target stack calls qlt_abort_cmd() and then qlt_free_cmd()
    
     - BUG_ON(cmd->sg_mapped) in qlt_free_cmd() occurs because sgl was not
       unmapped
    
    Thus, unmap sgl in qlt_abort_cmd() for commands with the aborted flag set.
    
    Link: https://lore.kernel.org/r/AS8PR10MB4952D545F84B6B1DFD39EC1E9DEE9@AS8PR10MB4952.EURPRD10.PROD.OUTLOOK.COM
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Gleb Chesnokov <Chesnokov.G@raidix.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
swiotlb: fix info leak with DMA_FROM_DEVICE [+ + +]
Author: Halil Pasic <pasic@linux.ibm.com>
Date:   Fri Feb 11 02:12:52 2022 +0100

    swiotlb: fix info leak with DMA_FROM_DEVICE
    
    commit ddbd89deb7d32b1fbb879f48d68fda1a8ac58e8e upstream.
    
    The problem I'm addressing was discovered by the LTP test covering
    cve-2018-1000204.
    
    A short description of what happens follows:
    1) The test case issues a command code 00 (TEST UNIT READY) via the SG_IO
       interface with: dxfer_len == 524288, dxdfer_dir == SG_DXFER_FROM_DEV
       and a corresponding dxferp. The peculiar thing about this is that TUR
       is not reading from the device.
    2) In sg_start_req() the invocation of blk_rq_map_user() effectively
       bounces the user-space buffer. As if the device was to transfer into
       it. Since commit a45b599ad808 ("scsi: sg: allocate with __GFP_ZERO in
       sg_build_indirect()") we make sure this first bounce buffer is
       allocated with GFP_ZERO.
    3) For the rest of the story we keep ignoring that we have a TUR, so the
       device won't touch the buffer we prepare as if the we had a
       DMA_FROM_DEVICE type of situation. My setup uses a virtio-scsi device
       and the  buffer allocated by SG is mapped by the function
       virtqueue_add_split() which uses DMA_FROM_DEVICE for the "in" sgs (here
       scatter-gather and not scsi generics). This mapping involves bouncing
       via the swiotlb (we need swiotlb to do virtio in protected guest like
       s390 Secure Execution, or AMD SEV).
    4) When the SCSI TUR is done, we first copy back the content of the second
       (that is swiotlb) bounce buffer (which most likely contains some
       previous IO data), to the first bounce buffer, which contains all
       zeros.  Then we copy back the content of the first bounce buffer to
       the user-space buffer.
    5) The test case detects that the buffer, which it zero-initialized,
      ain't all zeros and fails.
    
    One can argue that this is an swiotlb problem, because without swiotlb
    we leak all zeros, and the swiotlb should be transparent in a sense that
    it does not affect the outcome (if all other participants are well
    behaved).
    
    Copying the content of the original buffer into the swiotlb buffer is
    the only way I can think of to make swiotlb transparent in such
    scenarios. So let's do just that if in doubt, but allow the driver
    to tell us that the whole mapped buffer is going to be overwritten,
    in which case we can preserve the old behavior and avoid the performance
    impact of the extra bounce.
    
    Signed-off-by: Halil Pasic <pasic@linux.ibm.com>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    [OP: backport to 4.19: adjusted context]
    Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
um: Cleanup syscall_handler_t definition/cast, fix warning [+ + +]
Author: David Gow <davidgow@google.com>
Date:   Thu Feb 10 11:43:53 2022 +0800

    um: Cleanup syscall_handler_t definition/cast, fix warning
    
    [ Upstream commit f4f03f299a56ce4d73c5431e0327b3b6cb55ebb9 ]
    
    The syscall_handler_t type for x86_64 was defined as 'long (*)(void)',
    but always cast to 'long (*)(long, long, long, long, long, long)' before
    use. This now triggers a warning (see below).
    
    Define syscall_handler_t as the latter instead, and remove the cast.
    This simplifies the code, and fixes the warning.
    
    Warning:
    In file included from ../arch/um/include/asm/processor-generic.h:13
                     from ../arch/x86/um/asm/processor.h:41
                     from ../include/linux/rcupdate.h:30
                     from ../include/linux/rculist.h:11
                     from ../include/linux/pid.h:5
                     from ../include/linux/sched.h:14
                     from ../include/linux/ptrace.h:6
                     from ../arch/um/kernel/skas/syscall.c:7:
    ../arch/um/kernel/skas/syscall.c: In function ‘handle_syscall’:
    ../arch/x86/um/shared/sysdep/syscalls_64.h:18:11: warning: cast between incompatible function types from ‘long int (*)(void)’ to ‘long int (*)(long int,  long int,  long int,  long int,  long int,  long int)’ [
    -Wcast-function-type]
       18 |         (((long (*)(long, long, long, long, long, long)) \
          |           ^
    ../arch/x86/um/asm/ptrace.h:36:62: note: in definition of macro ‘PT_REGS_SET_SYSCALL_RETURN’
       36 | #define PT_REGS_SET_SYSCALL_RETURN(r, res) (PT_REGS_AX(r) = (res))
          |                                                              ^~~
    ../arch/um/kernel/skas/syscall.c:46:33: note: in expansion of macro ‘EXECUTE_SYSCALL’
       46 |                                 EXECUTE_SYSCALL(syscall, regs));
          |                                 ^~~~~~~~~~~~~~~
    
    Signed-off-by: David Gow <davidgow@google.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>