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

 
9p/fd: fix issue of list_del corruption in p9_fd_cancel() [+ + +]
Author: Zhengchao Shao <shaozhengchao@huawei.com>
Date:   Thu Nov 10 20:26:06 2022 +0800

    9p/fd: fix issue of list_del corruption in p9_fd_cancel()
    
    [ Upstream commit 11c10956515b8ec44cf4f2a7b9d8bf8b9dc05ec4 ]
    
    Syz reported the following issue:
    kernel BUG at lib/list_debug.c:53!
    invalid opcode: 0000 [#1] PREEMPT SMP KASAN
    RIP: 0010:__list_del_entry_valid.cold+0x5c/0x72
    Call Trace:
    <TASK>
    p9_fd_cancel+0xb1/0x270
    p9_client_rpc+0x8ea/0xba0
    p9_client_create+0x9c0/0xed0
    v9fs_session_init+0x1e0/0x1620
    v9fs_mount+0xba/0xb80
    legacy_get_tree+0x103/0x200
    vfs_get_tree+0x89/0x2d0
    path_mount+0x4c0/0x1ac0
    __x64_sys_mount+0x33b/0x430
    do_syscall_64+0x35/0x80
    entry_SYSCALL_64_after_hwframe+0x46/0xb0
    </TASK>
    
    The process is as follows:
    Thread A:                       Thread B:
    p9_poll_workfn()                p9_client_create()
    ...                                 ...
        p9_conn_cancel()                p9_fd_cancel()
            list_del()                      ...
            ...                             list_del()  //list_del
                                                          corruption
    There is no lock protection when deleting list in p9_conn_cancel(). After
    deleting list in Thread A, thread B will delete the same list again. It
    will cause issue of list_del corruption.
    
    Setting req->status to REQ_STATUS_ERROR under lock prevents other
    cleanup paths from trying to manipulate req_list.
    The other thread can safely check req->status because it still holds a
    reference to req at this point.
    
    Link: https://lkml.kernel.org/r/20221110122606.383352-1-shaozhengchao@huawei.com
    Fixes: 52f1c45dde91 ("9p: trans_fd/p9_conn_cancel: drop client lock earlier")
    Reported-by: syzbot+9b69b8d10ab4a7d88056@syzkaller.appspotmail.com
    Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
    [Dominique: add description of the fix in commit message]
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
af_key: Fix send_acquire race with pfkey_register [+ + +]
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Tue Oct 25 14:06:48 2022 +0800

    af_key: Fix send_acquire race with pfkey_register
    
    [ Upstream commit 7f57f8165cb6d2c206e2b9ada53b9e2d6d8af42f ]
    
    The function pfkey_send_acquire may race with pfkey_register
    (which could even be in a different name space).  This may result
    in a buffer overrun.
    
    Allocating the maximum amount of memory that could be used prevents
    this.
    
    Reported-by: syzbot+1e9af9185d8850e2c2fa@syzkaller.appspotmail.com
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
afs: Fix fileserver probe RTT handling [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Mon Nov 28 22:02:56 2022 +0000

    afs: Fix fileserver probe RTT handling
    
    [ Upstream commit ca57f02295f188d6c65ec02202402979880fa6d8 ]
    
    The fileserver probing code attempts to work out the best fileserver to
    use for a volume by retrieving the RTT calculated by AF_RXRPC for the
    probe call sent to each server and comparing them.  Sometimes, however,
    no RTT estimate is available and rxrpc_kernel_get_srtt() returns false,
    leading good fileservers to be given an RTT of UINT_MAX and thus causing
    the rotation algorithm to ignore them.
    
    Fix afs_select_fileserver() to ignore rxrpc_kernel_get_srtt()'s return
    value and just take the estimated RTT it provides - which will be capped
    at 1 second.
    
    Fixes: 1d4adfaf6574 ("rxrpc: Make rxrpc_kernel_get_srtt() indicate validity")
    Signed-off-by: David Howells <dhowells@redhat.com>
    Reviewed-by: Marc Dionne <marc.dionne@auristor.com>
    Tested-by: Marc Dionne <marc.dionne@auristor.com>
    cc: linux-afs@lists.infradead.org
    Link: https://lore.kernel.org/r/166965503999.3392585.13954054113218099395.stgit@warthog.procyon.org.uk/
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64/syscall: Include asm/ptrace.h in syscall_wrapper header. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Mon Oct 31 14:57:28 2022 -0700

    arm64/syscall: Include asm/ptrace.h in syscall_wrapper header.
    
    [ Upstream commit acfc35cfcee5df419391671ef1a631f43feee4e3 ]
    
    Add the same change for ARM64 as done in the commit 9440c4294160
    ("x86/syscall: Include asm/ptrace.h in syscall_wrapper header") to
    make sure all syscalls see 'struct pt_regs' definition and resulted
    BTF for '__arm64_sys_*(struct pt_regs *regs)' functions point to
    actual struct.
    
    Without this patch, the BPF verifier refuses to load a tracing prog
    which accesses pt_regs.
    
      bpf(BPF_PROG_LOAD, {prog_type=0x1a, ...}, 128) = -1 EACCES
    
    With this patch, we can see the correct error, which saves us time
    in debugging the prog.
    
      bpf(BPF_PROG_LOAD, {prog_type=0x1a, ...}, 128) = 4
      bpf(BPF_RAW_TRACEPOINT_OPEN, {raw_tracepoint={name=NULL, prog_fd=4}}, 128) = -1 ENOTSUPP
    
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20221031215728.50389-1-kuniyu@amazon.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: rockchip: lower rk3399-puma-haikou SD controller clock frequency [+ + +]
Author: Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>
Date:   Wed Oct 19 16:27:27 2022 +0200

    arm64: dts: rockchip: lower rk3399-puma-haikou SD controller clock frequency
    
    commit 91e8b74fe6381e083f8aa55217bb0562785ab398 upstream.
    
    CRC errors (code -84 EILSEQ) have been observed for some SanDisk
    Ultra A1 cards when running at 50MHz.
    
    Waveform analysis suggest that the level shifters that are used on the
    RK3399-Q7 module for voltage translation between 3.0 and 3.3V don't
    handle clock rates at or above 48MHz properly. Back off to 40MHz for
    some safety margin.
    
    Cc: stable@vger.kernel.org
    Fixes: 60fd9f72ce8a ("arm64: dts: rockchip: add Haikou baseboard with RK3399-Q7 SoM")
    Signed-off-by: Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>
    Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
    Link: https://lore.kernel.org/r/20221019-upstream-puma-sd-40mhz-v1-0-754a76421518@theobroma-systems.com
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: errata: Fix KVM Spectre-v2 mitigation selection for Cortex-A57/A72 [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Wed Nov 30 18:28:19 2022 +0000

    arm64: errata: Fix KVM Spectre-v2 mitigation selection for Cortex-A57/A72
    
    Both the Spectre-v2 and Spectre-BHB mitigations involve running a sequence
    immediately after exiting a guest, before any branches. In the stable
    kernels these sequences are built by copying templates into an empty vector
    slot.
    
    For Spectre-BHB, Cortex-A57 and A72 require the branchy loop with k=8.
    If Spectre-v2 needs mitigating at the same time, a firmware call to EL3 is
    needed. The work EL3 does at this point is also enough to mitigate
    Spectre-BHB.
    
    When enabling the Spectre-BHB mitigation, spectre_bhb_enable_mitigation()
    should check if a slot has already been allocated for Spectre-v2, meaning
    no work is needed for Spectre-BHB.
    
    This check was missed in the earlier backport, add it.
    
    Fixes: 9013fd4bc958 ("arm64: Mitigate spectre style branch history side channels")
    Signed-off-by: James Morse <james.morse@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: Fix panic() when Spectre-v2 causes Spectre-BHB to re-allocate KVM vectors [+ + +]
Author: James Morse <james.morse@arm.com>
Date:   Wed Nov 30 18:28:18 2022 +0000

    arm64: Fix panic() when Spectre-v2 causes Spectre-BHB to re-allocate KVM vectors
    
    Sami reports that linux panic()s when resuming from suspend to RAM. This
    is because when CPUs are brought back online, they re-enable any
    necessary mitigations.
    
    The Spectre-v2 and Spectre-BHB mitigations interact as both need to
    done by KVM when exiting a guest. Slots KVM can use as vectors are
    allocated, and templates for the mitigation are patched into the vector.
    
    This fails if a new slot needs to be allocated once the kernel has finished
    booting as it is no-longer possible to modify KVM's vectors:
    | root@adam:/sys/devices/system/cpu/cpu1# echo 1 > online
    | Unable to handle kernel write to read-only memory at virtual add>
    | Mem abort info:
    |   ESR = 0x9600004e
    |   Exception class = DABT (current EL), IL = 32 bits
    |   SET = 0, FnV = 0
    |   EA = 0, S1PTW = 0
    | Data abort info:
    |   ISV = 0, ISS = 0x0000004e
    |   CM = 0, WnR = 1
    | swapper pgtable: 4k pages, 48-bit VAs, pgdp = 000000000f07a71c
    | [ffff800000b4b800] pgd=00000009ffff8803, pud=00000009ffff7803, p>
    | Internal error: Oops: 9600004e [#1] PREEMPT SMP
    | Modules linked in:
    | Process swapper/1 (pid: 0, stack limit = 0x0000000063153c53)
    | CPU: 1 PID: 0 Comm: swapper/1 Not tainted 4.19.252-dirty #14
    | Hardware name: ARM LTD ARM Juno Development Platform/ARM Juno De>
    | pstate: 000001c5 (nzcv dAIF -PAN -UAO)
    | pc : __memcpy+0x48/0x180
    | lr : __copy_hyp_vect_bpi+0x64/0x90
    
    | Call trace:
    |  __memcpy+0x48/0x180
    |  kvm_setup_bhb_slot+0x204/0x2a8
    |  spectre_bhb_enable_mitigation+0x1b8/0x1d0
    |  __verify_local_cpu_caps+0x54/0xf0
    |  check_local_cpu_capabilities+0xc4/0x184
    |  secondary_start_kernel+0xb0/0x170
    | Code: b8404423 b80044c3 36180064 f8408423 (f80084c3)
    | ---[ end trace 859bcacb09555348 ]---
    | Kernel panic - not syncing: Attempted to kill the idle task!
    | SMP: stopping secondary CPUs
    | Kernel Offset: disabled
    | CPU features: 0x10,25806086
    | Memory Limit: none
    | ---[ end Kernel panic - not syncing: Attempted to kill the idle ]
    
    This is only a problem on platforms where there is only one CPU that is
    vulnerable to both Spectre-v2 and Spectre-BHB.
    
    The Spectre-v2 mitigation identifies the slot it can re-use by the CPU's
    'fn'. It unconditionally writes the slot number and 'template_start'
    pointer. The Spectre-BHB mitigation identifies slots it can re-use by
    the CPU's template_start pointer, which was previously clobbered by the
    Spectre-v2 mitigation.
    
    When there is only one CPU that is vulnerable to both issues, this causes
    Spectre-v2 to try to allocate a new slot, which fails.
    
    Change both mitigations to check whether they are changing the slot this
    CPU uses before writing the percpu variables again.
    
    This issue only exists in the stable backports for Spectre-BHB which have
    to use totally different infrastructure to mainline.
    
    Reported-by: Sami Lee <sami.lee@mediatek.com>
    Fixes: 9013fd4bc958 ("arm64: Mitigate spectre style branch history side channels")
    Signed-off-by: James Morse <james.morse@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ARM: dts: am335x-pcm-953: Define fixed regulators in root node [+ + +]
Author: Dominik Haller <d.haller@phytec.de>
Date:   Tue Oct 11 16:31:15 2022 +0200

    ARM: dts: am335x-pcm-953: Define fixed regulators in root node
    
    [ Upstream commit 8950f345a67d8046d2472dd6ea81fa18ef5b4844 ]
    
    Remove the regulators node and define fixed regulators in the root node.
    Prevents the sdhci-omap driver from waiting in probe deferral forever
    because of the missing vmmc-supply and keeps am335x-pcm-953 consistent with
    the other Phytec AM335 boards.
    
    Fixes: bb07a829ec38 ("ARM: dts: Add support for phyCORE-AM335x PCM-953 carrier board")
    Signed-off-by: Dominik Haller <d.haller@phytec.de>
    Message-Id: <20221011143115.248003-1-d.haller@phytec.de>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: dts: at91: sam9g20ek: enable udc vbus gpio pinctrl [+ + +]
Author: Michael Grzeschik <m.grzeschik@pengutronix.de>
Date:   Mon Nov 14 19:59:23 2022 +0100

    ARM: dts: at91: sam9g20ek: enable udc vbus gpio pinctrl
    
    [ Upstream commit 40a2226e8bfacb79dd154dea68febeead9d847e9 ]
    
    We set the PIOC to GPIO mode. This way the pin becomes an
    input signal will be usable by the controller. Without
    this change the udc on the 9g20ek does not work.
    
    Cc: nicolas.ferre@microchip.com
    Cc: ludovic.desroches@microchip.com
    Cc: alexandre.belloni@bootlin.com
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: kernel@pengutronix.de
    Fixes: 5cb4e73575e3 ("ARM: at91: add at91sam9g20ek boards dt support")
    Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Link: https://lore.kernel.org/r/20221114185923.1023249-3-m.grzeschik@pengutronix.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ARM: mxs: fix memory leak in mxs_machine_init() [+ + +]
Author: Zheng Yongjun <zhengyongjun3@huawei.com>
Date:   Thu Nov 17 06:20:11 2022 +0000

    ARM: mxs: fix memory leak in mxs_machine_init()
    
    [ Upstream commit f31e3c204d1844b8680a442a48868af5ac3d5481 ]
    
    If of_property_read_string() failed, 'soc_dev_attr' should be
    freed before return. Otherwise there is a memory leak.
    
    Fixes: 2046338dcbc6 ("ARM: mxs: Use soc bus infrastructure")
    Signed-off-by: Zheng Yongjun <zhengyongjun3@huawei.com>
    Reviewed-by: Marco Felsch <m.felsch@pengutronix.de>
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: Intel: bytcht_es8316: Add quirk for the Nanote UMPC-01 [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Oct 25 16:09:42 2022 +0200

    ASoC: Intel: bytcht_es8316: Add quirk for the Nanote UMPC-01
    
    [ Upstream commit 8bb0ac0e6f64ebdf15d963c26b028de391c9bcf9 ]
    
    The Nanote UMPC-01 mini laptop has stereo speakers, while the default
    bytcht_es8316 settings assume a mono speaker setup. Add a quirk for this.
    
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20221025140942.509066-1-hdegoede@redhat.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: ops: Fix bounds check for _sx controls [+ + +]
Author: Mark Brown <broonie@kernel.org>
Date:   Wed May 11 14:41:36 2022 +0100

    ASoC: ops: Fix bounds check for _sx controls
    
    [ Upstream commit 698813ba8c580efb356ace8dbf55f61dac6063a8 ]
    
    For _sx controls the semantics of the max field is not the usual one, max
    is the number of steps rather than the maximum value. This means that our
    check in snd_soc_put_volsw_sx() needs to just check against the maximum
    value.
    
    Fixes: 4f1e50d6a9cf9c1b ("ASoC: ops: Reject out of bounds values in snd_soc_put_volsw_sx()")
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20220511134137.169575-1-broonie@kernel.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: sgtl5000: Reset the CHIP_CLK_CTRL reg on remove [+ + +]
Author: Detlev Casanova <detlev.casanova@collabora.com>
Date:   Thu Nov 10 14:06:12 2022 -0500

    ASoC: sgtl5000: Reset the CHIP_CLK_CTRL reg on remove
    
    [ Upstream commit 0bb8e9b36b5b7f2e77892981ff6c27ee831d8026 ]
    
    Since commit bf2aebccddef ("ASoC: sgtl5000: Fix noise on shutdown/remove"),
    the device power control registers are reset when the driver is
    removed/shutdown.
    
    This is an issue when the device is configured to use the PLL clock. The
    device will stop responding if it is still configured to use the PLL
    clock but the PLL clock is powered down.
    
    When rebooting linux, the probe function will show:
    sgtl5000 0-000a: Error reading chip id -11
    
    Make sure that the CHIP_CLK_CTRL is reset to its default value before
    powering down the device.
    
    Fixes: bf2aebccddef ("ASoC: sgtl5000: Fix noise on shutdown/remove")
    Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
    Reviewed-by: Fabio Estevam <festevam@gmail.com>
    Link: https://lore.kernel.org/r/20221110190612.1341469-1-detlev.casanova@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
audit: fix undefined behavior in bit shift for AUDIT_BIT [+ + +]
Author: Gaosheng Cui <cuigaosheng1@huawei.com>
Date:   Mon Oct 31 10:10:21 2022 +0800

    audit: fix undefined behavior in bit shift for AUDIT_BIT
    
    [ Upstream commit 986d93f55bdeab1cac858d1e47b41fac10b2d7f6 ]
    
    Shifting signed 32-bit value by 31 bits is undefined, so changing
    significant bit to unsigned. The UBSAN warning calltrace like below:
    
    UBSAN: shift-out-of-bounds in kernel/auditfilter.c:179:23
    left shift of 1 by 31 places cannot be represented in type 'int'
    Call Trace:
     <TASK>
     dump_stack_lvl+0x7d/0xa5
     dump_stack+0x15/0x1b
     ubsan_epilogue+0xe/0x4e
     __ubsan_handle_shift_out_of_bounds+0x1e7/0x20c
     audit_register_class+0x9d/0x137
     audit_classes_init+0x4d/0xb8
     do_one_initcall+0x76/0x430
     kernel_init_freeable+0x3b3/0x422
     kernel_init+0x24/0x1e0
     ret_from_fork+0x1f/0x30
     </TASK>
    
    Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
    [PM: remove bad 'Fixes' tag as issue predates git, added in v2.6.6-rc1]
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
binder: Address corner cases in deferred copy and fixup [+ + +]
Author: Alessandro Astone <ales.astone@gmail.com>
Date:   Wed Nov 30 03:58:04 2022 +0000

    binder: Address corner cases in deferred copy and fixup
    
    commit 2d1746e3fda0c3612143d7c06f8e1d1830c13e23 upstream.
    
    When handling BINDER_TYPE_FDA object we are pushing a parent fixup
    with a certain skip_size but no scatter-gather copy object, since
    the copy is handled standalone.
    If BINDER_TYPE_FDA is the last children the scatter-gather copy
    loop will never stop to skip it, thus we are left with an item in
    the parent fixup list. This will trigger the BUG_ON().
    
    This is reproducible in android when playing a video.
    We receive a transaction that looks like this:
        obj[0] BINDER_TYPE_PTR, parent
        obj[1] BINDER_TYPE_PTR, child
        obj[2] BINDER_TYPE_PTR, child
        obj[3] BINDER_TYPE_FDA, child
    
    Fixes: 09184ae9b575 ("binder: defer copies of pre-patched txn data")
    Acked-by: Todd Kjos <tkjos@google.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Alessandro Astone <ales.astone@gmail.com>
    Link: https://lore.kernel.org/r/20220415120015.52684-2-ales.astone@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

binder: avoid potential data leakage when copying txn [+ + +]
Author: Todd Kjos <tkjos@google.com>
Date:   Wed Nov 30 03:58:00 2022 +0000

    binder: avoid potential data leakage when copying txn
    
    commit 6d98eb95b450a75adb4516a1d33652dc78d2b20c upstream.
    
    Transactions are copied from the sender to the target
    first and objects like BINDER_TYPE_PTR and BINDER_TYPE_FDA
    are then fixed up. This means there is a short period where
    the sender's version of these objects are visible to the
    target prior to the fixups.
    
    Instead of copying all of the data first, copy data only
    after any needed fixups have been applied.
    
    Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
    Reviewed-by: Martijn Coenen <maco@android.com>
    Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
    Signed-off-by: Todd Kjos <tkjos@google.com>
    Link: https://lore.kernel.org/r/20211130185152.437403-3-tkjos@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [cmllamas: fix trivial merge conflict]
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

binder: defer copies of pre-patched txn data [+ + +]
Author: Todd Kjos <tkjos@google.com>
Date:   Wed Nov 30 03:58:02 2022 +0000

    binder: defer copies of pre-patched txn data
    
    commit 09184ae9b5756cc469db6fd1d1cfdcffbf627c2d upstream.
    
    BINDER_TYPE_PTR objects point to memory areas in the
    source process to be copied into the target buffer
    as part of a transaction. This implements a scatter-
    gather model where non-contiguous memory in a source
    process is "gathered" into a contiguous region in
    the target buffer.
    
    The data can include pointers that must be fixed up
    to correctly point to the copied data. To avoid making
    source process pointers visible to the target process,
    this patch defers the copy until the fixups are known
    and then copies and fixeups are done together.
    
    There is a special case of BINDER_TYPE_FDA which applies
    the fixup later in the target process context. In this
    case the user data is skipped (so no untranslated fds
    become visible to the target).
    
    Reviewed-by: Martijn Coenen <maco@android.com>
    Signed-off-by: Todd Kjos <tkjos@google.com>
    Link: https://lore.kernel.org/r/20211130185152.437403-5-tkjos@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [cmllamas: fix trivial merge conflict]
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

binder: fix pointer cast warning [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Nov 30 03:58:03 2022 +0000

    binder: fix pointer cast warning
    
    commit 9a0a930fe2535a76ad70d3f43caeccf0d86a3009 upstream.
    
    binder_uintptr_t is not the same as uintptr_t, so converting it into a
    pointer requires a second cast:
    
    drivers/android/binder.c: In function 'binder_translate_fd_array':
    drivers/android/binder.c:2511:28: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
     2511 |         sender_ufda_base = (void __user *)sender_uparent->buffer + fda->parent_offset;
          |                            ^
    
    Fixes: 656e01f3ab54 ("binder: read pre-translated fds from sender buffer")
    Acked-by: Todd Kjos <tkjos@google.com>
    Acked-by: Randy Dunlap <rdunlap@infradead.org> # build-tested
    Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20211207122448.1185769-1-arnd@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

binder: Gracefully handle BINDER_TYPE_FDA objects with num_fds=0 [+ + +]
Author: Alessandro Astone <ales.astone@gmail.com>
Date:   Wed Nov 30 03:58:05 2022 +0000

    binder: Gracefully handle BINDER_TYPE_FDA objects with num_fds=0
    
    commit ef38de9217a04c9077629a24652689d8fdb4c6c6 upstream.
    
    Some android userspace is sending BINDER_TYPE_FDA objects with
    num_fds=0. Like the previous patch, this is reproducible when
    playing a video.
    
    Before commit 09184ae9b575 BINDER_TYPE_FDA objects with num_fds=0
    were 'correctly handled', as in no fixup was performed.
    
    After commit 09184ae9b575 we aggregate fixup and skip regions in
    binder_ptr_fixup structs and distinguish between the two by using
    the skip_size field: if it's 0, then it's a fixup, otherwise skip.
    When processing BINDER_TYPE_FDA objects with num_fds=0 we add a
    skip region of skip_size=0, and this causes issues because now
    binder_do_deferred_txn_copies will think this was a fixup region.
    
    To address that, return early from binder_translate_fd_array to
    avoid adding an empty skip region.
    
    Fixes: 09184ae9b575 ("binder: defer copies of pre-patched txn data")
    Acked-by: Todd Kjos <tkjos@google.com>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Alessandro Astone <ales.astone@gmail.com>
    Link: https://lore.kernel.org/r/20220415120015.52684-1-ales.astone@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

binder: read pre-translated fds from sender buffer [+ + +]
Author: Todd Kjos <tkjos@google.com>
Date:   Wed Nov 30 03:58:01 2022 +0000

    binder: read pre-translated fds from sender buffer
    
    commit 656e01f3ab54afe71bed066996fc2640881e1220 upstream.
    
    This patch is to prepare for an up coming patch where we read
    pre-translated fds from the sender buffer and translate them before
    copying them to the target.  It does not change run time.
    
    The patch adds two new parameters to binder_translate_fd_array() to
    hold the sender buffer and sender buffer parent.  These parameters let
    us call copy_from_user() directly from the sender instead of using
    binder_alloc_copy_from_buffer() to copy from the target.  Also the patch
    adds some new alignment checks.  Previously the alignment checks would
    have been done in a different place, but this lets us print more
    useful error messages.
    
    Reviewed-by: Martijn Coenen <maco@android.com>
    Acked-by: Christian Brauner <christian.brauner@ubuntu.com>
    Signed-off-by: Todd Kjos <tkjos@google.com>
    Link: https://lore.kernel.org/r/20211130185152.437403-4-tkjos@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block, bfq: fix null pointer dereference in bfq_bio_bfqg() [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Tue Nov 8 18:34:34 2022 +0800

    block, bfq: fix null pointer dereference in bfq_bio_bfqg()
    
    [ Upstream commit f02be9002c480cd3ec0fcf184ad27cf531bd6ece ]
    
    Out test found a following problem in kernel 5.10, and the same problem
    should exist in mainline:
    
    BUG: kernel NULL pointer dereference, address: 0000000000000094
    PGD 0 P4D 0
    Oops: 0000 [#1] SMP
    CPU: 7 PID: 155 Comm: kworker/7:1 Not tainted 5.10.0-01932-g19e0ace2ca1d-dirty 4
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS ?-20190727_073836-b4
    Workqueue: kthrotld blk_throtl_dispatch_work_fn
    RIP: 0010:bfq_bio_bfqg+0x52/0xc0
    Code: 94 00 00 00 00 75 2e 48 8b 40 30 48 83 05 35 06 c8 0b 01 48 85 c0 74 3d 4b
    RSP: 0018:ffffc90001a1fba0 EFLAGS: 00010002
    RAX: ffff888100d60400 RBX: ffff8881132e7000 RCX: 0000000000000000
    RDX: 0000000000000017 RSI: ffff888103580a18 RDI: ffff888103580a18
    RBP: ffff8881132e7000 R08: 0000000000000000 R09: ffffc90001a1fe10
    R10: 0000000000000a20 R11: 0000000000034320 R12: 0000000000000000
    R13: ffff888103580a18 R14: ffff888114447000 R15: 0000000000000000
    FS:  0000000000000000(0000) GS:ffff88881fdc0000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000094 CR3: 0000000100cdb000 CR4: 00000000000006e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     bfq_bic_update_cgroup+0x3c/0x350
     ? ioc_create_icq+0x42/0x270
     bfq_init_rq+0xfd/0x1060
     bfq_insert_requests+0x20f/0x1cc0
     ? ioc_create_icq+0x122/0x270
     blk_mq_sched_insert_requests+0x86/0x1d0
     blk_mq_flush_plug_list+0x193/0x2a0
     blk_flush_plug_list+0x127/0x170
     blk_finish_plug+0x31/0x50
     blk_throtl_dispatch_work_fn+0x151/0x190
     process_one_work+0x27c/0x5f0
     worker_thread+0x28b/0x6b0
     ? rescuer_thread+0x590/0x590
     kthread+0x153/0x1b0
     ? kthread_flush_work+0x170/0x170
     ret_from_fork+0x1f/0x30
    Modules linked in:
    CR2: 0000000000000094
    ---[ end trace e2e59ac014314547 ]---
    RIP: 0010:bfq_bio_bfqg+0x52/0xc0
    Code: 94 00 00 00 00 75 2e 48 8b 40 30 48 83 05 35 06 c8 0b 01 48 85 c0 74 3d 4b
    RSP: 0018:ffffc90001a1fba0 EFLAGS: 00010002
    RAX: ffff888100d60400 RBX: ffff8881132e7000 RCX: 0000000000000000
    RDX: 0000000000000017 RSI: ffff888103580a18 RDI: ffff888103580a18
    RBP: ffff8881132e7000 R08: 0000000000000000 R09: ffffc90001a1fe10
    R10: 0000000000000a20 R11: 0000000000034320 R12: 0000000000000000
    R13: ffff888103580a18 R14: ffff888114447000 R15: 0000000000000000
    FS:  0000000000000000(0000) GS:ffff88881fdc0000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000094 CR3: 0000000100cdb000 CR4: 00000000000006e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    
    Root cause is quite complex:
    
    1) use bfq elevator for the test device.
    2) create a cgroup CG
    3) config blk throtl in CG
    
       blkg_conf_prep
        blkg_create
    
    4) create a thread T1 and issue async io in CG:
    
       bio_init
        bio_associate_blkg
       ...
       submit_bio
        submit_bio_noacct
         blk_throtl_bio -> io is throttled
         // io submit is done
    
    5) switch elevator:
    
       bfq_exit_queue
        blkcg_deactivate_policy
         list_for_each_entry(blkg, &q->blkg_list, q_node)
          blkg->pd[] = NULL
          // bfq policy is removed
    
    5) thread t1 exist, then remove the cgroup CG:
    
       blkcg_unpin_online
        blkcg_destroy_blkgs
         blkg_destroy
          list_del_init(&blkg->q_node)
          // blkg is removed from queue list
    
    6) switch elevator back to bfq
    
     bfq_init_queue
      bfq_create_group_hierarchy
       blkcg_activate_policy
        list_for_each_entry_reverse(blkg, &q->blkg_list)
         // blkg is removed from list, hence bfq policy is still NULL
    
    7) throttled io is dispatched to bfq:
    
     bfq_insert_requests
      bfq_init_rq
       bfq_bic_update_cgroup
        bfq_bio_bfqg
         bfqg = blkg_to_bfqg(blkg)
         // bfqg is NULL because bfq policy is NULL
    
    The problem is only possible in bfq because only bfq can be deactivated and
    activated while queue is online, while others can only be deactivated while
    the device is removed.
    
    Fix the problem in bfq by checking if blkg is online before calling
    blkg_to_bfqg().
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20221108103434.2853269-1-yukuai1@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: L2CAP: Fix accepting connection request for invalid SPSM [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Oct 31 16:10:32 2022 -0700

    Bluetooth: L2CAP: Fix accepting connection request for invalid SPSM
    
    commit 711f8c3fb3db61897080468586b970c87c61d9e4 upstream.
    
    The Bluetooth spec states that the valid range for SPSM is from
    0x0001-0x00ff so it is invalid to accept values outside of this range:
    
      BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 3, Part A
      page 1059:
      Table 4.15: L2CAP_LE_CREDIT_BASED_CONNECTION_REQ SPSM ranges
    
    CVE: CVE-2022-42896
    CC: stable@vger.kernel.org
    Reported-by: Tamás Koczka <poprdi@google.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Reviewed-by: Tedd Ho-Jeong An <tedd.an@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bnx2x: fix pci device refcount leak in bnx2x_vf_is_pcie_pending() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Sat Nov 19 15:02:02 2022 +0800

    bnx2x: fix pci device refcount leak in bnx2x_vf_is_pcie_pending()
    
    [ Upstream commit 3637a29ccbb6461b7268c5c5db525935d510afc6 ]
    
    As comment of pci_get_domain_bus_and_slot() says, it returns
    a pci device with refcount increment, when finish using it,
    the caller must decrement the reference count by calling
    pci_dev_put(). Call pci_dev_put() before returning from
    bnx2x_vf_is_pcie_pending() to avoid refcount leak.
    
    Fixes: b56e9670ffa4 ("bnx2x: Prepare device and initialize VF database")
    Suggested-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Link: https://lore.kernel.org/r/20221119070202.1407648-1-yangyingliang@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: free btrfs_path before copying fspath to userspace [+ + +]
Author: Anand Jain <anand.jain@oracle.com>
Date:   Thu Nov 10 11:36:29 2022 +0530

    btrfs: free btrfs_path before copying fspath to userspace
    
    commit 8cf96b409d9b3946ece58ced13f92d0f775b0442 upstream.
    
    btrfs_ioctl_ino_to_path() frees the search path after the userspace copy
    from the temp buffer @ipath->fspath. Which potentially can lead to a lock
    splat warning.
    
    Fix this by freeing the path before we copy it to userspace.
    
    CC: stable@vger.kernel.org # 4.19+
    Signed-off-by: Anand Jain <anand.jain@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: free btrfs_path before copying inodes to userspace [+ + +]
Author: Anand Jain <anand.jain@oracle.com>
Date:   Thu Nov 10 11:36:28 2022 +0530

    btrfs: free btrfs_path before copying inodes to userspace
    
    [ Upstream commit 418ffb9e3cf6c4e2574d3a732b724916684bd133 ]
    
    btrfs_ioctl_logical_to_ino() frees the search path after the userspace
    copy from the temp buffer @inodes. Which potentially can lead to a lock
    splat.
    
    Fix this by freeing the path before we copy @inodes to userspace.
    
    CC: stable@vger.kernel.org # 4.19+
    Signed-off-by: Anand Jain <anand.jain@oracle.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: free btrfs_path before copying root refs to userspace [+ + +]
Author: Josef Bacik <josef@toxicpanda.com>
Date:   Mon Nov 7 11:44:51 2022 -0500

    btrfs: free btrfs_path before copying root refs to userspace
    
    commit b740d806166979488e798e41743aaec051f2443f upstream.
    
    Syzbot reported the following lockdep splat
    
    ======================================================
    WARNING: possible circular locking dependency detected
    6.0.0-rc7-syzkaller-18095-gbbed346d5a96 #0 Not tainted
    ------------------------------------------------------
    syz-executor307/3029 is trying to acquire lock:
    ffff0000c02525d8 (&mm->mmap_lock){++++}-{3:3}, at: __might_fault+0x54/0xb4 mm/memory.c:5576
    
    but task is already holding lock:
    ffff0000c958a608 (btrfs-root-00){++++}-{3:3}, at: __btrfs_tree_read_lock fs/btrfs/locking.c:134 [inline]
    ffff0000c958a608 (btrfs-root-00){++++}-{3:3}, at: btrfs_tree_read_lock fs/btrfs/locking.c:140 [inline]
    ffff0000c958a608 (btrfs-root-00){++++}-{3:3}, at: btrfs_read_lock_root_node+0x13c/0x1c0 fs/btrfs/locking.c:279
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #3 (btrfs-root-00){++++}-{3:3}:
           down_read_nested+0x64/0x84 kernel/locking/rwsem.c:1624
           __btrfs_tree_read_lock fs/btrfs/locking.c:134 [inline]
           btrfs_tree_read_lock fs/btrfs/locking.c:140 [inline]
           btrfs_read_lock_root_node+0x13c/0x1c0 fs/btrfs/locking.c:279
           btrfs_search_slot_get_root+0x74/0x338 fs/btrfs/ctree.c:1637
           btrfs_search_slot+0x1b0/0xfd8 fs/btrfs/ctree.c:1944
           btrfs_update_root+0x6c/0x5a0 fs/btrfs/root-tree.c:132
           commit_fs_roots+0x1f0/0x33c fs/btrfs/transaction.c:1459
           btrfs_commit_transaction+0x89c/0x12d8 fs/btrfs/transaction.c:2343
           flush_space+0x66c/0x738 fs/btrfs/space-info.c:786
           btrfs_async_reclaim_metadata_space+0x43c/0x4e0 fs/btrfs/space-info.c:1059
           process_one_work+0x2d8/0x504 kernel/workqueue.c:2289
           worker_thread+0x340/0x610 kernel/workqueue.c:2436
           kthread+0x12c/0x158 kernel/kthread.c:376
           ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:860
    
    -> #2 (&fs_info->reloc_mutex){+.+.}-{3:3}:
           __mutex_lock_common+0xd4/0xca8 kernel/locking/mutex.c:603
           __mutex_lock kernel/locking/mutex.c:747 [inline]
           mutex_lock_nested+0x38/0x44 kernel/locking/mutex.c:799
           btrfs_record_root_in_trans fs/btrfs/transaction.c:516 [inline]
           start_transaction+0x248/0x944 fs/btrfs/transaction.c:752
           btrfs_start_transaction+0x34/0x44 fs/btrfs/transaction.c:781
           btrfs_create_common+0xf0/0x1b4 fs/btrfs/inode.c:6651
           btrfs_create+0x8c/0xb0 fs/btrfs/inode.c:6697
           lookup_open fs/namei.c:3413 [inline]
           open_last_lookups fs/namei.c:3481 [inline]
           path_openat+0x804/0x11c4 fs/namei.c:3688
           do_filp_open+0xdc/0x1b8 fs/namei.c:3718
           do_sys_openat2+0xb8/0x22c fs/open.c:1313
           do_sys_open fs/open.c:1329 [inline]
           __do_sys_openat fs/open.c:1345 [inline]
           __se_sys_openat fs/open.c:1340 [inline]
           __arm64_sys_openat+0xb0/0xe0 fs/open.c:1340
           __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
           invoke_syscall arch/arm64/kernel/syscall.c:52 [inline]
           el0_svc_common+0x138/0x220 arch/arm64/kernel/syscall.c:142
           do_el0_svc+0x48/0x164 arch/arm64/kernel/syscall.c:206
           el0_svc+0x58/0x150 arch/arm64/kernel/entry-common.c:636
           el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:654
           el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:581
    
    -> #1 (sb_internal#2){.+.+}-{0:0}:
           percpu_down_read include/linux/percpu-rwsem.h:51 [inline]
           __sb_start_write include/linux/fs.h:1826 [inline]
           sb_start_intwrite include/linux/fs.h:1948 [inline]
           start_transaction+0x360/0x944 fs/btrfs/transaction.c:683
           btrfs_join_transaction+0x30/0x40 fs/btrfs/transaction.c:795
           btrfs_dirty_inode+0x50/0x140 fs/btrfs/inode.c:6103
           btrfs_update_time+0x1c0/0x1e8 fs/btrfs/inode.c:6145
           inode_update_time fs/inode.c:1872 [inline]
           touch_atime+0x1f0/0x4a8 fs/inode.c:1945
           file_accessed include/linux/fs.h:2516 [inline]
           btrfs_file_mmap+0x50/0x88 fs/btrfs/file.c:2407
           call_mmap include/linux/fs.h:2192 [inline]
           mmap_region+0x7fc/0xc14 mm/mmap.c:1752
           do_mmap+0x644/0x97c mm/mmap.c:1540
           vm_mmap_pgoff+0xe8/0x1d0 mm/util.c:552
           ksys_mmap_pgoff+0x1cc/0x278 mm/mmap.c:1586
           __do_sys_mmap arch/arm64/kernel/sys.c:28 [inline]
           __se_sys_mmap arch/arm64/kernel/sys.c:21 [inline]
           __arm64_sys_mmap+0x58/0x6c arch/arm64/kernel/sys.c:21
           __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
           invoke_syscall arch/arm64/kernel/syscall.c:52 [inline]
           el0_svc_common+0x138/0x220 arch/arm64/kernel/syscall.c:142
           do_el0_svc+0x48/0x164 arch/arm64/kernel/syscall.c:206
           el0_svc+0x58/0x150 arch/arm64/kernel/entry-common.c:636
           el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:654
           el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:581
    
    -> #0 (&mm->mmap_lock){++++}-{3:3}:
           check_prev_add kernel/locking/lockdep.c:3095 [inline]
           check_prevs_add kernel/locking/lockdep.c:3214 [inline]
           validate_chain kernel/locking/lockdep.c:3829 [inline]
           __lock_acquire+0x1530/0x30a4 kernel/locking/lockdep.c:5053
           lock_acquire+0x100/0x1f8 kernel/locking/lockdep.c:5666
           __might_fault+0x7c/0xb4 mm/memory.c:5577
           _copy_to_user include/linux/uaccess.h:134 [inline]
           copy_to_user include/linux/uaccess.h:160 [inline]
           btrfs_ioctl_get_subvol_rootref+0x3a8/0x4bc fs/btrfs/ioctl.c:3203
           btrfs_ioctl+0xa08/0xa64 fs/btrfs/ioctl.c:5556
           vfs_ioctl fs/ioctl.c:51 [inline]
           __do_sys_ioctl fs/ioctl.c:870 [inline]
           __se_sys_ioctl fs/ioctl.c:856 [inline]
           __arm64_sys_ioctl+0xd0/0x140 fs/ioctl.c:856
           __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
           invoke_syscall arch/arm64/kernel/syscall.c:52 [inline]
           el0_svc_common+0x138/0x220 arch/arm64/kernel/syscall.c:142
           do_el0_svc+0x48/0x164 arch/arm64/kernel/syscall.c:206
           el0_svc+0x58/0x150 arch/arm64/kernel/entry-common.c:636
           el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:654
           el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:581
    
    other info that might help us debug this:
    
    Chain exists of:
      &mm->mmap_lock --> &fs_info->reloc_mutex --> btrfs-root-00
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(btrfs-root-00);
                                   lock(&fs_info->reloc_mutex);
                                   lock(btrfs-root-00);
      lock(&mm->mmap_lock);
    
     *** DEADLOCK ***
    
    1 lock held by syz-executor307/3029:
     #0: ffff0000c958a608 (btrfs-root-00){++++}-{3:3}, at: __btrfs_tree_read_lock fs/btrfs/locking.c:134 [inline]
     #0: ffff0000c958a608 (btrfs-root-00){++++}-{3:3}, at: btrfs_tree_read_lock fs/btrfs/locking.c:140 [inline]
     #0: ffff0000c958a608 (btrfs-root-00){++++}-{3:3}, at: btrfs_read_lock_root_node+0x13c/0x1c0 fs/btrfs/locking.c:279
    
    stack backtrace:
    CPU: 0 PID: 3029 Comm: syz-executor307 Not tainted 6.0.0-rc7-syzkaller-18095-gbbed346d5a96 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/30/2022
    Call trace:
     dump_backtrace+0x1c4/0x1f0 arch/arm64/kernel/stacktrace.c:156
     show_stack+0x2c/0x54 arch/arm64/kernel/stacktrace.c:163
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x104/0x16c lib/dump_stack.c:106
     dump_stack+0x1c/0x58 lib/dump_stack.c:113
     print_circular_bug+0x2c4/0x2c8 kernel/locking/lockdep.c:2053
     check_noncircular+0x14c/0x154 kernel/locking/lockdep.c:2175
     check_prev_add kernel/locking/lockdep.c:3095 [inline]
     check_prevs_add kernel/locking/lockdep.c:3214 [inline]
     validate_chain kernel/locking/lockdep.c:3829 [inline]
     __lock_acquire+0x1530/0x30a4 kernel/locking/lockdep.c:5053
     lock_acquire+0x100/0x1f8 kernel/locking/lockdep.c:5666
     __might_fault+0x7c/0xb4 mm/memory.c:5577
     _copy_to_user include/linux/uaccess.h:134 [inline]
     copy_to_user include/linux/uaccess.h:160 [inline]
     btrfs_ioctl_get_subvol_rootref+0x3a8/0x4bc fs/btrfs/ioctl.c:3203
     btrfs_ioctl+0xa08/0xa64 fs/btrfs/ioctl.c:5556
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:870 [inline]
     __se_sys_ioctl fs/ioctl.c:856 [inline]
     __arm64_sys_ioctl+0xd0/0x140 fs/ioctl.c:856
     __invoke_syscall arch/arm64/kernel/syscall.c:38 [inline]
     invoke_syscall arch/arm64/kernel/syscall.c:52 [inline]
     el0_svc_common+0x138/0x220 arch/arm64/kernel/syscall.c:142
     do_el0_svc+0x48/0x164 arch/arm64/kernel/syscall.c:206
     el0_svc+0x58/0x150 arch/arm64/kernel/entry-common.c:636
     el0t_64_sync_handler+0x84/0xf0 arch/arm64/kernel/entry-common.c:654
     el0t_64_sync+0x18c/0x190 arch/arm64/kernel/entry.S:581
    
    We do generally the right thing here, copying the references into a
    temporary buffer, however we are still holding the path when we do
    copy_to_user from the temporary buffer.  Fix this by freeing the path
    before we copy to user space.
    
    Reported-by: syzbot+4ef9e52e464c6ff47d9d@syzkaller.appspotmail.com
    CC: stable@vger.kernel.org # 4.19+
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: free btrfs_path before copying subvol info to userspace [+ + +]
Author: Anand Jain <anand.jain@oracle.com>
Date:   Thu Nov 10 11:36:31 2022 +0530

    btrfs: free btrfs_path before copying subvol info to userspace
    
    commit 013c1c5585ebcfb19c88efe79063d0463b1b6159 upstream.
    
    btrfs_ioctl_get_subvol_info() frees the search path after the userspace
    copy from the temp buffer @subvol_info. This can lead to a lock splat
    warning.
    
    Fix this by freeing the path before we copy it to userspace.
    
    CC: stable@vger.kernel.org # 4.19+
    Signed-off-by: Anand Jain <anand.jain@oracle.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: move QUOTA_ENABLED check to rescan_should_stop from btrfs_qgroup_rescan_worker [+ + +]
Author: Nikolay Borisov <nborisov@suse.com>
Date:   Thu Jan 13 17:16:18 2022 +0200

    btrfs: move QUOTA_ENABLED check to rescan_should_stop from btrfs_qgroup_rescan_worker
    
    [ Upstream commit db5df254120004471e1c957957ab2f1e612dcbd6 ]
    
    Instead of having 2 places that short circuit the qgroup leaf scan have
    everything in the qgroup_rescan_leaf function. In addition to that, also
    ensure that the inconsistent qgroup flag is set when rescan_should_stop
    returns true. This both retains the old behavior when -EINTR was set in
    the body of the loop and at the same time also extends this behavior
    when scanning is interrupted due to remount or unmount operations.
    
    Signed-off-by: Nikolay Borisov <nborisov@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: f7e942b5bb35 ("btrfs: qgroup: fix sleep from invalid context bug in btrfs_qgroup_inherit()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: qgroup: fix sleep from invalid context bug in btrfs_qgroup_inherit() [+ + +]
Author: ChenXiaoSong <chenxiaosong2@huawei.com>
Date:   Wed Nov 16 22:23:54 2022 +0800

    btrfs: qgroup: fix sleep from invalid context bug in btrfs_qgroup_inherit()
    
    [ Upstream commit f7e942b5bb35d8e3af54053d19a6bf04143a3955 ]
    
    Syzkaller reported BUG as follows:
    
      BUG: sleeping function called from invalid context at
           include/linux/sched/mm.h:274
      Call Trace:
       <TASK>
       dump_stack_lvl+0xcd/0x134
       __might_resched.cold+0x222/0x26b
       kmem_cache_alloc+0x2e7/0x3c0
       update_qgroup_limit_item+0xe1/0x390
       btrfs_qgroup_inherit+0x147b/0x1ee0
       create_subvol+0x4eb/0x1710
       btrfs_mksubvol+0xfe5/0x13f0
       __btrfs_ioctl_snap_create+0x2b0/0x430
       btrfs_ioctl_snap_create_v2+0x25a/0x520
       btrfs_ioctl+0x2a1c/0x5ce0
       __x64_sys_ioctl+0x193/0x200
       do_syscall_64+0x35/0x80
    
    Fix this by calling qgroup_dirty() on @dstqgroup, and update limit item in
    btrfs_run_qgroups() later outside of the spinlock context.
    
    CC: stable@vger.kernel.org # 4.9+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: ChenXiaoSong <chenxiaosong2@huawei.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: sysfs: normalize the error handling branch in btrfs_init_sysfs() [+ + +]
Author: Zhen Lei <thunder.leizhen@huawei.com>
Date:   Tue Nov 22 19:50:02 2022 +0800

    btrfs: sysfs: normalize the error handling branch in btrfs_init_sysfs()
    
    commit ffdbb44f2f23f963b8f5672e35c3a26088177a62 upstream.
    
    Although kset_unregister() can eventually remove all attribute files,
    explicitly rolling back with the matching function makes the code logic
    look clearer.
    
    CC: stable@vger.kernel.org # 5.4+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bus: sunxi-rsb: Support atomic transfers [+ + +]
Author: Samuel Holland <samuel@sholland.org>
Date:   Sun Nov 13 19:57:48 2022 -0600

    bus: sunxi-rsb: Support atomic transfers
    
    [ Upstream commit 077686da0e2162c4ea5ae0df205849c2a7a84479 ]
    
    When communicating with a PMIC during system poweroff (pm_power_off()),
    IRQs are disabled and we are in a RCU read-side critical section, so we
    cannot use wait_for_completion_io_timeout(). Instead, poll the status
    register for transfer completion.
    
    Fixes: d787dcdb9c8f ("bus: sunxi-rsb: Add driver for Allwinner Reduced Serial Bus")
    Signed-off-by: Samuel Holland <samuel@sholland.org>
    Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
    Link: https://lore.kernel.org/r/20221114015749.28490-3-samuel@sholland.org
    Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
can: cc770: cc770_isa_probe(): add missing free_cc770dev() [+ + +]
Author: Zhang Changzhong <zhangchangzhong@huawei.com>
Date:   Fri Nov 11 20:09:16 2022 +0800

    can: cc770: cc770_isa_probe(): add missing free_cc770dev()
    
    [ Upstream commit 62ec89e74099a3d6995988ed9f2f996b368417ec ]
    
    Add the missing free_cc770dev() before return from cc770_isa_probe()
    in the register_cc770dev() error handling case.
    
    In addition, remove blanks before goto labels.
    
    Fixes: 7e02e5433e00 ("can: cc770: legacy CC770 ISA bus driver")
    Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
    Link: https://lore.kernel.org/all/1668168557-6024-1-git-send-email-zhangchangzhong@huawei.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

can: sja1000_isa: sja1000_isa_probe(): add missing free_sja1000dev() [+ + +]
Author: Zhang Changzhong <zhangchangzhong@huawei.com>
Date:   Fri Nov 11 20:08:41 2022 +0800

    can: sja1000_isa: sja1000_isa_probe(): add missing free_sja1000dev()
    
    [ Upstream commit 92dfd9310a71d28cefe6a2d5174d43fab240e631 ]
    
    Add the missing free_sja1000dev() before return from
    sja1000_isa_probe() in the register_sja1000dev() error handling case.
    
    In addition, remove blanks before goto labels.
    
    Fixes: 2a6ba39ad6a2 ("can: sja1000: legacy SJA1000 ISA bus driver")
    Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
    Link: https://lore.kernel.org/all/1668168521-5540-1-git-send-email-zhangchangzhong@huawei.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ceph: avoid putting the realm twice when decoding snaps fails [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Wed Nov 9 11:00:39 2022 +0800

    ceph: avoid putting the realm twice when decoding snaps fails
    
    [ Upstream commit 51884d153f7ec85e18d607b2467820a90e0f4359 ]
    
    When decoding the snaps fails it maybe leaving the 'first_realm'
    and 'realm' pointing to the same snaprealm memory. And then it'll
    put it twice and could cause random use-after-free, BUG_ON, etc
    issues.
    
    Cc: stable@vger.kernel.org
    Link: https://tracker.ceph.com/issues/57686
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ceph: do not update snapshot context when there is no new snapshot [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Sat Feb 19 14:28:33 2022 +0800

    ceph: do not update snapshot context when there is no new snapshot
    
    [ Upstream commit 2e586641c950e7f3e7e008404bd783a466b9b590 ]
    
    We will only track the uppest parent snapshot realm from which we
    need to rebuild the snapshot contexts _downward_ in hierarchy. For
    all the others having no new snapshot we will do nothing.
    
    This fix will avoid calling ceph_queue_cap_snap() on some inodes
    inappropriately. For example, with the code in mainline, suppose there
    are 2 directory hierarchies (with 6 directories total), like this:
    
    /dir_X1/dir_X2/dir_X3/
    /dir_Y1/dir_Y2/dir_Y3/
    
    Firstly, make a snapshot under /dir_X1/dir_X2/.snap/snap_X2, then make a
    root snapshot under /.snap/root_snap. Every time we make snapshots under
    /dir_Y1/..., the kclient will always try to rebuild the snap context for
    snap_X2 realm and finally will always try to queue cap snaps for dir_Y2
    and dir_Y3, which makes no sense.
    
    That's because the snap_X2's seq is 2 and root_snap's seq is 3. So when
    creating a new snapshot under /dir_Y1/... the new seq will be 4, and
    the mds will send the kclient a snapshot backtrace in _downward_
    order: seqs 4, 3.
    
    When ceph_update_snap_trace() is called, it will always rebuild the from
    the last realm, that's the root_snap. So later when rebuilding the snap
    context, the current logic will always cause it to rebuild the snap_X2
    realm and then try to queue cap snaps for all the inodes related in that
    realm, even though it's not necessary.
    
    This is accompanied by a lot of these sorts of dout messages:
    
        "ceph:  queue_cap_snap 00000000a42b796b nothing dirty|writing"
    
    Fix the logic to avoid this situation.
    
    Also, the 'invalidate' word is not precise here. In actuality, it will
    cause a rebuild of the existing snapshot contexts or just build
    non-existent ones. Rename it to 'rebuild_snapcs'.
    
    URL: https://tracker.ceph.com/issues/44100
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Stable-dep-of: 51884d153f7e ("ceph: avoid putting the realm twice when decoding snaps fails")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
char: tpm: Protect tpm_pm_suspend with locks [+ + +]
Author: Jan Dabros <jsd@semihalf.com>
Date:   Mon Nov 28 20:56:51 2022 +0100

    char: tpm: Protect tpm_pm_suspend with locks
    
    commit 23393c6461422df5bf8084a086ada9a7e17dc2ba upstream.
    
    Currently tpm transactions are executed unconditionally in
    tpm_pm_suspend() function, which may lead to races with other tpm
    accessors in the system.
    
    Specifically, the hw_random tpm driver makes use of tpm_get_random(),
    and this function is called in a loop from a kthread, which means it's
    not frozen alongside userspace, and so can race with the work done
    during system suspend:
    
      tpm tpm0: tpm_transmit: tpm_recv: error -52
      tpm tpm0: invalid TPM_STS.x 0xff, dumping stack for forensics
      CPU: 0 PID: 1 Comm: init Not tainted 6.1.0-rc5+ #135
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.0-20220807_005459-localhost 04/01/2014
      Call Trace:
       tpm_tis_status.cold+0x19/0x20
       tpm_transmit+0x13b/0x390
       tpm_transmit_cmd+0x20/0x80
       tpm1_pm_suspend+0xa6/0x110
       tpm_pm_suspend+0x53/0x80
       __pnp_bus_suspend+0x35/0xe0
       __device_suspend+0x10f/0x350
    
    Fix this by calling tpm_try_get_ops(), which itself is a wrapper around
    tpm_chip_start(), but takes the appropriate mutex.
    
    Signed-off-by: Jan Dabros <jsd@semihalf.com>
    Reported-by: Vlastimil Babka <vbabka@suse.cz>
    Tested-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Tested-by: Vlastimil Babka <vbabka@suse.cz>
    Link: https://lore.kernel.org/all/c5ba47ef-393f-1fba-30bd-1230d1b4b592@suse.cz/
    Cc: stable@vger.kernel.org
    Fixes: e891db1a18bf ("tpm: turn on TPM on suspend for TPM 1.x")
    [Jason: reworked commit message, added metadata]
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dccp/tcp: Reset saddr on failure after inet6?_hash_connect(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri Nov 18 17:49:11 2022 -0800

    dccp/tcp: Reset saddr on failure after inet6?_hash_connect().
    
    [ Upstream commit 77934dc6db0d2b111a8f2759e9ad2fb67f5cffa5 ]
    
    When connect() is called on a socket bound to the wildcard address,
    we change the socket's saddr to a local address.  If the socket
    fails to connect() to the destination, we have to reset the saddr.
    
    However, when an error occurs after inet_hash6?_connect() in
    (dccp|tcp)_v[46]_conect(), we forget to reset saddr and leave
    the socket bound to the address.
    
    From the user's point of view, whether saddr is reset or not varies
    with errno.  Let's fix this inconsistent behaviour.
    
    Note that after this patch, the repro [0] will trigger the WARN_ON()
    in inet_csk_get_port() again, but this patch is not buggy and rather
    fixes a bug papering over the bhash2's bug for which we need another
    fix.
    
    For the record, the repro causes -EADDRNOTAVAIL in inet_hash6_connect()
    by this sequence:
    
      s1 = socket()
      s1.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
      s1.bind(('127.0.0.1', 10000))
      s1.sendto(b'hello', MSG_FASTOPEN, (('127.0.0.1', 10000)))
      # or s1.connect(('127.0.0.1', 10000))
    
      s2 = socket()
      s2.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
      s2.bind(('0.0.0.0', 10000))
      s2.connect(('127.0.0.1', 10000))  # -EADDRNOTAVAIL
    
      s2.listen(32)  # WARN_ON(inet_csk(sk)->icsk_bind2_hash != tb2);
    
    [0]: https://syzkaller.appspot.com/bug?extid=015d756bbd1f8b5c8f09
    
    Fixes: 3df80d9320bc ("[DCCP]: Introduce DCCPv6")
    Fixes: 7c657876b63c ("[DCCP]: Initial implementation")
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Acked-by: Joanne Koong <joannelkoong@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dm integrity: flush the journal on suspend [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Tue Nov 15 12:48:26 2022 -0500

    dm integrity: flush the journal on suspend
    
    [ Upstream commit 5e5dab5ec763d600fe0a67837dd9155bdc42f961 ]
    
    This commit flushes the journal on suspend. It is prerequisite for the
    next commit that enables activating dm integrity devices in read-only mode.
    
    Note that we deliberately didn't flush the journal on suspend, so that the
    journal replay code would be tested. However, the dm-integrity code is 5
    years old now, so that journal replay is well-tested, and we can make this
    change now.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Drivers: hv: vmbus: fix double free in the error path of vmbus_add_channel_work() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Sat Nov 19 16:11:34 2022 +0800

    Drivers: hv: vmbus: fix double free in the error path of vmbus_add_channel_work()
    
    [ Upstream commit f92a4b50f0bd7fd52391dc4bb9a309085d278f91 ]
    
    In the error path of vmbus_device_register(), device_unregister()
    is called, which calls vmbus_device_release().  The latter frees
    the struct hv_device that was passed in to vmbus_device_register().
    So remove the kfree() in vmbus_add_channel_work() to avoid a double
    free.
    
    Fixes: c2e5df616e1a ("vmbus: add per-channel sysfs info")
    Suggested-by: Michael Kelley <mikelley@microsoft.com>
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Michael Kelley <mikelley@microsoft.com>
    Link: https://lore.kernel.org/r/20221119081135.1564691-2-yangyingliang@huawei.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Drivers: hv: vmbus: fix possible memory leak in vmbus_device_register() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Sat Nov 19 16:11:35 2022 +0800

    Drivers: hv: vmbus: fix possible memory leak in vmbus_device_register()
    
    [ Upstream commit 25c94b051592c010abe92c85b0485f1faedc83f3 ]
    
    If device_register() returns error in vmbus_device_register(),
    the name allocated by dev_set_name() must be freed. As comment
    of device_register() says, it should use put_device() to give
    up the reference in the error path. So fix this by calling
    put_device(), then the name can be freed in kobject_cleanup().
    
    Fixes: 09d50ff8a233 ("Staging: hv: make the Hyper-V virtual bus code build")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Michael Kelley <mikelley@microsoft.com>
    Link: https://lore.kernel.org/r/20221119081135.1564691-3-yangyingliang@huawei.com
    Signed-off-by: Wei Liu <wei.liu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/dc/dce120: Fix audio register mapping, stop triggering KASAN [+ + +]
Author: Lyude Paul <lyude@redhat.com>
Date:   Mon Nov 14 17:20:45 2022 -0500

    drm/amd/dc/dce120: Fix audio register mapping, stop triggering KASAN
    
    commit 44035ec2fde1114254ee465f9ba3bb246b0b6283 upstream.
    
    There's been a very long running bug that seems to have been neglected for
    a while, where amdgpu consistently triggers a KASAN error at start:
    
      BUG: KASAN: global-out-of-bounds in read_indirect_azalia_reg+0x1d4/0x2a0 [amdgpu]
      Read of size 4 at addr ffffffffc2274b28 by task modprobe/1889
    
    After digging through amd's rather creative method for accessing registers,
    I eventually discovered the problem likely has to do with the fact that on
    my dce120 GPU there are supposedly 7 sets of audio registers. But we only
    define a register mapping for 6 sets.
    
    So, fix this and fix the KASAN warning finally.
    
    Signed-off-by: Lyude Paul <lyude@redhat.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: always register an MMU notifier for userptr [+ + +]
Author: Christian König <christian.koenig@amd.com>
Date:   Wed Nov 9 12:14:44 2022 +0100

    drm/amdgpu: always register an MMU notifier for userptr
    
    commit b39df63b16b64a3af42695acb9bc567aad144776 upstream.
    
    Since switching to HMM we always need that because we no longer grab
    references to the pages.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
    CC: stable@vger.kernel.org
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: Partially revert "drm/amdgpu: update drm_display_info correctly when the edid is read" [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Nov 21 12:34:14 2022 -0500

    drm/amdgpu: Partially revert "drm/amdgpu: update drm_display_info correctly when the edid is read"
    
    [ Upstream commit 602ad43c3cd8f15cbb25ce9bb494129edb2024ed ]
    
    This partially reverts 20543be93ca45968f344261c1a997177e51bd7e1.
    
    Calling drm_connector_update_edid_property() in
    amdgpu_connector_free_edid() causes a noticeable pause in
    the system every 10 seconds on polled outputs so revert this
    part of the change.
    
    Bug: https://gitlab.freedesktop.org/drm/amd/-/issues/2257
    Cc: Claudio Suarez <cssk@net-c.es>
    Acked-by: Luben Tuikov <luben.tuikov@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: update drm_display_info correctly when the edid is read [+ + +]
Author: Claudio Suarez <cssk@net-c.es>
Date:   Sun Oct 17 13:34:58 2021 +0200

    drm/amdgpu: update drm_display_info correctly when the edid is read
    
    [ Upstream commit 20543be93ca45968f344261c1a997177e51bd7e1 ]
    
    drm_display_info is updated by drm_get_edid() or
    drm_connector_update_edid_property(). In the amdgpu driver it is almost
    always updated when the edid is read in amdgpu_connector_get_edid(),
    but not always.  Change amdgpu_connector_get_edid() and
    amdgpu_connector_free_edid() to keep drm_display_info updated.
    
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Claudio Suarez <cssk@net-c.es>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Stable-dep-of: 602ad43c3cd8 ("drm/amdgpu: Partially revert "drm/amdgpu: update drm_display_info correctly when the edid is read"")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/i915: fix TLB invalidation for Gen12 video and compute engines [+ + +]
Author: Andrzej Hajda <andrzej.hajda@intel.com>
Date:   Mon Nov 14 11:38:24 2022 +0100

    drm/i915: fix TLB invalidation for Gen12 video and compute engines
    
    commit 04aa64375f48a5d430b5550d9271f8428883e550 upstream.
    
    In case of Gen12 video and compute engines, TLB_INV registers are masked -
    to modify one bit, corresponding bit in upper half of the register must
    be enabled, otherwise nothing happens.
    
    CVE: CVE-2022-4139
    Suggested-by: Chris Wilson <chris.p.wilson@intel.com>
    Signed-off-by: Andrzej Hajda <andrzej.hajda@intel.com>
    Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Fixes: 7938d61591d3 ("drm/i915: Flush TLBs before releasing backing store")
    Cc: stable@vger.kernel.org
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm: panel-orientation-quirks: Add quirk for Acer Switch V 10 (SW5-017) [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Sun Nov 6 22:50:52 2022 +0100

    drm: panel-orientation-quirks: Add quirk for Acer Switch V 10 (SW5-017)
    
    [ Upstream commit 653f2d94fcda200b02bd79cea2e0307b26c1b747 ]
    
    Like the Acer Switch One 10 S1003, for which there already is a quirk,
    the Acer Switch V 10 (SW5-017) has a 800x1280 portrait screen mounted
    in the tablet part of a landscape oriented 2-in-1. Add a quirk for this.
    
    Cc: Rudolf Polzer <rpolzer@google.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Acked-by: Simon Ser <contact@emersion.fr>
    Link: https://patchwork.freedesktop.org/patch/msgid/20221106215052.66995-1-hdegoede@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dsa: lan9303: Correct stat name [+ + +]
Author: Jerry Ray <jerry.ray@microchip.com>
Date:   Mon Nov 28 13:35:59 2022 -0600

    dsa: lan9303: Correct stat name
    
    [ Upstream commit 39f59bca275d2d819a8788c0f962e9e89843efc9 ]
    
    This patch changes the reported ethtool statistics for the lan9303
    family of parts covered by this driver.
    
    The TxUnderRun statistic label is renamed to RxShort to accurately
    reflect what stat the device is reporting.  I did not reorder the
    statistics as that might cause problems with existing user code that
    are expecting the stats at a certain offset.
    
    Fixes: a1292595e006 ("net: dsa: add new DSA switch driver for the SMSC-LAN9303")
    Signed-off-by: Jerry Ray <jerry.ray@microchip.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Link: https://lore.kernel.org/r/20221128193559.6572-1-jerry.ray@microchip.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
epoll: call final ep_events_available() check under the lock [+ + +]
Author: Roman Penyaev <rpenyaev@suse.de>
Date:   Wed May 13 17:50:38 2020 -0700

    epoll: call final ep_events_available() check under the lock
    
    commit 65759097d804d2a9ad2b687db436319704ba7019 upstream.
    
    There is a possible race when ep_scan_ready_list() leaves ->rdllist and
    ->obflist empty for a short period of time although some events are
    pending.  It is quite likely that ep_events_available() observes empty
    lists and goes to sleep.
    
    Since commit 339ddb53d373 ("fs/epoll: remove unnecessary wakeups of
    nested epoll") we are conservative in wakeups (there is only one place
    for wakeup and this is ep_poll_callback()), thus ep_events_available()
    must always observe correct state of two lists.
    
    The easiest and correct way is to do the final check under the lock.
    This does not impact the performance, since lock is taken anyway for
    adding a wait entry to the wait queue.
    
    The discussion of the problem can be found here:
    
       https://lore.kernel.org/linux-fsdevel/a2f22c3c-c25a-4bda-8339-a7bdaf17849e@akamai.com/
    
    In this patch barrierless __set_current_state() is used.  This is safe
    since waitqueue_active() is called under the same lock on wakeup side.
    
    Short-circuit for fatal signals (i.e.  fatal_signal_pending() check) is
    moved to the line just before actual events harvesting routine.  This is
    fully compliant to what is said in the comment of the patch where the
    actual fatal_signal_pending() check was added: c257a340ede0 ("fs, epoll:
    short circuit fetching events if thread has been killed").
    
    Fixes: 339ddb53d373 ("fs/epoll: remove unnecessary wakeups of nested epoll")
    Reported-by: Jason Baron <jbaron@akamai.com>
    Reported-by: Randy Dunlap <rdunlap@infradead.org>
    Signed-off-by: Roman Penyaev <rpenyaev@suse.de>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Reviewed-by: Jason Baron <jbaron@akamai.com>
    Cc: Khazhismel Kumykov <khazhy@google.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: <stable@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20200505145609.1865152-1-rpenyaev@suse.de
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Acked-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Signed-off-by: Rishabh Bhatnagar <risbhat@amazon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

epoll: check for events when removing a timed out thread from the wait queue [+ + +]
Author: Soheil Hassas Yeganeh <soheil@google.com>
Date:   Fri Dec 18 14:01:44 2020 -0800

    epoll: check for events when removing a timed out thread from the wait queue
    
    commit 289caf5d8f6c61c6d2b7fd752a7f483cd153f182 upstream.
    
    Patch series "simplify ep_poll".
    
    This patch series is a followup based on the suggestions and feedback by
    Linus:
    https://lkml.kernel.org/r/CAHk-=wizk=OxUyQPbO8MS41w2Pag1kniUV5WdD5qWL-gq1kjDA@mail.gmail.com
    
    The first patch in the series is a fix for the epoll race in presence of
    timeouts, so that it can be cleanly backported to all affected stable
    kernels.
    
    The rest of the patch series simplify the ep_poll() implementation.  Some
    of these simplifications result in minor performance enhancements as well.
    We have kept these changes under self tests and internal benchmarks for a
    few days, and there are minor (1-2%) performance enhancements as a result.
    
    This patch (of 8):
    
    After abc610e01c66 ("fs/epoll: avoid barrier after an epoll_wait(2)
    timeout"), we break out of the ep_poll loop upon timeout, without checking
    whether there is any new events available.  Prior to that patch-series we
    always called ep_events_available() after exiting the loop.
    
    This can cause races and missed wakeups.  For example, consider the
    following scenario reported by Guantao Liu:
    
    Suppose we have an eventfd added using EPOLLET to an epollfd.
    
    Thread 1: Sleeps for just below 5ms and then writes to an eventfd.
    Thread 2: Calls epoll_wait with a timeout of 5 ms. If it sees an
              event of the eventfd, it will write back on that fd.
    Thread 3: Calls epoll_wait with a negative timeout.
    
    Prior to abc610e01c66, it is guaranteed that Thread 3 will wake up either
    by Thread 1 or Thread 2.  After abc610e01c66, Thread 3 can be blocked
    indefinitely if Thread 2 sees a timeout right before the write to the
    eventfd by Thread 1.  Thread 2 will be woken up from
    schedule_hrtimeout_range and, with evail 0, it will not call
    ep_send_events().
    
    To fix this issue:
    1) Simplify the timed_out case as suggested by Linus.
    2) while holding the lock, recheck whether the thread was woken up
       after its time out has reached.
    
    Note that (2) is different from Linus' original suggestion: It do not set
    "eavail = ep_events_available(ep)" to avoid unnecessary contention (when
    there are too many timed-out threads and a small number of events), as
    well as races mentioned in the discussion thread.
    
    This is the first patch in the series so that the backport to stable
    releases is straightforward.
    
    Link: https://lkml.kernel.org/r/20201106231635.3528496-1-soheil.kdev@gmail.com
    Link: https://lkml.kernel.org/r/CAHk-=wizk=OxUyQPbO8MS41w2Pag1kniUV5WdD5qWL-gq1kjDA@mail.gmail.com
    Link: https://lkml.kernel.org/r/20201106231635.3528496-2-soheil.kdev@gmail.com
    Fixes: abc610e01c66 ("fs/epoll: avoid barrier after an epoll_wait(2) timeout")
    Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
    Tested-by: Guantao Liu <guantaol@google.com>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Reported-by: Guantao Liu <guantaol@google.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: Khazhismel Kumykov <khazhy@google.com>
    Reviewed-by: Davidlohr Bueso <dbueso@suse.de>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Acked-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Signed-off-by: Rishabh Bhatnagar <risbhat@amazon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
error-injection: Add prompt for function error injection [+ + +]
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Mon Nov 21 10:44:03 2022 -0500

    error-injection: Add prompt for function error injection
    
    commit a4412fdd49dc011bcc2c0d81ac4cab7457092650 upstream.
    
    The config to be able to inject error codes into any function annotated
    with ALLOW_ERROR_INJECTION() is enabled when FUNCTION_ERROR_INJECTION is
    enabled.  But unfortunately, this is always enabled on x86 when KPROBES
    is enabled, and there's no way to turn it off.
    
    As kprobes is useful for observability of the kernel, it is useful to
    have it enabled in production environments.  But error injection should
    be avoided.  Add a prompt to the config to allow it to be disabled even
    when kprobes is enabled, and get rid of the "def_bool y".
    
    This is a kernel debug feature (it's in Kconfig.debug), and should have
    never been something enabled by default.
    
    Cc: stable@vger.kernel.org
    Fixes: 540adea3809f6 ("error-injection: Separate error-injection from kprobe")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware: coreboot: Register bus in module init [+ + +]
Author: Brian Norris <briannorris@chromium.org>
Date:   Wed Oct 19 18:10:53 2022 -0700

    firmware: coreboot: Register bus in module init
    
    [ Upstream commit 65946690ed8d972fdb91a74ee75ac0f0f0d68321 ]
    
    The coreboot_table driver registers a coreboot bus while probing a
    "coreboot_table" device representing the coreboot table memory region.
    Probing this device (i.e., registering the bus) is a dependency for the
    module_init() functions of any driver for this bus (e.g.,
    memconsole-coreboot.c / memconsole_driver_init()).
    
    With synchronous probe, this dependency works OK, as the link order in
    the Makefile ensures coreboot_table_driver_init() (and thus,
    coreboot_table_probe()) completes before a coreboot device driver tries
    to add itself to the bus.
    
    With asynchronous probe, however, coreboot_table_probe() may race with
    memconsole_driver_init(), and so we're liable to hit one of these two:
    
    1. coreboot_driver_register() eventually hits "[...] the bus was not
       initialized.", and the memconsole driver fails to register; or
    2. coreboot_driver_register() gets past #1, but still races with
       bus_register() and hits some other undefined/crashing behavior (e.g.,
       in driver_find() [1])
    
    We can resolve this by registering the bus in our initcall, and only
    deferring "device" work (scanning the coreboot memory region and
    creating sub-devices) to probe().
    
    [1] Example failure, using 'driver_async_probe=*' kernel command line:
    
    [    0.114217] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000010
    ...
    [    0.114307] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.1.0-rc1 #63
    [    0.114316] Hardware name: Google Scarlet (DT)
    ...
    [    0.114488] Call trace:
    [    0.114494]  _raw_spin_lock+0x34/0x60
    [    0.114502]  kset_find_obj+0x28/0x84
    [    0.114511]  driver_find+0x30/0x50
    [    0.114520]  driver_register+0x64/0x10c
    [    0.114528]  coreboot_driver_register+0x30/0x3c
    [    0.114540]  memconsole_driver_init+0x24/0x30
    [    0.114550]  do_one_initcall+0x154/0x2e0
    [    0.114560]  do_initcall_level+0x134/0x160
    [    0.114571]  do_initcalls+0x60/0xa0
    [    0.114579]  do_basic_setup+0x28/0x34
    [    0.114588]  kernel_init_freeable+0xf8/0x150
    [    0.114596]  kernel_init+0x2c/0x12c
    [    0.114607]  ret_from_fork+0x10/0x20
    [    0.114624] Code: 5280002b 1100054a b900092a f9800011 (885ffc01)
    [    0.114631] ---[ end trace 0000000000000000 ]---
    
    Fixes: b81e3140e412 ("firmware: coreboot: Make bus registration symmetric")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Stephen Boyd <swboyd@chromium.org>
    Link: https://lore.kernel.org/r/20221019180934.1.If29e167d8a4771b0bf4a39c89c6946ed764817b9@changeid
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: google: Release devices before unregistering the bus [+ + +]
Author: Patrick Rudolph <patrick.rudolph@9elements.com>
Date:   Mon Nov 18 11:19:29 2019 +0100

    firmware: google: Release devices before unregistering the bus
    
    [ Upstream commit cae0970ee9c4527f189aac378c50e2f0ed020418 ]
    
    Fix a bug where the kernel module can't be loaded after it has been
    unloaded as the devices are still present and conflicting with the
    to be created coreboot devices.
    
    Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
    Link: https://lore.kernel.org/r/20191118101934.22526-2-patrick.rudolph@9elements.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 65946690ed8d ("firmware: coreboot: Register bus in module init")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fuse: lock inode unconditionally in fuse_fallocate() [+ + +]
Author: Miklos Szeredi <mszeredi@redhat.com>
Date:   Wed Nov 23 09:10:42 2022 +0100

    fuse: lock inode unconditionally in fuse_fallocate()
    
    commit 44361e8cf9ddb23f17bdcc40ca944abf32e83e79 upstream.
    
    file_modified() must be called with inode lock held.  fuse_fallocate()
    didn't lock the inode in case of just FALLOC_KEEP_SIZE flags value, which
    resulted in a kernel Warning in notify_change().
    
    Lock the inode unconditionally, like all other fallocate implementations
    do.
    
    Reported-by: Pengfei Xu <pengfei.xu@intel.com>
    Reported-and-tested-by: syzbot+462da39f0667b357c4b6@syzkaller.appspotmail.com
    Fixes: 4a6f278d4827 ("fuse: add file_modified() to fallocate")
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gcov: clang: fix the buffer overflow issue [+ + +]
Author: Mukesh Ojha <quic_mojha@quicinc.com>
Date:   Thu Nov 10 00:31:37 2022 +0530

    gcov: clang: fix the buffer overflow issue
    
    commit a6f810efabfd789d3bbafeacb4502958ec56c5ce upstream.
    
    Currently, in clang version of gcov code when module is getting removed
    gcov_info_add() incorrectly adds the sfn_ptr->counter to all the
    dst->functions and it result in the kernel panic in below crash report.
    Fix this by properly handling it.
    
    [    8.899094][  T599] Unable to handle kernel write to read-only memory at virtual address ffffff80461cc000
    [    8.899100][  T599] Mem abort info:
    [    8.899102][  T599]   ESR = 0x9600004f
    [    8.899103][  T599]   EC = 0x25: DABT (current EL), IL = 32 bits
    [    8.899105][  T599]   SET = 0, FnV = 0
    [    8.899107][  T599]   EA = 0, S1PTW = 0
    [    8.899108][  T599]   FSC = 0x0f: level 3 permission fault
    [    8.899110][  T599] Data abort info:
    [    8.899111][  T599]   ISV = 0, ISS = 0x0000004f
    [    8.899113][  T599]   CM = 0, WnR = 1
    [    8.899114][  T599] swapper pgtable: 4k pages, 39-bit VAs, pgdp=00000000ab8de000
    [    8.899116][  T599] [ffffff80461cc000] pgd=18000009ffcde003, p4d=18000009ffcde003, pud=18000009ffcde003, pmd=18000009ffcad003, pte=00600000c61cc787
    [    8.899124][  T599] Internal error: Oops: 9600004f [#1] PREEMPT SMP
    [    8.899265][  T599] Skip md ftrace buffer dump for: 0x1609e0
    ....
    ..,
    [    8.899544][  T599] CPU: 7 PID: 599 Comm: modprobe Tainted: G S         OE     5.15.41-android13-8-g38e9b1af6bce #1
    [    8.899547][  T599] Hardware name: XXX (DT)
    [    8.899549][  T599] pstate: 82400005 (Nzcv daif +PAN -UAO +TCO -DIT -SSBS BTYPE=--)
    [    8.899551][  T599] pc : gcov_info_add+0x9c/0xb8
    [    8.899557][  T599] lr : gcov_event+0x28c/0x6b8
    [    8.899559][  T599] sp : ffffffc00e733b00
    [    8.899560][  T599] x29: ffffffc00e733b00 x28: ffffffc00e733d30 x27: ffffffe8dc297470
    [    8.899563][  T599] x26: ffffffe8dc297000 x25: ffffffe8dc297000 x24: ffffffe8dc297000
    [    8.899566][  T599] x23: ffffffe8dc0a6200 x22: ffffff880f68bf20 x21: 0000000000000000
    [    8.899569][  T599] x20: ffffff880f68bf00 x19: ffffff8801babc00 x18: ffffffc00d7f9058
    [    8.899572][  T599] x17: 0000000000088793 x16: ffffff80461cbe00 x15: 9100052952800785
    [    8.899575][  T599] x14: 0000000000000200 x13: 0000000000000041 x12: 9100052952800785
    [    8.899577][  T599] x11: ffffffe8dc297000 x10: ffffffe8dc297000 x9 : ffffff80461cbc80
    [    8.899580][  T599] x8 : ffffff8801babe80 x7 : ffffffe8dc2ec000 x6 : ffffffe8dc2ed000
    [    8.899583][  T599] x5 : 000000008020001f x4 : fffffffe2006eae0 x3 : 000000008020001f
    [    8.899586][  T599] x2 : ffffff8027c49200 x1 : ffffff8801babc20 x0 : ffffff80461cb3a0
    [    8.899589][  T599] Call trace:
    [    8.899590][  T599]  gcov_info_add+0x9c/0xb8
    [    8.899592][  T599]  gcov_module_notifier+0xbc/0x120
    [    8.899595][  T599]  blocking_notifier_call_chain+0xa0/0x11c
    [    8.899598][  T599]  do_init_module+0x2a8/0x33c
    [    8.899600][  T599]  load_module+0x23cc/0x261c
    [    8.899602][  T599]  __arm64_sys_finit_module+0x158/0x194
    [    8.899604][  T599]  invoke_syscall+0x94/0x2bc
    [    8.899607][  T599]  el0_svc_common+0x1d8/0x34c
    [    8.899609][  T599]  do_el0_svc+0x40/0x54
    [    8.899611][  T599]  el0_svc+0x94/0x2f0
    [    8.899613][  T599]  el0t_64_sync_handler+0x88/0xec
    [    8.899615][  T599]  el0t_64_sync+0x1b4/0x1b8
    [    8.899618][  T599] Code: f905f56c f86e69ec f86e6a0f 8b0c01ec (f82e6a0c)
    [    8.899620][  T599] ---[ end trace ed5218e9e5b6e2e6 ]---
    
    Link: https://lkml.kernel.org/r/1668020497-13142-1-git-send-email-quic_mojha@quicinc.com
    Fixes: e178a5beb369 ("gcov: clang support")
    Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
    Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Tested-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: Tom Rix <trix@redhat.com>
    Cc: <stable@vger.kernel.org>    [5.2+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hwmon: (coretemp) Check for null before removing sysfs attrs [+ + +]
Author: Phil Auld <pauld@redhat.com>
Date:   Thu Nov 17 11:23:13 2022 -0500

    hwmon: (coretemp) Check for null before removing sysfs attrs
    
    [ Upstream commit a89ff5f5cc64b9fe7a992cf56988fd36f56ca82a ]
    
    If coretemp_add_core() gets an error then pdata->core_data[indx]
    is already NULL and has been kfreed. Don't pass that to
    sysfs_remove_group() as that will crash in sysfs_remove_group().
    
    [Shortened for readability]
    [91854.020159] sysfs: cannot create duplicate filename '/devices/platform/coretemp.0/hwmon/hwmon2/temp20_label'
    <cpu offline>
    [91855.126115] BUG: kernel NULL pointer dereference, address: 0000000000000188
    [91855.165103] #PF: supervisor read access in kernel mode
    [91855.194506] #PF: error_code(0x0000) - not-present page
    [91855.224445] PGD 0 P4D 0
    [91855.238508] Oops: 0000 [#1] PREEMPT SMP PTI
    ...
    [91855.342716] RIP: 0010:sysfs_remove_group+0xc/0x80
    ...
    [91855.796571] Call Trace:
    [91855.810524]  coretemp_cpu_offline+0x12b/0x1dd [coretemp]
    [91855.841738]  ? coretemp_cpu_online+0x180/0x180 [coretemp]
    [91855.871107]  cpuhp_invoke_callback+0x105/0x4b0
    [91855.893432]  cpuhp_thread_fun+0x8e/0x150
    ...
    
    Fix this by checking for NULL first.
    
    Signed-off-by: Phil Auld <pauld@redhat.com>
    Cc: linux-hwmon@vger.kernel.org
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: Jean Delvare <jdelvare@suse.com>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Link: https://lore.kernel.org/r/20221117162313.3164803-1-pauld@redhat.com
    Fixes: 199e0de7f5df3 ("hwmon: (coretemp) Merge pkgtemp with coretemp")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (coretemp) fix pci device refcount leak in nv1a_ram_new() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Fri Nov 18 17:33:03 2022 +0800

    hwmon: (coretemp) fix pci device refcount leak in nv1a_ram_new()
    
    [ Upstream commit 7dec14537c5906b8bf40fd6fd6d9c3850f8df11d ]
    
    As comment of pci_get_domain_bus_and_slot() says, it returns
    a pci device with refcount increment, when finish using it,
    the caller must decrement the reference count by calling
    pci_dev_put(). So call it after using to avoid refcount leak.
    
    Fixes: 14513ee696a0 ("hwmon: (coretemp) Use PCI host bridge ID to identify CPU if necessary")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20221118093303.214163-1-yangyingliang@huawei.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (i5500_temp) fix missing pci_disable_device() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Sat Nov 12 20:56:06 2022 +0800

    hwmon: (i5500_temp) fix missing pci_disable_device()
    
    [ Upstream commit 3b7f98f237528c496ea0b689bace0e35eec3e060 ]
    
    pci_disable_device() need be called while module exiting, switch to use
    pcim_enable(), pci_disable_device() will be called in pcim_release().
    
    Fixes: ada072816be1 ("hwmon: (i5500_temp) New driver for the Intel 5500/5520/X58 chipsets")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20221112125606.3751430-1-yangyingliang@huawei.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (ibmpex) Fix possible UAF when ibmpex_register_bmc() fails [+ + +]
Author: Gaosheng Cui <cuigaosheng1@huawei.com>
Date:   Thu Nov 17 11:44:23 2022 +0800

    hwmon: (ibmpex) Fix possible UAF when ibmpex_register_bmc() fails
    
    [ Upstream commit e2a87785aab0dac190ac89be6a9ba955e2c634f2 ]
    
    Smatch report warning as follows:
    
    drivers/hwmon/ibmpex.c:509 ibmpex_register_bmc() warn:
      '&data->list' not removed from list
    
    If ibmpex_find_sensors() fails in ibmpex_register_bmc(), data will
    be freed, but data->list will not be removed from driver_data.bmc_data,
    then list traversal may cause UAF.
    
    Fix by removeing it from driver_data.bmc_data before free().
    
    Fixes: 57c7c3a0fdea ("hwmon: IBM power meter driver")
    Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
    Link: https://lore.kernel.org/r/20221117034423.2935739-1-cuigaosheng1@huawei.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iio: core: Fix entry not deleted when iio_register_sw_trigger_type() fails [+ + +]
Author: Chen Zhongjin <chenzhongjin@huawei.com>
Date:   Tue Nov 8 11:28:02 2022 +0800

    iio: core: Fix entry not deleted when iio_register_sw_trigger_type() fails
    
    commit 4ad09d956f8eacff61e67e5b13ba8ebec3232f76 upstream.
    
    In iio_register_sw_trigger_type(), configfs_register_default_group() is
    possible to fail, but the entry add to iio_trigger_types_list is not
    deleted.
    
    This leaves wild in iio_trigger_types_list, which can cause page fault
    when module is loading again. So fix this by list_del(&t->list) in error
    path.
    
    BUG: unable to handle page fault for address: fffffbfff81d7400
    Call Trace:
    <TASK>
     iio_register_sw_trigger_type
     do_one_initcall
     do_init_module
     load_module
     ...
    
    Fixes: b662f809d410 ("iio: core: Introduce IIO software triggers")
    Signed-off-by: Chen Zhongjin <chenzhongjin@huawei.com>
    Link: https://lore.kernel.org/r/20221108032802.168623-1-chenzhongjin@huawei.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: health: afe4403: Fix oob read in afe4403_read_raw [+ + +]
Author: Wei Yongjun <weiyongjun1@huawei.com>
Date:   Mon Nov 7 15:19:46 2022 +0000

    iio: health: afe4403: Fix oob read in afe4403_read_raw
    
    [ Upstream commit 58143c1ed5882c138a3cd2251a336fc8755f23d9 ]
    
    KASAN report out-of-bounds read as follows:
    
    BUG: KASAN: global-out-of-bounds in afe4403_read_raw+0x42e/0x4c0
    Read of size 4 at addr ffffffffc02ac638 by task cat/279
    
    Call Trace:
     afe4403_read_raw
     iio_read_channel_info
     dev_attr_show
    
    The buggy address belongs to the variable:
     afe4403_channel_leds+0x18/0xffffffffffffe9e0
    
    This issue can be reproduced by singe command:
    
     $ cat /sys/bus/spi/devices/spi0.0/iio\:device0/in_intensity6_raw
    
    The array size of afe4403_channel_leds is less than channels, so access
    with chan->address cause OOB read in afe4403_read_raw. Fix it by moving
    access before use it.
    
    Fixes: b36e8257641a ("iio: health/afe440x: Use regmap fields")
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Acked-by: Andrew Davis <afd@ti.com>
    Link: https://lore.kernel.org/r/20221107151946.89260-1-weiyongjun@huaweicloud.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: health: afe4404: Fix oob read in afe4404_[read|write]_raw [+ + +]
Author: Wei Yongjun <weiyongjun1@huawei.com>
Date:   Mon Nov 7 15:20:10 2022 +0000

    iio: health: afe4404: Fix oob read in afe4404_[read|write]_raw
    
    [ Upstream commit fc92d9e3de0b2d30a3ccc08048a5fad533e4672b ]
    
    KASAN report out-of-bounds read as follows:
    
    BUG: KASAN: global-out-of-bounds in afe4404_read_raw+0x2ce/0x380
    Read of size 4 at addr ffffffffc00e4658 by task cat/278
    
    Call Trace:
     afe4404_read_raw
     iio_read_channel_info
     dev_attr_show
    
    The buggy address belongs to the variable:
     afe4404_channel_leds+0x18/0xffffffffffffe9c0
    
    This issue can be reproduce by singe command:
    
     $ cat /sys/bus/i2c/devices/0-0058/iio\:device0/in_intensity6_raw
    
    The array size of afe4404_channel_leds and afe4404_channel_offdacs
    are less than channels, so access with chan->address cause OOB read
    in afe4404_[read|write]_raw. Fix it by moving access before use them.
    
    Fixes: b36e8257641a ("iio: health/afe440x: Use regmap fields")
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Acked-by: Andrew Davis <afd@ti.com>
    Link: https://lore.kernel.org/r/20221107152010.95937-1-weiyongjun@huaweicloud.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: light: apds9960: fix wrong register for gesture gain [+ + +]
Author: Alejandro Concepción Rodríguez <asconcepcion@acoro.eu>
Date:   Sun Nov 6 01:56:51 2022 +0000

    iio: light: apds9960: fix wrong register for gesture gain
    
    commit 0aa60ff5d996d4ecdd4a62699c01f6d00f798d59 upstream.
    
    Gesture Gain Control is in REG_GCONF_2 (0xa3), not in REG_CONFIG_2 (0x90).
    
    Fixes: aff268cd532e ("iio: light: add APDS9960 ALS + promixity driver")
    Signed-off-by: Alejandro Concepcion-Rodriguez <asconcepcion@acoro.eu>
    Acked-by: Matt Ranostay <matt.ranostay@konsulko.com>
    Cc: <Stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/EaT-NKC-H4DNX5z4Lg9B6IWPD5TrTrYBr5DYB784wfDKQkTmzPXkoYqyUOrOgJH-xvTsEkFLcVkeAPZRUODEFI5dGziaWXwjpfBNLeNGfNc=@acoro.eu
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

iio: light: rpr0521: add missing Kconfig dependencies [+ + +]
Author: Paul Gazzillo <paul@pgazz.com>
Date:   Thu Nov 10 16:47:29 2022 -0500

    iio: light: rpr0521: add missing Kconfig dependencies
    
    [ Upstream commit 6ac12303572ef9ace5603c2c07f5f1b00a33f580 ]
    
    Fix an implicit declaration of function error for rpr0521 under some configs
    
    When CONFIG_RPR0521 is enabled without CONFIG_IIO_TRIGGERED_BUFFER,
    the build results in "implicit declaration of function" errors, e.g.,
      drivers/iio/light/rpr0521.c:434:3: error: implicit declaration of function
               'iio_trigger_poll_chained' [-Werror=implicit-function-declaration]
        434 |   iio_trigger_poll_chained(data->drdy_trigger0);
            |   ^~~~~~~~~~~~~~~~~~~~~~~~
    
    This fix adds select dependencies to RPR0521's configuration declaration.
    
    Fixes: e12ffd241c00 ("iio: light: rpr0521 triggered buffer")
    Signed-off-by: Paul Gazzillo <paul@pgazz.com>
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=216678
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20221110214729.ls5ixav5kxpeftk7@device
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: ms5611: Simplify IO callback parameters [+ + +]
Author: Lars-Peter Clausen <lars@metafoo.de>
Date:   Wed Oct 20 16:21:10 2021 +0200

    iio: ms5611: Simplify IO callback parameters
    
    [ Upstream commit dc19fa63ad80a636fdbc1a02153d1ab140cb901f ]
    
    The ms5611 passes &indio_dev->dev as a parameter to all its IO callbacks
    only to directly cast the struct device back to struct iio_dev. And the
    struct iio_dev is then only used to get the drivers state struct.
    
    Simplify this a bit by passing the state struct directly. This makes it a
    bit easier to follow what the code is doing.
    
    Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
    Link: https://lore.kernel.org/r/20211020142110.7060-1-lars@metafoo.de
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Stable-dep-of: 17f442e7e475 ("iio: pressure: ms5611: fixed value compensation bug")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

iio: pressure: ms5611: fixed value compensation bug [+ + +]
Author: Mitja Spes <mitja@lxnav.com>
Date:   Fri Oct 21 15:58:20 2022 +0200

    iio: pressure: ms5611: fixed value compensation bug
    
    [ Upstream commit 17f442e7e47579d3881fc4d47354eaef09302e6f ]
    
    When using multiple instances of this driver the compensation PROM was
    overwritten by the last initialized sensor. Now each sensor has own PROM
    storage.
    
    Signed-off-by: Mitja Spes <mitja@lxnav.com>
    Fixes: 9690d81a02dc ("iio: pressure: ms5611: add support for MS5607 temperature and pressure sensor")
    Link: https://lore.kernel.org/r/20221021135827.1444793-2-mitja@lxnav.com
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
init/Kconfig: fix CC_HAS_ASM_GOTO_TIED_OUTPUT test with dash [+ + +]
Author: Alexandre Belloni <alexandre.belloni@bootlin.com>
Date:   Tue Nov 15 12:01:58 2022 +0100

    init/Kconfig: fix CC_HAS_ASM_GOTO_TIED_OUTPUT test with dash
    
    [ Upstream commit 534bd70374d646f17e2cebe0e6e4cdd478ce4f0c ]
    
    When using dash as /bin/sh, the CC_HAS_ASM_GOTO_TIED_OUTPUT test fails
    with a syntax error which is not the one we are looking for:
    
    <stdin>: In function ‘foo’:
    <stdin>:1:29: warning: missing terminating " character
    <stdin>:1:29: error: missing terminating " character
    <stdin>:2:5: error: expected ‘:’ before ‘+’ token
    <stdin>:2:7: warning: missing terminating " character
    <stdin>:2:7: error: missing terminating " character
    <stdin>:2:5: error: expected declaration or statement at end of input
    
    Removing '\n' solves this.
    
    Fixes: 1aa0e8b144b6 ("Kconfig: Add option for asm goto w/ tied outputs to workaround clang-13 bug")
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Reviewed-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI mode [+ + +]
Author: Aman Dhoot <amandhoot12@gmail.com>
Date:   Sat Oct 15 20:41:17 2022 -0700

    Input: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI mode
    
    [ Upstream commit ac5408991ea6b06e29129b4d4861097c4c3e0d59 ]
    
    The device works fine in native RMI mode, there is no reason to use legacy
    PS/2 mode with it.
    
    Signed-off-by: Aman Dhoot <amandhoot12@gmail.com>
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu/vt-d: Fix PCI device refcount leak in dmar_dev_scope_init() [+ + +]
Author: Xiongfeng Wang <wangxiongfeng2@huawei.com>
Date:   Thu Dec 1 12:01:27 2022 +0800

    iommu/vt-d: Fix PCI device refcount leak in dmar_dev_scope_init()
    
    [ Upstream commit 4bedbbd782ebbe7287231fea862c158d4f08a9e3 ]
    
    for_each_pci_dev() is implemented by pci_get_device(). The comment of
    pci_get_device() says that it will increase the reference count for the
    returned pci_dev and also decrease the reference count for the input
    pci_dev @from if it is not NULL.
    
    If we break for_each_pci_dev() loop with pdev not NULL, we need to call
    pci_dev_put() to decrease the reference count. Add the missing
    pci_dev_put() for the error path to avoid reference count leak.
    
    Fixes: 2e4552893038 ("iommu/vt-d: Unify the way to process DMAR device scope array")
    Signed-off-by: Xiongfeng Wang <wangxiongfeng2@huawei.com>
    Link: https://lore.kernel.org/r/20221121113649.190393-3-wangxiongfeng2@huawei.com
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipc/sem: Fix dangling sem_array access in semtimedop race [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Mon Dec 5 17:59:27 2022 +0100

    ipc/sem: Fix dangling sem_array access in semtimedop race
    
    [ Upstream commit b52be557e24c47286738276121177a41f54e3b83 ]
    
    When __do_semtimedop() goes to sleep because it has to wait for a
    semaphore value becoming zero or becoming bigger than some threshold, it
    links the on-stack sem_queue to the sem_array, then goes to sleep
    without holding a reference on the sem_array.
    
    When __do_semtimedop() comes back out of sleep, one of two things must
    happen:
    
     a) We prove that the on-stack sem_queue has been disconnected from the
        (possibly freed) sem_array, making it safe to return from the stack
        frame that the sem_queue exists in.
    
     b) We stabilize our reference to the sem_array, lock the sem_array, and
        detach the sem_queue from the sem_array ourselves.
    
    sem_array has RCU lifetime, so for case (b), the reference can be
    stabilized inside an RCU read-side critical section by locklessly
    checking whether the sem_queue is still connected to the sem_array.
    
    However, the current code does the lockless check on sem_queue before
    starting an RCU read-side critical section, so the result of the
    lockless check immediately becomes useless.
    
    Fix it by doing rcu_read_lock() before the lockless check.  Now RCU
    ensures that if we observe the object being on our queue, the object
    can't be freed until rcu_read_unlock().
    
    This bug is only hittable on kernel builds with full preemption support
    (either CONFIG_PREEMPT or PREEMPT_DYNAMIC with preempt=full).
    
    Fixes: 370b262c896e ("ipc/sem: avoid idr tree lookup for interrupted semop")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv4: Fix route deletion when nexthop info is not specified [+ + +]
Author: Ido Schimmel <idosch@nvidia.com>
Date:   Thu Nov 24 23:09:32 2022 +0200

    ipv4: Fix route deletion when nexthop info is not specified
    
    [ Upstream commit d5082d386eee7e8ec46fa8581932c81a4961dcef ]
    
    When the kernel receives a route deletion request from user space it
    tries to delete a route that matches the route attributes specified in
    the request.
    
    If only prefix information is specified in the request, the kernel
    should delete the first matching FIB alias regardless of its associated
    FIB info. However, an error is currently returned when the FIB info is
    backed by a nexthop object:
    
     # ip nexthop add id 1 via 192.0.2.2 dev dummy10
     # ip route add 198.51.100.0/24 nhid 1
     # ip route del 198.51.100.0/24
     RTNETLINK answers: No such process
    
    Fix by matching on such a FIB info when legacy nexthop attributes are
    not specified in the request. An earlier check already covers the case
    where a nexthop ID is specified in the request.
    
    Add tests that cover these flows. Before the fix:
    
     # ./fib_nexthops.sh -t ipv4_fcnal
     ...
     TEST: Delete route when not specifying nexthop attributes           [FAIL]
    
     Tests passed:  11
     Tests failed:   1
    
    After the fix:
    
     # ./fib_nexthops.sh -t ipv4_fcnal
     ...
     TEST: Delete route when not specifying nexthop attributes           [ OK ]
    
     Tests passed:  12
     Tests failed:   0
    
    No regressions in other tests:
    
     # ./fib_nexthops.sh
     ...
     Tests passed: 228
     Tests failed:   0
    
     # ./fib_tests.sh
     ...
     Tests passed: 186
     Tests failed:   0
    
    Cc: stable@vger.kernel.org
    Reported-by: Jonas Gorski <jonas.gorski@gmail.com>
    Tested-by: Jonas Gorski <jonas.gorski@gmail.com>
    Fixes: 493ced1ac47c ("ipv4: Allow routes to use nexthop objects")
    Fixes: 6bf92d70e690 ("net: ipv4: fix route with nexthop object delete warning")
    Fixes: 61b91eb33a69 ("ipv4: Handle attempt to delete multipath route when fib_info contains an nh reference")
    Signed-off-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20221124210932.2470010-1-idosch@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv4: Handle attempt to delete multipath route when fib_info contains an nh reference [+ + +]
Author: David Ahern <dsahern@kernel.org>
Date:   Thu Oct 6 10:48:49 2022 -0600

    ipv4: Handle attempt to delete multipath route when fib_info contains an nh reference
    
    [ Upstream commit 61b91eb33a69c3be11b259c5ea484505cd79f883 ]
    
    Gwangun Jung reported a slab-out-of-bounds access in fib_nh_match:
        fib_nh_match+0xf98/0x1130 linux-6.0-rc7/net/ipv4/fib_semantics.c:961
        fib_table_delete+0x5f3/0xa40 linux-6.0-rc7/net/ipv4/fib_trie.c:1753
        inet_rtm_delroute+0x2b3/0x380 linux-6.0-rc7/net/ipv4/fib_frontend.c:874
    
    Separate nexthop objects are mutually exclusive with the legacy
    multipath spec. Fix fib_nh_match to return if the config for the
    to be deleted route contains a multipath spec while the fib_info
    is using a nexthop object.
    
    Fixes: 493ced1ac47c ("ipv4: Allow routes to use nexthop objects")
    Fixes: 6bf92d70e690 ("net: ipv4: fix route with nexthop object delete warning")
    Reported-by: Gwangun Jung <exsociety@gmail.com>
    Signed-off-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Tested-by: Ido Schimmel <idosch@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d5082d386eee ("ipv4: Fix route deletion when nexthop info is not specified")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Kconfig.debug: provide a little extra FRAME_WARN leeway when KASAN is enabled [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Fri Nov 25 12:07:50 2022 +0000

    Kconfig.debug: provide a little extra FRAME_WARN leeway when KASAN is enabled
    
    [ Upstream commit 152fe65f300e1819d59b80477d3e0999b4d5d7d2 ]
    
    When enabled, KASAN enlarges function's stack-frames.  Pushing quite a few
    over the current threshold.  This can mainly be seen on 32-bit
    architectures where the present limit (when !GCC) is a lowly 1024-Bytes.
    
    Link: https://lkml.kernel.org/r/20221125120750.3537134-3-lee@kernel.org
    Signed-off-by: Lee Jones <lee@kernel.org>
    Acked-by: Arnd Bergmann <arnd@arndb.de>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Cc: "Christian König" <christian.koenig@amd.com>
    Cc: Daniel Vetter <daniel@ffwll.ch>
    Cc: David Airlie <airlied@gmail.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Leo Li <sunpeng.li@amd.com>
    Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
    Cc: Maxime Ripard <mripard@kernel.org>
    Cc: Nathan Chancellor <nathan@kernel.org>
    Cc: Nick Desaulniers <ndesaulniers@google.com>
    Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Tom Rix <trix@redhat.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
lib/vdso: use "grep -E" instead of "egrep" [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Tue Sep 20 19:06:33 2022 +0200

    lib/vdso: use "grep -E" instead of "egrep"
    
    commit 8ac3b5cd3e0521d92f9755e90d140382fc292510 upstream.
    
    The latest version of grep claims the egrep is now obsolete so the build
    now contains warnings that look like:
            egrep: warning: egrep is obsolescent; using grep -E
    fix this up by moving the vdso Makefile to use "grep -E" instead.
    
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
    Link: https://lore.kernel.org/r/20220920170633.3133829-1-gregkh@linuxfoundation.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 5.4.226 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Dec 8 11:23:06 2022 +0100

    Linux 5.4.226
    
    Link: https://lore.kernel.org/r/20221205190808.733996403@linuxfoundation.org
    Tested-by: Florian Fainelli <f.fainelli@gmail.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Allen Pais <apais@linux.microsoft.com>
    Link: https://lore.kernel.org/r/20221206124054.310184563@linuxfoundation.org
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Florian Fainelli <f.fainelli@gmail.com>
    Tested-by: Allen Pais <apais@linux.microsoft.com>
    Tested-by: Linux Kernel Functional Testing <lkft@linaro.org>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Hulk Robot <hulkrobot@huawei.com>
    Tested-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
MIPS: pic32: treat port as signed integer [+ + +]
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Fri Oct 28 15:23:44 2022 +0200

    MIPS: pic32: treat port as signed integer
    
    [ Upstream commit 648060902aa302331b5d6e4f26d8ee0761d239ab ]
    
    get_port_from_cmdline() returns an int, yet is assigned to a char, which
    is wrong in its own right, but also, with char becoming unsigned, this
    poses problems, because -1 is used as an error value. Further
    complicating things, fw_init_early_console() is only ever called with a
    -1 argument. Fix this up by removing the unused argument from
    fw_init_early_console() and treating port as a proper signed integer.
    
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm: Fix '.data.once' orphan section warning [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Mon Nov 28 15:53:46 2022 -0700

    mm: Fix '.data.once' orphan section warning
    
    Portions of upstream commit a4055888629b ("mm/memcg: warning on !memcg
    after readahead page charged") were backported as commit cfe575954ddd
    ("mm: add VM_WARN_ON_ONCE_PAGE() macro"). Unfortunately, the backport
    did not account for the lack of commit 33def8498fdd ("treewide: Convert
    macro and uses of __section(foo) to __section("foo")") in kernels prior
    to 5.10, resulting in the following orphan section warnings on PowerPC
    clang builds with CONFIG_DEBUG_VM=y:
    
      powerpc64le-linux-gnu-ld: warning: orphan section `".data.once"' from `mm/huge_memory.o' being placed in section `".data.once"'
      powerpc64le-linux-gnu-ld: warning: orphan section `".data.once"' from `mm/huge_memory.o' being placed in section `".data.once"'
      powerpc64le-linux-gnu-ld: warning: orphan section `".data.once"' from `mm/huge_memory.o' being placed in section `".data.once"'
    
    This is a difference between how clang and gcc handle macro
    stringification, which was resolved for the kernel by not stringifying
    the argument to the __section() macro. Since that change was deemed not
    suitable for the stable kernels by commit 59f89518f510 ("once: fix
    section mismatch on clang builds"), do that same thing as that change
    and remove the quotes from the argument to __section().
    
    Fixes: cfe575954ddd ("mm: add VM_WARN_ON_ONCE_PAGE() macro")
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Acked-by: Hugh Dickins <hughd@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: core: Fix ambiguous TRIM and DISCARD arg [+ + +]
Author: Christian Löhle <CLoehle@hyperstone.com>
Date:   Thu Nov 17 14:42:09 2022 +0000

    mmc: core: Fix ambiguous TRIM and DISCARD arg
    
    commit 489d144563f23911262a652234b80c70c89c978b upstream.
    
    Clean up the MMC_TRIM_ARGS define that became ambiguous with DISCARD
    introduction.  While at it, let's fix one usage where MMC_TRIM_ARGS falsely
    included DISCARD too.
    
    Fixes: b3bf915308ca ("mmc: core: new discard feature support at eMMC v4.5")
    Signed-off-by: Christian Loehle <cloehle@hyperstone.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/11376b5714964345908f3990f17e0701@hyperstone.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: mmc_test: Fix removal of debugfs file [+ + +]
Author: Ye Bin <yebin10@huawei.com>
Date:   Wed Nov 23 17:55:06 2022 +0800

    mmc: mmc_test: Fix removal of debugfs file
    
    commit f4307b4df1c28842bb1950ff0e1b97e17031b17f upstream.
    
    In __mmc_test_register_dbgfs_file(), we need to assign 'file', as it's
    being used when removing the debugfs files when the mmc_test module is
    removed.
    
    Fixes: a04c50aaa916 ("mmc: core: no need to check return value of debugfs_create functions")
    Signed-off-by: Ye Bin <yebin10@huawei.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    [Ulf: Re-wrote the commit msg]
    Link: https://lore.kernel.org/r/20221123095506.1965691-1-yebin@huaweicloud.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-esdhc-imx: correct CQHCI exit halt state check [+ + +]
Author: Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
Date:   Mon Nov 21 11:57:21 2022 +0100

    mmc: sdhci-esdhc-imx: correct CQHCI exit halt state check
    
    commit a3cab1d2132474969871b5d7f915c5c0167b48b0 upstream.
    
    With the current logic the "failed to exit halt state" error would be
    shown even if any other bit than CQHCI_HALT was set in the CQHCI_CTL
    register, since the right hand side is always true. Fix this by using
    the correct operator (bit-wise instead of logical AND) to only check for
    the halt bit flag, which was obviously intended here.
    
    Fixes: 85236d2be844 ("mmc: sdhci-esdhc-imx: clear the HALT bit when enable CQE")
    Signed-off-by: Sebastian Falbesoner <sebastian.falbesoner@gmail.com>
    Acked-by: Haibo Chen <haibo.chen@nxp.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20221121105721.1903878-1-sebastian.falbesoner@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci-sprd: Fix no reset data and command after voltage switch [+ + +]
Author: Wenchao Chen <wenchao.chen@unisoc.com>
Date:   Wed Nov 30 20:13:28 2022 +0800

    mmc: sdhci-sprd: Fix no reset data and command after voltage switch
    
    commit dd30dcfa7a74a06f8dcdab260d8d5adf32f17333 upstream.
    
    After switching the voltage, no reset data and command will cause
    CMD2 timeout.
    
    Fixes: 29ca763fc26f ("mmc: sdhci-sprd: Add pin control support for voltage switch")
    Signed-off-by: Wenchao Chen <wenchao.chen@unisoc.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20221130121328.25553-1-wenchao.chen@unisoc.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci: Fix voltage switch delay [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Nov 28 15:32:56 2022 +0200

    mmc: sdhci: Fix voltage switch delay
    
    commit c981cdfb9925f64a364f13c2b4f98f877308a408 upstream.
    
    Commit 20b92a30b561 ("mmc: sdhci: update signal voltage switch code")
    removed voltage switch delays from sdhci because mmc core had been
    enhanced to support them. However that assumed that sdhci_set_ios()
    did a single clock change, which it did not, and so the delays in mmc
    core, which should have come after the first clock change, were not
    effective.
    
    Fix by avoiding re-configuring UHS and preset settings when the clock
    is turning on and the settings have not changed. That then also avoids
    the associated clock changes, so that then sdhci_set_ios() does a single
    clock change when voltage switching, and the mmc core delays become
    effective.
    
    To do that has meant keeping track of driver strength (host->drv_type),
    and cases of reinitialization (host->reinit_uhs).
    
    Note also, the 'turning_on_clk' restriction should not be necessary
    but is done to minimize the impact of the change on stable kernels.
    
    Fixes: 20b92a30b561 ("mmc: sdhci: update signal voltage switch code")
    Cc: stable@vger.kernel.org
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20221128133259.38305-2-adrian.hunter@intel.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci: use FIELD_GET for preset value bit masks [+ + +]
Author: Masahiro Yamada <yamada.masahiro@socionext.com>
Date:   Thu Mar 12 20:00:50 2020 +0900

    mmc: sdhci: use FIELD_GET for preset value bit masks
    
    commit fa0910107a9fea170b817f31da2a65463e00e80e upstream.
    
    Use the FIELD_GET macro to get access to the register fields.
    Delete the shift macros.
    
    Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
    Link: https://lore.kernel.org/r/20200312110050.21732-1-yamada.masahiro@socionext.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/9p: Fix a potential socket leak in p9_socket_open [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Thu Nov 24 16:10:05 2022 +0800

    net/9p: Fix a potential socket leak in p9_socket_open
    
    [ Upstream commit dcc14cfd7debe11b825cb077e75d91d2575b4cb8 ]
    
    Both p9_fd_create_tcp() and p9_fd_create_unix() will call
    p9_socket_open(). If the creation of p9_trans_fd fails,
    p9_fd_create_tcp() and p9_fd_create_unix() will return an
    error directly instead of releasing the cscoket, which will
    result in a socket leak.
    
    This patch adds sock_release() to fix the leak issue.
    
    Fixes: 6b18662e239a ("9p connect fixes")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    ACKed-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx4: Check retval of mlx4_bitmap_init [+ + +]
Author: Peter Kosyh <pkosyh@yandex.ru>
Date:   Thu Nov 17 18:28:06 2022 +0300

    net/mlx4: Check retval of mlx4_bitmap_init
    
    [ Upstream commit 594c61ffc77de0a197934aa0f1df9285c68801c6 ]
    
    If mlx4_bitmap_init fails, mlx4_bitmap_alloc_range will dereference
    the NULL pointer (bitmap->table).
    
    Make sure, that mlx4_bitmap_alloc_range called in no error case.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: d57febe1a478 ("net/mlx4: Add A0 hybrid steering")
    Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
    Signed-off-by: Peter Kosyh <pkosyh@yandex.ru>
    Link: https://lore.kernel.org/r/20221117152806.278072-1-pkosyh@yandex.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5: DR, Fix uninitialized var warning [+ + +]
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Thu Nov 10 21:47:07 2022 +0800

    net/mlx5: DR, Fix uninitialized var warning
    
    [ Upstream commit 52f7cf70eb8fac6111786c59ae9dfc5cf2bee710 ]
    
    Smatch warns this:
    
    drivers/net/ethernet/mellanox/mlx5/core/steering/dr_table.c:81
     mlx5dr_table_set_miss_action() error: uninitialized symbol 'ret'.
    
    Initializing ret with -EOPNOTSUPP and fix missing action case.
    
    Fixes: 7838e1725394 ("net/mlx5: DR, Expose steering table functionality")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Reviewed-by: Roi Dayan <roid@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix FW tracer timestamp calculation [+ + +]
Author: Moshe Shemesh <moshe@nvidia.com>
Date:   Thu Oct 20 12:25:59 2022 +0300

    net/mlx5: Fix FW tracer timestamp calculation
    
    [ Upstream commit 61db3d7b99a367416e489ccf764cc5f9b00d62a1 ]
    
    Fix a bug in calculation of FW tracer timestamp. Decreasing one in the
    calculation should effect only bits 52_7 and not effect bits 6_0 of the
    timestamp, otherwise bits 6_0 are always set in this calculation.
    
    Fixes: 70dd6fdb8987 ("net/mlx5: FW tracer, parse traces and kernel tracing support")
    Signed-off-by: Moshe Shemesh <moshe@nvidia.com>
    Reviewed-by: Feras Daoud <ferasda@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5: Fix uninitialized variable bug in outlen_write() [+ + +]
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Mon Nov 21 19:22:04 2022 +0800

    net/mlx5: Fix uninitialized variable bug in outlen_write()
    
    [ Upstream commit 3f5769a074c13d8f08455e40586600419e02a880 ]
    
    If sscanf() return 0, outlen is uninitialized and used in kzalloc(),
    this is unexpected. We should return -EINVAL if the string is invalid.
    
    Fixes: e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/mlx5e: Fix use-after-free when reverting termination table [+ + +]
Author: Roi Dayan <roid@nvidia.com>
Date:   Mon Nov 14 20:04:29 2022 +0200

    net/mlx5e: Fix use-after-free when reverting termination table
    
    [ Upstream commit 52c795af04441d76f565c4634f893e5b553df2ae ]
    
    When having multiple dests with termination tables and second one
    or afterwards fails the driver reverts usage of term tables but
    doesn't reset the assignment in attr->dests[num_vport_dests].termtbl
    which case a use-after-free when releasing the rule.
    Fix by resetting the assignment of termtbl to null.
    
    Fixes: 10caabdaad5a ("net/mlx5e: Use termination table for VLAN push actions")
    Signed-off-by: Roi Dayan <roid@nvidia.com>
    Reviewed-by: Maor Dickman <maord@nvidia.com>
    Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/qla3xxx: fix potential memleak in ql3xxx_send() [+ + +]
Author: Zhang Changzhong <zhangchangzhong@huawei.com>
Date:   Thu Nov 17 16:50:38 2022 +0800

    net/qla3xxx: fix potential memleak in ql3xxx_send()
    
    [ Upstream commit 62a7311fb96c61d281da9852dbee4712fc8c3277 ]
    
    The ql3xxx_send() returns NETDEV_TX_OK without freeing skb in error
    handling case, add dev_kfree_skb_any() to fix it.
    
    Fixes: bd36b0ac5d06 ("qla3xxx: Add support for Qlogic 4032 chip.")
    Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
    Link: https://lore.kernel.org/r/1668675039-21138-1-git-send-email-zhangchangzhong@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: ethernet: nixge: fix NULL dereference [+ + +]
Author: Yuri Karpov <YKarpov@ispras.ru>
Date:   Thu Nov 24 11:43:03 2022 +0300

    net: ethernet: nixge: fix NULL dereference
    
    [ Upstream commit 9256db4e45e8b497b0e993cc3ed4ad08eb2389b6 ]
    
    In function nixge_hw_dma_bd_release() dereference of NULL pointer
    priv->rx_bd_v is possible for the case of its allocation failure in
    nixge_hw_dma_bd_init().
    
    Move for() loop with priv->rx_bd_v dereference under the check for
    its validity.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 492caffa8a1a ("net: ethernet: nixge: Add support for National Instruments XGE netdev")
    Signed-off-by: Yuri Karpov <YKarpov@ispras.ru>
    Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: renesas: ravb: Fix promiscuous mode after system resumed [+ + +]
Author: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Date:   Mon Nov 28 15:56:04 2022 +0900

    net: ethernet: renesas: ravb: Fix promiscuous mode after system resumed
    
    [ Upstream commit d66233a312ec9013af3e37e4030b479a20811ec3 ]
    
    After system resumed on some environment board, the promiscuous mode
    is disabled because the SoC turned off. So, call ravb_set_rx_mode() in
    the ravb_resume() to fix the issue.
    
    Reported-by: Tho Vu <tho.vu.wh@renesas.com>
    Fixes: 0184165b2f42 ("ravb: add sleep PM suspend/resume support")
    Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
    Reviewed-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Link: https://lore.kernel.org/r/20221128065604.1864391-1-yoshihiro.shimoda.uh@renesas.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hsr: Fix potential use-after-free [+ + +]
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Fri Nov 25 15:57:24 2022 +0800

    net: hsr: Fix potential use-after-free
    
    [ Upstream commit 7e177d32442b7ed08a9fa61b61724abc548cb248 ]
    
    The skb is delivered to netif_rx() which may free it, after calling this,
    dereferencing skb may trigger use-after-free.
    
    Fixes: f421436a591d ("net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0)")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Link: https://lore.kernel.org/r/20221125075724.27912-1-yuehaibing@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: liquidio: simplify if expression [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Tue Nov 15 19:34:39 2022 +0200

    net: liquidio: simplify if expression
    
    [ Upstream commit 733d4bbf9514890eb53ebe75827bf1fb4fd25ebe ]
    
    Fix the warning reported by kbuild:
    
    cocci warnings: (new ones prefixed by >>)
    >> drivers/net/ethernet/cavium/liquidio/lio_main.c:1797:54-56: WARNING !A || A && B is equivalent to !A || B
       drivers/net/ethernet/cavium/liquidio/lio_main.c:1827:54-56: WARNING !A || A && B is equivalent to !A || B
    
    Fixes: 8979f428a4af ("net: liquidio: release resources when liquidio driver open failed")
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Reviewed-by: Saeed Mahameed <saeed@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: net_netdev: Fix error handling in ntb_netdev_init_module() [+ + +]
Author: Yuan Can <yuancan@huawei.com>
Date:   Thu Nov 24 07:09:17 2022 +0000

    net: net_netdev: Fix error handling in ntb_netdev_init_module()
    
    [ Upstream commit b8f79dccd38edf7db4911c353d9cd792ab13a327 ]
    
    The ntb_netdev_init_module() returns the ntb_transport_register_client()
    directly without checking its return value, if
    ntb_transport_register_client() failed, the NTB client device is not
    unregistered.
    
    Fix by unregister NTB client device when ntb_transport_register_client()
    failed.
    
    Fixes: 548c237c0a99 ("net: Add support for NTB virtual ethernet device")
    Signed-off-by: Yuan Can <yuancan@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: pch_gbe: fix pci device refcount leak while module exiting [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Thu Nov 17 21:51:48 2022 +0800

    net: pch_gbe: fix pci device refcount leak while module exiting
    
    [ Upstream commit 5619537284f1017e9f6c7500b02b859b3830a06d ]
    
    As comment of pci_get_domain_bus_and_slot() says, it returns
    a pci device with refcount increment, when finish using it,
    the caller must decrement the reference count by calling
    pci_dev_put().
    
    In pch_gbe_probe(), pci_get_domain_bus_and_slot() is called,
    so in error path in probe() and remove() function, pci_dev_put()
    should be called to avoid refcount leak. Compile tested only.
    
    Fixes: 1a0bdadb4e36 ("net/pch_gbe: supports eg20t ptp clock")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20221117135148.301014-1-yangyingliang@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: pch_gbe: fix potential memleak in pch_gbe_tx_queue() [+ + +]
Author: Wang Hai <wanghai38@huawei.com>
Date:   Thu Nov 17 14:55:27 2022 +0800

    net: pch_gbe: fix potential memleak in pch_gbe_tx_queue()
    
    [ Upstream commit 2360f9b8c4e81d242d4cbf99d630a2fffa681fab ]
    
    In pch_gbe_xmit_frame(), NETDEV_TX_OK will be returned whether
    pch_gbe_tx_queue() sends data successfully or not, so pch_gbe_tx_queue()
    needs to free skb before returning. But pch_gbe_tx_queue() returns without
    freeing skb in case of dma_map_single() fails. Add dev_kfree_skb_any()
    to fix it.
    
    Fixes: 77555ee72282 ("net: Add Gigabit Ethernet driver of Topcliff PCH")
    Signed-off-by: Wang Hai <wanghai38@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: phy: fix null-ptr-deref while probe() failed [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Wed Nov 23 21:28:08 2022 +0800

    net: phy: fix null-ptr-deref while probe() failed
    
    [ Upstream commit 369eb2c9f1f72adbe91e0ea8efb130f0a2ba11a6 ]
    
    I got a null-ptr-deref report as following when doing fault injection test:
    
    BUG: kernel NULL pointer dereference, address: 0000000000000058
    Oops: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 1 PID: 253 Comm: 507-spi-dm9051 Tainted: G    B            N 6.1.0-rc3+
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
    RIP: 0010:klist_put+0x2d/0xd0
    Call Trace:
     <TASK>
     klist_remove+0xf1/0x1c0
     device_release_driver_internal+0x23e/0x2d0
     bus_remove_device+0x1bd/0x240
     device_del+0x357/0x770
     phy_device_remove+0x11/0x30
     mdiobus_unregister+0xa5/0x140
     release_nodes+0x6a/0xa0
     devres_release_all+0xf8/0x150
     device_unbind_cleanup+0x19/0xd0
    
    //probe path:
    phy_device_register()
      device_add()
    
    phy_connect
      phy_attach_direct() //set device driver
        probe() //it's failed, driver is not bound
        device_bind_driver() // probe failed, it's not called
    
    //remove path:
    phy_device_remove()
      device_del()
        device_release_driver_internal()
          __device_release_driver() //dev->drv is not NULL
            klist_remove() <- knode_driver is not added yet, cause null-ptr-deref
    
    In phy_attach_direct(), after setting the 'dev->driver', probe() fails,
    device_bind_driver() is not called, so the knode_driver->n_klist is not
    set, then it causes null-ptr-deref in __device_release_driver() while
    deleting device. Fix this by setting dev->driver to NULL in the error
    path in phy_attach_direct().
    
    Fixes: e13934563db0 ("[PATCH] PHY Layer fixup")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: thunderx: Fix the ACPI memory leak [+ + +]
Author: Yu Liao <liaoyu15@huawei.com>
Date:   Wed Nov 23 16:22:36 2022 +0800

    net: thunderx: Fix the ACPI memory leak
    
    [ Upstream commit 661e5ebbafd26d9d2e3c749f5cf591e55c7364f5 ]
    
    The ACPI buffer memory (string.pointer) should be freed as the buffer is
    not used after returning from bgx_acpi_match_id(), free it to prevent
    memory leak.
    
    Fixes: 46b903a01c05 ("net, thunder, bgx: Add support to get MAC address from ACPI.")
    Signed-off-by: Yu Liao <liaoyu15@huawei.com>
    Link: https://lore.kernel.org/r/20221123082237.1220521-1-liaoyu15@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: tun: Fix use-after-free in tun_detach() [+ + +]
Author: Shigeru Yoshida <syoshida@redhat.com>
Date:   Fri Nov 25 02:51:34 2022 +0900

    net: tun: Fix use-after-free in tun_detach()
    
    [ Upstream commit 5daadc86f27ea4d691e2131c04310d0418c6cd12 ]
    
    syzbot reported use-after-free in tun_detach() [1].  This causes call
    trace like below:
    
    ==================================================================
    BUG: KASAN: use-after-free in notifier_call_chain+0x1ee/0x200 kernel/notifier.c:75
    Read of size 8 at addr ffff88807324e2a8 by task syz-executor.0/3673
    
    CPU: 0 PID: 3673 Comm: syz-executor.0 Not tainted 6.1.0-rc5-syzkaller-00044-gcc675d22e422 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/26/2022
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0xd1/0x138 lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:284 [inline]
     print_report+0x15e/0x461 mm/kasan/report.c:395
     kasan_report+0xbf/0x1f0 mm/kasan/report.c:495
     notifier_call_chain+0x1ee/0x200 kernel/notifier.c:75
     call_netdevice_notifiers_info+0x86/0x130 net/core/dev.c:1942
     call_netdevice_notifiers_extack net/core/dev.c:1983 [inline]
     call_netdevice_notifiers net/core/dev.c:1997 [inline]
     netdev_wait_allrefs_any net/core/dev.c:10237 [inline]
     netdev_run_todo+0xbc6/0x1100 net/core/dev.c:10351
     tun_detach drivers/net/tun.c:704 [inline]
     tun_chr_close+0xe4/0x190 drivers/net/tun.c:3467
     __fput+0x27c/0xa90 fs/file_table.c:320
     task_work_run+0x16f/0x270 kernel/task_work.c:179
     exit_task_work include/linux/task_work.h:38 [inline]
     do_exit+0xb3d/0x2a30 kernel/exit.c:820
     do_group_exit+0xd4/0x2a0 kernel/exit.c:950
     get_signal+0x21b1/0x2440 kernel/signal.c:2858
     arch_do_signal_or_restart+0x86/0x2300 arch/x86/kernel/signal.c:869
     exit_to_user_mode_loop kernel/entry/common.c:168 [inline]
     exit_to_user_mode_prepare+0x15f/0x250 kernel/entry/common.c:203
     __syscall_exit_to_user_mode_work kernel/entry/common.c:285 [inline]
     syscall_exit_to_user_mode+0x1d/0x50 kernel/entry/common.c:296
     do_syscall_64+0x46/0xb0 arch/x86/entry/common.c:86
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    The cause of the issue is that sock_put() from __tun_detach() drops
    last reference count for struct net, and then notifier_call_chain()
    from netdev_state_change() accesses that struct net.
    
    This patch fixes the issue by calling sock_put() from tun_detach()
    after all necessary accesses for the struct net has done.
    
    Fixes: 83c1f36f9880 ("tun: send netlink notification when the device is modified")
    Reported-by: syzbot+106f9b687cd64ee70cd1@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?id=96eb7f1ce75ef933697f24eeab928c4a716edefe [1]
    Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
    Link: https://lore.kernel.org/r/20221124175134.1589053-1-syoshida@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: qmi_wwan: add Telit 0x103a composition [+ + +]
Author: Enrico Sau <enrico.sau@gmail.com>
Date:   Tue Nov 15 11:58:59 2022 +0100

    net: usb: qmi_wwan: add Telit 0x103a composition
    
    [ Upstream commit e103ba33998d0f25653cc8ebe745b68d1ee10cda ]
    
    Add the following Telit LE910C4-WWX composition:
    
    0x103a: rmnet
    
    Signed-off-by: Enrico Sau <enrico.sau@gmail.com>
    Acked-by: Bjørn Mork <bjorn@mork.no>
    Link: https://lore.kernel.org/r/20221115105859.14324-1-enrico.sau@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc/nci: fix race with opening and closing [+ + +]
Author: Lin Ma <linma@zju.edu.cn>
Date:   Wed Nov 16 21:02:49 2022 +0800

    nfc/nci: fix race with opening and closing
    
    [ Upstream commit 0ad6bded175e829c2ca261529c9dce39a32a042d ]
    
    Previously we leverage NCI_UNREG and the lock inside nci_close_device to
    prevent the race condition between opening a device and closing a
    device. However, it still has problem because a failed opening command
    will erase the NCI_UNREG flag and allow another opening command to
    bypass the status checking.
    
    This fix corrects that by making sure the NCI_UNREG is held.
    
    Reported-by: syzbot+43475bf3cfbd6e41f5b7@syzkaller.appspotmail.com
    Fixes: 48b71a9e66c2 ("NFC: add NCI_UNREG flag to eliminate the race")
    Signed-off-by: Lin Ma <linma@zju.edu.cn>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFC: nci: fix memory leak in nci_rx_data_packet() [+ + +]
Author: Liu Shixin <liushixin2@huawei.com>
Date:   Fri Nov 18 16:24:19 2022 +0800

    NFC: nci: fix memory leak in nci_rx_data_packet()
    
    [ Upstream commit 53270fb0fd77fe786d8c07a0793981d797836b93 ]
    
    Syzbot reported a memory leak about skb:
    
    unreferenced object 0xffff88810e144e00 (size 240):
      comm "syz-executor284", pid 3701, jiffies 4294952403 (age 12.620s)
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
      backtrace:
        [<ffffffff83ab79a9>] __alloc_skb+0x1f9/0x270 net/core/skbuff.c:497
        [<ffffffff82a5cf64>] alloc_skb include/linux/skbuff.h:1267 [inline]
        [<ffffffff82a5cf64>] virtual_ncidev_write+0x24/0xe0 drivers/nfc/virtual_ncidev.c:116
        [<ffffffff815f6503>] do_loop_readv_writev fs/read_write.c:759 [inline]
        [<ffffffff815f6503>] do_loop_readv_writev fs/read_write.c:743 [inline]
        [<ffffffff815f6503>] do_iter_write+0x253/0x300 fs/read_write.c:863
        [<ffffffff815f66ed>] vfs_writev+0xdd/0x240 fs/read_write.c:934
        [<ffffffff815f68f6>] do_writev+0xa6/0x1c0 fs/read_write.c:977
        [<ffffffff848802d5>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
        [<ffffffff848802d5>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
        [<ffffffff84a00087>] entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    In nci_rx_data_packet(), if we don't get a valid conn_info, we will return
    directly but forget to release the skb.
    
    Reported-by: syzbot+cdb9a427d1bc08815104@syzkaller.appspotmail.com
    Fixes: 4aeee6871e8c ("NFC: nci: Add dynamic logical connections support")
    Signed-off-by: Liu Shixin <liushixin2@huawei.com>
    Link: https://lore.kernel.org/r/20221118082419.239475-1-liushixin2@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc: st-nci: fix incorrect validating logic in EVT_TRANSACTION [+ + +]
Author: Martin Faltesek <mfaltesek@google.com>
Date:   Mon Nov 21 18:42:44 2022 -0600

    nfc: st-nci: fix incorrect validating logic in EVT_TRANSACTION
    
    [ Upstream commit c60c152230828825c06e62a8f1ce956d4b659266 ]
    
    The first validation check for EVT_TRANSACTION has two different checks
    tied together with logical AND. One is a check for minimum packet length,
    and the other is for a valid aid_tag. If either condition is true (fails),
    then an error should be triggered. The fix is to change && to ||.
    
    Reported-by: Denis Efremov <denis.e.efremov@oracle.com>
    Reviewed-by: Guenter Roeck <groeck@google.com>
    Fixes: 5d1ceb7f5e56 ("NFC: st21nfcb: Add HCI transaction event support")
    Signed-off-by: Martin Faltesek <mfaltesek@google.com>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: st-nci: fix memory leaks in EVT_TRANSACTION [+ + +]
Author: Martin Faltesek <mfaltesek@google.com>
Date:   Mon Nov 21 18:42:45 2022 -0600

    nfc: st-nci: fix memory leaks in EVT_TRANSACTION
    
    [ Upstream commit 440f2ae9c9f06e26f5dcea697a53717fc61a318c ]
    
    Error path does not free previously allocated memory. Add devm_kfree() to
    the failure path.
    
    Reported-by: Denis Efremov <denis.e.efremov@oracle.com>
    Reviewed-by: Guenter Roeck <groeck@google.com>
    Fixes: 5d1ceb7f5e56 ("NFC: st21nfcb: Add HCI transaction event support")
    Signed-off-by: Martin Faltesek <mfaltesek@google.com>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfp: add port from netdev validation for EEPROM access [+ + +]
Author: Jaco Coetzee <jaco.coetzee@corigine.com>
Date:   Thu Nov 17 16:37:44 2022 +0100

    nfp: add port from netdev validation for EEPROM access
    
    [ Upstream commit 0873016d46f6dfafd1bdf4d9b935b3331b226f7c ]
    
    Setting of the port flag `NFP_PORT_CHANGED`, introduced
    to ensure the correct reading of EEPROM data, causes a
    fatal kernel NULL pointer dereference in cases where
    the target netdev type cannot be determined.
    
    Add validation of port struct pointer before attempting
    to set the `NFP_PORT_CHANGED` flag. Return that operation
    is not supported if the netdev type cannot be determined.
    
    Fixes: 4ae97cae07e1 ("nfp: ethtool: fix the display error of `ethtool -m DEVNAME`")
    Signed-off-by: Jaco Coetzee <jaco.coetzee@corigine.com>
    Reviewed-by: Louis Peens <louis.peens@corigine.com>
    Signed-off-by: Simon Horman <simon.horman@corigine.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: fix nilfs_sufile_mark_dirty() not set segment usage as dirty [+ + +]
Author: Chen Zhongjin <chenzhongjin@huawei.com>
Date:   Fri Nov 18 14:33:04 2022 +0800

    nilfs2: fix nilfs_sufile_mark_dirty() not set segment usage as dirty
    
    commit 512c5ca01a3610ab14ff6309db363de51f1c13a6 upstream.
    
    When extending segments, nilfs_sufile_alloc() is called to get an
    unassigned segment, then mark it as dirty to avoid accidentally allocating
    the same segment in the future.
    
    But for some special cases such as a corrupted image it can be unreliable.
    If such corruption of the dirty state of the segment occurs, nilfs2 may
    reallocate a segment that is in use and pick the same segment for writing
    twice at the same time.
    
    This will cause the problem reported by syzkaller:
    https://syzkaller.appspot.com/bug?id=c7c4748e11ffcc367cef04f76e02e931833cbd24
    
    This case started with segbuf1.segnum = 3, nextnum = 4 when constructed.
    It supposed segment 4 has already been allocated and marked as dirty.
    
    However the dirty state was corrupted and segment 4 usage was not dirty.
    For the first time nilfs_segctor_extend_segments() segment 4 was allocated
    again, which made segbuf2 and next segbuf3 had same segment 4.
    
    sb_getblk() will get same bh for segbuf2 and segbuf3, and this bh is added
    to both buffer lists of two segbuf.  It makes the lists broken which
    causes NULL pointer dereference.
    
    Fix the problem by setting usage as dirty every time in
    nilfs_sufile_mark_dirty(), which is called during constructing current
    segment to be written out and before allocating next segment.
    
    [chenzhongjin@huawei.com: add lock protection per Ryusuke]
      Link: https://lkml.kernel.org/r/20221121091141.214703-1-chenzhongjin@huawei.com
    Link: https://lkml.kernel.org/r/20221118063304.140187-1-chenzhongjin@huawei.com
    Fixes: 9ff05123e3bf ("nilfs2: segment constructor")
    Signed-off-by: Chen Zhongjin <chenzhongjin@huawei.com>
    Reported-by: <syzbot+77e4f0...@syzkaller.appspotmail.com>
    Reported-by: Liu Shixin <liushixin2@huawei.com>
    Acked-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nilfs2: fix NULL pointer dereference in nilfs_palloc_commit_free_entry() [+ + +]
Author: ZhangPeng <zhangpeng362@huawei.com>
Date:   Sat Nov 19 21:05:42 2022 +0900

    nilfs2: fix NULL pointer dereference in nilfs_palloc_commit_free_entry()
    
    commit f0a0ccda18d6fd826d7c7e7ad48a6ed61c20f8b4 upstream.
    
    Syzbot reported a null-ptr-deref bug:
    
     NILFS (loop0): segctord starting. Construction interval = 5 seconds, CP
     frequency < 30 seconds
     general protection fault, probably for non-canonical address
     0xdffffc0000000002: 0000 [#1] PREEMPT SMP KASAN
     KASAN: null-ptr-deref in range [0x0000000000000010-0x0000000000000017]
     CPU: 1 PID: 3603 Comm: segctord Not tainted
     6.1.0-rc2-syzkaller-00105-gb229b6ca5abb #0
     Hardware name: Google Compute Engine/Google Compute Engine, BIOS Google
     10/11/2022
     RIP: 0010:nilfs_palloc_commit_free_entry+0xe5/0x6b0
     fs/nilfs2/alloc.c:608
     Code: 00 00 00 00 fc ff df 80 3c 02 00 0f 85 cd 05 00 00 48 b8 00 00 00
     00 00 fc ff df 4c 8b 73 08 49 8d 7e 10 48 89 fa 48 c1 ea 03 <80> 3c 02
     00 0f 85 26 05 00 00 49 8b 46 10 be a6 00 00 00 48 c7 c7
     RSP: 0018:ffffc90003dff830 EFLAGS: 00010212
     RAX: dffffc0000000000 RBX: ffff88802594e218 RCX: 000000000000000d
     RDX: 0000000000000002 RSI: 0000000000002000 RDI: 0000000000000010
     RBP: ffff888071880222 R08: 0000000000000005 R09: 000000000000003f
     R10: 000000000000000d R11: 0000000000000000 R12: ffff888071880158
     R13: ffff88802594e220 R14: 0000000000000000 R15: 0000000000000004
     FS:  0000000000000000(0000) GS:ffff8880b9b00000(0000)
     knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007fb1c08316a8 CR3: 0000000018560000 CR4: 0000000000350ee0
     Call Trace:
      <TASK>
      nilfs_dat_commit_free fs/nilfs2/dat.c:114 [inline]
      nilfs_dat_commit_end+0x464/0x5f0 fs/nilfs2/dat.c:193
      nilfs_dat_commit_update+0x26/0x40 fs/nilfs2/dat.c:236
      nilfs_btree_commit_update_v+0x87/0x4a0 fs/nilfs2/btree.c:1940
      nilfs_btree_commit_propagate_v fs/nilfs2/btree.c:2016 [inline]
      nilfs_btree_propagate_v fs/nilfs2/btree.c:2046 [inline]
      nilfs_btree_propagate+0xa00/0xd60 fs/nilfs2/btree.c:2088
      nilfs_bmap_propagate+0x73/0x170 fs/nilfs2/bmap.c:337
      nilfs_collect_file_data+0x45/0xd0 fs/nilfs2/segment.c:568
      nilfs_segctor_apply_buffers+0x14a/0x470 fs/nilfs2/segment.c:1018
      nilfs_segctor_scan_file+0x3f4/0x6f0 fs/nilfs2/segment.c:1067
      nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1197 [inline]
      nilfs_segctor_collect fs/nilfs2/segment.c:1503 [inline]
      nilfs_segctor_do_construct+0x12fc/0x6af0 fs/nilfs2/segment.c:2045
      nilfs_segctor_construct+0x8e3/0xb30 fs/nilfs2/segment.c:2379
      nilfs_segctor_thread_construct fs/nilfs2/segment.c:2487 [inline]
      nilfs_segctor_thread+0x3c3/0xf30 fs/nilfs2/segment.c:2570
      kthread+0x2e4/0x3a0 kernel/kthread.c:376
      ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:306
      </TASK>
     ...
    
    If DAT metadata file is corrupted on disk, there is a case where
    req->pr_desc_bh is NULL and blocknr is 0 at nilfs_dat_commit_end() during
    a b-tree operation that cascadingly updates ancestor nodes of the b-tree,
    because nilfs_dat_commit_alloc() for a lower level block can initialize
    the blocknr on the same DAT entry between nilfs_dat_prepare_end() and
    nilfs_dat_commit_end().
    
    If this happens, nilfs_dat_commit_end() calls nilfs_dat_commit_free()
    without valid buffer heads in req->pr_desc_bh and req->pr_bitmap_bh, and
    causes the NULL pointer dereference above in
    nilfs_palloc_commit_free_entry() function, which leads to a crash.
    
    Fix this by adding a NULL check on req->pr_desc_bh and req->pr_bitmap_bh
    before nilfs_palloc_commit_free_entry() in nilfs_dat_commit_free().
    
    This also calls nilfs_error() in that case to notify that there is a fatal
    flaw in the filesystem metadata and prevent further operations.
    
    Link: https://lkml.kernel.org/r/00000000000097c20205ebaea3d6@google.com
    Link: https://lkml.kernel.org/r/20221114040441.1649940-1-zhangpeng362@huawei.com
    Link: https://lkml.kernel.org/r/20221119120542.17204-1-konishi.ryusuke@gmail.com
    Signed-off-by: ZhangPeng <zhangpeng362@huawei.com>
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+ebe05ee8e98f755f61d0@syzkaller.appspotmail.com
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nios2: add FORCE for vmlinuz.gz [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Wed Nov 23 19:20:53 2022 -0800

    nios2: add FORCE for vmlinuz.gz
    
    [ Upstream commit 869e4ae4cd2a23d625aaa14ae62dbebf768cb77d ]
    
    Add FORCE to placate a warning from make:
    
    arch/nios2/boot/Makefile:24: FORCE prerequisite is missing
    
    Fixes: 2fc8483fdcde ("nios2: Build infrastructure")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reviewed-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme: ensure subsystem reset is single threaded [+ + +]
Author: Keith Busch <kbusch@kernel.org>
Date:   Thu Sep 22 08:13:47 2022 -0700

    nvme: ensure subsystem reset is single threaded
    
    commit 1e866afd4bcdd01a70a5eddb4371158d3035ce03 upstream.
    
    The subsystem reset writes to a register, so we have to ensure the
    device state is capable of handling that otherwise the driver may access
    unmapped registers. Use the state machine to ensure the subsystem reset
    doesn't try to write registers on a device already undergoing this type
    of reset.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=214771
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nvme: restrict management ioctls to admin [+ + +]
Author: Keith Busch <kbusch@kernel.org>
Date:   Thu Sep 22 07:54:06 2022 -0700

    nvme: restrict management ioctls to admin
    
    commit 23e085b2dead13b51fe86d27069895b740f749c0 upstream.
    
    The passthrough commands already have this restriction, but the other
    operations do not. Require the same capabilities for all users as all of
    these operations, which include resets and rescans, can be disruptive.
    
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>

 
of: property: decrement node refcount in of_fwnode_get_reference_args() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Mon Nov 21 10:32:09 2022 +0800

    of: property: decrement node refcount in of_fwnode_get_reference_args()
    
    [ Upstream commit 60d865bd5a9b15a3961eb1c08bd4155682a3c81e ]
    
    In of_fwnode_get_reference_args(), the refcount of of_args.np has
    been incremented in the case of successful return from
    of_parse_phandle_with_args() or of_parse_phandle_with_fixed_args().
    
    Decrement the refcount if of_args is not returned to the caller of
    of_fwnode_get_reference_args().
    
    Fixes: 3e3119d3088f ("device property: Introduce fwnode_property_get_reference_args")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: Frank Rowand <frowand.list@gmail.com>
    Link: https://lore.kernel.org/r/20221121023209.3909759-1-yangyingliang@huawei.com
    Signed-off-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
packet: do not set TP_STATUS_CSUM_VALID on CHECKSUM_COMPLETE [+ + +]
Author: Willem de Bruijn <willemb@google.com>
Date:   Mon Nov 28 11:18:12 2022 -0500

    packet: do not set TP_STATUS_CSUM_VALID on CHECKSUM_COMPLETE
    
    [ Upstream commit b85f628aa158a653c006e9c1405a117baef8c868 ]
    
    CHECKSUM_COMPLETE signals that skb->csum stores the sum over the
    entire packet. It does not imply that an embedded l4 checksum
    field has been validated.
    
    Fixes: 682f048bd494 ("af_packet: pass checksum validation status to the user")
    Signed-off-by: Willem de Bruijn <willemb@google.com>
    Link: https://lore.kernel.org/r/20221128161812.640098-1-willemdebruijn.kernel@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
parisc: Increase FRAME_WARN to 2048 bytes on parisc [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Fri Nov 19 22:31:03 2021 +0100

    parisc: Increase FRAME_WARN to 2048 bytes on parisc
    
    [ Upstream commit 8d192bec534bd5b778135769a12e5f04580771f7 ]
    
    PA-RISC uses a much bigger frame size for functions than other
    architectures. So increase it to 2048 for 32- and 64-bit kernels.
    This fixes e.g. a warning in lib/xxhash.c.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Stable-dep-of: 152fe65f300e ("Kconfig.debug: provide a little extra FRAME_WARN leeway when KASAN is enabled")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

parisc: Increase size of gcc stack frame check [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Wed Jul 7 15:38:08 2021 +0200

    parisc: Increase size of gcc stack frame check
    
    [ Upstream commit 55b70eed81cba1331773d4aaf5cba2bb07475cd8 ]
    
    parisc uses much bigger frames than other architectures, so increase the
    stack frame check value to avoid compiler warnings.
    
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Abd-Alrhman Masalkhi <abd.masalkhi@gmail.com>
    Cc: Christoph Hellwig <hch@infradead.org>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Stable-dep-of: 152fe65f300e ("Kconfig.debug: provide a little extra FRAME_WARN leeway when KASAN is enabled")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pinctrl: intel: Save and restore pins in "direct IRQ" mode [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Nov 25 00:29:26 2022 +0200

    pinctrl: intel: Save and restore pins in "direct IRQ" mode
    
    commit 6989ea4881c8944fbf04378418bb1af63d875ef8 upstream.
    
    The firmware on some systems may configure GPIO pins to be
    an interrupt source in so called "direct IRQ" mode. In such
    cases the GPIO controller driver has no idea if those pins
    are being used or not. At the same time, there is a known bug
    in the firmwares that don't restore the pin settings correctly
    after suspend, i.e. by an unknown reason the Rx value becomes
    inverted.
    
    Hence, let's save and restore the pins that are configured
    as GPIOs in the input mode with GPIROUTIOXAPIC bit set.
    
    Cc: stable@vger.kernel.org
    Reported-and-tested-by: Dale Smith <dalepsmith@gmail.com>
    Reported-and-tested-by: John Harris <jmharris@gmail.com>
    BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=214749
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Link: https://lore.kernel.org/r/20221124222926.72326-1-andriy.shevchenko@linux.intel.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pinctrl: single: Fix potential division by zero [+ + +]
Author: Maxim Korotkov <korotkov.maxim.s@gmail.com>
Date:   Thu Nov 17 15:30:34 2022 +0300

    pinctrl: single: Fix potential division by zero
    
    [ Upstream commit 64c150339e7f6c5cbbe8c17a56ef2b3902612798 ]
    
    There is a possibility of dividing by zero due to the pcs->bits_per_pin
    if pcs->fmask() also has a value of zero and called fls
    from asm-generic/bitops/builtin-fls.h or arch/x86/include/asm/bitops.h.
    The function pcs_probe() has the branch that assigned to fmask 0 before
    pcs_allocate_pin_table() was called
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 4e7e8017a80e ("pinctrl: pinctrl-single: enhance to configure multiple pins of different modules")
    Signed-off-by: Maxim Korotkov <korotkov.maxim.s@gmail.com>
    Reviewed-by: Tony Lindgren <tony@atomide.com>
    Link: https://lore.kernel.org/r/20221117123034.27383-1-korotkov.maxim.s@gmail.com
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: acer-wmi: Enable SW_TABLET_MODE on Switch V 10 (SW5-017) [+ + +]
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Fri Nov 11 12:16:39 2022 +0100

    platform/x86: acer-wmi: Enable SW_TABLET_MODE on Switch V 10 (SW5-017)
    
    [ Upstream commit 1e817b889c7d8c14e7005258e15fec62edafe03c ]
    
    Like the Acer Switch 10 (SW5-012) and Acer Switch 10 (S1003) models
    the Acer Switch V 10 (SW5-017) supports reporting SW_TABLET_MODE
    through acer-wmi.
    
    Add a DMI quirk for the SW5-017 setting force_caps to ACER_CAP_KBD_DOCK
    (these devices have no other acer-wmi based functionality).
    
    Cc: Rudolf Polzer <rpolzer@google.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20221111111639.35730-1-hdegoede@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: asus-wmi: add missing pci_dev_put() in asus_wmi_set_xusb2pr() [+ + +]
Author: Xiongfeng Wang <wangxiongfeng2@huawei.com>
Date:   Fri Nov 11 18:07:52 2022 +0800

    platform/x86: asus-wmi: add missing pci_dev_put() in asus_wmi_set_xusb2pr()
    
    [ Upstream commit d0cdd85046b15089df71a50548617ac1025300d0 ]
    
    pci_get_device() will increase the reference count for the returned
    pci_dev. We need to use pci_dev_put() to decrease the reference count
    before asus_wmi_set_xusb2pr() returns.
    
    Signed-off-by: Xiongfeng Wang <wangxiongfeng2@huawei.com>
    Link: https://lore.kernel.org/r/20221111100752.134311-1-wangxiongfeng2@huawei.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: hp-wmi: Ignore Smart Experience App event [+ + +]
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Mon Nov 14 15:38:41 2022 +0800

    platform/x86: hp-wmi: Ignore Smart Experience App event
    
    [ Upstream commit 8b9b6a044b408283b086702b1d9e3cf4ba45b426 ]
    
    Sometimes hp-wmi driver complains on system resume:
    [ 483.116451] hp_wmi: Unknown event_id - 33 - 0x0
    
    According to HP it's a feature called "HP Smart Experience App" and it's
    safe to be ignored.
    
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Link: https://lore.kernel.org/r/20221114073842.205392-1-kai.heng.feng@canonical.com
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
proc: avoid integer type confusion in get_proc_long [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon Dec 5 11:33:40 2022 -0800

    proc: avoid integer type confusion in get_proc_long
    
    commit e6cfaf34be9fcd1a8285a294e18986bfc41a409c upstream.
    
    proc_get_long() is passed a size_t, but then assigns it to an 'int'
    variable for the length.  Let's not do that, even if our IO paths are
    limited to MAX_RW_COUNT (exactly because of these kinds of type errors).
    
    So do the proper test in the rigth type.
    
    Reported-by: Kyle Zeng <zengyhkyle@gmail.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

proc: proc_skip_spaces() shouldn't think it is working on C strings [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon Dec 5 12:09:06 2022 -0800

    proc: proc_skip_spaces() shouldn't think it is working on C strings
    
    commit bce9332220bd677d83b19d21502776ad555a0e73 upstream.
    
    proc_skip_spaces() seems to think it is working on C strings, and ends
    up being just a wrapper around skip_spaces() with a really odd calling
    convention.
    
    Instead of basing it on skip_spaces(), it should have looked more like
    proc_skip_char(), which really is the exact same function (except it
    skips a particular character, rather than whitespace).  So use that as
    inspiration, odd coding and all.
    
    Now the calling convention actually makes sense and works for the
    intended purpose.
    
    Reported-and-tested-by: Kyle Zeng <zengyhkyle@gmail.com>
    Acked-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
qlcnic: fix sleep-in-atomic-context bugs caused by msleep [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Wed Nov 23 18:06:42 2022 +0800

    qlcnic: fix sleep-in-atomic-context bugs caused by msleep
    
    [ Upstream commit 8dbd6e4ce1b9c527921643d9e34f188a10d4e893 ]
    
    The watchdog timer is used to monitor whether the process
    of transmitting data is timeout. If we use qlcnic driver,
    the dev_watchdog() that is the timer handler of watchdog
    timer will call qlcnic_tx_timeout() to process the timeout.
    But the qlcnic_tx_timeout() calls msleep(), as a result,
    the sleep-in-atomic-context bugs will happen. The processes
    are shown below:
    
       (atomic context)
    dev_watchdog
      qlcnic_tx_timeout
        qlcnic_83xx_idc_request_reset
          qlcnic_83xx_lock_driver
            msleep
    
    ---------------------------
    
       (atomic context)
    dev_watchdog
      qlcnic_tx_timeout
        qlcnic_83xx_idc_request_reset
          qlcnic_83xx_lock_driver
            qlcnic_83xx_recover_driver_lock
              msleep
    
    Fix by changing msleep() to mdelay(), the mdelay() is
    busy-waiting and the bugs could be mitigated.
    
    Fixes: 629263acaea3 ("qlcnic: 83xx CNA inter driver communication mechanism")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
regulator: core: fix kobject release warning and memory leak in regulator_register() [+ + +]
Author: Zeng Heng <zengheng4@huawei.com>
Date:   Wed Nov 16 15:43:39 2022 +0800

    regulator: core: fix kobject release warning and memory leak in regulator_register()
    
    [ Upstream commit 5f4b204b6b8153923d5be8002c5f7082985d153f ]
    
    Here is a warning report about lack of registered release()
    from kobject lib:
    
    Device '(null)' does not have a release() function, it is broken and must be fixed.
    WARNING: CPU: 0 PID: 48430 at drivers/base/core.c:2332 device_release+0x104/0x120
    Call Trace:
     kobject_put+0xdc/0x180
     put_device+0x1b/0x30
     regulator_register+0x651/0x1170
     devm_regulator_register+0x4f/0xb0
    
    When regulator_register() returns fail and directly goto `clean` symbol,
    rdev->dev has not registered release() function yet (which is registered
    by regulator_class in the following), so rdev needs to be freed manually.
    If rdev->dev.of_node is not NULL, which means the of_node has gotten by
    regulator_of_get_init_data(), it needs to call of_node_put() to avoid
    refcount leak.
    
    Otherwise, only calling put_device() would lead memory leak of rdev
    in further:
    
    unreferenced object 0xffff88810d0b1000 (size 2048):
      comm "107-i2c-rtq6752", pid 48430, jiffies 4342258431 (age 1341.780s)
      backtrace:
        kmalloc_trace+0x22/0x110
        regulator_register+0x184/0x1170
        devm_regulator_register+0x4f/0xb0
    
    When regulator_register() returns fail and goto `wash` symbol,
    rdev->dev has registered release() function, so directly call
    put_device() to cleanup everything.
    
    Fixes: d3c731564e09 ("regulator: plug of_node leak in regulator_register()'s error path")
    Signed-off-by: Zeng Heng <zengheng4@huawei.com>
    Link: https://lore.kernel.org/r/20221116074339.1024240-1-zengheng4@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: core: fix UAF in destroy_regulator() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Wed Nov 16 11:37:06 2022 +0800

    regulator: core: fix UAF in destroy_regulator()
    
    [ Upstream commit 1f386d6894d0f1b7de8ef640c41622ddd698e7ab ]
    
    I got a UAF report as following:
    
    ==================================================================
    BUG: KASAN: use-after-free in __lock_acquire+0x935/0x2060
    Read of size 8 at addr ffff88810e838220 by task python3/268
    Call Trace:
     <TASK>
     dump_stack_lvl+0x67/0x83
     print_report+0x178/0x4b0
     kasan_report+0x90/0x190
     __lock_acquire+0x935/0x2060
     lock_acquire+0x156/0x400
     _raw_spin_lock+0x2a/0x40
     lockref_get+0x11/0x30
     simple_recursive_removal+0x41/0x440
     debugfs_remove.part.12+0x32/0x50
     debugfs_remove+0x29/0x30
     _regulator_put.cold.54+0x3e/0x27f
     regulator_put+0x1f/0x30
     release_nodes+0x6a/0xa0
     devres_release_all+0xf8/0x150
    
    Allocated by task 37:
     kasan_save_stack+0x1c/0x40
     kasan_set_track+0x21/0x30
     __kasan_slab_alloc+0x5d/0x70
     slab_post_alloc_hook+0x62/0x510
     kmem_cache_alloc_lru+0x222/0x5a0
     __d_alloc+0x31/0x440
     d_alloc+0x30/0xf0
     d_alloc_parallel+0xc4/0xd20
     __lookup_slow+0x15e/0x2f0
     lookup_one_len+0x13a/0x150
     start_creating+0xea/0x190
     debugfs_create_dir+0x1e/0x210
     create_regulator+0x254/0x4e0
     _regulator_get+0x2a1/0x467
     _devm_regulator_get+0x5a/0xb0
     regulator_virtual_probe+0xb9/0x1a0
    
    Freed by task 30:
     kasan_save_stack+0x1c/0x40
     kasan_set_track+0x21/0x30
     kasan_save_free_info+0x2a/0x50
     __kasan_slab_free+0x102/0x190
     kmem_cache_free+0xf6/0x600
     rcu_core+0x54c/0x12b0
     __do_softirq+0xf2/0x5e3
    
    Last potentially related work creation:
     kasan_save_stack+0x1c/0x40
     __kasan_record_aux_stack+0x98/0xb0
     call_rcu+0x42/0x700
     dentry_free+0x6c/0xd0
     __dentry_kill+0x23b/0x2d0
     dput.part.31+0x431/0x780
     simple_recursive_removal+0xa9/0x440
     debugfs_remove.part.12+0x32/0x50
     debugfs_remove+0x29/0x30
     regulator_unregister+0xe3/0x230
     release_nodes+0x6a/0xa0
    
    ==================================================================
    
    Here is how happened:
    
    processor A                                     processor B
    regulator_register()
      rdev_init_debugfs()
        rdev->debugfs = debugfs_create_dir()
                                                    devm_regulator_get()
                                                      rdev = regulator_dev_lookup()
                                                      create_regulator(rdev)
                                                        // using rdev->debugfs as parent
                                                        debugfs_create_dir(rdev->debugfs)
    
    mfd_remove_devices_fn()
      release_nodes()
        regulator_unregister()
          // free rdev->debugfs
          debugfs_remove_recursive(rdev->debugfs)
                                                    release_nodes()
                                                      destroy_regulator()
                                                        debugfs_remove_recursive() <- causes UAF
    
    In devm_regulator_get(), after getting rdev, the refcount
    is get, so fix this by moving debugfs_remove_recursive()
    to regulator_dev_release(), then it can be proctected by
    the refcount, the 'rdev->debugfs' can not be freed until
    the refcount is 0.
    
    Fixes: 5de705194e98 ("regulator: Add basic per consumer debugfs")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Link: https://lore.kernel.org/r/20221116033706.3595812-1-yangyingliang@huawei.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

regulator: twl6030: re-add TWL6032_SUBCLASS [+ + +]
Author: Andreas Kemnade <andreas@kemnade.info>
Date:   Sun Nov 20 23:12:07 2022 +0100

    regulator: twl6030: re-add TWL6032_SUBCLASS
    
    [ Upstream commit 3d6c982b26db94cc21bc9f7784f63e8286b7be62 ]
    
    In former times, info->feature was populated via the parent driver
    by pdata/regulator_init_data->driver_data for all regulators when
    USB_PRODUCT_ID_LSB indicates a TWL6032.
    Today, the information is not set, so re-add it at the regulator
    definitions.
    
    Fixes: 25d82337705e2 ("regulator: twl: make driver DT only")
    Signed-off-by: Andreas Kemnade <andreas@kemnade.info>
    Link: https://lore.kernel.org/r/20221120221208.3093727-2-andreas@kemnade.info
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "clocksource/drivers/riscv: Events are stopped during CPU suspend" [+ + +]
Author: Conor Dooley <conor.dooley@microchip.com>
Date:   Tue Nov 22 12:16:21 2022 +0000

    Revert "clocksource/drivers/riscv: Events are stopped during CPU suspend"
    
    [ Upstream commit d9f15a9de44affe733e34f93bc184945ba277e6d ]
    
    This reverts commit 232ccac1bd9b5bfe73895f527c08623e7fa0752d.
    
    On the subject of suspend, the RISC-V SBI spec states:
    
      This does not cover whether any given events actually reach the hart or
      not, just what the hart will do if it receives an event. On PolarFire
      SoC, and potentially other SiFive based implementations, events from the
      RISC-V timer do reach a hart during suspend. This is not the case for the
      implementation on the Allwinner D1 - there timer events are not received
      during suspend.
    
    To fix this, the CLOCK_EVT_FEAT_C3STOP (mis)feature was enabled for the
    timer driver - but this has broken both RCU stall detection and timers
    generally on PolarFire SoC and potentially other SiFive based
    implementations.
    
    If an AXI read to the PCIe controller on PolarFire SoC times out, the
    system will stall, however, with CLOCK_EVT_FEAT_C3STOP active, the system
    just locks up without RCU stalling:
    
            io scheduler mq-deadline registered
            io scheduler kyber registered
            microchip-pcie 2000000000.pcie: host bridge /soc/pcie@2000000000 ranges:
            microchip-pcie 2000000000.pcie:      MEM 0x2008000000..0x2087ffffff -> 0x0008000000
            microchip-pcie 2000000000.pcie: sec error in pcie2axi buffer
            microchip-pcie 2000000000.pcie: ded error in pcie2axi buffer
            microchip-pcie 2000000000.pcie: axi read request error
            microchip-pcie 2000000000.pcie: axi read timeout
            microchip-pcie 2000000000.pcie: sec error in pcie2axi buffer
            microchip-pcie 2000000000.pcie: ded error in pcie2axi buffer
            microchip-pcie 2000000000.pcie: sec error in pcie2axi buffer
            microchip-pcie 2000000000.pcie: ded error in pcie2axi buffer
            microchip-pcie 2000000000.pcie: sec error in pcie2axi buffer
            microchip-pcie 2000000000.pcie: ded error in pcie2axi buffer
            Freeing initrd memory: 7332K
    
    Similarly issues were reported with clock_nanosleep() - with a test app
    that sleeps each cpu for 6, 5, 4, 3 ms respectively, HZ=250 & the blamed
    commit in place, the sleep times are rounded up to the next jiffy:
    
    == CPU: 1 ==      == CPU: 2 ==      == CPU: 3 ==      == CPU: 4 ==
    Mean: 7.974992    Mean: 7.976534    Mean: 7.962591    Mean: 3.952179
    Std Dev: 0.154374 Std Dev: 0.156082 Std Dev: 0.171018 Std Dev: 0.076193
    Hi: 9.472000      Hi: 10.495000     Hi: 8.864000      Hi: 4.736000
    Lo: 6.087000      Lo: 6.380000      Lo: 4.872000      Lo: 3.403000
    Samples: 521      Samples: 521      Samples: 521      Samples: 521
    
    Fortunately, the D1 has a second timer, which is "currently used in
    preference to the RISC-V/SBI timer driver" so a revert here does not
    hurt operation of D1 in its current form.
    
    Ultimately, a DeviceTree property (or node) will be added to encode the
    behaviour of the timers, but until then revert the addition of
    CLOCK_EVT_FEAT_C3STOP.
    
    Fixes: 232ccac1bd9b ("clocksource/drivers/riscv: Events are stopped during CPU suspend")
    Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
    Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
    Acked-by: Samuel Holland <samuel@sholland.org>
    Link: https://lore.kernel.org/linux-riscv/YzYTNQRxLr7Q9JR0@spud/
    Link: https://github.com/riscv-non-isa/riscv-sbi-doc/issues/98/
    Link: https://lore.kernel.org/linux-riscv/bf6d3b1f-f703-4a25-833e-972a44a04114@sholland.org/
    Link: https://lore.kernel.org/r/20221122121620.3522431-1-conor.dooley@microchip.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RISC-V: vdso: Do not add missing symbols to version section in linker script [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Tue Nov 8 10:13:23 2022 -0700

    RISC-V: vdso: Do not add missing symbols to version section in linker script
    
    [ Upstream commit fcae44fd36d052e956e69a64642fc03820968d78 ]
    
    Recently, ld.lld moved from '--undefined-version' to
    '--no-undefined-version' as the default, which breaks the compat vDSO
    build:
    
      ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_gettimeofday' failed: symbol not defined
      ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_gettime' failed: symbol not defined
      ld.lld: error: version script assignment of 'LINUX_4.15' to symbol '__vdso_clock_getres' failed: symbol not defined
    
    These symbols are not present in the compat vDSO or the regular vDSO for
    32-bit but they are unconditionally included in the version section of
    the linker script, which is prohibited with '--no-undefined-version'.
    
    Fix this issue by only including the symbols that are actually exported
    in the version section of the linker script.
    
    Link: https://github.com/ClangBuiltLinux/linux/issues/1756
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Tested-by: Conor Dooley <conor.dooley@microchip.com>
    Link: https://lore.kernel.org/r/20221108171324.3377226-1-nathan@kernel.org/
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/crashdump: fix TOD programmable field size [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Fri Nov 18 13:05:39 2022 +0100

    s390/crashdump: fix TOD programmable field size
    
    [ Upstream commit f44e07a8afdd713ddc1a8832c39372fe5dd86895 ]
    
    The size of the TOD programmable field was incorrectly increased from
    four to eight bytes with commit 1a2c5840acf9 ("s390/dump: cleanup CPU
    save area handling").
    This leads to an elf notes section NT_S390_TODPREG which has a size of
    eight instead of four bytes in case of kdump, however even worse is
    that the contents is incorrect: it is supposed to contain only the
    contents of the TOD programmable field, but in fact contains a mix of
    the TOD programmable field (32 bit upper bits) and parts of the CPU
    timer register (lower 32 bits).
    
    Fix this by simply changing the size of the todpreg field within the
    save area structure. This will implicitly also fix the size of the
    corresponding elf notes sections.
    
    This also gets rid of this compile time warning:
    
    in function ‘fortify_memcpy_chk’,
        inlined from ‘save_area_add_regs’ at arch/s390/kernel/crash_dump.c:99:2:
    ./include/linux/fortify-string.h:413:25: error: call to ‘__read_overflow2_field’
       declared with attribute warning: detected read beyond size of field
       (2nd parameter); maybe use struct_group()? [-Werror=attribute-warning]
      413 |                         __read_overflow2_field(q_size_field, size);
          |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Fixes: 1a2c5840acf9 ("s390/dump: cleanup CPU save area handling")
    Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/dasd: fix no record found for raw_track_access [+ + +]
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Wed Nov 23 17:07:18 2022 +0100

    s390/dasd: fix no record found for raw_track_access
    
    [ Upstream commit 590ce6d96d6a224b470a3862c33a483d5022bfdb ]
    
    For DASD devices in raw_track_access mode only full track images are
    read and written.
    For this purpose it is not necessary to do search operation in the
    locate record extended function. The documentation even states that
    this might fail if the searched record is not found on a track.
    
    Currently the driver sets a value of 1 in the search field for the first
    record after record zero. This is the default for disks not in
    raw_track_access mode but record 1 might be missing on a completely
    empty track.
    
    There has not been any problem with this on IBM storage servers but it
    might lead to errors with DASD devices on other vendors storage servers.
    
    Fix this by setting the search field to 0. Record zero is always available
    even on a completely empty track.
    
    Fixes: e4dbb0f2b5dd ("[S390] dasd: Add support for raw ECKD access.")
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Link: https://lore.kernel.org/r/20221123160719.3002694-4-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scripts/faddr2line: Fix regression in name resolution on ppc64le [+ + +]
Author: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Date:   Tue Sep 27 13:22:11 2022 +0530

    scripts/faddr2line: Fix regression in name resolution on ppc64le
    
    [ Upstream commit 2d77de1581bb5b470486edaf17a7d70151131afd ]
    
    Commit 1d1a0e7c5100 ("scripts/faddr2line: Fix overlapping text section
    failures") can cause faddr2line to fail on ppc64le on some
    distributions, while it works fine on other distributions. The failure
    can be attributed to differences in the readelf output.
    
      $ ./scripts/faddr2line vmlinux find_busiest_group+0x00
      no match for find_busiest_group+0x00
    
    On ppc64le, readelf adds the localentry tag before the symbol name on
    some distributions, and adds the localentry tag after the symbol name on
    other distributions. This problem has been discussed previously:
    
      https://lore.kernel.org/bpf/20191211160133.GB4580@calabresa/
    
    This problem can be overcome by filtering out the localentry tags in the
    readelf output. Similar fixes are already present in the kernel by way
    of the following commits:
    
      1fd6cee127e2 ("libbpf: Fix VERSIONED_SYM_COUNT number parsing")
      aa915931ac3e ("libbpf: Fix readelf output parsing for Fedora")
    
    [jpoimboe: rework commit log]
    
    Fixes: 1d1a0e7c5100 ("scripts/faddr2line: Fix overlapping text section failures")
    Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Acked-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
    Reviewed-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Link: https://lore.kernel.org/r/20220927075211.897152-1-srikar@linux.vnet.ibm.com
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Signed-off-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sctp: fix memory leak in sctp_stream_outq_migrate() [+ + +]
Author: Zhengchao Shao <shaozhengchao@huawei.com>
Date:   Sat Nov 26 11:17:20 2022 +0800

    sctp: fix memory leak in sctp_stream_outq_migrate()
    
    [ Upstream commit 9ed7bfc79542119ac0a9e1ce8a2a5285e43433e9 ]
    
    When sctp_stream_outq_migrate() is called to release stream out resources,
    the memory pointed to by prio_head in stream out is not released.
    
    The memory leak information is as follows:
     unreferenced object 0xffff88801fe79f80 (size 64):
       comm "sctp_repo", pid 7957, jiffies 4294951704 (age 36.480s)
       hex dump (first 32 bytes):
         80 9f e7 1f 80 88 ff ff 80 9f e7 1f 80 88 ff ff  ................
         90 9f e7 1f 80 88 ff ff 90 9f e7 1f 80 88 ff ff  ................
       backtrace:
         [<ffffffff81b215c6>] kmalloc_trace+0x26/0x60
         [<ffffffff88ae517c>] sctp_sched_prio_set+0x4cc/0x770
         [<ffffffff88ad64f2>] sctp_stream_init_ext+0xd2/0x1b0
         [<ffffffff88aa2604>] sctp_sendmsg_to_asoc+0x1614/0x1a30
         [<ffffffff88ab7ff1>] sctp_sendmsg+0xda1/0x1ef0
         [<ffffffff87f765ed>] inet_sendmsg+0x9d/0xe0
         [<ffffffff8754b5b3>] sock_sendmsg+0xd3/0x120
         [<ffffffff8755446a>] __sys_sendto+0x23a/0x340
         [<ffffffff87554651>] __x64_sys_sendto+0xe1/0x1b0
         [<ffffffff89978b49>] do_syscall_64+0x39/0xb0
         [<ffffffff89a0008b>] entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Link: https://syzkaller.appspot.com/bug?exrid=29c402e56c4760763cc0
    Fixes: 637784ade221 ("sctp: introduce priority based stream scheduler")
    Reported-by: syzbot+29c402e56c4760763cc0@syzkaller.appspotmail.com
    Signed-off-by: Zhengchao Shao <shaozhengchao@huawei.com>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Link: https://lore.kernel.org/r/20221126031720.378562-1-shaozhengchao@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: net: add delete nexthop route warning test [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Apr 1 10:33:43 2022 +0300

    selftests: net: add delete nexthop route warning test
    
    [ Upstream commit 392baa339c6a42a2cb088e5e5df2b59b8f89be24 ]
    
    Add a test which causes a WARNING on kernels which treat a
    nexthop route like a normal route when comparing for deletion and a
    device is specified. That is, a route is found but we hit a warning while
    matching it. The warning is from fib_info_nh() in include/net/nexthop.h
    because we run it on a fib_info with nexthop object. The call chain is:
     inet_rtm_delroute -> fib_table_delete -> fib_nh_match (called with a
    nexthop fib_info and also with fc_oif set thus calling fib_info_nh on
    the fib_info and triggering the warning).
    
    Repro steps:
     $ ip nexthop add id 12 via 172.16.1.3 dev veth1
     $ ip route add 172.16.101.1/32 nhid 12
     $ ip route delete 172.16.101.1/32 dev veth1
    
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d5082d386eee ("ipv4: Fix route deletion when nexthop info is not specified")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests: net: fix nexthop warning cleanup double ip typo [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Apr 1 18:54:27 2022 +0300

    selftests: net: fix nexthop warning cleanup double ip typo
    
    [ Upstream commit 692930cc435099580a4b9e32fa781b0688c18439 ]
    
    I made a stupid typo when adding the nexthop route warning selftest and
    added both $IP and ip after it (double ip) on the cleanup path. The
    error doesn't show up when running the test, but obviously it doesn't
    cleanup properly after it.
    
    Fixes: 392baa339c6a ("selftests: net: add delete nexthop route warning test")
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: d5082d386eee ("ipv4: Fix route deletion when nexthop info is not specified")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
serial: 8250: 8250_omap: Avoid RS485 RTS glitch on ->set_termios() [+ + +]
Author: Lukas Wunner <lukas@wunner.de>
Date:   Tue Sep 27 13:52:34 2022 +0200

    serial: 8250: 8250_omap: Avoid RS485 RTS glitch on ->set_termios()
    
    [ Upstream commit 038ee49fef18710bedd38b531d173ccd746b2d8d ]
    
    RS485-enabled UART ports on TI Sitara SoCs with active-low polarity
    exhibit a Transmit Enable glitch on ->set_termios():
    
    omap8250_restore_regs(), which is called from omap_8250_set_termios(),
    sets the TCRTLR bit in the MCR register and clears all other bits,
    including RTS.  If RTS uses active-low polarity, it is now asserted
    for no reason.
    
    The TCRTLR bit is subsequently cleared by writing up->mcr to the MCR
    register.  That variable is always zero, so the RTS bit is still cleared
    (incorrectly so if RTS is active-high).
    
    (up->mcr is not, as one might think, a cache of the MCR register's
    current value.  Rather, it only caches a single bit of that register,
    the AFE bit.  And it only does so if the UART supports the AFE bit,
    which OMAP does not.  For details see serial8250_do_set_termios() and
    serial8250_do_set_mctrl().)
    
    Finally at the end of omap8250_restore_regs(), the MCR register is
    restored (and RTS deasserted) by a call to up->port.ops->set_mctrl()
    (which equals serial8250_set_mctrl()) and serial8250_em485_stop_tx().
    
    So there's an RTS glitch between setting TCRTLR and calling
    serial8250_em485_stop_tx().  Avoid by using a read-modify-write
    when setting TCRTLR.
    
    While at it, drop a redundant initialization of up->mcr.  As explained
    above, the variable isn't used by the driver and it is already
    initialized to zero because it is part of the static struct
    serial8250_ports[] declared in 8250_core.c.  (Static structs are
    initialized to zero per section 6.7.8 nr. 10 of the C99 standard.)
    
    Cc: Jan Kiszka <jan.kiszka@siemens.com>
    Cc: Su Bao Cheng <baocheng.su@siemens.com>
    Tested-by: Matthias Schiffer <matthias.schiffer@ew.tq-group.com>
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Link: https://lore.kernel.org/r/6554b0241a2c7fd50f32576fdbafed96709e11e8.1664278942.git.lukas@wunner.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: spi-imx: Fix spi_bus_clk if requested clock is higher than input clock [+ + +]
Author: Frieder Schrempf <frieder.schrempf@kontron.de>
Date:   Tue Nov 15 19:10:00 2022 +0100

    spi: spi-imx: Fix spi_bus_clk if requested clock is higher than input clock
    
    [ Upstream commit db2d2dc9a0b58c6faefb6b002fdbed4f0362d1a4 ]
    
    In case the requested bus clock is higher than the input clock, the correct
    dividers (pre = 0, post = 0) are returned from mx51_ecspi_clkdiv(), but
    *fres is left uninitialized and therefore contains an arbitrary value.
    
    This causes trouble for the recently introduced PIO polling feature as the
    value in spi_imx->spi_bus_clk is used there to calculate for which
    transfers to enable PIO polling.
    
    Fix this by setting *fres even if no clock dividers are in use.
    
    This issue was observed on Kontron BL i.MX8MM with an SPI peripheral clock set
    to 50 MHz by default and a requested SPI bus clock of 80 MHz for the SPI NOR
    flash.
    
    With the fix applied the debug message from mx51_ecspi_clkdiv() now prints the
    following:
    
    spi_imx 30820000.spi: mx51_ecspi_clkdiv: fin: 50000000, fspi: 50000000,
    post: 0, pre: 0
    
    Fixes: 6fd8b8503a0d ("spi: spi-imx: Fix out-of-order CS/SCLK operation at low speeds")
    Fixes: 07e759387788 ("spi: spi-imx: add PIO polling support")
    Cc: Marc Kleine-Budde <mkl@pengutronix.de>
    Cc: David Jander <david@protonic.nl>
    Cc: Fabio Estevam <festevam@gmail.com>
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Marek Vasut <marex@denx.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
    Tested-by: Fabio Estevam <festevam@gmail.com>
    Acked-by: Marek Vasut <marex@denx.de>
    Link: https://lore.kernel.org/r/20221115181002.2068270-1-frieder@fris.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: stm32: fix stm32_spi_prepare_mbr() that halves spi clk for every run [+ + +]
Author: Sean Nyekjaer <sean@geanix.com>
Date:   Thu Nov 3 09:00:42 2022 +0100

    spi: stm32: fix stm32_spi_prepare_mbr() that halves spi clk for every run
    
    [ Upstream commit 62aa1a344b0904549f6de7af958e8a1136fd5228 ]
    
    When this driver is used with a driver that uses preallocated spi_transfer
    structs. The speed_hz is halved by every run. This results in:
    
    spi_stm32 44004000.spi: SPI transfer setup failed
    ads7846 spi0.0: SPI transfer failed: -22
    
    Example when running with DIV_ROUND_UP():
    - First run; speed_hz = 1000000, spi->clk_rate 125000000
      div 125 -> mbrdiv = 7, cur_speed = 976562
    - Second run; speed_hz = 976562
      div 128,00007 (roundup to 129) -> mbrdiv = 8, cur_speed = 488281
    - Third run; speed_hz = 488281
      div 256,000131072067109 (roundup to 257) and then -EINVAL is returned.
    
    Use DIV_ROUND_CLOSEST to allow to round down and allow us to keep the
    set speed.
    
    Signed-off-by: Sean Nyekjaer <sean@geanix.com>
    Link: https://lore.kernel.org/r/20221103080043.3033414-1-sean@geanix.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: configurable source port perturb table size [+ + +]
Author: Gleb Mazovetskiy <glex.spb@gmail.com>
Date:   Mon Nov 14 22:56:16 2022 +0000

    tcp: configurable source port perturb table size
    
    [ Upstream commit aeac4ec8f46d610a10adbaeff5e2edf6a88ffc62 ]
    
    On embedded systems with little memory and no relevant
    security concerns, it is beneficial to reduce the size
    of the table.
    
    Reducing the size from 2^16 to 2^8 saves 255 KiB
    of kernel RAM.
    
    Makes the table size configurable as an expert option.
    
    The size was previously increased from 2^8 to 2^16
    in commit 4c2c8f03a5ab ("tcp: increase source port perturb table to
    2^16").
    
    Signed-off-by: Gleb Mazovetskiy <glex.spb@gmail.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tee: optee: fix possible memory leak in optee_register_device() [+ + +]
Author: Yang Yingliang <yangyingliang@huawei.com>
Date:   Wed Nov 9 22:01:24 2022 +0800

    tee: optee: fix possible memory leak in optee_register_device()
    
    [ Upstream commit cce616e012c215d65c15e5d1afa73182dea49389 ]
    
    If device_register() returns error in optee_register_device(),
    the name allocated by dev_set_name() need be freed. As comment
    of device_register() says, it should use put_device() to give
    up the reference in the error path. So fix this by calling
    put_device(), then the name can be freed in kobject_cleanup(),
    and optee_device is freed in optee_release_device().
    
    Fixes: c3fa24af9244 ("tee: optee: add TEE bus device enumeration support")
    Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
    Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
    Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tipc: add an extra conn_get in tipc_conn_alloc [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Fri Nov 18 16:45:01 2022 -0500

    tipc: add an extra conn_get in tipc_conn_alloc
    
    [ Upstream commit a7b42969d63f47320853a802efd879fbdc4e010e ]
    
    One extra conn_get() is needed in tipc_conn_alloc(), as after
    tipc_conn_alloc() is called, tipc_conn_close() may free this
    con before deferencing it in tipc_topsrv_accept():
    
       tipc_conn_alloc();
       newsk = newsock->sk;
                                     <---- tipc_conn_close();
       write_lock_bh(&sk->sk_callback_lock);
       newsk->sk_data_ready = tipc_conn_data_ready;
    
    Then an uaf issue can be triggered:
    
      BUG: KASAN: use-after-free in tipc_topsrv_accept+0x1e7/0x370 [tipc]
      Call Trace:
       <TASK>
       dump_stack_lvl+0x33/0x46
       print_report+0x178/0x4b0
       kasan_report+0x8c/0x100
       kasan_check_range+0x179/0x1e0
       tipc_topsrv_accept+0x1e7/0x370 [tipc]
       process_one_work+0x6a3/0x1030
       worker_thread+0x8a/0xdf0
    
    This patch fixes it by holding it in tipc_conn_alloc(), then after
    all accessing in tipc_topsrv_accept() releasing it. Note when does
    this in tipc_topsrv_kern_subscr(), as tipc_conn_rcv_sub() returns
    0 or -1 only, we don't need to check for "> 0".
    
    Fixes: c5fa7b3cf3cb ("tipc: introduce new TIPC server infrastructure")
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Jon Maloy <jmaloy@redhat.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tipc: check skb_linearize() return value in tipc_disc_rcv() [+ + +]
Author: YueHaibing <yuehaibing@huawei.com>
Date:   Sat Nov 19 15:28:32 2022 +0800

    tipc: check skb_linearize() return value in tipc_disc_rcv()
    
    [ Upstream commit cd0f6421162201e4b22ce757a1966729323185eb ]
    
    If skb_linearize() fails in tipc_disc_rcv(), we need to free the skb instead of
    handle it.
    
    Fixes: 25b0b9c4e835 ("tipc: handle collisions of 32-bit node address hash values")
    Signed-off-by: YueHaibing <yuehaibing@huawei.com>
    Acked-by: Jon Maloy <jmaloy@redhat.com>
    Link: https://lore.kernel.org/r/20221119072832.7896-1-yuehaibing@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tipc: set con sock in tipc_conn_alloc [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Fri Nov 18 16:45:00 2022 -0500

    tipc: set con sock in tipc_conn_alloc
    
    [ Upstream commit 0e5d56c64afcd6fd2d132ea972605b66f8a7d3c4 ]
    
    A crash was reported by Wei Chen:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000018
      RIP: 0010:tipc_conn_close+0x12/0x100
      Call Trace:
       tipc_topsrv_exit_net+0x139/0x320
       ops_exit_list.isra.9+0x49/0x80
       cleanup_net+0x31a/0x540
       process_one_work+0x3fa/0x9f0
       worker_thread+0x42/0x5c0
    
    It was caused by !con->sock in tipc_conn_close(). In tipc_topsrv_accept(),
    con is allocated in conn_idr then its sock is set:
    
      con = tipc_conn_alloc();
      ...                    <----[1]
      con->sock = newsock;
    
    If tipc_conn_close() is called in anytime of [1], the null-pointer-def
    is triggered by con->sock->sk due to con->sock is not yet set.
    
    This patch fixes it by moving the con->sock setting to tipc_conn_alloc()
    under s->idr_lock. So that con->sock can never be NULL when getting the
    con from s->conn_idr. It will be also safer to move con->server and flag
    CF_CONNECTED setting under s->idr_lock, as they should all be set before
    tipc_conn_alloc() is called.
    
    Fixes: c5fa7b3cf3cb ("tipc: introduce new TIPC server infrastructure")
    Reported-by: Wei Chen <harperchen1110@gmail.com>
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Jon Maloy <jmaloy@redhat.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tools/vm/slabinfo-gnuplot: use "grep -E" instead of "egrep" [+ + +]
Author: Tiezhu Yang <yangtiezhu@loongson.cn>
Date:   Sat Nov 19 10:36:59 2022 +0800

    tools/vm/slabinfo-gnuplot: use "grep -E" instead of "egrep"
    
    commit a435874bf626f55d7147026b059008c8de89fbb8 upstream.
    
    The latest version of grep claims the egrep is now obsolete so the build
    now contains warnings that look like:
    
            egrep: warning: egrep is obsolescent; using grep -E
    
    fix this up by moving the related file to use "grep -E" instead.
    
      sed -i "s/egrep/grep -E/g" `grep egrep -rwl tools/vm`
    
    Here are the steps to install the latest grep:
    
      wget http://ftp.gnu.org/gnu/grep/grep-3.8.tar.gz
      tar xf grep-3.8.tar.gz
      cd grep-3.8 && ./configure && make
      sudo make install
      export PATH=/usr/local/bin:$PATH
    
    Link: https://lkml.kernel.org/r/1668825419-30584-1-git-send-email-yangtiezhu@loongson.cn
    Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
    Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing/ring-buffer: Have polling block on watermark [+ + +]
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Thu Oct 20 23:14:27 2022 -0400

    tracing/ring-buffer: Have polling block on watermark
    
    commit 42fb0a1e84ff525ebe560e2baf9451ab69127e2b upstream.
    
    Currently the way polling works on the ring buffer is broken. It will
    return immediately if there's any data in the ring buffer whereas a read
    will block until the watermark (defined by the tracefs buffer_percent file)
    is hit.
    
    That is, a select() or poll() will return as if there's data available,
    but then the following read will block. This is broken for the way
    select()s and poll()s are supposed to work.
    
    Have the polling on the ring buffer also block the same way reads and
    splice does on the ring buffer.
    
    Link: https://lkml.kernel.org/r/20221020231427.41be3f26@gandalf.local.home
    
    Cc: Linux Trace Kernel <linux-trace-kernel@vger.kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Primiano Tucci <primiano@google.com>
    Cc: stable@vger.kernel.org
    Fixes: 1e0d6714aceb7 ("ring-buffer: Do not wake up a splice waiter when page is not full")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Free buffers when a used dynamic event is removed [+ + +]
Author: Steven Rostedt (Google) <rostedt@goodmis.org>
Date:   Wed Nov 23 17:14:34 2022 -0500

    tracing: Free buffers when a used dynamic event is removed
    
    commit 4313e5a613049dfc1819a6dfb5f94cf2caff9452 upstream.
    
    After 65536 dynamic events have been added and removed, the "type" field
    of the event then uses the first type number that is available (not
    currently used by other events). A type number is the identifier of the
    binary blobs in the tracing ring buffer (known as events) to map them to
    logic that can parse the binary blob.
    
    The issue is that if a dynamic event (like a kprobe event) is traced and
    is in the ring buffer, and then that event is removed (because it is
    dynamic, which means it can be created and destroyed), if another dynamic
    event is created that has the same number that new event's logic on
    parsing the binary blob will be used.
    
    To show how this can be an issue, the following can crash the kernel:
    
     # cd /sys/kernel/tracing
     # for i in `seq 65536`; do
         echo 'p:kprobes/foo do_sys_openat2 $arg1:u32' > kprobe_events
     # done
    
    For every iteration of the above, the writing to the kprobe_events will
    remove the old event and create a new one (with the same format) and
    increase the type number to the next available on until the type number
    reaches over 65535 which is the max number for the 16 bit type. After it
    reaches that number, the logic to allocate a new number simply looks for
    the next available number. When an dynamic event is removed, that number
    is then available to be reused by the next dynamic event created. That is,
    once the above reaches the max number, the number assigned to the event in
    that loop will remain the same.
    
    Now that means deleting one dynamic event and created another will reuse
    the previous events type number. This is where bad things can happen.
    After the above loop finishes, the kprobes/foo event which reads the
    do_sys_openat2 function call's first parameter as an integer.
    
     # echo 1 > kprobes/foo/enable
     # cat /etc/passwd > /dev/null
     # cat trace
                 cat-2211    [005] ....  2007.849603: foo: (do_sys_openat2+0x0/0x130) arg1=4294967196
                 cat-2211    [005] ....  2007.849620: foo: (do_sys_openat2+0x0/0x130) arg1=4294967196
                 cat-2211    [005] ....  2007.849838: foo: (do_sys_openat2+0x0/0x130) arg1=4294967196
                 cat-2211    [005] ....  2007.849880: foo: (do_sys_openat2+0x0/0x130) arg1=4294967196
     # echo 0 > kprobes/foo/enable
    
    Now if we delete the kprobe and create a new one that reads a string:
    
     # echo 'p:kprobes/foo do_sys_openat2 +0($arg2):string' > kprobe_events
    
    And now we can the trace:
    
     # cat trace
            sendmail-1942    [002] .....   530.136320: foo: (do_sys_openat2+0x0/0x240) arg1=             cat-2046    [004] .....   530.930817: foo: (do_sys_openat2+0x0/0x240) arg1="������������������������������������������������������������������������������������������������"
                 cat-2046    [004] .....   530.930961: foo: (do_sys_openat2+0x0/0x240) arg1="������������������������������������������������������������������������������������������������"
                 cat-2046    [004] .....   530.934278: foo: (do_sys_openat2+0x0/0x240) arg1="������������������������������������������������������������������������������������������������"
                 cat-2046    [004] .....   530.934563: foo: (do_sys_openat2+0x0/0x240) arg1="������������������������������������������������������������������������������������������������"
                bash-1515    [007] .....   534.299093: foo: (do_sys_openat2+0x0/0x240) arg1="kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk���������@��4Z����;Y�����U
    
    And dmesg has:
    
    ==================================================================
    BUG: KASAN: use-after-free in string+0xd4/0x1c0
    Read of size 1 at addr ffff88805fdbbfa0 by task cat/2049
    
     CPU: 0 PID: 2049 Comm: cat Not tainted 6.1.0-rc6-test+ #641
     Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v03.03 07/14/2016
     Call Trace:
      <TASK>
      dump_stack_lvl+0x5b/0x77
      print_report+0x17f/0x47b
      kasan_report+0xad/0x130
      string+0xd4/0x1c0
      vsnprintf+0x500/0x840
      seq_buf_vprintf+0x62/0xc0
      trace_seq_printf+0x10e/0x1e0
      print_type_string+0x90/0xa0
      print_kprobe_event+0x16b/0x290
      print_trace_line+0x451/0x8e0
      s_show+0x72/0x1f0
      seq_read_iter+0x58e/0x750
      seq_read+0x115/0x160
      vfs_read+0x11d/0x460
      ksys_read+0xa9/0x130
      do_syscall_64+0x3a/0x90
      entry_SYSCALL_64_after_hwframe+0x63/0xcd
     RIP: 0033:0x7fc2e972ade2
     Code: c0 e9 b2 fe ff ff 50 48 8d 3d b2 3f 0a 00 e8 05 f0 01 00 0f 1f 44 00 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 0f 05 <48> 3d 00 f0 ff ff 77 56 c3 0f 1f 44 00 00 48 83 ec 28 48 89 54 24
     RSP: 002b:00007ffc64e687c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
     RAX: ffffffffffffffda RBX: 0000000000020000 RCX: 00007fc2e972ade2
     RDX: 0000000000020000 RSI: 00007fc2e980d000 RDI: 0000000000000003
     RBP: 00007fc2e980d000 R08: 00007fc2e980c010 R09: 0000000000000000
     R10: 0000000000000022 R11: 0000000000000246 R12: 0000000000020f00
     R13: 0000000000000003 R14: 0000000000020000 R15: 0000000000020000
      </TASK>
    
     The buggy address belongs to the physical page:
     page:ffffea00017f6ec0 refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x5fdbb
     flags: 0xfffffc0000000(node=0|zone=1|lastcpupid=0x1fffff)
     raw: 000fffffc0000000 0000000000000000 ffffea00017f6ec8 0000000000000000
     raw: 0000000000000000 0000000000000000 00000000ffffffff 0000000000000000
     page dumped because: kasan: bad access detected
    
     Memory state around the buggy address:
      ffff88805fdbbe80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      ffff88805fdbbf00: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
     >ffff88805fdbbf80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
                                    ^
      ffff88805fdbc000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      ffff88805fdbc080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
     ==================================================================
    
    This was found when Zheng Yejian sent a patch to convert the event type
    number assignment to use IDA, which gives the next available number, and
    this bug showed up in the fuzz testing by Yujie Liu and the kernel test
    robot. But after further analysis, I found that this behavior is the same
    as when the event type numbers go past the 16bit max (and the above shows
    that).
    
    As modules have a similar issue, but is dealt with by setting a
    "WAS_ENABLED" flag when a module event is enabled, and when the module is
    freed, if any of its events were enabled, the ring buffer that holds that
    event is also cleared, to prevent reading stale events. The same can be
    done for dynamic events.
    
    If any dynamic event that is being removed was enabled, then make sure the
    buffers they were enabled in are now cleared.
    
    Link: https://lkml.kernel.org/r/20221123171434.545706e3@gandalf.local.home
    Link: https://lore.kernel.org/all/20221110020319.1259291-1-zhengyejian1@huawei.com/
    
    Cc: stable@vger.kernel.org
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Depends-on: e18eb8783ec49 ("tracing: Add tracing_reset_all_online_cpus_unlocked() function")
    Depends-on: 5448d44c38557 ("tracing: Add unified dynamic event framework")
    Depends-on: 6212dd29683ee ("tracing/kprobes: Use dyn_event framework for kprobe events")
    Depends-on: 065e63f951432 ("tracing: Only have rmmod clear buffers that its events were active in")
    Depends-on: 575380da8b469 ("tracing: Only clear trace buffer on module unload if event was traced")
    Fixes: 77b44d1b7c283 ("tracing/kprobes: Rename Kprobe-tracer to kprobe-event")
    Reported-by: Zheng Yejian <zhengyejian1@huawei.com>
    Reported-by: Yujie Liu <yujie.liu@intel.com>
    Reported-by: kernel test robot <yujie.liu@intel.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: dwc3: exynos: Fix remove() function [+ + +]
Author: Marek Szyprowski <m.szyprowski@samsung.com>
Date:   Thu Nov 10 16:41:31 2022 +0100

    usb: dwc3: exynos: Fix remove() function
    
    commit e0481e5b3cc12ea7ccf4552d41518c89d3509004 upstream.
    
    The core DWC3 device node was not properly removed by the custom
    dwc3_exynos_remove_child() function. Replace it with generic
    of_platform_depopulate() which does that job right.
    
    Fixes: adcf20dcd262 ("usb: dwc3: exynos: Use of_platform API to create dwc3 core pdev")
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Sam Protsenko <semen.protsenko@linaro.org>
    Link: https://lore.kernel.org/r/20221110154131.2577-1-m.szyprowski@samsung.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
v4l2: don't fall back to follow_pfn() if pin_user_pages_fast() fails [+ + +]
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Wed Nov 30 16:10:52 2022 -0800

    v4l2: don't fall back to follow_pfn() if pin_user_pages_fast() fails
    
    commit 6647e76ab623b2b3fb2efe03a86e9c9046c52c33 upstream.
    
    The V4L2_MEMORY_USERPTR interface is long deprecated and shouldn't be
    used (and is discouraged for any modern v4l drivers).  And Seth Jenkins
    points out that the fallback to VM_PFNMAP/VM_IO is fundamentally racy
    and dangerous.
    
    Note that it's not even a case that should trigger, since any normal
    user pointer logic ends up just using the pin_user_pages_fast() call
    that does the proper page reference counting.  That's not the problem
    case, only if you try to use special device mappings do you have any
    issues.
    
    Normally I'd just remove this during the merge window, but since Seth
    pointed out the problem cases, we really want to know as soon as
    possible if there are actually any users of this odd special case of a
    legacy interface.  Neither Hans nor Mauro seem to think that such
    mis-uses of the old legacy interface should exist.  As Mauro says:
    
     "See, V4L2 has actually 4 streaming APIs:
            - Kernel-allocated mmap (usually referred simply as just mmap);
            - USERPTR mmap;
            - read();
            - dmabuf;
    
      The USERPTR is one of the oldest way to use it, coming from V4L
      version 1 times, and by far the least used one"
    
    And Hans chimed in on the USERPTR interface:
    
     "To be honest, I wouldn't mind if it goes away completely, but that's a
      bit of a pipe dream right now"
    
    but while removing this legacy interface entirely may be a pipe dream we
    can at least try to remove the unlikely (and actively broken) case of
    using special device mappings for USERPTR accesses.
    
    This replaces it with a WARN_ONCE() that we can remove once we've
    hopefully confirmed that no actual users exist.
    
    NOTE! Longer term, this means that a 'struct frame_vector' only ever
    contains proper page pointers, and all the games we have with converting
    them to pages can go away (grep for 'frame_vector_to_pages()' and the
    uses of 'vec->is_pfns').  But this is just the first step, to verify
    that this code really is all dead, and do so as quickly as possible.
    
    Reported-by: Seth Jenkins <sethjenkins@google.com>
    Acked-by: Hans Verkuil <hverkuil@xs4all.nl>
    Acked-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Jan Kara <jack@suse.cz>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: cfg80211: fix buffer overflow in elem comparison [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Fri Nov 25 12:36:57 2022 +0100

    wifi: cfg80211: fix buffer overflow in elem comparison
    
    [ Upstream commit 9f16b5c82a025cd4c864737409234ddc44fb166a ]
    
    For vendor elements, the code here assumes that 5 octets
    are present without checking. Since the element itself is
    already checked to fit, we only need to check the length.
    
    Reported-and-tested-by: Sönke Huster <shuster@seemoo.tu-darmstadt.de>
    Fixes: 0b8fb8235be8 ("cfg80211: Parsing of Multiple BSSID information in scanning")
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: Fix ack frame idr leak when mesh has no route [+ + +]
Author: Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
Date:   Thu Oct 27 16:01:33 2022 +0200

    wifi: mac80211: Fix ack frame idr leak when mesh has no route
    
    [ Upstream commit 39e7b5de9853bd92ddbfa4b14165babacd7da0ba ]
    
    When trying to transmit an data frame with tx_status to a destination
    that have no route in the mesh, then it is dropped without recrediting
    the ack_status_frames idr.
    
    Once it is exhausted, wpa_supplicant starts failing to do SAE with
    NL80211_CMD_FRAME and logs "nl80211: Frame command failed".
    
    Use ieee80211_free_txskb() instead of kfree_skb() to fix it.
    
    Signed-off-by: Nicolas Cavallari <nicolas.cavallari@green-communications.fr>
    Link: https://lore.kernel.org/r/20221027140133.1504-1-nicolas.cavallari@green-communications.fr
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: fix memory free error when registering wiphy fail [+ + +]
Author: taozhang <taozhang@bestechnic.com>
Date:   Sat Oct 15 17:38:31 2022 +0800

    wifi: mac80211: fix memory free error when registering wiphy fail
    
    [ Upstream commit 50b2e8711462409cd368c41067405aa446dfa2af ]
    
    ieee80211_register_hw free the allocated cipher suites when
    registering wiphy fail, and ieee80211_free_hw will re-free it.
    
    set wiphy_ciphers_allocated to false after freeing allocated
    cipher suites.
    
    Signed-off-by: taozhang <taozhang@bestechnic.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
wifi: mac80211_hwsim: fix debugfs attribute ps with rc table support [+ + +]
Author: Jonas Jelonek <jelonek.jonas@gmail.com>
Date:   Fri Oct 14 16:54:39 2022 +0200

    wifi: mac80211_hwsim: fix debugfs attribute ps with rc table support
    
    [ Upstream commit 69188df5f6e4cecc6b76b958979ba363cd5240e8 ]
    
    Fixes a warning that occurs when rc table support is enabled
    (IEEE80211_HW_SUPPORTS_RC_TABLE) in mac80211_hwsim and the PS mode
    is changed via the exported debugfs attribute.
    
    When the PS mode is changed, a packet is broadcasted via
    hwsim_send_nullfunc by creating and transmitting a plain skb with only
    header initialized. The ieee80211 rate array in the control buffer is
    zero-initialized. When ratetbl support is enabled, ieee80211_get_tx_rates
    is called for the skb with sta parameter set to NULL and thus no
    ratetbl can be used. The final rate array then looks like
    [-1,0; 0,0; 0,0; 0,0] which causes the warning in ieee80211_get_tx_rate.
    
    The issue is fixed by setting the count of the first rate with idx '0'
    to 1 and hence ieee80211_get_tx_rates won't overwrite it with idx '-1'.
    
    Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/bugs: Make sure MSR_SPEC_CTRL is updated properly upon resume from S3 [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Wed Nov 30 07:25:51 2022 -0800

    x86/bugs: Make sure MSR_SPEC_CTRL is updated properly upon resume from S3
    
    commit 66065157420c5b9b3f078f43d313c153e1ff7f83 upstream.
    
    The "force" argument to write_spec_ctrl_current() is currently ambiguous
    as it does not guarantee the MSR write. This is due to the optimization
    that writes to the MSR happen only when the new value differs from the
    cached value.
    
    This is fine in most cases, but breaks for S3 resume when the cached MSR
    value gets out of sync with the hardware MSR value due to S3 resetting
    it.
    
    When x86_spec_ctrl_current is same as x86_spec_ctrl_base, the MSR write
    is skipped. Which results in SPEC_CTRL mitigations not getting restored.
    
    Move the MSR write from write_spec_ctrl_current() to a new function that
    unconditionally writes to the MSR. Update the callers accordingly and
    rename functions.
    
      [ bp: Rework a bit. ]
    
    Fixes: caa0ff24d5d0 ("x86/bugs: Keep a per-CPU IA32_SPEC_CTRL value")
    Suggested-by: Borislav Petkov <bp@alien8.de>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: <stable@kernel.org>
    Link: https://lore.kernel.org/r/806d39b0bfec2fe8f50dc5446dff20f5bb24a959.1669821572.git.pawan.kumar.gupta@linux.intel.com
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/ioremap: Fix page aligned size calculation in __ioremap_caller() [+ + +]
Author: Michael Kelley <mikelley@microsoft.com>
Date:   Sun Dec 4 13:52:01 2022 -0800

    x86/ioremap: Fix page aligned size calculation in __ioremap_caller()
    
    [ Upstream commit 4dbd6a3e90e03130973688fd79e19425f720d999 ]
    
    Current code re-calculates the size after aligning the starting and
    ending physical addresses on a page boundary. But the re-calculation
    also embeds the masking of high order bits that exceed the size of
    the physical address space (via PHYSICAL_PAGE_MASK). If the masking
    removes any high order bits, the size calculation results in a huge
    value that is likely to immediately fail.
    
    Fix this by re-calculating the page-aligned size first. Then mask any
    high order bits using PHYSICAL_PAGE_MASK.
    
    Fixes: ffa71f33a820 ("x86, ioremap: Fix incorrect physical address handling in PAE mode")
    Signed-off-by: Michael Kelley <mikelley@microsoft.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Acked-by: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: <stable@kernel.org>
    Link: https://lore.kernel.org/r/1668624097-14884-2-git-send-email-mikelley@microsoft.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/pm: Add enumeration check before spec MSRs save/restore setup [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Thu Dec 1 14:55:50 2022 -0800

    x86/pm: Add enumeration check before spec MSRs save/restore setup
    
    commit 50bcceb7724e471d9b591803889df45dcbb584bc upstream.
    
    pm_save_spec_msr() keeps a list of all the MSRs which _might_ need
    to be saved and restored at hibernate and resume. However, it has
    zero awareness of CPU support for these MSRs. It mostly works by
    unconditionally attempting to manipulate these MSRs and relying on
    rdmsrl_safe() being able to handle a #GP on CPUs where the support is
    unavailable.
    
    However, it's possible for reads (RDMSR) to be supported for a given MSR
    while writes (WRMSR) are not. In this case, msr_build_context() sees
    a successful read (RDMSR) and marks the MSR as valid. Then, later, a
    write (WRMSR) fails, producing a nasty (but harmless) error message.
    This causes restore_processor_state() to try and restore it, but writing
    this MSR is not allowed on the Intel Atom N2600 leading to:
    
      unchecked MSR access error: WRMSR to 0x122 (tried to write 0x0000000000000002) \
         at rIP: 0xffffffff8b07a574 (native_write_msr+0x4/0x20)
      Call Trace:
       <TASK>
       restore_processor_state
       x86_acpi_suspend_lowlevel
       acpi_suspend_enter
       suspend_devices_and_enter
       pm_suspend.cold
       state_store
       kernfs_fop_write_iter
       vfs_write
       ksys_write
       do_syscall_64
       ? do_syscall_64
       ? up_read
       ? lock_is_held_type
       ? asm_exc_page_fault
       ? lockdep_hardirqs_on
       entry_SYSCALL_64_after_hwframe
    
    To fix this, add the corresponding X86_FEATURE bit for each MSR.  Avoid
    trying to manipulate the MSR when the feature bit is clear. This
    required adding a X86_FEATURE bit for MSRs that do not have one already,
    but it's a small price to pay.
    
      [ bp: Move struct msr_enumeration inside the only function that uses it. ]
      [Pawan: Resolve build issue in backport]
    
    Fixes: 73924ec4d560 ("x86/pm: Save the MSR validity status at context setup")
    Reported-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
    Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: <stable@kernel.org>
    Link: https://lore.kernel.org/r/c24db75d69df6e66c0465e13676ad3f2837a2ed8.1668539735.git.pawan.kumar.gupta@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/tsx: Add a feature bit for TSX control MSR support [+ + +]
Author: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Date:   Thu Dec 1 14:55:43 2022 -0800

    x86/tsx: Add a feature bit for TSX control MSR support
    
    commit aaa65d17eec372c6a9756833f3964ba05b05ea14 upstream.
    
    Support for the TSX control MSR is enumerated in MSR_IA32_ARCH_CAPABILITIES.
    This is different from how other CPU features are enumerated i.e. via
    CPUID. Currently, a call to tsx_ctrl_is_supported() is required for
    enumerating the feature. In the absence of a feature bit for TSX control,
    any code that relies on checking feature bits directly will not work.
    
    In preparation for adding a feature bit check in MSR save/restore
    during suspend/resume, set a new feature bit X86_FEATURE_TSX_CTRL when
    MSR_IA32_TSX_CTRL is present.
    
      [ bp: Remove tsx_ctrl_is_supported()]
    
      [Pawan: Resolved conflicts in backport; Removed parts of commit message
              referring to removed function tsx_ctrl_is_supported()]
    
    Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: <stable@kernel.org>
    Link: https://lore.kernel.org/r/de619764e1d98afbb7a5fa58424f1278ede37b45.1668539735.git.pawan.kumar.gupta@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xen/platform-pci: add missing free_irq() in error path [+ + +]
Author: ruanjinjie <ruanjinjie@huawei.com>
Date:   Mon Nov 14 19:21:24 2022 +0800

    xen/platform-pci: add missing free_irq() in error path
    
    [ Upstream commit c53717e1e3f0d0f9129b2e0dbc6dcc5e0a8132e9 ]
    
    free_irq() is missing in case of error in platform_pci_probe(), fix that.
    
    Signed-off-by: ruanjinjie <ruanjinjie@huawei.com>
    Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
    Link: https://lore.kernel.org/r/20221114112124.1965611-1-ruanjinjie@huawei.com
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xfrm: Fix ignored return value in xfrm6_init() [+ + +]
Author: Chen Zhongjin <chenzhongjin@huawei.com>
Date:   Thu Nov 3 17:07:13 2022 +0800

    xfrm: Fix ignored return value in xfrm6_init()
    
    [ Upstream commit 40781bfb836eda57d19c0baa37c7e72590e05fdc ]
    
    When IPv6 module initializing in xfrm6_init(), register_pernet_subsys()
    is possible to fail but its return value is ignored.
    
    If IPv6 initialization fails later and xfrm6_fini() is called,
    removing uninitialized list in xfrm6_net_ops will cause null-ptr-deref:
    
    KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
    CPU: 1 PID: 330 Comm: insmod
    RIP: 0010:unregister_pernet_operations+0xc9/0x450
    Call Trace:
     <TASK>
     unregister_pernet_subsys+0x31/0x3e
     xfrm6_fini+0x16/0x30 [ipv6]
     ip6_route_init+0xcd/0x128 [ipv6]
     inet6_init+0x29c/0x602 [ipv6]
     ...
    
    Fix it by catching the error return value of register_pernet_subsys().
    
    Fixes: 8d068875caca ("xfrm: make gc_thresh configurable in all namespaces")
    Signed-off-by: Chen Zhongjin <chenzhongjin@huawei.com>
    Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xtensa: increase size of gcc stack frame check [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Fri Sep 24 15:43:29 2021 -0700

    xtensa: increase size of gcc stack frame check
    
    [ Upstream commit 867050247e295cf20fce046a92a7e6491fcfe066 ]
    
    xtensa frame size is larger than the frame size for almost all other
    architectures.  This results in more than 50 "the frame size of <n> is
    larger than 1024 bytes" errors when trying to build xtensa:allmodconfig.
    
    Increase frame size for xtensa to 1536 bytes to avoid compile errors due
    to frame size limits.
    
    Link: https://lkml.kernel.org/r/20210912025235.3514761-1-linux@roeck-us.net
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
    Cc: Chris Zankel <chris@zankel.net>
    Cc: David Laight <David.Laight@ACULAB.COM>
    Cc: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Stable-dep-of: 152fe65f300e ("Kconfig.debug: provide a little extra FRAME_WARN leeway when KASAN is enabled")
    Signed-off-by: Sasha Levin <sashal@kernel.org>