Changelog in Linux kernel 4.19.316

 
ACPI: disable -Wstringop-truncation [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Apr 9 16:00:55 2024 +0200

    ACPI: disable -Wstringop-truncation
    
    [ Upstream commit a3403d304708f60565582d60af4316289d0316a0 ]
    
    gcc -Wstringop-truncation warns about copying a string that results in a
    missing nul termination:
    
    drivers/acpi/acpica/tbfind.c: In function 'acpi_tb_find_table':
    drivers/acpi/acpica/tbfind.c:60:9: error: 'strncpy' specified bound 6 equals destination size [-Werror=stringop-truncation]
       60 |         strncpy(header.oem_id, oem_id, ACPI_OEM_ID_SIZE);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/acpi/acpica/tbfind.c:61:9: error: 'strncpy' specified bound 8 equals destination size [-Werror=stringop-truncation]
       61 |         strncpy(header.oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    The code works as intended, and the warning could be addressed by using
    a memcpy(), but turning the warning off for this file works equally well
    and may be easier to merge.
    
    Fixes: 47c08729bf1c ("ACPICA: Fix for LoadTable operator, input strings")
    Link: https://lore.kernel.org/lkml/CAJZ5v0hoUfv54KW7y4223Mn9E7D4xvR7whRFNLTBqCZMUxT50Q@mail.gmail.com/#t
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
af_packet: do not call packet_read_pending() from tpacket_destruct_skb() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed May 15 16:33:58 2024 +0000

    af_packet: do not call packet_read_pending() from tpacket_destruct_skb()
    
    [ Upstream commit 581073f626e387d3e7eed55c48c8495584ead7ba ]
    
    trafgen performance considerably sank on hosts with many cores
    after the blamed commit.
    
    packet_read_pending() is very expensive, and calling it
    in af_packet fast path defeats Daniel intent in commit
    b013840810c2 ("packet: use percpu mmap tx frame pending refcount")
    
    tpacket_destruct_skb() makes room for one packet, we can immediately
    wakeup a producer, no need to completely drain the tx ring.
    
    Fixes: 89ed5b519004 ("af_packet: Block execution of tasks waiting for transmit to complete in AF_PACKET")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Neil Horman <nhorman@tuxdriver.com>
    Cc: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://lore.kernel.org/r/20240515163358.4105915-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
af_unix: Fix data races in unix_release_sock/unix_stream_sendmsg [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Thu May 9 01:14:46 2024 -0700

    af_unix: Fix data races in unix_release_sock/unix_stream_sendmsg
    
    [ Upstream commit 540bf24fba16b88c1b3b9353927204b4f1074e25 ]
    
    A data-race condition has been identified in af_unix. In one data path,
    the write function unix_release_sock() atomically writes to
    sk->sk_shutdown using WRITE_ONCE. However, on the reader side,
    unix_stream_sendmsg() does not read it atomically. Consequently, this
    issue is causing the following KCSAN splat to occur:
    
            BUG: KCSAN: data-race in unix_release_sock / unix_stream_sendmsg
    
            write (marked) to 0xffff88867256ddbb of 1 bytes by task 7270 on cpu 28:
            unix_release_sock (net/unix/af_unix.c:640)
            unix_release (net/unix/af_unix.c:1050)
            sock_close (net/socket.c:659 net/socket.c:1421)
            __fput (fs/file_table.c:422)
            __fput_sync (fs/file_table.c:508)
            __se_sys_close (fs/open.c:1559 fs/open.c:1541)
            __x64_sys_close (fs/open.c:1541)
            x64_sys_call (arch/x86/entry/syscall_64.c:33)
            do_syscall_64 (arch/x86/entry/common.c:?)
            entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
            read to 0xffff88867256ddbb of 1 bytes by task 989 on cpu 14:
            unix_stream_sendmsg (net/unix/af_unix.c:2273)
            __sock_sendmsg (net/socket.c:730 net/socket.c:745)
            ____sys_sendmsg (net/socket.c:2584)
            __sys_sendmmsg (net/socket.c:2638 net/socket.c:2724)
            __x64_sys_sendmmsg (net/socket.c:2753 net/socket.c:2750 net/socket.c:2750)
            x64_sys_call (arch/x86/entry/syscall_64.c:33)
            do_syscall_64 (arch/x86/entry/common.c:?)
            entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
    
            value changed: 0x01 -> 0x03
    
    The line numbers are related to commit dd5a440a31fa ("Linux 6.9-rc7").
    
    Commit e1d09c2c2f57 ("af_unix: Fix data races around sk->sk_shutdown.")
    addressed a comparable issue in the past regarding sk->sk_shutdown.
    However, it overlooked resolving this particular data path.
    This patch only offending unix_stream_sendmsg() function, since the
    other reads seem to be protected by unix_state_lock() as discussed in
    Link: https://lore.kernel.org/all/20240508173324.53565-1-kuniyu@amazon.com/
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20240509081459.2807828-1-leitao@debian.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: timer: Set lower bound of start tick time [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue May 14 20:27:36 2024 +0200

    ALSA: timer: Set lower bound of start tick time
    
    commit 4a63bd179fa8d3fcc44a0d9d71d941ddd62f0c4e upstream.
    
    Currently ALSA timer doesn't have the lower limit of the start tick
    time, and it allows a very small size, e.g. 1 tick with 1ns resolution
    for hrtimer.  Such a situation may lead to an unexpected RCU stall,
    where  the callback repeatedly queuing the expire update, as reported
    by fuzzer.
    
    This patch introduces a sanity check of the timer start tick time, so
    that the system returns an error when a too small start size is set.
    As of this patch, the lower limit is hard-coded to 100us, which is
    small enough but can still work somehow.
    
    Reported-by: syzbot+43120c2af6ca2938cc38@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/r/000000000000fa00a1061740ab6d@google.com
    Cc: <stable@vger.kernel.org>
    Link: https://lore.kernel.org/r/20240514182745.4015-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    [ backport note: the error handling is changed, as the original commit
      is based on the recent cleanup with guard() in commit beb45974dd49
      -- tiwai ]
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: asm-bug: Add .align 2 to the end of __BUG_ENTRY [+ + +]
Author: Jiangfeng Xiao <xiaojiangfeng@huawei.com>
Date:   Mon May 20 21:34:37 2024 +0800

    arm64: asm-bug: Add .align 2 to the end of __BUG_ENTRY
    
    [ Upstream commit ffbf4fb9b5c12ff878a10ea17997147ea4ebea6f ]
    
    When CONFIG_DEBUG_BUGVERBOSE=n, we fail to add necessary padding bytes
    to bug_table entries, and as a result the last entry in a bug table will
    be ignored, potentially leading to an unexpected panic(). All prior
    entries in the table will be handled correctly.
    
    The arm64 ABI requires that struct fields of up to 8 bytes are
    naturally-aligned, with padding added within a struct such that struct
    are suitably aligned within arrays.
    
    When CONFIG_DEBUG_BUGVERPOSE=y, the layout of a bug_entry is:
    
            struct bug_entry {
                    signed int      bug_addr_disp;  // 4 bytes
                    signed int      file_disp;      // 4 bytes
                    unsigned short  line;           // 2 bytes
                    unsigned short  flags;          // 2 bytes
            }
    
    ... with 12 bytes total, requiring 4-byte alignment.
    
    When CONFIG_DEBUG_BUGVERBOSE=n, the layout of a bug_entry is:
    
            struct bug_entry {
                    signed int      bug_addr_disp;  // 4 bytes
                    unsigned short  flags;          // 2 bytes
                    < implicit padding >            // 2 bytes
            }
    
    ... with 8 bytes total, with 6 bytes of data and 2 bytes of trailing
    padding, requiring 4-byte alginment.
    
    When we create a bug_entry in assembly, we align the start of the entry
    to 4 bytes, which implicitly handles padding for any prior entries.
    However, we do not align the end of the entry, and so when
    CONFIG_DEBUG_BUGVERBOSE=n, the final entry lacks the trailing padding
    bytes.
    
    For the main kernel image this is not a problem as find_bug() doesn't
    depend on the trailing padding bytes when searching for entries:
    
            for (bug = __start___bug_table; bug < __stop___bug_table; ++bug)
                    if (bugaddr == bug_addr(bug))
                            return bug;
    
    However for modules, module_bug_finalize() depends on the trailing
    bytes when calculating the number of entries:
    
            mod->num_bugs = sechdrs[i].sh_size / sizeof(struct bug_entry);
    
    ... and as the last bug_entry lacks the necessary padding bytes, this entry
    will not be counted, e.g. in the case of a single entry:
    
            sechdrs[i].sh_size == 6
            sizeof(struct bug_entry) == 8;
    
            sechdrs[i].sh_size / sizeof(struct bug_entry) == 0;
    
    Consequently module_find_bug() will miss the last bug_entry when it does:
    
            for (i = 0; i < mod->num_bugs; ++i, ++bug)
                    if (bugaddr == bug_addr(bug))
                            goto out;
    
    ... which can lead to a kenrel panic due to an unhandled bug.
    
    This can be demonstrated with the following module:
    
            static int __init buginit(void)
            {
                    WARN(1, "hello\n");
                    return 0;
            }
    
            static void __exit bugexit(void)
            {
            }
    
            module_init(buginit);
            module_exit(bugexit);
            MODULE_LICENSE("GPL");
    
    ... which will trigger a kernel panic when loaded:
    
            ------------[ cut here ]------------
            hello
            Unexpected kernel BRK exception at EL1
            Internal error: BRK handler: 00000000f2000800 [#1] PREEMPT SMP
            Modules linked in: hello(O+)
            CPU: 0 PID: 50 Comm: insmod Tainted: G           O       6.9.1 #8
            Hardware name: linux,dummy-virt (DT)
            pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
            pc : buginit+0x18/0x1000 [hello]
            lr : buginit+0x18/0x1000 [hello]
            sp : ffff800080533ae0
            x29: ffff800080533ae0 x28: 0000000000000000 x27: 0000000000000000
            x26: ffffaba8c4e70510 x25: ffff800080533c30 x24: ffffaba8c4a28a58
            x23: 0000000000000000 x22: 0000000000000000 x21: ffff3947c0eab3c0
            x20: ffffaba8c4e3f000 x19: ffffaba846464000 x18: 0000000000000006
            x17: 0000000000000000 x16: ffffaba8c2492834 x15: 0720072007200720
            x14: 0720072007200720 x13: ffffaba8c49b27c8 x12: 0000000000000312
            x11: 0000000000000106 x10: ffffaba8c4a0a7c8 x9 : ffffaba8c49b27c8
            x8 : 00000000ffffefff x7 : ffffaba8c4a0a7c8 x6 : 80000000fffff000
            x5 : 0000000000000107 x4 : 0000000000000000 x3 : 0000000000000000
            x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff3947c0eab3c0
            Call trace:
             buginit+0x18/0x1000 [hello]
             do_one_initcall+0x80/0x1c8
             do_init_module+0x60/0x218
             load_module+0x1ba4/0x1d70
             __do_sys_init_module+0x198/0x1d0
             __arm64_sys_init_module+0x1c/0x28
             invoke_syscall+0x48/0x114
             el0_svc_common.constprop.0+0x40/0xe0
             do_el0_svc+0x1c/0x28
             el0_svc+0x34/0xd8
             el0t_64_sync_handler+0x120/0x12c
             el0t_64_sync+0x190/0x194
            Code: d0ffffe0 910003fd 91000000 9400000b (d4210000)
            ---[ end trace 0000000000000000 ]---
            Kernel panic - not syncing: BRK handler: Fatal exception
    
    Fix this by always aligning the end of a bug_entry to 4 bytes, which is
    correct regardless of CONFIG_DEBUG_BUGVERBOSE.
    
    Fixes: 9fb7410f955f ("arm64/BUG: Use BRK instruction for generic BUG traps")
    
    Signed-off-by: Yuanbin Xie <xieyuanbin1@huawei.com>
    Signed-off-by: Jiangfeng Xiao <xiaojiangfeng@huawei.com>
    Reviewed-by: Mark Rutland <mark.rutland@arm.com>
    Link: https://lore.kernel.org/r/1716212077-43826-1-git-send-email-xiaojiangfeng@huawei.com
    Signed-off-by: Will Deacon <will@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

arm64: dts: hi3798cv200: fix the size of GICR [+ + +]
Author: Yang Xiwen <forbidden405@outlook.com>
Date:   Mon Feb 19 23:05:26 2024 +0800

    arm64: dts: hi3798cv200: fix the size of GICR
    
    commit 428a575dc9038846ad259466d5ba109858c0a023 upstream.
    
    During boot, Linux kernel complains:
    
    [    0.000000] GIC: GICv2 detected, but range too small and irqchip.gicv2_force_probe not set
    
    This SoC is using a regular GIC-400 and the GICR space size should be
    8KB rather than 256B.
    
    With this patch:
    
    [    0.000000] GIC: Using split EOI/Deactivate mode
    
    So this should be the correct fix.
    
    Fixes: 2f20182ed670 ("arm64: dts: hisilicon: add dts files for hi3798cv200-poplar board")
    Signed-off-by: Yang Xiwen <forbidden405@outlook.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240219-cache-v3-1-a33c57534ae9@outlook.com
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: tegra: Correct Tegra132 I2C alias [+ + +]
Author: Krzysztof Kozlowski <krzk@kernel.org>
Date:   Mon Apr 1 16:08:54 2024 +0200

    arm64: tegra: Correct Tegra132 I2C alias
    
    commit 2633c58e1354d7de2c8e7be8bdb6f68a0a01bad7 upstream.
    
    There is no such device as "as3722@40", because its name is "pmic".  Use
    phandles for aliases to fix relying on full node path.  This corrects
    aliases for RTC devices and also fixes dtc W=1 warning:
    
      tegra132-norrin.dts:12.3-36: Warning (alias_paths): /aliases:rtc0: aliases property is not a valid node (/i2c@7000d000/as3722@40)
    
    Fixes: 0f279ebdf3ce ("arm64: tegra: Add NVIDIA Tegra132 Norrin support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: da7219-aad: fix usage of device_get_named_child_node() [+ + +]
Author: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date:   Fri Apr 26 10:30:33 2024 -0500

    ASoC: da7219-aad: fix usage of device_get_named_child_node()
    
    [ Upstream commit e8a6a5ad73acbafd98e8fd3f0cbf6e379771bb76 ]
    
    The documentation for device_get_named_child_node() mentions this
    important point:
    
    "
    The caller is responsible for calling fwnode_handle_put() on the
    returned fwnode pointer.
    "
    
    Add fwnode_handle_put() to avoid a leaked reference.
    
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20240426153033.38500-1-pierre-louis.bossart@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: dt-bindings: rt5645: add cbj sleeve gpio property [+ + +]
Author: Derek Fang <derek.fang@realtek.com>
Date:   Mon Apr 8 17:10:57 2024 +0800

    ASoC: dt-bindings: rt5645: add cbj sleeve gpio property
    
    [ Upstream commit 306b38e3fa727d22454a148a364123709e356600 ]
    
    Add an optional gpio property to control external CBJ circuits
    to avoid some electric noise caused by sleeve/ring2 contacts floating.
    
    Signed-off-by: Derek Fang <derek.fang@realtek.com>
    
    Link: https://msgid.link/r/20240408091057.14165-2-derek.fang@realtek.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: rt5645: Fix the electric noise due to the CBJ contacts floating [+ + +]
Author: Derek Fang <derek.fang@realtek.com>
Date:   Mon Apr 8 17:10:56 2024 +0800

    ASoC: rt5645: Fix the electric noise due to the CBJ contacts floating
    
    [ Upstream commit 103abab975087e1f01b76fcb54c91dbb65dbc249 ]
    
    The codec leaves tie combo jack's sleeve/ring2 to floating status
    default. It would cause electric noise while connecting the active
    speaker jack during boot or shutdown.
    This patch requests a gpio to control the additional jack circuit
    to tie the contacts to the ground or floating.
    
    Signed-off-by: Derek Fang <derek.fang@realtek.com>
    
    Link: https://msgid.link/r/20240408091057.14165-1-derek.fang@realtek.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tracing: Export SND_SOC_DAPM_DIR_OUT to its value [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Tue Apr 16 00:03:03 2024 -0400

    ASoC: tracing: Export SND_SOC_DAPM_DIR_OUT to its value
    
    [ Upstream commit 58300f8d6a48e58d1843199be743f819e2791ea3 ]
    
    The string SND_SOC_DAPM_DIR_OUT is printed in the snd_soc_dapm_path trace
    event instead of its value:
    
       (((REC->path_dir) == SND_SOC_DAPM_DIR_OUT) ? "->" : "<-")
    
    User space cannot parse this, as it has no idea what SND_SOC_DAPM_DIR_OUT
    is. Use TRACE_DEFINE_ENUM() to convert it to its value:
    
       (((REC->path_dir) == 1) ? "->" : "<-")
    
    So that user space tools, such as perf and trace-cmd, can parse it
    correctly.
    
    Reported-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Fixes: 6e588a0d839b5 ("ASoC: dapm: Consolidate path trace events")
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Link: https://lore.kernel.org/r/20240416000303.04670cdf@rorschach.local.home
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ata: pata_legacy: make legacy_exit() work again [+ + +]
Author: Sergey Shtylyov <s.shtylyov@omp.ru>
Date:   Sat May 4 23:27:25 2024 +0300

    ata: pata_legacy: make legacy_exit() work again
    
    commit d4a89339f17c87c4990070e9116462d16e75894f upstream.
    
    Commit defc9cd826e4 ("pata_legacy: resychronize with upstream changes and
    resubmit") missed to update legacy_exit(), so that it now fails to do any
    cleanup -- the loop body there can never be entered.  Fix that and finally
    remove now useless nr_legacy_host variable...
    
    Found by Linux Verification Center (linuxtesting.org) with the Svace static
    analysis tool.
    
    Fixes: defc9cd826e4 ("pata_legacy: resychronize with upstream changes and resubmit")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Reviewed-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binder: fix max_thread type inconsistency [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Sun Apr 21 17:37:49 2024 +0000

    binder: fix max_thread type inconsistency
    
    commit 42316941335644a98335f209daafa4c122f28983 upstream.
    
    The type defined for the BINDER_SET_MAX_THREADS ioctl was changed from
    size_t to __u32 in order to avoid incompatibility issues between 32 and
    64-bit kernels. However, the internal types used to copy from user and
    store the value were never updated. Use u32 to fix the inconsistency.
    
    Fixes: a9350fc859ae ("staging: android: binder: fix BINDER_SET_MAX_THREADS declaration")
    Reported-by: Arve Hjønnevåg <arve@android.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240421173750.3117808-1-cmllamas@google.com
    [cmllamas: resolve minor conflicts due to missing commit 421518a2740f]
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
crypto: bcm - Fix pointer arithmetic [+ + +]
Author: Aleksandr Mishin <amishin@t-argos.ru>
Date:   Fri Mar 22 23:59:15 2024 +0300

    crypto: bcm - Fix pointer arithmetic
    
    [ Upstream commit 2b3460cbf454c6b03d7429e9ffc4fe09322eb1a9 ]
    
    In spu2_dump_omd() value of ptr is increased by ciph_key_len
    instead of hash_iv_len which could lead to going beyond the
    buffer boundaries.
    Fix this bug by changing ciph_key_len to hash_iv_len.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 9d12ba86f818 ("crypto: brcm - Add Broadcom SPU driver")
    Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: ccp - drop platform ifdef checks [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Apr 3 10:06:42 2024 +0200

    crypto: ccp - drop platform ifdef checks
    
    [ Upstream commit 42c2d7d02977ef09d434b1f5b354f5bc6c1027ab ]
    
    When both ACPI and OF are disabled, the dev_vdata variable is unused:
    
    drivers/crypto/ccp/sp-platform.c:33:34: error: unused variable 'dev_vdata' [-Werror,-Wunused-const-variable]
    
    This is not a useful configuration, and there is not much point in saving
    a few bytes when only one of the two is enabled, so just remove all
    these ifdef checks and rely on of_match_node() and acpi_match_device()
    returning NULL when these subsystems are disabled.
    
    Fixes: 6c5063434098 ("crypto: ccp - Add ACPI support")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: ccp - Remove forward declaration [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Mon Sep 24 10:26:15 2018 -0700

    crypto: ccp - Remove forward declaration
    
    [ Upstream commit 3512dcb4e6c64733871202c01f0ec6b5d84d32ac ]
    
    Clang emits a warning about this construct:
    
    drivers/crypto/ccp/sp-platform.c:36:36: warning: tentative array
    definition assumed to have one element
    static const struct acpi_device_id sp_acpi_match[];
                                       ^
    1 warning generated.
    
    Just remove the forward declarations and move the initializations up
    so that they can be used in sp_get_of_version and sp_get_acpi_version.
    
    Reported-by: Nick Desaulniers <ndesaulniers@google.com>
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Acked-by: Gary R Hook <gary.hook@amd.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Stable-dep-of: 42c2d7d02977 ("crypto: ccp - drop platform ifdef checks")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: qat - Fix ADF_DEV_RESET_SYNC memory leak [+ + +]
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Wed May 8 16:39:51 2024 +0800

    crypto: qat - Fix ADF_DEV_RESET_SYNC memory leak
    
    commit d3b17c6d9dddc2db3670bc9be628b122416a3d26 upstream.
    
    Using completion_done to determine whether the caller has gone
    away only works after a complete call.  Furthermore it's still
    possible that the caller has not yet called wait_for_completion,
    resulting in another potential UAF.
    
    Fix this by making the caller use cancel_work_sync and then freeing
    the memory safely.
    
    Fixes: 7d42e097607c ("crypto: qat - resolve race condition during AER recovery")
    Cc: <stable@vger.kernel.org> #6.8+
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Reviewed-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dma-buf/sw-sync: don't enable IRQ from sync_print_obj() [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Sun May 5 23:08:31 2024 +0900

    dma-buf/sw-sync: don't enable IRQ from sync_print_obj()
    
    [ Upstream commit b794918961516f667b0c745aebdfebbb8a98df39 ]
    
    Since commit a6aa8fca4d79 ("dma-buf/sw-sync: Reduce irqsave/irqrestore from
    known context") by error replaced spin_unlock_irqrestore() with
    spin_unlock_irq() for both sync_debugfs_show() and sync_print_obj() despite
    sync_print_obj() is called from sync_debugfs_show(), lockdep complains
    inconsistent lock state warning.
    
    Use plain spin_{lock,unlock}() for sync_print_obj(), for
    sync_debugfs_show() is already using spin_{lock,unlock}_irq().
    
    Reported-by: syzbot <syzbot+a225ee3df7e7f9372dbe@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=a225ee3df7e7f9372dbe
    Fixes: a6aa8fca4d79 ("dma-buf/sw-sync: Reduce irqsave/irqrestore from known context")
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/c2e46020-aaa6-4e06-bf73-f05823f913f0@I-love.SAKURA.ne.jp
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dmaengine: idma64: Add check for dma_set_max_seg_size [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Wed Apr 3 02:49:32 2024 +0000

    dmaengine: idma64: Add check for dma_set_max_seg_size
    
    [ Upstream commit 2b1c1cf08a0addb6df42f16b37133dc7a351de29 ]
    
    As the possible failure of the dma_set_max_seg_size(), it should be
    better to check the return value of the dma_set_max_seg_size().
    
    Fixes: e3fdb1894cfa ("dmaengine: idma64: set maximum allowed segment size for DMA")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20240403024932.3342606-1-nichen@iscas.ac.cn
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Fix potential index out of bounds in color transformation function [+ + +]
Author: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
Date:   Mon Feb 26 18:38:08 2024 +0530

    drm/amd/display: Fix potential index out of bounds in color transformation function
    
    [ Upstream commit 63ae548f1054a0b71678d0349c7dc9628ddd42ca ]
    
    Fixes index out of bounds issue in the color transformation function.
    The issue could occur when the index 'i' exceeds the number of transfer
    function points (TRANSFER_FUNC_POINTS).
    
    The fix adds a check to ensure 'i' is within bounds before accessing the
    transfer function points. If 'i' is out of bounds, an error message is
    logged and the function returns false to indicate an error.
    
    Reported by smatch:
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:405 cm_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.red' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:406 cm_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.green' 1025 <= s32max
    drivers/gpu/drm/amd/amdgpu/../display/dc/dcn10/dcn10_cm_common.c:407 cm_helper_translate_curve_to_hw_format() error: buffer overflow 'output_tf->tf_pts.blue' 1025 <= s32max
    
    Fixes: b629596072e5 ("drm/amd/display: Build unity lut for shaper")
    Cc: Vitaly Prosyak <vitaly.prosyak@amd.com>
    Cc: Charlene Liu <Charlene.Liu@amd.com>
    Cc: Harry Wentland <harry.wentland@amd.com>
    Cc: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Cc: Roman Li <roman.li@amd.com>
    Cc: Aurabindo Pillai <aurabindo.pillai@amd.com>
    Cc: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmugam@amd.com>
    Reviewed-by: Tom Chung <chiahsuan.chung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Set color_mgmt_changed to true on unsuspend [+ + +]
Author: Joshua Ashton <joshua@froggi.es>
Date:   Thu Nov 2 04:21:55 2023 +0000

    drm/amd/display: Set color_mgmt_changed to true on unsuspend
    
    [ Upstream commit 2eb9dd497a698dc384c0dd3e0311d541eb2e13dd ]
    
    Otherwise we can end up with a frame on unsuspend where color management
    is not applied when userspace has not committed themselves.
    
    Fixes re-applying color management on Steam Deck/Gamescope on S3 resume.
    
    Signed-off-by: Joshua Ashton <joshua@froggi.es>
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/arm/malidp: fix a possible null pointer dereference [+ + +]
Author: Huai-Yuan Liu <qq810974084@gmail.com>
Date:   Sun Apr 7 14:30:53 2024 +0800

    drm/arm/malidp: fix a possible null pointer dereference
    
    [ Upstream commit a1f95aede6285dba6dd036d907196f35ae3a11ea ]
    
    In malidp_mw_connector_reset, new memory is allocated with kzalloc, but
    no check is performed. In order to prevent null pointer dereferencing,
    ensure that mw_state is checked before calling
    __drm_atomic_helper_connector_reset.
    
    Fixes: 8cbc5caf36ef ("drm: mali-dp: Add writeback connector")
    Signed-off-by: Huai-Yuan Liu <qq810974084@gmail.com>
    Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240407063053.5481-1-qq810974084@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/mediatek: Add 0 size check to mtk_drm_gem_obj [+ + +]
Author: Justin Green <greenjustin@chromium.org>
Date:   Thu Mar 7 13:00:51 2024 -0500

    drm/mediatek: Add 0 size check to mtk_drm_gem_obj
    
    [ Upstream commit 1e4350095e8ab2577ee05f8c3b044e661b5af9a0 ]
    
    Add a check to mtk_drm_gem_init if we attempt to allocate a GEM object
    of 0 bytes. Currently, no such check exists and the kernel will panic if
    a userspace application attempts to allocate a 0x0 GBM buffer.
    
    Tested by attempting to allocate a 0x0 GBM buffer on an MT8188 and
    verifying that we now return EINVAL.
    
    Fixes: 119f5173628a ("drm/mediatek: Add DRM Driver for Mediatek SoC MT8173.")
    Signed-off-by: Justin Green <greenjustin@chromium.org>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    Link: https://patchwork.kernel.org/project/dri-devel/patch/20240307180051.4104425-1-greenjustin@chromium.org/
    Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dpu: use kms stored hw mdp block [+ + +]
Author: Jeykumar Sankaran <jsanka@codeaurora.org>
Date:   Wed Sep 5 19:08:16 2018 -0700

    drm/msm/dpu: use kms stored hw mdp block
    
    [ Upstream commit 57250ca5433306774e7f83b11503609ed1bf28cf ]
    
    Avoid querying RM for hw mdp block. Use the one
    stored in KMS during initialization.
    
    changes in v4:
            - none
    changes in v5:
            - none
    
    Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
    Reviewed-by: Sean Paul <seanpaul@chromium.org>
    Signed-off-by: Sean Paul <seanpaul@chromium.org>
    Signed-off-by: Rob Clark <robdclark@gmail.com>
    Stable-dep-of: 2b938c3ab0a6 ("drm/msm/dpu: Always flush the slave INTF on the CTL")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ecryptfs: Fix buffer size for tag 66 packet [+ + +]
Author: Brian Kubisiak <brian@kubisiak.com>
Date:   Sun Mar 17 07:46:00 2024 -0700

    ecryptfs: Fix buffer size for tag 66 packet
    
    [ Upstream commit 85a6a1aff08ec9f5b929d345d066e2830e8818e5 ]
    
    The 'TAG 66 Packet Format' description is missing the cipher code and
    checksum fields that are packed into the message packet. As a result,
    the buffer allocated for the packet is 3 bytes too small and
    write_tag_66_packet() will write up to 3 bytes past the end of the
    buffer.
    
    Fix this by increasing the size of the allocation so the whole packet
    will always fit in the buffer.
    
    This fixes the below kasan slab-out-of-bounds bug:
    
      BUG: KASAN: slab-out-of-bounds in ecryptfs_generate_key_packet_set+0x7d6/0xde0
      Write of size 1 at addr ffff88800afbb2a5 by task touch/181
    
      CPU: 0 PID: 181 Comm: touch Not tainted 6.6.13-gnu #1 4c9534092be820851bb687b82d1f92a426598dc6
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.2/GNU Guix 04/01/2014
      Call Trace:
       <TASK>
       dump_stack_lvl+0x4c/0x70
       print_report+0xc5/0x610
       ? ecryptfs_generate_key_packet_set+0x7d6/0xde0
       ? kasan_complete_mode_report_info+0x44/0x210
       ? ecryptfs_generate_key_packet_set+0x7d6/0xde0
       kasan_report+0xc2/0x110
       ? ecryptfs_generate_key_packet_set+0x7d6/0xde0
       __asan_store1+0x62/0x80
       ecryptfs_generate_key_packet_set+0x7d6/0xde0
       ? __pfx_ecryptfs_generate_key_packet_set+0x10/0x10
       ? __alloc_pages+0x2e2/0x540
       ? __pfx_ovl_open+0x10/0x10 [overlay 30837f11141636a8e1793533a02e6e2e885dad1d]
       ? dentry_open+0x8f/0xd0
       ecryptfs_write_metadata+0x30a/0x550
       ? __pfx_ecryptfs_write_metadata+0x10/0x10
       ? ecryptfs_get_lower_file+0x6b/0x190
       ecryptfs_initialize_file+0x77/0x150
       ecryptfs_create+0x1c2/0x2f0
       path_openat+0x17cf/0x1ba0
       ? __pfx_path_openat+0x10/0x10
       do_filp_open+0x15e/0x290
       ? __pfx_do_filp_open+0x10/0x10
       ? __kasan_check_write+0x18/0x30
       ? _raw_spin_lock+0x86/0xf0
       ? __pfx__raw_spin_lock+0x10/0x10
       ? __kasan_check_write+0x18/0x30
       ? alloc_fd+0xf4/0x330
       do_sys_openat2+0x122/0x160
       ? __pfx_do_sys_openat2+0x10/0x10
       __x64_sys_openat+0xef/0x170
       ? __pfx___x64_sys_openat+0x10/0x10
       do_syscall_64+0x60/0xd0
       entry_SYSCALL_64_after_hwframe+0x6e/0xd8
      RIP: 0033:0x7f00a703fd67
      Code: 25 00 00 41 00 3d 00 00 41 00 74 37 64 8b 04 25 18 00 00 00 85 c0 75 5b 44 89 e2 48 89 ee bf 9c ff ff ff b8 01 01 00 00 0f 05 <48> 3d 00 f0 ff ff 0f 87 85 00 00 00 48 83 c4 68 5d 41 5c c3 0f 1f
      RSP: 002b:00007ffc088e30b0 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
      RAX: ffffffffffffffda RBX: 00007ffc088e3368 RCX: 00007f00a703fd67
      RDX: 0000000000000941 RSI: 00007ffc088e48d7 RDI: 00000000ffffff9c
      RBP: 00007ffc088e48d7 R08: 0000000000000001 R09: 0000000000000000
      R10: 00000000000001b6 R11: 0000000000000246 R12: 0000000000000941
      R13: 0000000000000000 R14: 00007ffc088e48d7 R15: 00007f00a7180040
       </TASK>
    
      Allocated by task 181:
       kasan_save_stack+0x2f/0x60
       kasan_set_track+0x29/0x40
       kasan_save_alloc_info+0x25/0x40
       __kasan_kmalloc+0xc5/0xd0
       __kmalloc+0x66/0x160
       ecryptfs_generate_key_packet_set+0x6d2/0xde0
       ecryptfs_write_metadata+0x30a/0x550
       ecryptfs_initialize_file+0x77/0x150
       ecryptfs_create+0x1c2/0x2f0
       path_openat+0x17cf/0x1ba0
       do_filp_open+0x15e/0x290
       do_sys_openat2+0x122/0x160
       __x64_sys_openat+0xef/0x170
       do_syscall_64+0x60/0xd0
       entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Fixes: dddfa461fc89 ("[PATCH] eCryptfs: Public key; packet management")
    Signed-off-by: Brian Kubisiak <brian@kubisiak.com>
    Link: https://lore.kernel.org/r/5j2q56p6qkhezva6b2yuqfrsurmvrrqtxxzrnp3wqu7xrz22i7@hoecdztoplbl
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
enic: Validate length of nl attributes in enic_set_vf_port [+ + +]
Author: Roded Zats <rzats@paloaltonetworks.com>
Date:   Wed May 22 10:30:44 2024 +0300

    enic: Validate length of nl attributes in enic_set_vf_port
    
    [ Upstream commit e8021b94b0412c37bcc79027c2e382086b6ce449 ]
    
    enic_set_vf_port assumes that the nl attribute IFLA_PORT_PROFILE
    is of length PORT_PROFILE_MAX and that the nl attributes
    IFLA_PORT_INSTANCE_UUID, IFLA_PORT_HOST_UUID are of length PORT_UUID_MAX.
    These attributes are validated (in the function do_setlink in rtnetlink.c)
    using the nla_policy ifla_port_policy. The policy defines IFLA_PORT_PROFILE
    as NLA_STRING, IFLA_PORT_INSTANCE_UUID as NLA_BINARY and
    IFLA_PORT_HOST_UUID as NLA_STRING. That means that the length validation
    using the policy is for the max size of the attributes and not on exact
    size so the length of these attributes might be less than the sizes that
    enic_set_vf_port expects. This might cause an out of bands
    read access in the memcpys of the data of these
    attributes in enic_set_vf_port.
    
    Fixes: f8bd909183ac ("net: Add ndo_{set|get}_vf_port support for enic dynamic vnics")
    Signed-off-by: Roded Zats <rzats@paloaltonetworks.com>
    Link: https://lore.kernel.org/r/20240522073044.33519-1-rzats@paloaltonetworks.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ext4: avoid excessive credit estimate in ext4_tmpfile() [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Mar 7 12:53:20 2024 +0100

    ext4: avoid excessive credit estimate in ext4_tmpfile()
    
    [ Upstream commit 35a1f12f0ca857fee1d7a04ef52cbd5f1f84de13 ]
    
    A user with minimum journal size (1024 blocks these days) complained
    about the following error triggered by generic/697 test in
    ext4_tmpfile():
    
    run fstests generic/697 at 2024-02-28 05:34:46
    JBD2: vfstest wants too many credits credits:260 rsv_credits:0 max:256
    EXT4-fs error (device loop0) in __ext4_new_inode:1083: error 28
    
    Indeed the credit estimate in ext4_tmpfile() is huge.
    EXT4_MAXQUOTAS_INIT_BLOCKS() is 219, then 10 credits from ext4_tmpfile()
    itself and then ext4_xattr_credits_for_new_inode() adds more credits
    needed for security attributes and ACLs. Now the
    EXT4_MAXQUOTAS_INIT_BLOCKS() is in fact unnecessary because we've
    already initialized quotas with dquot_init() shortly before and so
    EXT4_MAXQUOTAS_TRANS_BLOCKS() is enough (which boils down to 3 credits).
    
    Fixes: af51a2ac36d1 ("ext4: ->tmpfile() support")
    Signed-off-by: Jan Kara <jack@suse.cz>
    Tested-by: Luis Henriques <lhenriques@suse.de>
    Tested-by: Disha Goel <disgoel@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240307115320.28949-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fix mb_cache_entry's e_refcnt leak in ext4_xattr_block_cache_find() [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Sat May 4 15:55:25 2024 +0800

    ext4: fix mb_cache_entry's e_refcnt leak in ext4_xattr_block_cache_find()
    
    commit 0c0b4a49d3e7f49690a6827a41faeffad5df7e21 upstream.
    
    Syzbot reports a warning as follows:
    
    ============================================
    WARNING: CPU: 0 PID: 5075 at fs/mbcache.c:419 mb_cache_destroy+0x224/0x290
    Modules linked in:
    CPU: 0 PID: 5075 Comm: syz-executor199 Not tainted 6.9.0-rc6-gb947cc5bf6d7
    RIP: 0010:mb_cache_destroy+0x224/0x290 fs/mbcache.c:419
    Call Trace:
     <TASK>
     ext4_put_super+0x6d4/0xcd0 fs/ext4/super.c:1375
     generic_shutdown_super+0x136/0x2d0 fs/super.c:641
     kill_block_super+0x44/0x90 fs/super.c:1675
     ext4_kill_sb+0x68/0xa0 fs/ext4/super.c:7327
    [...]
    ============================================
    
    This is because when finding an entry in ext4_xattr_block_cache_find(), if
    ext4_sb_bread() returns -ENOMEM, the ce's e_refcnt, which has already grown
    in the __entry_find(), won't be put away, and eventually trigger the above
    issue in mb_cache_destroy() due to reference count leakage.
    
    So call mb_cache_entry_put() on the -ENOMEM error branch as a quick fix.
    
    Reported-by: syzbot+dd43bd0f7474512edc47@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=dd43bd0f7474512edc47
    Fixes: fb265c9cb49e ("ext4: add ext4_sb_bread() to disambiguate ENOMEM cases")
    Cc: stable@kernel.org
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240504075526.2254349-2-libaokun@huaweicloud.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
extcon: max8997: select IRQ_DOMAIN instead of depending on it [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Mon Feb 12 22:00:28 2024 -0800

    extcon: max8997: select IRQ_DOMAIN instead of depending on it
    
    [ Upstream commit b1781d0a1458070d40134e4f3412ec9d70099bec ]
    
    IRQ_DOMAIN is a hidden (not user visible) symbol. Users cannot set
    it directly thru "make *config", so drivers should select it instead
    of depending on it if they need it.
    Relying on it being set for a dependency is risky.
    
    Consistently using "select" or "depends on" can also help reduce
    Kconfig circular dependency issues.
    
    Therefore, change EXTCON_MAX8997's use of "depends on" for
    IRQ_DOMAIN to "select".
    
    Link: https://lore.kernel.org/lkml/20240213060028.9744-1-rdunlap@infradead.org/
    Fixes: dca1a71e4108 ("extcon: Add support irq domain for MAX8997 muic")
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Acked-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: add error prints for debugging mount failure [+ + +]
Author: Sahitya Tummala <quic_stummala@quicinc.com>
Date:   Thu May 23 09:49:17 2019 +0530

    f2fs: add error prints for debugging mount failure
    
    [ Upstream commit 9227d5227b8db354d386f592f159eaa44db1c0b8 ]
    
    Add error prints to get more details on the mount failure.
    
    Signed-off-by: Sahitya Tummala <stummala@codeaurora.org>
    Reviewed-by: Chao Yu <yuchao0@huawei.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Stable-dep-of: 0fa4e57c1db2 ("f2fs: fix to release node block count in error path of f2fs_new_node_page()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

f2fs: fix to release node block count in error path of f2fs_new_node_page() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue May 7 11:31:00 2024 +0800

    f2fs: fix to release node block count in error path of f2fs_new_node_page()
    
    [ Upstream commit 0fa4e57c1db263effd72d2149d4e21da0055c316 ]
    
    It missed to call dec_valid_node_count() to release node block count
    in error path, fix it.
    
    Fixes: 141170b759e0 ("f2fs: fix to avoid use f2fs_bug_on() in f2fs_new_node_page()")
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbdev: savage: Handle err return when savagefb_check_var failed [+ + +]
Author: Cai Xinchen <caixinchen1@huawei.com>
Date:   Tue Apr 16 06:51:37 2024 +0000

    fbdev: savage: Handle err return when savagefb_check_var failed
    
    commit 6ad959b6703e2c4c5d7af03b4cfd5ff608036339 upstream.
    
    The commit 04e5eac8f3ab("fbdev: savage: Error out if pixclock equals zero")
    checks the value of pixclock to avoid divide-by-zero error. However
    the function savagefb_probe doesn't handle the error return of
    savagefb_check_var. When pixclock is 0, it will cause divide-by-zero error.
    
    Fixes: 04e5eac8f3ab ("fbdev: savage: Error out if pixclock equals zero")
    Signed-off-by: Cai Xinchen <caixinchen1@huawei.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbdev: sh7760fb: allow modular build [+ + +]
Author: Randy Dunlap <rdunlap@infradead.org>
Date:   Fri Feb 9 21:39:38 2024 -0800

    fbdev: sh7760fb: allow modular build
    
    [ Upstream commit 51084f89d687e14d96278241e5200cde4b0985c7 ]
    
    There is no reason to prohibit sh7760fb from being built as a
    loadable module as suggested by Geert, so change the config symbol
    from bool to tristate to allow that and change the FB dependency as
    needed.
    
    Fixes: f75f71b2c418 ("fbdev/sh7760fb: Depend on FB=y")
    Suggested-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Javier Martinez Canillas <javierm@redhat.com>
    Cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Cc: Sam Ravnborg <sam@ravnborg.org>
    Cc: Helge Deller <deller@gmx.de>
    Cc: linux-fbdev@vger.kernel.org
    Cc: dri-devel@lists.freedesktop.org
    Acked-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Acked-by: Javier Martinez Canillas <javierm@redhat.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: shmobile: fix snprintf truncation [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Mar 26 23:38:00 2024 +0100

    fbdev: shmobile: fix snprintf truncation
    
    [ Upstream commit 26c8cfb9d1e4b252336d23dd5127a8cbed414a32 ]
    
    The name of the overlay does not fit into the fixed-length field:
    
    drivers/video/fbdev/sh_mobile_lcdcfb.c:1577:2: error: 'snprintf' will always be truncated; specified size is 16, but format string expands to at least 25
    
    Make it short enough by changing the string.
    
    Fixes: c5deac3c9b22 ("fbdev: sh_mobile_lcdc: Implement overlays support")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fbdev: sisfb: hide unused variables [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Apr 3 10:06:31 2024 +0200

    fbdev: sisfb: hide unused variables
    
    [ Upstream commit 688cf598665851b9e8cb5083ff1d208ce43d10ff ]
    
    Building with W=1 shows that a couple of variables in this driver are only
    used in certain configurations:
    
    drivers/video/fbdev/sis/init301.c:239:28: error: 'SiS_Part2CLVX_6' defined but not used [-Werror=unused-const-variable=]
      239 | static const unsigned char SiS_Part2CLVX_6[] = {   /* 1080i */
          |                            ^~~~~~~~~~~~~~~
    drivers/video/fbdev/sis/init301.c:230:28: error: 'SiS_Part2CLVX_5' defined but not used [-Werror=unused-const-variable=]
      230 | static const unsigned char SiS_Part2CLVX_5[] = {   /* 750p */
          |                            ^~~~~~~~~~~~~~~
    drivers/video/fbdev/sis/init301.c:211:28: error: 'SiS_Part2CLVX_4' defined but not used [-Werror=unused-const-variable=]
      211 | static const unsigned char SiS_Part2CLVX_4[] = {   /* PAL */
          |                            ^~~~~~~~~~~~~~~
    drivers/video/fbdev/sis/init301.c:192:28: error: 'SiS_Part2CLVX_3' defined but not used [-Werror=unused-const-variable=]
      192 | static const unsigned char SiS_Part2CLVX_3[] = {  /* NTSC, 525i, 525p */
          |                            ^~~~~~~~~~~~~~~
    drivers/video/fbdev/sis/init301.c:184:28: error: 'SiS_Part2CLVX_2' defined but not used [-Werror=unused-const-variable=]
      184 | static const unsigned char SiS_Part2CLVX_2[] = {
          |                            ^~~~~~~~~~~~~~~
    drivers/video/fbdev/sis/init301.c:176:28: error: 'SiS_Part2CLVX_1' defined but not used [-Werror=unused-const-variable=]
      176 | static const unsigned char SiS_Part2CLVX_1[] = {
          |                            ^~~~~~~~~~~~~~~
    
    This started showing up after the definitions were moved into the
    source file from the header, which was not flagged by the compiler.
    Move the definition into the appropriate #ifdef block that already
    exists next to them.
    
    Fixes: 5908986ef348 ("video: fbdev: sis: avoid mismatched prototypes")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: dmi-id: add a release callback function [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Mon Apr 8 09:34:24 2024 +0200

    firmware: dmi-id: add a release callback function
    
    [ Upstream commit cf770af5645a41a753c55a053fa1237105b0964a ]
    
    dmi_class uses kfree() as the .release function, but that now causes
    a warning with clang-16 as it violates control flow integrity (KCFI)
    rules:
    
    drivers/firmware/dmi-id.c:174:17: error: cast from 'void (*)(const void *)' to 'void (*)(struct device *)' converts to incompatible function type [-Werror,-Wcast-function-type-strict]
      174 |         .dev_release = (void(*)(struct device *)) kfree,
    
    Add an explicit function to call kfree() instead.
    
    Fixes: 4f5c791a850e ("DMI-based module autoloading")
    Link: https://lore.kernel.org/lkml/20240213100238.456912-1-arnd@kernel.org/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Jean Delvare <jdelvare@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

firmware: raspberrypi: Use correct device for DMA mappings [+ + +]
Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date:   Tue Mar 26 21:58:06 2024 +0200

    firmware: raspberrypi: Use correct device for DMA mappings
    
    [ Upstream commit df518a0ae1b982a4dcf2235464016c0c4576a34d ]
    
    The buffer used to transfer data over the mailbox interface is mapped
    using the client's device. This is incorrect, as the device performing
    the DMA transfer is the mailbox itself. Fix it by using the mailbox
    controller device instead.
    
    This requires including the mailbox_controller.h header to dereference
    the mbox_chan and mbox_controller structures. The header is not meant to
    be included by clients. This could be fixed by extending the client API
    with a function to access the controller's device.
    
    Fixes: 4e3d60656a72 ("ARM: bcm2835: Add the Raspberry Pi firmware driver")
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
    Tested-by: Ivan T. Ivanov <iivanov@suse.de>
    Link: https://lore.kernel.org/r/20240326195807.15163-3-laurent.pinchart@ideasonboard.com
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
genirq/cpuhotplug, x86/vector: Prevent vector leak during CPU offline [+ + +]
Author: Dongli Zhang <dongli.zhang@oracle.com>
Date:   Wed May 22 15:02:18 2024 -0700

    genirq/cpuhotplug, x86/vector: Prevent vector leak during CPU offline
    
    commit a6c11c0a5235fb144a65e0cb2ffd360ddc1f6c32 upstream.
    
    The absence of IRQD_MOVE_PCNTXT prevents immediate effectiveness of
    interrupt affinity reconfiguration via procfs. Instead, the change is
    deferred until the next instance of the interrupt being triggered on the
    original CPU.
    
    When the interrupt next triggers on the original CPU, the new affinity is
    enforced within __irq_move_irq(). A vector is allocated from the new CPU,
    but the old vector on the original CPU remains and is not immediately
    reclaimed. Instead, apicd->move_in_progress is flagged, and the reclaiming
    process is delayed until the next trigger of the interrupt on the new CPU.
    
    Upon the subsequent triggering of the interrupt on the new CPU,
    irq_complete_move() adds a task to the old CPU's vector_cleanup list if it
    remains online. Subsequently, the timer on the old CPU iterates over its
    vector_cleanup list, reclaiming old vectors.
    
    However, a rare scenario arises if the old CPU is outgoing before the
    interrupt triggers again on the new CPU.
    
    In that case irq_force_complete_move() is not invoked on the outgoing CPU
    to reclaim the old apicd->prev_vector because the interrupt isn't currently
    affine to the outgoing CPU, and irq_needs_fixup() returns false. Even
    though __vector_schedule_cleanup() is later called on the new CPU, it
    doesn't reclaim apicd->prev_vector; instead, it simply resets both
    apicd->move_in_progress and apicd->prev_vector to 0.
    
    As a result, the vector remains unreclaimed in vector_matrix, leading to a
    CPU vector leak.
    
    To address this issue, move the invocation of irq_force_complete_move()
    before the irq_needs_fixup() call to reclaim apicd->prev_vector, if the
    interrupt is currently or used to be affine to the outgoing CPU.
    
    Additionally, reclaim the vector in __vector_schedule_cleanup() as well,
    following a warning message, although theoretically it should never see
    apicd->move_in_progress with apicd->prev_cpu pointing to an offline CPU.
    
    Fixes: f0383c24b485 ("genirq/cpuhotplug: Add support for cleaning up move in progress")
    Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240522220218.162423-1-dongli.zhang@oracle.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
greybus: arche-ctrl: move device table to its right location [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Apr 3 10:06:35 2024 +0200

    greybus: arche-ctrl: move device table to its right location
    
    [ Upstream commit 6a0b8c0da8d8d418cde6894a104cf74e6098ddfa ]
    
    The arche-ctrl has two platform drivers and three of_device_id tables,
    but one table is only used for the the module loader, while the other
    two seem to be associated with their drivers.
    
    This leads to a W=1 warning when the driver is built-in:
    
    drivers/staging/greybus/arche-platform.c:623:34: error: 'arche_combined_id' defined but not used [-Werror=unused-const-variable=]
      623 | static const struct of_device_id arche_combined_id[] = {
    
    Drop the extra table and register both tables that are actually
    used as the ones for the module loader instead.
    
    Fixes: 7b62b61c752a ("greybus: arche-ctrl: Don't expose driver internals to arche-platform driver")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20240403080702.3509288-18-arnd@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

greybus: lights: check return of get_channel_from_mode [+ + +]
Author: Rui Miguel Silva <rmfrfs@gmail.com>
Date:   Mon Mar 25 22:09:55 2024 +0000

    greybus: lights: check return of get_channel_from_mode
    
    [ Upstream commit a1ba19a1ae7cd1e324685ded4ab563e78fe68648 ]
    
    If channel for the given node is not found we return null from
    get_channel_from_mode. Make sure we validate the return pointer
    before using it in two of the missing places.
    
    This was originally reported in [0]:
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    [0] https://lore.kernel.org/all/20240301190425.120605-1-m.lobanov@rosalinux.ru
    
    Fixes: 2870b52bae4c ("greybus: lights: add lights implementation")
    Reported-by: Mikhail Lobanov <m.lobanov@rosalinux.ru>
    Suggested-by: Mikhail Lobanov <m.lobanov@rosalinux.ru>
    Suggested-by: Alex Elder <elder@ieee.org>
    Signed-off-by: Rui Miguel Silva <rmfrfs@gmail.com>
    Link: https://lore.kernel.org/r/20240325221549.2185265-1-rmfrfs@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: ims-pcu - fix printf string overflow [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Thu Mar 28 13:28:56 2024 -0700

    Input: ims-pcu - fix printf string overflow
    
    [ Upstream commit bf32bceedd0453c70d9d022e2e29f98e446d7161 ]
    
    clang warns about a string overflow in this driver
    
    drivers/input/misc/ims-pcu.c:1802:2: error: 'snprintf' will always be truncated; specified size is 10, but format string expands to at least 12 [-Werror,-Wformat-truncation]
    drivers/input/misc/ims-pcu.c:1814:2: error: 'snprintf' will always be truncated; specified size is 10, but format string expands to at least 12 [-Werror,-Wformat-truncation]
    
    Make the buffer a little longer to ensure it always fits.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20240326223825.4084412-7-arnd@kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Input: pm8xxx-vibrator - correct VIB_MAX_LEVELS calculation [+ + +]
Author: Fenglin Wu <quic_fenglinw@quicinc.com>
Date:   Mon Apr 15 16:03:40 2024 -0700

    Input: pm8xxx-vibrator - correct VIB_MAX_LEVELS calculation
    
    [ Upstream commit 48c0687a322d54ac7e7a685c0b6db78d78f593af ]
    
    The output voltage is inclusive hence the max level calculation is
    off-by-one-step. Correct it.
    
    iWhile we are at it also add a define for the step size instead of
    using the magic value.
    
    Fixes: 11205bb63e5c ("Input: add support for pm8xxx based vibrator driver")
    Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com>
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Link: https://lore.kernel.org/r/20240412-pm8xxx-vibrator-new-design-v10-1-0ec0ad133866@quicinc.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
intel_th: pci: Add Meteor Lake-S CPU support [+ + +]
Author: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Date:   Mon Apr 29 16:01:18 2024 +0300

    intel_th: pci: Add Meteor Lake-S CPU support
    
    commit a4f813c3ec9d1c32bc402becd1f011b3904dd699 upstream.
    
    Add support for the Trace Hub in Meteor Lake-S CPU.
    
    Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Cc: stable@kernel.org
    Link: https://lore.kernel.org/r/20240429130119.1518073-15-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipv6: sr: add missing seg6_local_exit [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Thu May 9 21:18:10 2024 +0800

    ipv6: sr: add missing seg6_local_exit
    
    [ Upstream commit 3321687e321307629c71b664225b861ebf3e5753 ]
    
    Currently, we only call seg6_local_exit() in seg6_init() if
    seg6_local_init() failed. But forgot to call it in seg6_exit().
    
    Fixes: d1df6fd8a1d2 ("ipv6: sr: define core operations for seg6local lightweight tunnel")
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20240509131812.1662197-2-liuhangbin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: sr: fix incorrect unregister order [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Thu May 9 21:18:11 2024 +0800

    ipv6: sr: fix incorrect unregister order
    
    [ Upstream commit 6e370a771d2985107e82d0f6174381c1acb49c20 ]
    
    Commit 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and
    null-ptr-deref") changed the register order in seg6_init(). But the
    unregister order in seg6_exit() is not updated.
    
    Fixes: 5559cea2d5aa ("ipv6: sr: fix possible use-after-free and null-ptr-deref")
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20240509131812.1662197-3-liuhangbin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: sr: fix invalid unregister error path [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Thu May 9 21:18:12 2024 +0800

    ipv6: sr: fix invalid unregister error path
    
    [ Upstream commit 160e9d2752181fcf18c662e74022d77d3164cd45 ]
    
    The error path of seg6_init() is wrong in case CONFIG_IPV6_SEG6_LWTUNNEL
    is not defined. In that case if seg6_hmac_init() fails, the
    genl_unregister_family() isn't called.
    
    This issue exist since commit 46738b1317e1 ("ipv6: sr: add option to control
    lwtunnel support"), and commit 5559cea2d5aa ("ipv6: sr: fix possible
    use-after-free and null-ptr-deref") replaced unregister_pernet_subsys()
    with genl_unregister_family() in this error path.
    
    Fixes: 46738b1317e1 ("ipv6: sr: add option to control lwtunnel support")
    Reported-by: Guillaume Nault <gnault@redhat.com>
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20240509131812.1662197-4-liuhangbin@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: sr: fix memleak in seg6_hmac_init_algo [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Fri May 17 08:54:35 2024 +0800

    ipv6: sr: fix memleak in seg6_hmac_init_algo
    
    [ Upstream commit efb9f4f19f8e37fde43dfecebc80292d179f56c6 ]
    
    seg6_hmac_init_algo returns without cleaning up the previous allocations
    if one fails, so it's going to leak all that memory and the crypto tfms.
    
    Update seg6_hmac_exit to only free the memory when allocated, so we can
    reuse the code directly.
    
    Fixes: bf355b8d2c30 ("ipv6: sr: add core files for SR HMAC support")
    Reported-by: Sabrina Dubroca <sd@queasysnail.net>
    Closes: https://lore.kernel.org/netdev/Zj3bh-gE7eT6V6aH@hog/
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://lore.kernel.org/r/20240517005435.2600277-1-liuhangbin@gmail.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipvlan: Dont Use skb->sk in ipvlan_process_v{4,6}_outbound [+ + +]
Author: Yue Haibing <yuehaibing@huawei.com>
Date:   Wed May 29 17:56:33 2024 +0800

    ipvlan: Dont Use skb->sk in ipvlan_process_v{4,6}_outbound
    
    [ Upstream commit b3dc6e8003b500861fa307e9a3400c52e78e4d3a ]
    
    Raw packet from PF_PACKET socket ontop of an IPv6-backed ipvlan device will
    hit WARN_ON_ONCE() in sk_mc_loop() through sch_direct_xmit() path.
    
    WARNING: CPU: 2 PID: 0 at net/core/sock.c:775 sk_mc_loop+0x2d/0x70
    Modules linked in: sch_netem ipvlan rfkill cirrus drm_shmem_helper sg drm_kms_helper
    CPU: 2 PID: 0 Comm: swapper/2 Kdump: loaded Not tainted 6.9.0+ #279
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    RIP: 0010:sk_mc_loop+0x2d/0x70
    Code: fa 0f 1f 44 00 00 65 0f b7 15 f7 96 a3 4f 31 c0 66 85 d2 75 26 48 85 ff 74 1c
    RSP: 0018:ffffa9584015cd78 EFLAGS: 00010212
    RAX: 0000000000000011 RBX: ffff91e585793e00 RCX: 0000000002c6a001
    RDX: 0000000000000000 RSI: 0000000000000040 RDI: ffff91e589c0f000
    RBP: ffff91e5855bd100 R08: 0000000000000000 R09: 3d00545216f43d00
    R10: ffff91e584fdcc50 R11: 00000060dd8616f4 R12: ffff91e58132d000
    R13: ffff91e584fdcc68 R14: ffff91e5869ce800 R15: ffff91e589c0f000
    FS:  0000000000000000(0000) GS:ffff91e898100000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f788f7c44c0 CR3: 0000000008e1a000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
    <IRQ>
     ? __warn (kernel/panic.c:693)
     ? sk_mc_loop (net/core/sock.c:760)
     ? report_bug (lib/bug.c:201 lib/bug.c:219)
     ? handle_bug (arch/x86/kernel/traps.c:239)
     ? exc_invalid_op (arch/x86/kernel/traps.c:260 (discriminator 1))
     ? asm_exc_invalid_op (./arch/x86/include/asm/idtentry.h:621)
     ? sk_mc_loop (net/core/sock.c:760)
     ip6_finish_output2 (net/ipv6/ip6_output.c:83 (discriminator 1))
     ? nf_hook_slow (net/netfilter/core.c:626)
     ip6_finish_output (net/ipv6/ip6_output.c:222)
     ? __pfx_ip6_finish_output (net/ipv6/ip6_output.c:215)
     ipvlan_xmit_mode_l3 (drivers/net/ipvlan/ipvlan_core.c:602) ipvlan
     ipvlan_start_xmit (drivers/net/ipvlan/ipvlan_main.c:226) ipvlan
     dev_hard_start_xmit (net/core/dev.c:3594)
     sch_direct_xmit (net/sched/sch_generic.c:343)
     __qdisc_run (net/sched/sch_generic.c:416)
     net_tx_action (net/core/dev.c:5286)
     handle_softirqs (kernel/softirq.c:555)
     __irq_exit_rcu (kernel/softirq.c:589)
     sysvec_apic_timer_interrupt (arch/x86/kernel/apic/apic.c:1043)
    
    The warning triggers as this:
    packet_sendmsg
       packet_snd //skb->sk is packet sk
          __dev_queue_xmit
             __dev_xmit_skb //q->enqueue is not NULL
                 __qdisc_run
                   sch_direct_xmit
                     dev_hard_start_xmit
                       ipvlan_start_xmit
                          ipvlan_xmit_mode_l3 //l3 mode
                            ipvlan_process_outbound //vepa flag
                              ipvlan_process_v6_outbound
                                ip6_local_out
                                    __ip6_finish_output
                                      ip6_finish_output2 //multicast packet
                                        sk_mc_loop //sk->sk_family is AF_PACKET
    
    Call ip{6}_local_out() with NULL sk in ipvlan as other tunnels to fix this.
    
    Fixes: 2ad7bf363841 ("ipvlan: Initial check-in of the IPVLAN driver.")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240529095633.613103-1-yuehaibing@huawei.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/alpine-msi: Fix off-by-one in allocation error path [+ + +]
Author: Zenghui Yu <yuzenghui@huawei.com>
Date:   Wed Mar 27 22:23:05 2024 +0800

    irqchip/alpine-msi: Fix off-by-one in allocation error path
    
    [ Upstream commit ff3669a71afa06208de58d6bea1cc49d5e3fcbd1 ]
    
    When alpine_msix_gic_domain_alloc() fails, there is an off-by-one in the
    number of interrupts to be freed.
    
    Fix it by passing the number of successfully allocated interrupts, instead
    of the relative index of the last allocated one.
    
    Fixes: 3841245e8498 ("irqchip/alpine-msi: Fix freeing of interrupts on allocation error path")
    Signed-off-by: Zenghui Yu <yuzenghui@huawei.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20240327142305.1048-1-yuzenghui@huawei.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jffs2: prevent xattr node from overflowing the eraseblock [+ + +]
Author: Ilya Denisyev <dev@elkcl.ru>
Date:   Fri Apr 12 18:53:54 2024 +0300

    jffs2: prevent xattr node from overflowing the eraseblock
    
    [ Upstream commit c6854e5a267c28300ff045480b5a7ee7f6f1d913 ]
    
    Add a check to make sure that the requested xattr node size is no larger
    than the eraseblock minus the cleanmarker.
    
    Unlike the usual inode nodes, the xattr nodes aren't split into parts
    and spread across multiple eraseblocks, which means that a xattr node
    must not occupy more than one eraseblock. If the requested xattr value is
    too large, the xattr node can spill onto the next eraseblock, overwriting
    the nodes and causing errors such as:
    
    jffs2: argh. node added in wrong place at 0x0000b050(2)
    jffs2: nextblock 0x0000a000, expected at 0000b00c
    jffs2: error: (823) do_verify_xattr_datum: node CRC failed at 0x01e050,
    read=0xfc892c93, calc=0x000000
    jffs2: notice: (823) jffs2_get_inode_nodes: Node header CRC failed
    at 0x01e00c. {848f,2fc4,0fef511f,59a3d171}
    jffs2: Node at 0x0000000c with length 0x00001044 would run over the
    end of the erase block
    jffs2: Perhaps the file system was created with the wrong erase size?
    jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found
    at 0x00000010: 0x1044 instead
    
    This breaks the filesystem and can lead to KASAN crashes such as:
    
    BUG: KASAN: slab-out-of-bounds in jffs2_sum_add_kvec+0x125e/0x15d0
    Read of size 4 at addr ffff88802c31e914 by task repro/830
    CPU: 0 PID: 830 Comm: repro Not tainted 6.9.0-rc3+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
    BIOS Arch Linux 1.16.3-1-1 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0xc6/0x120
     print_report+0xc4/0x620
     ? __virt_addr_valid+0x308/0x5b0
     kasan_report+0xc1/0xf0
     ? jffs2_sum_add_kvec+0x125e/0x15d0
     ? jffs2_sum_add_kvec+0x125e/0x15d0
     jffs2_sum_add_kvec+0x125e/0x15d0
     jffs2_flash_direct_writev+0xa8/0xd0
     jffs2_flash_writev+0x9c9/0xef0
     ? __x64_sys_setxattr+0xc4/0x160
     ? do_syscall_64+0x69/0x140
     ? entry_SYSCALL_64_after_hwframe+0x76/0x7e
     [...]
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: aa98d7cf59b5 ("[JFFS2][XATTR] XATTR support on JFFS2 (version. 5)")
    Signed-off-by: Ilya Denisyev <dev@elkcl.ru>
    Link: https://lore.kernel.org/r/20240412155357.237803-1-dev@elkcl.ru
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kconfig: fix comparison to constant symbols, 'm', 'n' [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sun May 19 18:22:27 2024 +0900

    kconfig: fix comparison to constant symbols, 'm', 'n'
    
    [ Upstream commit aabdc960a283ba78086b0bf66ee74326f49e218e ]
    
    Currently, comparisons to 'm' or 'n' result in incorrect output.
    
    [Test Code]
    
        config MODULES
                def_bool y
                modules
    
        config A
                def_tristate m
    
        config B
                def_bool A > n
    
    CONFIG_B is unset, while CONFIG_B=y is expected.
    
    The reason for the issue is because Kconfig compares the tristate values
    as strings.
    
    Currently, the .type fields in the constant symbol definitions,
    symbol_{yes,mod,no} are unspecified, i.e., S_UNKNOWN.
    
    When expr_calc_value() evaluates 'A > n', it checks the types of 'A' and
    'n' to determine how to compare them.
    
    The left-hand side, 'A', is a tristate symbol with a value of 'm', which
    corresponds to a numeric value of 1. (Internally, 'y', 'm', and 'n' are
    represented as 2, 1, and 0, respectively.)
    
    The right-hand side, 'n', has an unknown type, so it is treated as the
    string "n" during the comparison.
    
    expr_calc_value() compares two values numerically only when both can
    have numeric values. Otherwise, they are compared as strings.
    
        symbol    numeric value    ASCII code
        -------------------------------------
          y           2             0x79
          m           1             0x6d
          n           0             0x6e
    
    'm' is greater than 'n' if compared numerically (since 1 is greater
    than 0), but smaller than 'n' if compared as strings (since the ASCII
    code 0x6d is smaller than 0x6e).
    
    Specifying .type=S_TRISTATE for symbol_{yes,mod,no} fixes the above
    test code.
    
    Doing so, however, would cause a regression to the following test code.
    
    [Test Code 2]
    
        config MODULES
                def_bool n
                modules
    
        config A
                def_tristate n
    
        config B
                def_bool A = m
    
    You would get CONFIG_B=y, while CONFIG_B should not be set.
    
    The reason is because sym_get_string_value() turns 'm' into 'n' when the
    module feature is disabled. Consequently, expr_calc_value() evaluates
    'A = n' instead of 'A = m'. This oddity has been hidden because the type
    of 'm' was previously S_UNKNOWN instead of S_TRISTATE.
    
    sym_get_string_value() should not tweak the string because the tristate
    value has already been correctly calculated. There is no reason to
    return the string "n" where its tristate value is mod.
    
    Fixes: 31847b67bec0 ("kconfig: allow use of relations other than (in)equality")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kdb: Fix buffer overflow during tab-complete [+ + +]
Author: Daniel Thompson <daniel.thompson@linaro.org>
Date:   Wed Apr 24 15:03:34 2024 +0100

    kdb: Fix buffer overflow during tab-complete
    
    commit e9730744bf3af04cda23799029342aa3cddbc454 upstream.
    
    Currently, when the user attempts symbol completion with the Tab key, kdb
    will use strncpy() to insert the completed symbol into the command buffer.
    Unfortunately it passes the size of the source buffer rather than the
    destination to strncpy() with predictably horrible results. Most obviously
    if the command buffer is already full but cp, the cursor position, is in
    the middle of the buffer, then we will write past the end of the supplied
    buffer.
    
    Fix this by replacing the dubious strncpy() calls with memmove()/memcpy()
    calls plus explicit boundary checks to make sure we have enough space
    before we start moving characters around.
    
    Reported-by: Justin Stitt <justinstitt@google.com>
    Closes: https://lore.kernel.org/all/CAFhGd8qESuuifuHsNjFPR-Va3P80bxrw+LqvC8deA8GziUJLpw@mail.gmail.com/
    Cc: stable@vger.kernel.org
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Reviewed-by: Justin Stitt <justinstitt@google.com>
    Tested-by: Justin Stitt <justinstitt@google.com>
    Link: https://lore.kernel.org/r/20240424-kgdb_read_refactor-v3-1-f236dbe9828d@linaro.org
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

kdb: Fix console handling when editing and tab-completing commands [+ + +]
Author: Daniel Thompson <daniel.thompson@linaro.org>
Date:   Wed Apr 24 15:03:36 2024 +0100

    kdb: Fix console handling when editing and tab-completing commands
    
    commit db2f9c7dc29114f531df4a425d0867d01e1f1e28 upstream.
    
    Currently, if the cursor position is not at the end of the command buffer
    and the user uses the Tab-complete functions, then the console does not
    leave the cursor in the correct position.
    
    For example consider the following buffer with the cursor positioned
    at the ^:
    
    md kdb_pro 10
              ^
    
    Pressing tab should result in:
    
    md kdb_prompt_str 10
                     ^
    
    However this does not happen. Instead the cursor is placed at the end
    (after then 10) and further cursor movement redraws incorrectly. The
    same problem exists when we double-Tab but in a different part of the
    code.
    
    Fix this by sending a carriage return and then redisplaying the text to
    the left of the cursor.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Tested-by: Justin Stitt <justinstitt@google.com>
    Link: https://lore.kernel.org/r/20240424-kgdb_read_refactor-v3-3-f236dbe9828d@linaro.org
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

kdb: Merge identical case statements in kdb_read() [+ + +]
Author: Daniel Thompson <daniel.thompson@linaro.org>
Date:   Wed Apr 24 15:03:37 2024 +0100

    kdb: Merge identical case statements in kdb_read()
    
    commit 6244917f377bf64719551b58592a02a0336a7439 upstream.
    
    The code that handles case 14 (down) and case 16 (up) has been copy and
    pasted despite being byte-for-byte identical. Combine them.
    
    Cc: stable@vger.kernel.org # Not a bug fix but it is needed for later bug fixes
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Tested-by: Justin Stitt <justinstitt@google.com>
    Link: https://lore.kernel.org/r/20240424-kgdb_read_refactor-v3-4-f236dbe9828d@linaro.org
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

kdb: Use format-specifiers rather than memset() for padding in kdb_read() [+ + +]
Author: Daniel Thompson <daniel.thompson@linaro.org>
Date:   Wed Apr 24 15:03:38 2024 +0100

    kdb: Use format-specifiers rather than memset() for padding in kdb_read()
    
    commit c9b51ddb66b1d96e4d364c088da0f1dfb004c574 upstream.
    
    Currently when the current line should be removed from the display
    kdb_read() uses memset() to fill a temporary buffer with spaces.
    The problem is not that this could be trivially implemented using a
    format string rather than open coding it. The real problem is that
    it is possible, on systems with a long kdb_prompt_str, to write past
    the end of the tmpbuffer.
    
    Happily, as mentioned above, this can be trivially implemented using a
    format string. Make it so!
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Tested-by: Justin Stitt <justinstitt@google.com>
    Link: https://lore.kernel.org/r/20240424-kgdb_read_refactor-v3-5-f236dbe9828d@linaro.org
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

kdb: Use format-strings rather than '\0' injection in kdb_read() [+ + +]
Author: Daniel Thompson <daniel.thompson@linaro.org>
Date:   Wed Apr 24 15:03:35 2024 +0100

    kdb: Use format-strings rather than '\0' injection in kdb_read()
    
    commit 09b35989421dfd5573f0b4683c7700a7483c71f9 upstream.
    
    Currently when kdb_read() needs to reposition the cursor it uses copy and
    paste code that works by injecting an '\0' at the cursor position before
    delivering a carriage-return and reprinting the line (which stops at the
    '\0').
    
    Tidy up the code by hoisting the copy and paste code into an appropriately
    named function. Additionally let's replace the '\0' injection with a
    proper field width parameter so that the string will be abridged during
    formatting instead.
    
    Cc: stable@vger.kernel.org # Not a bug fix but it is needed for later bug fixes
    Tested-by: Justin Stitt <justinstitt@google.com>
    Reviewed-by: Douglas Anderson <dianders@chromium.org>
    Link: https://lore.kernel.org/r/20240424-kgdb_read_refactor-v3-2-f236dbe9828d@linaro.org
    Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: Allow AArch32 PSTATE.M to be restored as System mode [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Fri May 24 15:19:55 2024 +0100

    KVM: arm64: Allow AArch32 PSTATE.M to be restored as System mode
    
    commit dfe6d190f38fc5df5ff2614b463a5195a399c885 upstream.
    
    It appears that we don't allow a vcpu to be restored in AArch32
    System mode, as we *never* included it in the list of valid modes.
    
    Just add it to the list of allowed modes.
    
    Fixes: 0d854a60b1d7 ("arm64: KVM: enable initialization of a 32bit vcpu")
    Cc: stable@vger.kernel.org
    Acked-by: Oliver Upton <oliver.upton@linux.dev>
    Link: https://lore.kernel.org/r/20240524141956.1450304-3-maz@kernel.org
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
libsubcmd: Fix parse-options memory leak [+ + +]
Author: Ian Rogers <irogers@google.com>
Date:   Wed May 8 22:20:15 2024 -0700

    libsubcmd: Fix parse-options memory leak
    
    [ Upstream commit 230a7a71f92212e723fa435d4ca5922de33ec88a ]
    
    If a usage string is built in parse_options_subcommand, also free it.
    
    Fixes: 901421a5bdf605d2 ("perf tools: Remove subcmd dependencies on strbuf")
    Signed-off-by: Ian Rogers <irogers@google.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Josh Poimboeuf <jpoimboe@kernel.org>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/20240509052015.1914670-1-irogers@google.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: Linux 4.19.316 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Jun 16 13:23:46 2024 +0200

    Linux 4.19.316
    
    Link: https://lore.kernel.org/r/20240613113227.969123070@linuxfoundation.org
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
m68k/mac: Use '030 reset method on SE/30 [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Sat Dec 22 13:18:01 2018 +1100

    m68k/mac: Use '030 reset method on SE/30
    
    [ Upstream commit 9c0e91f6b701dce6902408d50c4df9cebe4744f5 ]
    
    The comment says that calling the ROM routine doesn't work. But testing
    shows that the 68030 fall-back reset method does work, so just use that.
    
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Stable-dep-of: 265a3b322df9 ("m68k: mac: Fix reboot hang on Mac IIci")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
m68k: Fix spinlock race in kernel thread creation [+ + +]
Author: Michael Schmitz <schmitzmic@gmail.com>
Date:   Thu Apr 11 15:36:31 2024 +1200

    m68k: Fix spinlock race in kernel thread creation
    
    [ Upstream commit da89ce46f02470ef08f0f580755d14d547da59ed ]
    
    Context switching does take care to retain the correct lock owner across
    the switch from 'prev' to 'next' tasks.  This does rely on interrupts
    remaining disabled for the entire duration of the switch.
    
    This condition is guaranteed for normal process creation and context
    switching between already running processes, because both 'prev' and
    'next' already have interrupts disabled in their saved copies of the
    status register.
    
    The situation is different for newly created kernel threads.  The status
    register is set to PS_S in copy_thread(), which does leave the IPL at 0.
    Upon restoring the 'next' thread's status register in switch_to() aka
    resume(), interrupts then become enabled prematurely.  resume() then
    returns via ret_from_kernel_thread() and schedule_tail() where run queue
    lock is released (see finish_task_switch() and finish_lock_switch()).
    
    A timer interrupt calling scheduler_tick() before the lock is released
    in finish_task_switch() will find the lock already taken, with the
    current task as lock owner.  This causes a spinlock recursion warning as
    reported by Guenter Roeck.
    
    As far as I can ascertain, this race has been opened in commit
    533e6903bea0 ("m68k: split ret_from_fork(), simplify kernel_thread()")
    but I haven't done a detailed study of kernel history so it may well
    predate that commit.
    
    Interrupts cannot be disabled in the saved status register copy for
    kernel threads (init will complain about interrupts disabled when
    finally starting user space).  Disable interrupts temporarily when
    switching the tasks' register sets in resume().
    
    Note that a simple oriw 0x700,%sr after restoring sr is not enough here
    - this leaves enough of a race for the 'spinlock recursion' warning to
    still be observed.
    
    Tested on ARAnyM and qemu (Quadra 800 emulation).
    
    Fixes: 533e6903bea0 ("m68k: split ret_from_fork(), simplify kernel_thread()")
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Closes: https://lore.kernel.org/all/07811b26-677c-4d05-aeb4-996cd880b789@roeck-us.net
    Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/20240411033631.16335-1-schmitzmic@gmail.com
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

m68k: mac: Fix reboot hang on Mac IIci [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Sat May 4 14:31:12 2024 +1000

    m68k: mac: Fix reboot hang on Mac IIci
    
    [ Upstream commit 265a3b322df9a973ff1fc63da70af456ab6ae1d6 ]
    
    Calling mac_reset() on a Mac IIci does reset the system, but what
    follows is a POST failure that requires a manual reset to resolve.
    Avoid that by using the 68030 asm implementation instead of the C
    implementation.
    
    Apparently the SE/30 has a similar problem as it has used the asm
    implementation since before git. This patch extends that solution to
    other systems with a similar ROM.
    
    After this patch, the only systems still using the C implementation are
    68040 systems where adb_type is either MAC_ADB_IOP or MAC_ADB_II. This
    implies a 1 MiB Quadra ROM.
    
    This now includes the Quadra 900/950, which previously fell through to
    the "should never get here" catch-all.
    
    Reported-and-tested-by: Stan Johnson <userm57@yahoo.com>
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/480ebd1249d229c6dc1f3f1c6d599b8505483fd8.1714797072.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
macintosh/via-macii, macintosh/adb-iop: Clean up whitespace [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Tue Sep 11 20:18:44 2018 -0400

    macintosh/via-macii, macintosh/adb-iop: Clean up whitespace
    
    [ Upstream commit 47fd2060660e62b169990a6fcd9eb61bc1a85c5c ]
    
    Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Stable-dep-of: d301a71c76ee ("macintosh/via-macii: Fix "BUG: sleeping function called from invalid context"")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
macintosh/via-macii: Fix "BUG: sleeping function called from invalid context" [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Wed Mar 13 13:53:41 2024 +1100

    macintosh/via-macii: Fix "BUG: sleeping function called from invalid context"
    
    [ Upstream commit d301a71c76ee4c384b4e03cdc320a55f5cf1df05 ]
    
    The via-macii ADB driver calls request_irq() after disabling hard
    interrupts. But disabling interrupts isn't necessary here because the
    VIA shift register interrupt was masked during VIA1 initialization.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Finn Thain <fthain@linux-m68k.org>
    Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Link: https://lore.kernel.org/r/419fcc09d0e563b425c419053d02236b044d86b0.1710298421.git.fthain@linux-m68k.org
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

macintosh/via-macii: Remove BUG_ON assertions [+ + +]
Author: Finn Thain <fthain@linux-m68k.org>
Date:   Tue Sep 11 20:18:44 2018 -0400

    macintosh/via-macii: Remove BUG_ON assertions
    
    [ Upstream commit 5f93d7081a47e1972031ccf57c4b2779eee162fb ]
    
    The BUG_ON assertions I added to the via-macii driver over a decade ago
    haven't fired AFAIK. Some can never fire (by inspection). One assertion
    checks for a NULL pointer, but that would merely substitute a BUG crash
    for an Oops crash. Remove the pointless BUG_ON assertions and replace
    the others with a WARN_ON and an array bounds check.
    
    Tested-by: Stan Johnson <userm57@yahoo.com>
    Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Stable-dep-of: d301a71c76ee ("macintosh/via-macii: Fix "BUG: sleeping function called from invalid context"")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md/raid5: fix deadlock that raid5d() wait for itself to clear MD_SB_CHANGE_PENDING [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Fri Mar 22 16:10:05 2024 +0800

    md/raid5: fix deadlock that raid5d() wait for itself to clear MD_SB_CHANGE_PENDING
    
    commit 151f66bb618d1fd0eeb84acb61b4a9fa5d8bb0fa upstream.
    
    Xiao reported that lvm2 test lvconvert-raid-takeover.sh can hang with
    small possibility, the root cause is exactly the same as commit
    bed9e27baf52 ("Revert "md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d"")
    
    However, Dan reported another hang after that, and junxiao investigated
    the problem and found out that this is caused by plugged bio can't issue
    from raid5d().
    
    Current implementation in raid5d() has a weird dependence:
    
    1) md_check_recovery() from raid5d() must hold 'reconfig_mutex' to clear
       MD_SB_CHANGE_PENDING;
    2) raid5d() handles IO in a deadloop, until all IO are issued;
    3) IO from raid5d() must wait for MD_SB_CHANGE_PENDING to be cleared;
    
    This behaviour is introduce before v2.6, and for consequence, if other
    context hold 'reconfig_mutex', and md_check_recovery() can't update
    super_block, then raid5d() will waste one cpu 100% by the deadloop, until
    'reconfig_mutex' is released.
    
    Refer to the implementation from raid1 and raid10, fix this problem by
    skipping issue IO if MD_SB_CHANGE_PENDING is still set after
    md_check_recovery(), daemon thread will be woken up when 'reconfig_mutex'
    is released. Meanwhile, the hang problem will be fixed as well.
    
    Fixes: 5e2cf333b7bd ("md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d")
    Cc: stable@vger.kernel.org # v5.19+
    Reported-and-tested-by: Dan Moulding <dan@danm.net>
    Closes: https://lore.kernel.org/all/20240123005700.9302-1-dan@danm.net/
    Investigated-by: Junxiao Bi <junxiao.bi@oracle.com>
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240322081005.1112401-1-yukuai1@huaweicloud.com
    Signed-off-by: Song Liu <song@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
md: fix resync softlockup when bitmap size is less than array size [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Mon Apr 22 14:58:24 2024 +0800

    md: fix resync softlockup when bitmap size is less than array size
    
    [ Upstream commit f0e729af2eb6bee9eb58c4df1087f14ebaefe26b ]
    
    Is is reported that for dm-raid10, lvextend + lvchange --syncaction will
    trigger following softlockup:
    
    kernel:watchdog: BUG: soft lockup - CPU#3 stuck for 26s! [mdX_resync:6976]
    CPU: 7 PID: 3588 Comm: mdX_resync Kdump: loaded Not tainted 6.9.0-rc4-next-20240419 #1
    RIP: 0010:_raw_spin_unlock_irq+0x13/0x30
    Call Trace:
     <TASK>
     md_bitmap_start_sync+0x6b/0xf0
     raid10_sync_request+0x25c/0x1b40 [raid10]
     md_do_sync+0x64b/0x1020
     md_thread+0xa7/0x170
     kthread+0xcf/0x100
     ret_from_fork+0x30/0x50
     ret_from_fork_asm+0x1a/0x30
    
    And the detailed process is as follows:
    
    md_do_sync
     j = mddev->resync_min
     while (j < max_sectors)
      sectors = raid10_sync_request(mddev, j, &skipped)
       if (!md_bitmap_start_sync(..., &sync_blocks))
        // md_bitmap_start_sync set sync_blocks to 0
        return sync_blocks + sectors_skippe;
      // sectors = 0;
      j += sectors;
      // j never change
    
    Root cause is that commit 301867b1c168 ("md/raid10: check
    slab-out-of-bounds in md_bitmap_get_counter") return early from
    md_bitmap_get_counter(), without setting returned blocks.
    
    Fix this problem by always set returned blocks from
    md_bitmap_get_counter"(), as it used to be.
    
    Noted that this patch just fix the softlockup problem in kernel, the
    case that bitmap size doesn't match array size still need to be fixed.
    
    Fixes: 301867b1c168 ("md/raid10: check slab-out-of-bounds in md_bitmap_get_counter")
    Reported-and-tested-by: Nigel Croxon <ncroxon@redhat.com>
    Closes: https://lore.kernel.org/all/71ba5272-ab07-43ba-8232-d2da642acb4e@redhat.com/
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Link: https://lore.kernel.org/r/20240422065824.2516-1-yukuai1@huaweicloud.com
    Signed-off-by: Song Liu <song@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: cec: cec-adap: always cancel work in cec_transmit_msg_fh [+ + +]
Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Date:   Fri Feb 23 12:24:38 2024 +0000

    media: cec: cec-adap: always cancel work in cec_transmit_msg_fh
    
    [ Upstream commit 9fe2816816a3c765dff3b88af5b5c3d9bbb911ce ]
    
    Do not check for !data->completed, just always call
    cancel_delayed_work_sync(). This fixes a small race condition.
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Reported-by: Yang, Chenyuan <cy54@illinois.edu>
    Closes: https://lore.kernel.org/linux-media/PH7PR11MB57688E64ADE4FE82E658D86DA09EA@PH7PR11MB5768.namprd11.prod.outlook.com/
    Fixes: 490d84f6d73c ("media: cec: forgot to cancel delayed work")
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: cec: cec-api: add locking in cec_release() [+ + +]
Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Date:   Fri Feb 23 12:25:55 2024 +0000

    media: cec: cec-api: add locking in cec_release()
    
    [ Upstream commit 42bcaacae924bf18ae387c3f78c202df0b739292 ]
    
    When cec_release() uses fh->msgs it has to take fh->lock,
    otherwise the list can get corrupted.
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Reported-by: Yang, Chenyuan <cy54@illinois.edu>
    Closes: https://lore.kernel.org/linux-media/PH7PR11MB57688E64ADE4FE82E658D86DA09EA@PH7PR11MB5768.namprd11.prod.outlook.com/
    Fixes: ca684386e6e2 ("[media] cec: add HDMI CEC framework (api)")
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: mxl5xx: Move xpt structures off stack [+ + +]
Author: Nathan Chancellor <nathan@kernel.org>
Date:   Fri Jan 12 00:40:36 2024 +0000

    media: mxl5xx: Move xpt structures off stack
    
    commit 526f4527545b2d4ce0733733929fac7b6da09ac6 upstream.
    
    When building for LoongArch with clang 18.0.0, the stack usage of
    probe() is larger than the allowed 2048 bytes:
    
      drivers/media/dvb-frontends/mxl5xx.c:1698:12: warning: stack frame size (2368) exceeds limit (2048) in 'probe' [-Wframe-larger-than]
       1698 | static int probe(struct mxl *state, struct mxl5xx_cfg *cfg)
            |            ^
      1 warning generated.
    
    This is the result of the linked LLVM commit, which changes how the
    arrays of structures in config_ts() get handled with
    CONFIG_INIT_STACK_ZERO and CONFIG_INIT_STACK_PATTERN, which causes the
    above warning in combination with inlining, as config_ts() gets inlined
    into probe().
    
    This warning can be easily fixed by moving the array of structures off
    of the stackvia 'static const', which is a better location for these
    variables anyways because they are static data that is only ever read
    from, never modified, so allocating the stack space is wasteful.
    
    This drops the stack usage from 2368 bytes to 256 bytes with the same
    compiler and configuration.
    
    Link: https://lore.kernel.org/linux-media/20240111-dvb-mxl5xx-move-structs-off-stack-v1-1-ca4230e67c11@kernel.org
    Cc: stable@vger.kernel.org
    Closes: https://github.com/ClangBuiltLinux/linux/issues/1977
    Link: https://github.com/llvm/llvm-project/commit/afe8b93ffdfef5d8879e1894b9d7dda40dee2b8d
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: ngene: Add dvb_ca_en50221_init return value check [+ + +]
Author: Aleksandr Burakov <a.burakov@rosalinux.ru>
Date:   Fri Mar 1 14:15:53 2024 +0300

    media: ngene: Add dvb_ca_en50221_init return value check
    
    [ Upstream commit 9bb1fd7eddcab2d28cfc11eb20f1029154dac718 ]
    
    The return value of dvb_ca_en50221_init() is not checked here that may
    cause undefined behavior in case of nonzero value return.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 25aee3debe04 ("[media] Rename media/dvb as media/pci")
    Signed-off-by: Aleksandr Burakov <a.burakov@rosalinux.ru>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: radio-shark2: Avoid led_names truncations [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Mon Mar 25 14:50:24 2024 +0000

    media: radio-shark2: Avoid led_names truncations
    
    [ Upstream commit 1820e16a3019b6258e6009d34432946a6ddd0a90 ]
    
    Increase the size of led_names so it can fit any valid v4l2 device name.
    
    Fixes:
    drivers/media/radio/radio-shark2.c:197:17: warning: ‘%s’ directive output may be truncated writing up to 35 bytes into a region of size 32 [-Wformat-truncation=]
    
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: stk1160: fix bounds checking in stk1160_copy_video() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Apr 22 12:32:44 2024 +0300

    media: stk1160: fix bounds checking in stk1160_copy_video()
    
    [ Upstream commit faa4364bef2ec0060de381ff028d1d836600a381 ]
    
    The subtract in this condition is reversed.  The ->length is the length
    of the buffer.  The ->bytesused is how many bytes we have copied thus
    far.  When the condition is reversed that means the result of the
    subtraction is always negative but since it's unsigned then the result
    is a very high positive value.  That means the overflow check is never
    true.
    
    Additionally, the ->bytesused doesn't actually work for this purpose
    because we're not writing to "buf->mem + buf->bytesused".  Instead, the
    math to calculate the destination where we are writing is a bit
    involved.  You calculate the number of full lines already written,
    multiply by two, skip a line if necessary so that we start on an odd
    numbered line, and add the offset into the line.
    
    To fix this buffer overflow, just take the actual destination where we
    are writing, if the offset is already out of bounds print an error and
    return.  Otherwise, write up to buf->length bytes.
    
    Fixes: 9cb2173e6ea8 ("[media] media: Add stk1160 new driver (easycap replacement)")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: v4l2-core: hold videodev_lock until dev reg, finishes [+ + +]
Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Date:   Fri Feb 23 09:45:36 2024 +0100

    media: v4l2-core: hold videodev_lock until dev reg, finishes
    
    commit 1ed4477f2ea4743e7c5e1f9f3722152d14e6eeb1 upstream.
    
    After the new V4L2 device node was registered, some additional
    initialization was done before the device node was marked as
    'registered'. During the time between creating the device node
    and marking it as 'registered' it was possible to open the
    device node, which would return -ENODEV since the 'registered'
    flag was not yet set.
    
    Hold the videodev_lock mutex from just before the device node
    is registered until the 'registered' flag is set. Since v4l2_open
    will take the same lock, it will wait until this registration
    process is finished. This resolves this race condition.
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Cc: <stable@vger.kernel.org>      # for vi4.18 and up
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
microblaze: Remove early printk call from cpuinfo-static.c [+ + +]
Author: Michal Simek <michal.simek@amd.com>
Date:   Thu Apr 11 10:27:21 2024 +0200

    microblaze: Remove early printk call from cpuinfo-static.c
    
    [ Upstream commit 58d647506c92ccd3cfa0c453c68ddd14f40bf06f ]
    
    Early printk has been removed already that's why also remove calling it.
    Similar change has been done in cpuinfo-pvr-full.c by commit cfbd8d1979af
    ("microblaze: Remove early printk setup").
    
    Fixes: 96f0e6fcc9ad ("microblaze: remove redundant early_printk support")
    Signed-off-by: Michal Simek <michal.simek@amd.com>
    Link: https://lore.kernel.org/r/2f10db506be8188fa07b6ec331caca01af1b10f8.1712824039.git.michal.simek@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

microblaze: Remove gcc flag for non existing early_printk.c file [+ + +]
Author: Michal Simek <michal.simek@amd.com>
Date:   Thu Apr 11 10:21:44 2024 +0200

    microblaze: Remove gcc flag for non existing early_printk.c file
    
    [ Upstream commit edc66cf0c4164aa3daf6cc55e970bb94383a6a57 ]
    
    early_printk support for removed long time ago but compilation flag for
    ftrace still points to already removed file that's why remove that line
    too.
    
    Fixes: 96f0e6fcc9ad ("microblaze: remove redundant early_printk support")
    Signed-off-by: Michal Simek <michal.simek@amd.com>
    Link: https://lore.kernel.org/r/5493467419cd2510a32854e2807bcd263de981a0.1712823702.git.michal.simek@amd.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mmc: core: Do not force a retune before RPMB switch [+ + +]
Author: Jorge Ramirez-Ortiz <jorge@foundries.io>
Date:   Wed Jan 3 12:29:11 2024 +0100

    mmc: core: Do not force a retune before RPMB switch
    
    commit 67380251e8bbd3302c64fea07f95c31971b91c22 upstream.
    
    Requesting a retune before switching to the RPMB partition has been
    observed to cause CRC errors on the RPMB reads (-EILSEQ).
    
    Since RPMB reads can not be retried, the clients would be directly
    affected by the errors.
    
    This commit disables the retune request prior to switching to the RPMB
    partition: mmc_retune_pause() no longer triggers a retune before the
    pause period begins.
    
    This was verified with the sdhci-of-arasan driver (ZynqMP) configured
    for HS200 using two separate eMMC cards (DG4064 and 064GB2). In both
    cases, the error was easy to reproduce triggering every few tenths of
    reads.
    
    With this commit, systems that were utilizing OP-TEE to access RPMB
    variables will experience an enhanced performance. Specifically, when
    OP-TEE is configured to employ RPMB as a secure storage solution, it not
    only writes the data but also the secure filesystem within the
    partition. As a result, retrieving any variable involves multiple RPMB
    reads, typically around five.
    
    For context, on ZynqMP, each retune request consumed approximately
    8ms. Consequently, reading any RPMB variable used to take at the very
    minimum 40ms.
    
    After droping the need to retune before switching to the RPMB partition,
    this is no longer the case.
    
    Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
    Acked-by: Avri Altman <avri.altman@wdc.com>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Link: https://lore.kernel.org/r/20240103112911.2954632-1-jorge@foundries.io
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mtd: rawnand: hynix: fixed typo [+ + +]
Author: Maxim Korotkov <korotkov.maxim.s@gmail.com>
Date:   Wed Mar 13 13:27:20 2024 +0300

    mtd: rawnand: hynix: fixed typo
    
    [ Upstream commit 6819db94e1cd3ce24a432f3616cd563ed0c4eaba ]
    
    The function hynix_nand_rr_init() should probably return an error code.
    Judging by the usage, it seems that the return code is passed up
    the call stack.
    Right now, it always returns 0 and the function hynix_nand_cleanup()
    in hynix_nand_init() has never been called.
    
    Found by RASU JSC and Linux Verification Center (linuxtesting.org)
    
    Fixes: 626994e07480 ("mtd: nand: hynix: Add read-retry support for 1x nm MLC NANDs")
    
    Signed-off-by: Maxim Korotkov <korotkov.maxim.s@gmail.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Link: https://lore.kernel.org/linux-mtd/20240313102721.1991299-1-korotkov.maxim.s@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
neighbour: fix unaligned access to pneigh_entry [+ + +]
Author: Qingfang DENG <qingfang.deng@siflower.com.cn>
Date:   Thu Jun 1 09:54:32 2023 +0800

    neighbour: fix unaligned access to pneigh_entry
    
    commit ed779fe4c9b5a20b4ab4fd6f3e19807445bb78c7 upstream.
    
    After the blamed commit, the member key is longer 4-byte aligned. On
    platforms that do not support unaligned access, e.g., MIPS32R2 with
    unaligned_action set to 1, this will trigger a crash when accessing
    an IPv6 pneigh_entry, as the key is cast to an in6_addr pointer.
    
    Change the type of the key to u32 to make it aligned.
    
    Fixes: 62dd93181aaa ("[IPV6] NDISC: Set per-entry is_router flag in Proxy NA.")
    Signed-off-by: Qingfang DENG <qingfang.deng@siflower.com.cn>
    Link: https://lore.kernel.org/r/20230601015432.159066-1-dqfext@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/9p: fix uninit-value in p9_client_rpc() [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Mon Apr 8 07:10:39 2024 -0700

    net/9p: fix uninit-value in p9_client_rpc()
    
    commit 25460d6f39024cc3b8241b14c7ccf0d6f11a736a upstream.
    
    Syzbot with the help of KMSAN reported the following error:
    
    BUG: KMSAN: uninit-value in trace_9p_client_res include/trace/events/9p.h:146 [inline]
    BUG: KMSAN: uninit-value in p9_client_rpc+0x1314/0x1340 net/9p/client.c:754
     trace_9p_client_res include/trace/events/9p.h:146 [inline]
     p9_client_rpc+0x1314/0x1340 net/9p/client.c:754
     p9_client_create+0x1551/0x1ff0 net/9p/client.c:1031
     v9fs_session_init+0x1b9/0x28e0 fs/9p/v9fs.c:410
     v9fs_mount+0xe2/0x12b0 fs/9p/vfs_super.c:122
     legacy_get_tree+0x114/0x290 fs/fs_context.c:662
     vfs_get_tree+0xa7/0x570 fs/super.c:1797
     do_new_mount+0x71f/0x15e0 fs/namespace.c:3352
     path_mount+0x742/0x1f20 fs/namespace.c:3679
     do_mount fs/namespace.c:3692 [inline]
     __do_sys_mount fs/namespace.c:3898 [inline]
     __se_sys_mount+0x725/0x810 fs/namespace.c:3875
     __x64_sys_mount+0xe4/0x150 fs/namespace.c:3875
     do_syscall_64+0xd5/0x1f0
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    Uninit was created at:
     __alloc_pages+0x9d6/0xe70 mm/page_alloc.c:4598
     __alloc_pages_node include/linux/gfp.h:238 [inline]
     alloc_pages_node include/linux/gfp.h:261 [inline]
     alloc_slab_page mm/slub.c:2175 [inline]
     allocate_slab mm/slub.c:2338 [inline]
     new_slab+0x2de/0x1400 mm/slub.c:2391
     ___slab_alloc+0x1184/0x33d0 mm/slub.c:3525
     __slab_alloc mm/slub.c:3610 [inline]
     __slab_alloc_node mm/slub.c:3663 [inline]
     slab_alloc_node mm/slub.c:3835 [inline]
     kmem_cache_alloc+0x6d3/0xbe0 mm/slub.c:3852
     p9_tag_alloc net/9p/client.c:278 [inline]
     p9_client_prepare_req+0x20a/0x1770 net/9p/client.c:641
     p9_client_rpc+0x27e/0x1340 net/9p/client.c:688
     p9_client_create+0x1551/0x1ff0 net/9p/client.c:1031
     v9fs_session_init+0x1b9/0x28e0 fs/9p/v9fs.c:410
     v9fs_mount+0xe2/0x12b0 fs/9p/vfs_super.c:122
     legacy_get_tree+0x114/0x290 fs/fs_context.c:662
     vfs_get_tree+0xa7/0x570 fs/super.c:1797
     do_new_mount+0x71f/0x15e0 fs/namespace.c:3352
     path_mount+0x742/0x1f20 fs/namespace.c:3679
     do_mount fs/namespace.c:3692 [inline]
     __do_sys_mount fs/namespace.c:3898 [inline]
     __se_sys_mount+0x725/0x810 fs/namespace.c:3875
     __x64_sys_mount+0xe4/0x150 fs/namespace.c:3875
     do_syscall_64+0xd5/0x1f0
     entry_SYSCALL_64_after_hwframe+0x6d/0x75
    
    If p9_check_errors() fails early in p9_client_rpc(), req->rc.tag
    will not be properly initialized. However, trace_9p_client_res()
    ends up trying to print it out anyway before p9_client_rpc()
    finishes.
    
    Fix this issue by assigning default values to p9_fcall fields
    such as 'tag' and (just in case KMSAN unearths something new) 'id'
    during the tag allocation stage.
    
    Reported-and-tested-by: syzbot+ff14db38f56329ef68df@syzkaller.appspotmail.com
    Fixes: 348b59012e5c ("net/9p: Convert net/9p protocol dumps to tracepoints")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Reviewed-by: Christian Schoenebeck <linux_oss@crudebyte.com>
    Cc: stable@vger.kernel.org
    Message-ID: <20240408141039.30428-1-n.zhandarovich@fintech.ru>
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5e: Use rx_missed_errors instead of rx_dropped for reporting buffer exhaustion [+ + +]
Author: Carolina Jubran <cjubran@nvidia.com>
Date:   Wed May 22 22:26:58 2024 +0300

    net/mlx5e: Use rx_missed_errors instead of rx_dropped for reporting buffer exhaustion
    
    [ Upstream commit 5c74195d5dd977e97556e6fa76909b831c241230 ]
    
    Previously, the driver incorrectly used rx_dropped to report device
    buffer exhaustion.
    
    According to the documentation, rx_dropped should not be used to count
    packets dropped due to buffer exhaustion, which is the purpose of
    rx_missed_errors.
    
    Use rx_missed_errors as intended for counting packets dropped due to
    buffer exhaustion.
    
    Fixes: 269e6b3af3bf ("net/mlx5e: Report additional error statistics in get stats ndo")
    Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: ethernet: cortina: Locking fixes [+ + +]
Author: Linus Walleij <linus.walleij@linaro.org>
Date:   Thu May 9 09:44:54 2024 +0200

    net: ethernet: cortina: Locking fixes
    
    [ Upstream commit 812552808f7ff71133fc59768cdc253c5b8ca1bf ]
    
    This fixes a probably long standing problem in the Cortina
    Gemini ethernet driver: there are some paths in the code
    where the IRQ registers are written without taking the proper
    locks.
    
    Fixes: 4d5ae32f5e1e ("net: ethernet: Add a driver for Gemini gigabit ethernet")
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://lore.kernel.org/r/20240509-gemini-ethernet-locking-v1-1-afd00a528b95@linaro.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fec: avoid lock evasion when reading pps_enable [+ + +]
Author: Wei Fang <wei.fang@nxp.com>
Date:   Tue May 21 10:38:00 2024 +0800

    net: fec: avoid lock evasion when reading pps_enable
    
    [ Upstream commit 3b1c92f8e5371700fada307cc8fd2c51fa7bc8c1 ]
    
    The assignment of pps_enable is protected by tmreg_lock, but the read
    operation of pps_enable is not. So the Coverity tool reports a lock
    evasion warning which may cause data race to occur when running in a
    multithread environment. Although this issue is almost impossible to
    occur, we'd better fix it, at least it seems more logically reasonable,
    and it also prevents Coverity from continuing to issue warnings.
    
    Fixes: 278d24047891 ("net: fec: ptp: Enable PPS output based on ptp clock")
    Signed-off-by: Wei Fang <wei.fang@nxp.com>
    Link: https://lore.kernel.org/r/20240521023800.17102-1-wei.fang@nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: fix __dst_negative_advice() race [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue May 28 11:43:53 2024 +0000

    net: fix __dst_negative_advice() race
    
    commit 92f1655aa2b2294d0b49925f3b875a634bd3b59e upstream.
    
    __dst_negative_advice() does not enforce proper RCU rules when
    sk->dst_cache must be cleared, leading to possible UAF.
    
    RCU rules are that we must first clear sk->sk_dst_cache,
    then call dst_release(old_dst).
    
    Note that sk_dst_reset(sk) is implementing this protocol correctly,
    while __dst_negative_advice() uses the wrong order.
    
    Given that ip6_negative_advice() has special logic
    against RTF_CACHE, this means each of the three ->negative_advice()
    existing methods must perform the sk_dst_reset() themselves.
    
    Note the check against NULL dst is centralized in
    __dst_negative_advice(), there is no need to duplicate
    it in various callbacks.
    
    Many thanks to Clement Lecigne for tracking this issue.
    
    This old bug became visible after the blamed commit, using UDP sockets.
    
    Fixes: a87cb3e48ee8 ("net: Facility to report route quality of connected sockets")
    Reported-by: Clement Lecigne <clecigne@google.com>
    Diagnosed-by: Clement Lecigne <clecigne@google.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Tom Herbert <tom@herbertland.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20240528114353.1794151-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [Lee: Stable backport]
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: openvswitch: fix overwriting ct original tuple for ICMPv6 [+ + +]
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Thu May 9 11:38:05 2024 +0200

    net: openvswitch: fix overwriting ct original tuple for ICMPv6
    
    [ Upstream commit 7c988176b6c16c516474f6fceebe0f055af5eb56 ]
    
    OVS_PACKET_CMD_EXECUTE has 3 main attributes:
     - OVS_PACKET_ATTR_KEY - Packet metadata in a netlink format.
     - OVS_PACKET_ATTR_PACKET - Binary packet content.
     - OVS_PACKET_ATTR_ACTIONS - Actions to execute on the packet.
    
    OVS_PACKET_ATTR_KEY is parsed first to populate sw_flow_key structure
    with the metadata like conntrack state, input port, recirculation id,
    etc.  Then the packet itself gets parsed to populate the rest of the
    keys from the packet headers.
    
    Whenever the packet parsing code starts parsing the ICMPv6 header, it
    first zeroes out fields in the key corresponding to Neighbor Discovery
    information even if it is not an ND packet.
    
    It is an 'ipv6.nd' field.  However, the 'ipv6' is a union that shares
    the space between 'nd' and 'ct_orig' that holds the original tuple
    conntrack metadata parsed from the OVS_PACKET_ATTR_KEY.
    
    ND packets should not normally have conntrack state, so it's fine to
    share the space, but normal ICMPv6 Echo packets or maybe other types of
    ICMPv6 can have the state attached and it should not be overwritten.
    
    The issue results in all but the last 4 bytes of the destination
    address being wiped from the original conntrack tuple leading to
    incorrect packet matching and potentially executing wrong actions
    in case this packet recirculates within the datapath or goes back
    to userspace.
    
    ND fields should not be accessed in non-ND packets, so not clearing
    them should be fine.  Executing memset() only for actual ND packets to
    avoid the issue.
    
    Initializing the whole thing before parsing is needed because ND packet
    may not contain all the options.
    
    The issue only affects the OVS_PACKET_CMD_EXECUTE path and doesn't
    affect packets entering OVS datapath from network interfaces, because
    in this case CT metadata is populated from skb after the packet is
    already parsed.
    
    Fixes: 9dd7f8907c37 ("openvswitch: Add original direction conntrack tuple to sw_flow_key.")
    Reported-by: Antonin Bas <antonin.bas@broadcom.com>
    Closes: https://github.com/openvswitch/ovs-issues/issues/327
    Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
    Acked-by: Aaron Conole <aconole@redhat.com>
    Acked-by: Eelco Chaudron <echaudro@redhat.com>
    Link: https://lore.kernel.org/r/20240509094228.1035477-1-i.maximets@ovn.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: smc91x: Fix m68k kernel compilation for ColdFire CPU [+ + +]
Author: Thorsten Blum <thorsten.blum@toblux.com>
Date:   Fri May 10 13:30:55 2024 +0200

    net: smc91x: Fix m68k kernel compilation for ColdFire CPU
    
    commit 5eefb477d21a26183bc3499aeefa991198315a2d upstream.
    
    Compiling the m68k kernel with support for the ColdFire CPU family fails
    with the following error:
    
    In file included from drivers/net/ethernet/smsc/smc91x.c:80:
    drivers/net/ethernet/smsc/smc91x.c: In function ‘smc_reset’:
    drivers/net/ethernet/smsc/smc91x.h:160:40: error: implicit declaration of function ‘_swapw’; did you mean ‘swap’? [-Werror=implicit-function-declaration]
      160 | #define SMC_outw(lp, v, a, r)   writew(_swapw(v), (a) + (r))
          |                                        ^~~~~~
    drivers/net/ethernet/smsc/smc91x.h:904:25: note: in expansion of macro ‘SMC_outw’
      904 |                         SMC_outw(lp, x, ioaddr, BANK_SELECT);           \
          |                         ^~~~~~~~
    drivers/net/ethernet/smsc/smc91x.c:250:9: note: in expansion of macro ‘SMC_SELECT_BANK’
      250 |         SMC_SELECT_BANK(lp, 2);
          |         ^~~~~~~~~~~~~~~
    cc1: some warnings being treated as errors
    
    The function _swapw() was removed in commit d97cf70af097 ("m68k: use
    asm-generic/io.h for non-MMU io access functions"), but is still used in
    drivers/net/ethernet/smsc/smc91x.h.
    
    Use ioread16be() and iowrite16be() to resolve the error.
    
    Cc: stable@vger.kernel.org
    Fixes: d97cf70af097 ("m68k: use asm-generic/io.h for non-MMU io access functions")
    Signed-off-by: Thorsten Blum <thorsten.blum@toblux.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20240510113054.186648-2-thorsten.blum@toblux.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: usb: qmi_wwan: add Telit FN920C04 compositions [+ + +]
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Thu Apr 18 13:12:07 2024 +0200

    net: usb: qmi_wwan: add Telit FN920C04 compositions
    
    [ Upstream commit 0b8fe5bd73249dc20be2e88a12041f8920797b59 ]
    
    Add the following Telit FN920C04 compositions:
    
    0x10a0: rmnet + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  5 Spd=480  MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a0 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=92c4c4d8
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10a4: rmnet + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  8 Spd=480  MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a4 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=92c4c4d8
    C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10a9: rmnet + tty (AT) + tty (diag) + DPL (data packet logging) + adb
    T:  Bus=03 Lev=01 Prnt=03 Port=06 Cnt=01 Dev#=  9 Spd=480  MxCh= 0
    D:  Ver= 2.01 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a9 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=92c4c4d8
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=50 Driver=qmi_wwan
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM [+ + +]
Author: Parthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
Date:   Thu May 23 14:23:14 2024 +0530

    net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM
    
    [ Upstream commit 52a2f0608366a629d43dacd3191039c95fef74ba ]
    
    LED Select (LED_SEL) bit in the LED General Purpose IO Configuration
    register is used to determine the functionality of external LED pins
    (Speed Indicator, Link and Activity Indicator, Full Duplex Link
    Indicator). The default value for this bit is 0 when no EEPROM is
    present. If a EEPROM is present, the default value is the value of the
    LED Select bit in the Configuration Flags of the EEPROM. A USB Reset or
    Lite Reset (LRST) will cause this bit to be restored to the image value
    last loaded from EEPROM, or to be set to 0 if no EEPROM is present.
    
    While configuring the dual purpose GPIO/LED pins to LED outputs in the
    LED General Purpose IO Configuration register, the LED_SEL bit is changed
    as 0 and resulting the configured value from the EEPROM is cleared. The
    issue is fixed by using read-modify-write approach.
    
    Fixes: f293501c61c5 ("smsc95xx: configure LED outputs")
    Signed-off-by: Parthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Woojung Huh <woojung.huh@microchip.com>
    Link: https://lore.kernel.org/r/20240523085314.167650-1-Parthiban.Veerasooran@microchip.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: smsc95xx: stop lying about skb->truesize [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu May 9 08:33:13 2024 +0000

    net: usb: smsc95xx: stop lying about skb->truesize
    
    [ Upstream commit d50729f1d60bca822ef6d9c1a5fb28d486bd7593 ]
    
    Some usb drivers try to set small skb->truesize and break
    core networking stacks.
    
    In this patch, I removed one of the skb->truesize override.
    
    I also replaced one skb_clone() by an allocation of a fresh
    and small skb, to get minimally sized skbs, like we did
    in commit 1e2c61172342 ("net: cdc_ncm: reduce skb truesize
    in rx path") and 4ce62d5b2f7a ("net: usb: ax88179_178a:
    stop lying about skb->truesize")
    
    v3: also fix a sparse error ( https://lore.kernel.org/oe-kbuild-all/202405091310.KvncIecx-lkp@intel.com/ )
    v2: leave the skb_trim() game because smsc95xx_rx_csum_offload()
        needs the csum part. (Jakub)
        While we are it, use get_unaligned() in smsc95xx_rx_csum_offload().
    
    Fixes: 2f7ca802bdae ("net: Add SMSC LAN9500 USB2.0 10/100 ethernet adapter driver")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Steve Glendinning <steve.glendinning@shawell.net>
    Cc: UNGLinuxDriver@microchip.com
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://lore.kernel.org/r/20240509083313.2113832-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: sr9700: stop lying about skb->truesize [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon May 6 14:39:39 2024 +0000

    net: usb: sr9700: stop lying about skb->truesize
    
    [ Upstream commit 05417aa9c0c038da2464a0c504b9d4f99814a23b ]
    
    Some usb drivers set small skb->truesize and break
    core networking stacks.
    
    In this patch, I removed one of the skb->truesize override.
    
    I also replaced one skb_clone() by an allocation of a fresh
    and small skb, to get minimally sized skbs, like we did
    in commit 1e2c61172342 ("net: cdc_ncm: reduce skb truesize
    in rx path") and 4ce62d5b2f7a ("net: usb: ax88179_178a:
    stop lying about skb->truesize")
    
    Fixes: c9b37458e956 ("USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240506143939.3673865-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: net:fec: Add fec_enet_deinit() [+ + +]
Author: Xiaolei Wang <xiaolei.wang@windriver.com>
Date:   Fri May 24 13:05:28 2024 +0800

    net:fec: Add fec_enet_deinit()
    
    [ Upstream commit bf0497f53c8535f99b72041529d3f7708a6e2c0d ]
    
    When fec_probe() fails or fec_drv_remove() needs to release the
    fec queue and remove a NAPI context, therefore add a function
    corresponding to fec_enet_init() and call fec_enet_deinit() which
    does the opposite to release memory and remove a NAPI context.
    
    Fixes: 59d0f7465644 ("net: fec: init multi queue date structure")
    Signed-off-by: Xiaolei Wang <xiaolei.wang@windriver.com>
    Reviewed-by: Wei Fang <wei.fang@nxp.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://lore.kernel.org/r/20240524050528.4115581-1-xiaolei.wang@windriver.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: nf_tables: adapt set backend to use GC transaction API [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:40 2024 +0200

    netfilter: nf_tables: adapt set backend to use GC transaction API
    
    commit f6c383b8c31a93752a52697f8430a71dcbc46adf upstream.
    
    Use the GC transaction API to replace the old and buggy gc API and the
    busy mark approach.
    
    No set elements are removed from async garbage collection anymore,
    instead the _DEAD bit is set on so the set element is not visible from
    lookup path anymore. Async GC enqueues transaction work that might be
    aborted and retried later.
    
    rbtree and pipapo set backends does not set on the _DEAD bit from the
    sync GC path since this runs in control plane path where mutex is held.
    In this case, set elements are deactivated, removed and then released
    via RCU callback, sync GC never fails.
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Fixes: 8d8540c4f5e0 ("netfilter: nft_set_rbtree: add timeout support")
    Fixes: 9d0982927e79 ("netfilter: nft_hash: add support for timeouts")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: allow NFPROTO_INET in nft_(match/target)_validate() [+ + +]
Author: Ignat Korchagin <ignat@cloudflare.com>
Date:   Thu Jun 13 03:02:05 2024 +0200

    netfilter: nf_tables: allow NFPROTO_INET in nft_(match/target)_validate()
    
    [ Upstream commit 7e0f122c65912740327e4c54472acaa5f85868cb ]
    
    Commit d0009effa886 ("netfilter: nf_tables: validate NFPROTO_* family") added
    some validation of NFPROTO_* families in the nft_compat module, but it broke
    the ability to use legacy iptables modules in dual-stack nftables.
    
    While with legacy iptables one had to independently manage IPv4 and IPv6
    tables, with nftables it is possible to have dual-stack tables sharing the
    rules. Moreover, it was possible to use rules based on legacy iptables
    match/target modules in dual-stack nftables.
    
    As an example, the program from [2] creates an INET dual-stack family table
    using an xt_bpf based rule, which looks like the following (the actual output
    was generated with a patched nft tool as the current nft tool does not parse
    dual stack tables with legacy match rules, so consider it for illustrative
    purposes only):
    
    table inet testfw {
      chain input {
        type filter hook prerouting priority filter; policy accept;
        bytecode counter packets 0 bytes 0 accept
      }
    }
    
    After d0009effa886 ("netfilter: nf_tables: validate NFPROTO_* family") we get
    EOPNOTSUPP for the above program.
    
    Fix this by allowing NFPROTO_INET for nft_(match/target)_validate(), but also
    restrict the functions to classic iptables hooks.
    
    Changes in v3:
      * clarify that upstream nft will not display such configuration properly and
        that the output was generated with a patched nft tool
      * remove example program from commit description and link to it instead
      * no code changes otherwise
    
    Changes in v2:
      * restrict nft_(match/target)_validate() to classic iptables hooks
      * rewrite example program to use unmodified libnftnl
    
    Fixes: d0009effa886 ("netfilter: nf_tables: validate NFPROTO_* family")
    Link: https://lore.kernel.org/all/Zc1PfoWN38UuFJRI@calendula/T/#mc947262582c90fec044c7a3398cc92fac7afea72 [1]
    Link: https://lore.kernel.org/all/20240220145509.53357-1-ignat@cloudflare.com/ [2]
    Reported-by: Jordan Griege <jgriege@cloudflare.com>
    Signed-off-by: Ignat Korchagin <ignat@cloudflare.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: bogus EBUSY when deleting flowtable after flush (for 4.19) [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:55 2024 +0200

    netfilter: nf_tables: bogus EBUSY when deleting flowtable after flush (for 4.19)
    
    3f0465a9ef02 ("netfilter: nf_tables: dynamically allocate hooks per
    net_device in flowtables") reworks flowtable support to allow for
    dynamic allocation of hooks, which implicitly fixes the following
    bogus EBUSY in transaction:
    
      delete flowtable
      add flowtable # same flowtable with same devices, it hits EBUSY
    
    This patch does not exist in any tree, but it fixes this issue for
    -stable Linux kernel 4.19
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: defer gc run if previous batch is still pending [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jun 13 03:01:45 2024 +0200

    netfilter: nf_tables: defer gc run if previous batch is still pending
    
    commit 8e51830e29e12670b4c10df070a4ea4c9593e961 upstream.
    
    Don't queue more gc work, else we may queue the same elements multiple
    times.
    
    If an element is flagged as dead, this can mean that either the previous
    gc request was invalidated/discarded by a transaction or that the previous
    request is still pending in the system work queue.
    
    The latter will happen if the gc interval is set to a very low value,
    e.g. 1ms, and system work queue is backlogged.
    
    The sets refcount is 1 if no previous gc requeusts are queued, so add
    a helper for this and skip gc run if old requests are pending.
    
    Add a helper for this and skip the gc run in this case.
    
    Fixes: f6c383b8c31a ("netfilter: nf_tables: adapt set backend to use GC transaction API")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: disable toggling dormant table state more than once [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:54 2024 +0200

    netfilter: nf_tables: disable toggling dormant table state more than once
    
    commit c9bd26513b3a11b3adb3c2ed8a31a01a87173ff1 upstream.
    
    nft -f -<<EOF
    add table ip t
    add table ip t { flags dormant; }
    add chain ip t c { type filter hook input priority 0; }
    add table ip t
    EOF
    
    Triggers a splat from nf core on next table delete because we lose
    track of right hook register state:
    
    WARNING: CPU: 2 PID: 1597 at net/netfilter/core.c:501 __nf_unregister_net_hook
    RIP: 0010:__nf_unregister_net_hook+0x41b/0x570
     nf_unregister_net_hook+0xb4/0xf0
     __nf_tables_unregister_hook+0x160/0x1d0
    [..]
    
    The above should have table in *active* state, but in fact no
    hooks were registered.
    
    Reject on/off/on games rather than attempting to fix this.
    
    Fixes: 179d9ba5559a ("netfilter: nf_tables: fix table flag updates")
    Reported-by: "Lee, Cherie-Anne" <cherie.lee@starlabs.sg>
    Cc: Bing-Jhong Billy Jheng <billy@starlabs.sg>
    Cc: info@starlabs.sg
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: discard table flag update with pending basechain deletion [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:02:09 2024 +0200

    netfilter: nf_tables: discard table flag update with pending basechain deletion
    
    commit 1bc83a019bbe268be3526406245ec28c2458a518 upstream.
    
    Hook unregistration is deferred to the commit phase, same occurs with
    hook updates triggered by the table dormant flag. When both commands are
    combined, this results in deleting a basechain while leaving its hook
    still registered in the core.
    
    Fixes: 179d9ba5559a ("netfilter: nf_tables: fix table flag updates")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: do not compare internal table flags on updates [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:02:06 2024 +0200

    netfilter: nf_tables: do not compare internal table flags on updates
    
    [ Upstream commit 4a0e7f2decbf9bd72461226f1f5f7dcc4b08f139 ]
    
    Restore skipping transaction if table update does not modify flags.
    
    Fixes: 179d9ba5559a ("netfilter: nf_tables: fix table flag updates")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: don't skip expired elements during walk [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:38 2024 +0200

    netfilter: nf_tables: don't skip expired elements during walk
    
    commit 24138933b97b055d486e8064b4a1721702442a9b upstream.
    
    There is an asymmetry between commit/abort and preparation phase if the
    following conditions are met:
    
    1. set is a verdict map ("1.2.3.4 : jump foo")
    2. timeouts are enabled
    
    In this case, following sequence is problematic:
    
    1. element E in set S refers to chain C
    2. userspace requests removal of set S
    3. kernel does a set walk to decrement chain->use count for all elements
       from preparation phase
    4. kernel does another set walk to remove elements from the commit phase
       (or another walk to do a chain->use increment for all elements from
        abort phase)
    
    If E has already expired in 1), it will be ignored during list walk, so its use count
    won't have been changed.
    
    Then, when set is culled, ->destroy callback will zap the element via
    nf_tables_set_elem_destroy(), but this function is only safe for
    elements that have been deactivated earlier from the preparation phase:
    lack of earlier deactivate removes the element but leaks the chain use
    count, which results in a WARN splat when the chain gets removed later,
    plus a leak of the nft_chain structure.
    
    Update pipapo_get() not to skip expired elements, otherwise flush
    command reports bogus ENOENT errors.
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Fixes: 8d8540c4f5e0 ("netfilter: nft_set_rbtree: add timeout support")
    Fixes: 9d0982927e79 ("netfilter: nft_hash: add support for timeouts")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: double hook unregistration in netns path [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:51 2024 +0200

    netfilter: nf_tables: double hook unregistration in netns path
    
    commit f9a43007d3f7ba76d5e7f9421094f00f2ef202f8 upstream.
    
    __nft_release_hooks() is called from pre_netns exit path which
    unregisters the hooks, then the NETDEV_UNREGISTER event is triggered
    which unregisters the hooks again.
    
    [  565.221461] WARNING: CPU: 18 PID: 193 at net/netfilter/core.c:495 __nf_unregister_net_hook+0x247/0x270
    [...]
    [  565.246890] CPU: 18 PID: 193 Comm: kworker/u64:1 Tainted: G            E     5.18.0-rc7+ #27
    [  565.253682] Workqueue: netns cleanup_net
    [  565.257059] RIP: 0010:__nf_unregister_net_hook+0x247/0x270
    [...]
    [  565.297120] Call Trace:
    [  565.300900]  <TASK>
    [  565.304683]  nf_tables_flowtable_event+0x16a/0x220 [nf_tables]
    [  565.308518]  raw_notifier_call_chain+0x63/0x80
    [  565.312386]  unregister_netdevice_many+0x54f/0xb50
    
    Unregister and destroy netdev hook from netns pre_exit via kfree_rcu
    so the NETDEV_UNREGISTER path see unregistered hooks.
    
    Fixes: 767d1216bff8 ("netfilter: nftables: fix possible UAF over chains from packet path in netns")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: drop map element references from preparation phase [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:32 2024 +0200

    netfilter: nf_tables: drop map element references from preparation phase
    
    [ Upstream commit 628bd3e49cba1c066228e23d71a852c23e26da73 ]
    
    set .destroy callback releases the references to other objects in maps.
    This is very late and it results in spurious EBUSY errors. Drop refcount
    from the preparation phase instead, update set backend not to drop
    reference counter from set .destroy path.
    
    Exceptions: NFT_TRANS_PREPARE_ERROR does not require to drop the
    reference counter because the transaction abort path releases the map
    references for each element since the set is unbound. The abort path
    also deals with releasing reference counter for new elements added to
    unbound sets.
    
    Fixes: 591054469b3e ("netfilter: nf_tables: revisit chain/object refcounting from elements")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix GC transaction races with netns and netlink event exit path [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:42 2024 +0200

    netfilter: nf_tables: fix GC transaction races with netns and netlink event exit path
    
    commit 6a33d8b73dfac0a41f3877894b38082bd0c9a5bc upstream.
    
    Netlink event path is missing a synchronization point with GC
    transactions. Add GC sequence number update to netns release path and
    netlink event path, any GC transaction losing race will be discarded.
    
    Fixes: 5f68718b34a5 ("netfilter: nf_tables: GC transaction API to avoid race with control plane")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix memleak when more than 255 elements expired [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:49 2024 +0200

    netfilter: nf_tables: fix memleak when more than 255 elements expired
    
    commit cf5000a7787cbc10341091d37245a42c119d26c5 upstream.
    
    When more than 255 elements expired we're supposed to switch to a new gc
    container structure.
    
    This never happens: u8 type will wrap before reaching the boundary
    and nft_trans_gc_space() always returns true.
    
    This means we recycle the initial gc container structure and
    lose track of the elements that came before.
    
    While at it, don't deref 'gc' after we've passed it to call_rcu.
    
    Fixes: 5f68718b34a5 ("netfilter: nf_tables: GC transaction API to avoid race with control plane")
    Reported-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: fix table flag updates [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:53 2024 +0200

    netfilter: nf_tables: fix table flag updates
    
    commit 179d9ba5559a756f4322583388b3213fe4e391b0 upstream.
    
    The dormant flag need to be updated from the preparation phase,
    otherwise, two consecutive requests to dorm a table in the same batch
    might try to remove the same hooks twice, resulting in the following
    warning:
    
     hook not found, pf 3 num 0
     WARNING: CPU: 0 PID: 334 at net/netfilter/core.c:480 __nf_unregister_net_hook+0x1eb/0x610 net/netfilter/core.c:480
     Modules linked in:
     CPU: 0 PID: 334 Comm: kworker/u4:5 Not tainted 5.12.0-syzkaller #0
     Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
     Workqueue: netns cleanup_net
     RIP: 0010:__nf_unregister_net_hook+0x1eb/0x610 net/netfilter/core.c:480
    
    This patch is a partial revert of 0ce7cf4127f1 ("netfilter: nftables:
    update table flags from the commit phase") to restore the previous
    behaviour.
    
    However, there is still another problem: A batch containing a series of
    dorm-wakeup-dorm table and vice-versa also trigger the warning above
    since hook unregistration happens from the preparation phase, while hook
    registration occurs from the commit phase.
    
    To fix this problem, this patch adds two internal flags to annotate the
    original dormant flag status which are __NFT_TABLE_F_WAS_DORMANT and
    __NFT_TABLE_F_WAS_AWAKEN, to restore it from the abort path.
    
    The __NFT_TABLE_F_UPDATE bitmask allows to handle the dormant flag update
    with one single transaction.
    
    Reported-by: syzbot+7ad5cd1615f2d89c6e7e@syzkaller.appspotmail.com
    Fixes: 0ce7cf4127f1 ("netfilter: nftables: update table flags from the commit phase")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: GC transaction API to avoid race with control plane [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:39 2024 +0200

    netfilter: nf_tables: GC transaction API to avoid race with control plane
    
    commit 5f68718b34a531a556f2f50300ead2862278da26 upstream.
    
    [ this includes
      8357bc946a2a ("netfilter: nf_tables: use correct lock to protect gc_list") ]
    
    The set types rhashtable and rbtree use a GC worker to reclaim memory.
    >From system work queue, in periodic intervals, a scan of the table is
    done.
    
    The major caveat here is that the nft transaction mutex is not held.
    This causes a race between control plane and GC when they attempt to
    delete the same element.
    
    We cannot grab the netlink mutex from the work queue, because the
    control plane has to wait for the GC work queue in case the set is to be
    removed, so we get following deadlock:
    
       cpu 1                                cpu2
         GC work                            transaction comes in , lock nft mutex
           `acquire nft mutex // BLOCKS
                                            transaction asks to remove the set
                                            set destruction calls cancel_work_sync()
    
    cancel_work_sync will now block forever, because it is waiting for the
    mutex the caller already owns.
    
    This patch adds a new API that deals with garbage collection in two
    steps:
    
    1) Lockless GC of expired elements sets on the NFT_SET_ELEM_DEAD_BIT
       so they are not visible via lookup. Annotate current GC sequence in
       the GC transaction. Enqueue GC transaction work as soon as it is
       full. If ruleset is updated, then GC transaction is aborted and
       retried later.
    
    2) GC work grabs the mutex. If GC sequence has changed then this GC
       transaction lost race with control plane, abort it as it contains
       stale references to objects and let GC try again later. If the
       ruleset is intact, then this GC transaction deactivates and removes
       the elements and it uses call_rcu() to destroy elements.
    
    Note that no elements are removed from GC lockless path, the _DEAD bit
    is set and pointers are collected. GC catchall does not remove the
    elements anymore too. There is a new set->dead flag that is set on to
    abort the GC transaction to deal with set->ops->destroy() path which
    removes the remaining elements in the set from commit_release, where no
    mutex is held.
    
    To deal with GC when mutex is held, which allows safe deactivate and
    removal, add sync GC API which releases the set element object via
    call_rcu(). This is used by rbtree and pipapo backends which also
    perform garbage collection from control plane path.
    
    Since element removal from sets can happen from control plane and
    element garbage collection/timeout, it is necessary to keep the set
    structure alive until all elements have been deactivated and destroyed.
    
    We cannot do a cancel_work_sync or flush_work in nft_set_destroy because
    its called with the transaction mutex held, but the aforementioned async
    work queue might be blocked on the very mutex that nft_set_destroy()
    callchain is sitting on.
    
    This gives us the choice of ABBA deadlock or UaF.
    
    To avoid both, add set->refs refcount_t member. The GC API can then
    increment the set refcount and release it once the elements have been
    free'd.
    
    Set backends are adapted to use the GC transaction API in a follow up
    patch entitled:
    
      ("netfilter: nf_tables: use gc transaction API in set backends")
    
    This is joint work with Florian Westphal.
    
    Fixes: cfed7e1b1f8e ("netfilter: nf_tables: add set garbage collection helpers")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: GC transaction race with abort path [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:44 2024 +0200

    netfilter: nf_tables: GC transaction race with abort path
    
    commit 720344340fb9be2765bbaab7b292ece0a4570eae upstream.
    
    Abort path is missing a synchronization point with GC transactions. Add
    GC sequence number hence any GC transaction losing race will be
    discarded.
    
    Fixes: 5f68718b34a5 ("netfilter: nf_tables: GC transaction API to avoid race with control plane")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: GC transaction race with netns dismantle [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:43 2024 +0200

    netfilter: nf_tables: GC transaction race with netns dismantle
    
    commit 02c6c24402bf1c1e986899c14ba22a10b510916b upstream.
    
    Use maybe_get_net() since GC workqueue might race with netns exit path.
    
    Fixes: 5f68718b34a5 ("netfilter: nf_tables: GC transaction API to avoid race with control plane")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: mark newset as dead on transaction abort [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jun 13 03:02:00 2024 +0200

    netfilter: nf_tables: mark newset as dead on transaction abort
    
    [ Upstream commit 08e4c8c5919fd405a4d709b4ba43d836894a26eb ]
    
    If a transaction is aborted, we should mark the to-be-released NEWSET dead,
    just like commit path does for DEL and DESTROYSET commands.
    
    In both cases all remaining elements will be released via
    set->ops->destroy().
    
    The existing abort code does NOT post the actual release to the work queue.
    Also the entire __nf_tables_abort() function is wrapped in gc_seq
    begin/end pair.
    
    Therefore, async gc worker will never try to release the pending set
    elements, as gc sequence is always stale.
    
    It might be possible to speed up transaction aborts via work queue too,
    this would result in a race and a possible use-after-free.
    
    So fix this before it becomes an issue.
    
    Fixes: 5f68718b34a5 ("netfilter: nf_tables: GC transaction API to avoid race with control plane")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: mark set as dead when unbinding anonymous set with timeout [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:02:07 2024 +0200

    netfilter: nf_tables: mark set as dead when unbinding anonymous set with timeout
    
    commit 552705a3650bbf46a22b1adedc1b04181490fc36 upstream.
    
    While the rhashtable set gc runs asynchronously, a race allows it to
    collect elements from anonymous sets with timeouts while it is being
    released from the commit path.
    
    Mingi Cho originally reported this issue in a different path in 6.1.x
    with a pipapo set with low timeouts which is not possible upstream since
    7395dfacfff6 ("netfilter: nf_tables: use timestamp to check for set
    element timeout").
    
    Fix this by setting on the dead flag for anonymous sets to skip async gc
    in this case.
    
    According to 08e4c8c5919f ("netfilter: nf_tables: mark newset as dead on
    transaction abort"), Florian plans to accelerate abort path by releasing
    objects via workqueue, therefore, this sets on the dead flag for abort
    path too.
    
    Cc: stable@vger.kernel.org
    Fixes: 5f68718b34a5 ("netfilter: nf_tables: GC transaction API to avoid race with control plane")
    Reported-by: Mingi Cho <mgcho.minic@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: pass context to nft_set_destroy() [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:30 2024 +0200

    netfilter: nf_tables: pass context to nft_set_destroy()
    
    commit 0c2a85edd143162b3a698f31e94bf8cdc041da87 upstream.
    
    The patch that adds support for stateful expressions in set definitions
    require this.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: reject new basechain after table flag update [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:02:08 2024 +0200

    netfilter: nf_tables: reject new basechain after table flag update
    
    commit 994209ddf4f430946f6247616b2e33d179243769 upstream.
    
    When dormant flag is toggled, hooks are disabled in the commit phase by
    iterating over current chains in table (existing and new).
    
    The following configuration allows for an inconsistent state:
    
      add table x
      add chain x y { type filter hook input priority 0; }
      add table x { flags dormant; }
      add chain x w { type filter hook input priority 1; }
    
    which triggers the following warning when trying to unregister chain w
    which is already unregistered.
    
    [  127.322252] WARNING: CPU: 7 PID: 1211 at net/netfilter/core.c:50                                                                     1 __nf_unregister_net_hook+0x21a/0x260
    [...]
    [  127.322519] Call Trace:
    [  127.322521]  <TASK>
    [  127.322524]  ? __warn+0x9f/0x1a0
    [  127.322531]  ? __nf_unregister_net_hook+0x21a/0x260
    [  127.322537]  ? report_bug+0x1b1/0x1e0
    [  127.322545]  ? handle_bug+0x3c/0x70
    [  127.322552]  ? exc_invalid_op+0x17/0x40
    [  127.322556]  ? asm_exc_invalid_op+0x1a/0x20
    [  127.322563]  ? kasan_save_free_info+0x3b/0x60
    [  127.322570]  ? __nf_unregister_net_hook+0x6a/0x260
    [  127.322577]  ? __nf_unregister_net_hook+0x21a/0x260
    [  127.322583]  ? __nf_unregister_net_hook+0x6a/0x260
    [  127.322590]  ? __nf_tables_unregister_hook+0x8a/0xe0 [nf_tables]
    [  127.322655]  nft_table_disable+0x75/0xf0 [nf_tables]
    [  127.322717]  nf_tables_commit+0x2571/0x2620 [nf_tables]
    
    Fixes: 179d9ba5559a ("netfilter: nf_tables: fix table flag updates")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: remove busy mark and gc batch API [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:41 2024 +0200

    netfilter: nf_tables: remove busy mark and gc batch API
    
    commit a2dd0233cbc4d8a0abb5f64487487ffc9265beb5 upstream.
    
    Ditch it, it has been replace it by the GC transaction API and it has no
    clients anymore.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: set dormant flag on hook register failure [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jun 13 03:02:04 2024 +0200

    netfilter: nf_tables: set dormant flag on hook register failure
    
    [ Upstream commit bccebf64701735533c8db37773eeacc6566cc8ec ]
    
    We need to set the dormant flag again if we fail to register
    the hooks.
    
    During memory pressure hook registration can fail and we end up
    with a table marked as active but no registered hooks.
    
    On table/base chain deletion, nf_tables will attempt to unregister
    the hook again which yields a warn splat from the nftables core.
    
    Reported-and-tested-by: syzbot+de4025c006ec68ac56fc@syzkaller.appspotmail.com
    Fixes: 179d9ba5559a ("netfilter: nf_tables: fix table flag updates")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: skip dead set elements in netlink dump [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:02:01 2024 +0200

    netfilter: nf_tables: skip dead set elements in netlink dump
    
    [ Upstream commit 6b1ca88e4bb63673dc9f9c7f23c899f22c3cb17a ]
    
    Delete from packet path relies on the garbage collector to purge
    elements with NFT_SET_ELEM_DEAD_BIT on.
    
    Skip these dead elements from nf_tables_dump_setelem() path, I very
    rarely see tests/shell/testcases/maps/typeof_maps_add_delete reports
    [DUMP FAILED] showing a mismatch in the expected output with an element
    that should not be there.
    
    If the netlink dump happens before GC worker run, it might show dead
    elements in the ruleset listing.
    
    nft_rhash_get() already skips dead elements in nft_rhash_cmp(),
    therefore, it already does not show the element when getting a single
    element via netlink control plane.
    
    Fixes: 5f68718b34a5 ("netfilter: nf_tables: GC transaction API to avoid race with control plane")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: unregister flowtable hooks on netns exit [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:50 2024 +0200

    netfilter: nf_tables: unregister flowtable hooks on netns exit
    
    commit 6069da443bf65f513bb507bb21e2f87cfb1ad0b6 upstream.
    
    Unregister flowtable hooks before they are releases via
    nf_tables_flowtable_destroy() otherwise hook core reports UAF.
    
    BUG: KASAN: use-after-free in nf_hook_entries_grow+0x5a7/0x700 net/netfilter/core.c:142 net/netfilter/core.c:142
    Read of size 4 at addr ffff8880736f7438 by task syz-executor579/3666
    
    CPU: 0 PID: 3666 Comm: syz-executor579 Not tainted 5.16.0-rc5-syzkaller #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     __dump_stack lib/dump_stack.c:88 [inline] lib/dump_stack.c:106
     dump_stack_lvl+0x1dc/0x2d8 lib/dump_stack.c:106 lib/dump_stack.c:106
     print_address_description+0x65/0x380 mm/kasan/report.c:247 mm/kasan/report.c:247
     __kasan_report mm/kasan/report.c:433 [inline]
     __kasan_report mm/kasan/report.c:433 [inline] mm/kasan/report.c:450
     kasan_report+0x19a/0x1f0 mm/kasan/report.c:450 mm/kasan/report.c:450
     nf_hook_entries_grow+0x5a7/0x700 net/netfilter/core.c:142 net/netfilter/core.c:142
     __nf_register_net_hook+0x27e/0x8d0 net/netfilter/core.c:429 net/netfilter/core.c:429
     nf_register_net_hook+0xaa/0x180 net/netfilter/core.c:571 net/netfilter/core.c:571
     nft_register_flowtable_net_hooks+0x3c5/0x730 net/netfilter/nf_tables_api.c:7232 net/netfilter/nf_tables_api.c:7232
     nf_tables_newflowtable+0x2022/0x2cf0 net/netfilter/nf_tables_api.c:7430 net/netfilter/nf_tables_api.c:7430
     nfnetlink_rcv_batch net/netfilter/nfnetlink.c:513 [inline]
     nfnetlink_rcv_skb_batch net/netfilter/nfnetlink.c:634 [inline]
     nfnetlink_rcv_batch net/netfilter/nfnetlink.c:513 [inline] net/netfilter/nfnetlink.c:652
     nfnetlink_rcv_skb_batch net/netfilter/nfnetlink.c:634 [inline] net/netfilter/nfnetlink.c:652
     nfnetlink_rcv+0x10e6/0x2550 net/netfilter/nfnetlink.c:652 net/netfilter/nfnetlink.c:652
    
    __nft_release_hook() calls nft_unregister_flowtable_net_hooks() which
    only unregisters the hooks, then after RCU grace period, it is
    guaranteed that no packets add new entries to the flowtable (no flow
    offload rules and flowtable hooks are reachable from packet path), so it
    is safe to call nf_flow_table_free() which cleans up the remaining
    entries from the flowtable (both software and hardware) and it unbinds
    the flow_block.
    
    Fixes: ff4bf2f42a40 ("netfilter: nf_tables: add nft_unregister_flowtable_hook()")
    Reported-by: syzbot+e918523f77e62790d6d9@syzkaller.appspotmail.com
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: validate NFPROTO_* family [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:02:02 2024 +0200

    netfilter: nf_tables: validate NFPROTO_* family
    
    [ Upstream commit d0009effa8862c20a13af4cb7475d9771b905693 ]
    
    Several expressions explicitly refer to NF_INET_* hook definitions
    from expr->ops->validate, however, family is not validated.
    
    Bail out with EOPNOTSUPP in case they are used from unsupported
    families.
    
    Fixes: 0ca743a55991 ("netfilter: nf_tables: add compatibility layer for x_tables")
    Fixes: a3c90f7a2323 ("netfilter: nf_tables: flow offload expression")
    Fixes: 2fa841938c64 ("netfilter: nf_tables: introduce routing expression")
    Fixes: 554ced0a6e29 ("netfilter: nf_tables: add support for native socket matching")
    Fixes: ad49d86e07a4 ("netfilter: nf_tables: Add synproxy support")
    Fixes: 4ed8eb6570a4 ("netfilter: nf_tables: Add native tproxy support")
    Fixes: 6c47260250fc ("netfilter: nf_tables: add xfrm expression")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nfnetlink_queue: acquire rcu_read_lock() in instance_destroy_rcu() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed May 15 13:23:39 2024 +0000

    netfilter: nfnetlink_queue: acquire rcu_read_lock() in instance_destroy_rcu()
    
    [ Upstream commit dc21c6cc3d6986d938efbf95de62473982c98dec ]
    
    syzbot reported that nf_reinject() could be called without rcu_read_lock() :
    
    WARNING: suspicious RCU usage
    6.9.0-rc7-syzkaller-02060-g5c1672705a1a #0 Not tainted
    
    net/netfilter/nfnetlink_queue.c:263 suspicious rcu_dereference_check() usage!
    
    other info that might help us debug this:
    
    rcu_scheduler_active = 2, debug_locks = 1
    2 locks held by syz-executor.4/13427:
      #0: ffffffff8e334f60 (rcu_callback){....}-{0:0}, at: rcu_lock_acquire include/linux/rcupdate.h:329 [inline]
      #0: ffffffff8e334f60 (rcu_callback){....}-{0:0}, at: rcu_do_batch kernel/rcu/tree.c:2190 [inline]
      #0: ffffffff8e334f60 (rcu_callback){....}-{0:0}, at: rcu_core+0xa86/0x1830 kernel/rcu/tree.c:2471
      #1: ffff88801ca92958 (&inst->lock){+.-.}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
      #1: ffff88801ca92958 (&inst->lock){+.-.}-{2:2}, at: nfqnl_flush net/netfilter/nfnetlink_queue.c:405 [inline]
      #1: ffff88801ca92958 (&inst->lock){+.-.}-{2:2}, at: instance_destroy_rcu+0x30/0x220 net/netfilter/nfnetlink_queue.c:172
    
    stack backtrace:
    CPU: 0 PID: 13427 Comm: syz-executor.4 Not tainted 6.9.0-rc7-syzkaller-02060-g5c1672705a1a #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
    Call Trace:
     <IRQ>
      __dump_stack lib/dump_stack.c:88 [inline]
      dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
      lockdep_rcu_suspicious+0x221/0x340 kernel/locking/lockdep.c:6712
      nf_reinject net/netfilter/nfnetlink_queue.c:323 [inline]
      nfqnl_reinject+0x6ec/0x1120 net/netfilter/nfnetlink_queue.c:397
      nfqnl_flush net/netfilter/nfnetlink_queue.c:410 [inline]
      instance_destroy_rcu+0x1ae/0x220 net/netfilter/nfnetlink_queue.c:172
      rcu_do_batch kernel/rcu/tree.c:2196 [inline]
      rcu_core+0xafd/0x1830 kernel/rcu/tree.c:2471
      handle_softirqs+0x2d6/0x990 kernel/softirq.c:554
      __do_softirq kernel/softirq.c:588 [inline]
      invoke_softirq kernel/softirq.c:428 [inline]
      __irq_exit_rcu+0xf4/0x1c0 kernel/softirq.c:637
      irq_exit_rcu+0x9/0x30 kernel/softirq.c:649
      instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1043 [inline]
      sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1043
     </IRQ>
     <TASK>
    
    Fixes: 9872bec773c2 ("[NETFILTER]: nfnetlink: use RCU for queue instances hash")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_dynset: fix timeouts later than 23 days [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:56 2024 +0200

    netfilter: nft_dynset: fix timeouts later than 23 days
    
    commit 917d80d376ffbaa9725fde9e3c0282f63643f278 upstream.
    
    Use nf_msecs_to_jiffies64 and nf_jiffies64_to_msecs as provided by
    8e1102d5a159 ("netfilter: nf_tables: support timeouts larger than 23
    days"), otherwise ruleset listing breaks.
    
    Fixes: a8b1e36d0d1d ("netfilter: nft_dynset: fix element timeout for HZ != 1000")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_dynset: relax superfluous check on set updates [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:59 2024 +0200

    netfilter: nft_dynset: relax superfluous check on set updates
    
    commit 7b1394892de8d95748d05e3ee41e85edb4abbfa1 upstream.
    
    Relax this condition to make add and update commands idempotent for sets
    with no timeout. The eval function already checks if the set element
    timeout is available and updates it if the update command is used.
    
    Fixes: 22fe54d5fefc ("netfilter: nf_tables: add support for dynamic set updates")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_dynset: report EOPNOTSUPP on missing set feature [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:58 2024 +0200

    netfilter: nft_dynset: report EOPNOTSUPP on missing set feature
    
    commit 95cd4bca7b1f4a25810f3ddfc5e767fb46931789 upstream.
    
    If userspace requests a feature which is not available the original set
    definition, then bail out with EOPNOTSUPP. If userspace sends
    unsupported dynset flags (new feature not supported by this kernel),
    then report EOPNOTSUPP to userspace. EINVAL should be only used to
    report malformed netlink messages from userspace.
    
    Fixes: 22fe54d5fefc ("netfilter: nf_tables: add support for dynamic set updates")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_hash: try later when GC hits EAGAIN on iteration [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:48 2024 +0200

    netfilter: nft_set_hash: try later when GC hits EAGAIN on iteration
    
    commit b079155faae94e9b3ab9337e82100a914ebb4e8d upstream.
    
    Skip GC run if iterator rewinds to the beginning with EAGAIN, otherwise GC
    might collect the same element more than once.
    
    Fixes: f6c383b8c31a ("netfilter: nf_tables: adapt set backend to use GC transaction API")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: Add missing expired checks [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Thu Jun 13 03:01:34 2024 +0200

    netfilter: nft_set_rbtree: Add missing expired checks
    
    commit 340eaff651160234bdbce07ef34b92a8e45cd540 upstream.
    
    Expired intervals would still match and be dumped to user space until
    garbage collection wiped them out. Make sure they stop matching and
    disappear (from users' perspective) as soon as they expire.
    
    Fixes: 8d8540c4f5e03 ("netfilter: nft_set_rbtree: add timeout support")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: allow loose matching of closing element in interval [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:33 2024 +0200

    netfilter: nft_set_rbtree: allow loose matching of closing element in interval
    
    commit 3b18d5eba491b2328b31efa4235724a2354af010 upstream.
    
    Allow to find closest matching for the right side of an interval (end
    flag set on) so we allow lookups in inner ranges, eg. 10-20 in 5-25.
    
    Fixes: ba0e4d9917b4 ("netfilter: nf_tables: get set elements via netlink")
    Reported-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: fix null deref on element insertion [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:36 2024 +0200

    netfilter: nft_set_rbtree: fix null deref on element insertion
    
    commit 61ae320a29b0540c16931816299eb86bf2b66c08 upstream.
    
    There is no guarantee that rb_prev() will not return NULL in nft_rbtree_gc_elem():
    
    general protection fault, probably for non-canonical address 0xdffffc0000000003: 0000 [#1] PREEMPT SMP KASAN
    KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f]
     nft_add_set_elem+0x14b0/0x2990
      nf_tables_newsetelem+0x528/0xb30
    
    Furthermore, there is a possible use-after-free while iterating,
    'node' can be free'd so we need to cache the next value to use.
    
    Fixes: c9e6978e2725 ("netfilter: nft_set_rbtree: Switch to node list walk for overlap detection")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: fix overlap expiration walk [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:37 2024 +0200

    netfilter: nft_set_rbtree: fix overlap expiration walk
    
    commit f718863aca469a109895cb855e6b81fff4827d71 upstream.
    
    The lazy gc on insert that should remove timed-out entries fails to release
    the other half of the interval, if any.
    
    Can be reproduced with tests/shell/testcases/sets/0044interval_overlap_0
    in nftables.git and kmemleak enabled kernel.
    
    Second bug is the use of rbe_prev vs. prev pointer.
    If rbe_prev() returns NULL after at least one iteration, rbe_prev points
    to element that is not an end interval, hence it should not be removed.
    
    Lastly, check the genmask of the end interval if this is active in the
    current generation.
    
    Fixes: c9e6978e2725 ("netfilter: nft_set_rbtree: Switch to node list walk for overlap detection")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: skip end interval element from gc [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:02:03 2024 +0200

    netfilter: nft_set_rbtree: skip end interval element from gc
    
    commit 60c0c230c6f046da536d3df8b39a20b9a9fd6af0 upstream.
    
    rbtree lazy gc on insert might collect an end interval element that has
    been just added in this transactions, skip end interval elements that
    are not yet active.
    
    Fixes: f718863aca46 ("netfilter: nft_set_rbtree: fix overlap expiration walk")
    Cc: stable@vger.kernel.org
    Reported-by: lonial con <kongln9170@gmail.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: skip sync GC for new elements in this transaction [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:46 2024 +0200

    netfilter: nft_set_rbtree: skip sync GC for new elements in this transaction
    
    commit 2ee52ae94baabf7ee09cf2a8d854b990dac5d0e4 upstream.
    
    New elements in this transaction might expired before such transaction
    ends. Skip sync GC for such elements otherwise commit path might walk
    over an already released object. Once transaction is finished, async GC
    will collect such expired element.
    
    Fixes: f6c383b8c31a ("netfilter: nf_tables: adapt set backend to use GC transaction API")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: Switch to node list walk for overlap detection [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:35 2024 +0200

    netfilter: nft_set_rbtree: Switch to node list walk for overlap detection
    
    commit c9e6978e2725a7d4b6cd23b2facd3f11422c0643 upstream.
    
    ...instead of a tree descent, which became overly complicated in an
    attempt to cover cases where expired or inactive elements would affect
    comparisons with the new element being inserted.
    
    Further, it turned out that it's probably impossible to cover all those
    cases, as inactive nodes might entirely hide subtrees consisting of a
    complete interval plus a node that makes the current insertion not
    overlap.
    
    To speed up the overlap check, descent the tree to find a greater
    element that is closer to the key value to insert. Then walk down the
    node list for overlap detection. Starting the overlap check from
    rb_first() unconditionally is slow, it takes 10 times longer due to the
    full linear traversal of the list.
    
    Moreover, perform garbage collection of expired elements when walking
    down the node list to avoid bogus overlap reports.
    
    For the insertion operation itself, this essentially reverts back to the
    implementation before commit 7c84d41416d8 ("netfilter: nft_set_rbtree:
    Detect partial overlaps on insertion"), except that cases of complete
    overlap are already handled in the overlap detection phase itself, which
    slightly simplifies the loop to find the insertion point.
    
    Based on initial patch from Stefano Brivio, including text from the
    original patch description too.
    
    Fixes: 7c84d41416d8 ("netfilter: nft_set_rbtree: Detect partial overlaps on insertion")
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_rbtree: use read spinlock to avoid datapath contention [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:47 2024 +0200

    netfilter: nft_set_rbtree: use read spinlock to avoid datapath contention
    
    commit 96b33300fba880ec0eafcf3d82486f3463b4b6da upstream.
    
    rbtree GC does not modify the datastructure, instead it collects expired
    elements and it enqueues a GC transaction. Use a read spinlock instead
    to avoid data contention while GC worker is running.
    
    Fixes: f6c383b8c31a ("netfilter: nf_tables: adapt set backend to use GC transaction API")
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nftables: exthdr: fix 4-byte stack OOB write [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jun 13 03:01:57 2024 +0200

    netfilter: nftables: exthdr: fix 4-byte stack OOB write
    
    commit fd94d9dadee58e09b49075240fe83423eb1dcd36 upstream.
    
    If priv->len is a multiple of 4, then dst[len / 4] can write past
    the destination array which leads to stack corruption.
    
    This construct is necessary to clean the remainder of the register
    in case ->len is NOT a multiple of the register size, so make it
    conditional just like nft_payload.c does.
    
    The bug was added in 4.1 cycle and then copied/inherited when
    tcp/sctp and ip option support was added.
    
    Bug reported by Zero Day Initiative project (ZDI-CAN-21950,
    ZDI-CAN-21951, ZDI-CAN-21961).
    
    Fixes: 49499c3e6e18 ("netfilter: nf_tables: switch registers to 32 bit addressing")
    Fixes: 935b7f643018 ("netfilter: nft_exthdr: add TCP option matching")
    Fixes: 133dc203d77d ("netfilter: nft_exthdr: Support SCTP chunks")
    Fixes: dbb5281a1f84 ("netfilter: nf_tables: add support for matching IPv4 options")
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nftables: rename set element data activation/deactivation functions [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:31 2024 +0200

    netfilter: nftables: rename set element data activation/deactivation functions
    
    commit f8bb7889af58d8e74d2d61c76b1418230f1610fa upstream.
    
    Rename:
    
    - nft_set_elem_activate() to nft_set_elem_data_activate().
    - nft_set_elem_deactivate() to nft_set_elem_data_deactivate().
    
    To prepare for updates in the set element infrastructure to add support
    for the special catch-all element.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nftables: update table flags from the commit phase [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jun 13 03:01:52 2024 +0200

    netfilter: nftables: update table flags from the commit phase
    
    commit 0ce7cf4127f14078ca598ba9700d813178a59409 upstream.
    
    Do not update table flags from the preparation phase. Store the flags
    update into the transaction, then update the flags from the commit
    phase.
    
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netrom: fix possible dead-lock in nr_rt_ioctl() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed May 15 14:29:34 2024 +0000

    netrom: fix possible dead-lock in nr_rt_ioctl()
    
    [ Upstream commit e03e7f20ebf7e1611d40d1fdc1bde900fd3335f6 ]
    
    syzbot loves netrom, and found a possible deadlock in nr_rt_ioctl [1]
    
    Make sure we always acquire nr_node_list_lock before nr_node_lock(nr_node)
    
    [1]
    WARNING: possible circular locking dependency detected
    6.9.0-rc7-syzkaller-02147-g654de42f3fc6 #0 Not tainted
    ------------------------------------------------------
    syz-executor350/5129 is trying to acquire lock:
     ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
     ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: nr_node_lock include/net/netrom.h:152 [inline]
     ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: nr_dec_obs net/netrom/nr_route.c:464 [inline]
     ffff8880186e2070 (&nr_node->node_lock){+...}-{2:2}, at: nr_rt_ioctl+0x1bb/0x1090 net/netrom/nr_route.c:697
    
    but task is already holding lock:
     ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
     ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_dec_obs net/netrom/nr_route.c:462 [inline]
     ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_rt_ioctl+0x10a/0x1090 net/netrom/nr_route.c:697
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (nr_node_list_lock){+...}-{2:2}:
            lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
            __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
            _raw_spin_lock_bh+0x35/0x50 kernel/locking/spinlock.c:178
            spin_lock_bh include/linux/spinlock.h:356 [inline]
            nr_remove_node net/netrom/nr_route.c:299 [inline]
            nr_del_node+0x4b4/0x820 net/netrom/nr_route.c:355
            nr_rt_ioctl+0xa95/0x1090 net/netrom/nr_route.c:683
            sock_do_ioctl+0x158/0x460 net/socket.c:1222
            sock_ioctl+0x629/0x8e0 net/socket.c:1341
            vfs_ioctl fs/ioctl.c:51 [inline]
            __do_sys_ioctl fs/ioctl.c:904 [inline]
            __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
            do_syscall_x64 arch/x86/entry/common.c:52 [inline]
            do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
           entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    -> #0 (&nr_node->node_lock){+...}-{2:2}:
            check_prev_add kernel/locking/lockdep.c:3134 [inline]
            check_prevs_add kernel/locking/lockdep.c:3253 [inline]
            validate_chain+0x18cb/0x58e0 kernel/locking/lockdep.c:3869
            __lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
            lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
            __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
            _raw_spin_lock_bh+0x35/0x50 kernel/locking/spinlock.c:178
            spin_lock_bh include/linux/spinlock.h:356 [inline]
            nr_node_lock include/net/netrom.h:152 [inline]
            nr_dec_obs net/netrom/nr_route.c:464 [inline]
            nr_rt_ioctl+0x1bb/0x1090 net/netrom/nr_route.c:697
            sock_do_ioctl+0x158/0x460 net/socket.c:1222
            sock_ioctl+0x629/0x8e0 net/socket.c:1341
            vfs_ioctl fs/ioctl.c:51 [inline]
            __do_sys_ioctl fs/ioctl.c:904 [inline]
            __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
            do_syscall_x64 arch/x86/entry/common.c:52 [inline]
            do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
           entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(nr_node_list_lock);
                                   lock(&nr_node->node_lock);
                                   lock(nr_node_list_lock);
      lock(&nr_node->node_lock);
    
     *** DEADLOCK ***
    
    1 lock held by syz-executor350/5129:
      #0: ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:356 [inline]
      #0: ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_dec_obs net/netrom/nr_route.c:462 [inline]
      #0: ffffffff8f7053b8 (nr_node_list_lock){+...}-{2:2}, at: nr_rt_ioctl+0x10a/0x1090 net/netrom/nr_route.c:697
    
    stack backtrace:
    CPU: 0 PID: 5129 Comm: syz-executor350 Not tainted 6.9.0-rc7-syzkaller-02147-g654de42f3fc6 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
    Call Trace:
     <TASK>
      __dump_stack lib/dump_stack.c:88 [inline]
      dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
      check_noncircular+0x36a/0x4a0 kernel/locking/lockdep.c:2187
      check_prev_add kernel/locking/lockdep.c:3134 [inline]
      check_prevs_add kernel/locking/lockdep.c:3253 [inline]
      validate_chain+0x18cb/0x58e0 kernel/locking/lockdep.c:3869
      __lock_acquire+0x1346/0x1fd0 kernel/locking/lockdep.c:5137
      lock_acquire+0x1ed/0x550 kernel/locking/lockdep.c:5754
      __raw_spin_lock_bh include/linux/spinlock_api_smp.h:126 [inline]
      _raw_spin_lock_bh+0x35/0x50 kernel/locking/spinlock.c:178
      spin_lock_bh include/linux/spinlock.h:356 [inline]
      nr_node_lock include/net/netrom.h:152 [inline]
      nr_dec_obs net/netrom/nr_route.c:464 [inline]
      nr_rt_ioctl+0x1bb/0x1090 net/netrom/nr_route.c:697
      sock_do_ioctl+0x158/0x460 net/socket.c:1222
      sock_ioctl+0x629/0x8e0 net/socket.c:1341
      vfs_ioctl fs/ioctl.c:51 [inline]
      __do_sys_ioctl fs/ioctl.c:904 [inline]
      __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://lore.kernel.org/r/20240515142934.3708038-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfc: nci: Fix handling of zero-length payload packets in nci_rx_work() [+ + +]
Author: Ryosuke Yasuoka <ryasuoka@redhat.com>
Date:   Wed May 22 00:34:42 2024 +0900

    nfc: nci: Fix handling of zero-length payload packets in nci_rx_work()
    
    [ Upstream commit 6671e352497ca4bb07a96c48e03907065ff77d8a ]
    
    When nci_rx_work() receives a zero-length payload packet, it should not
    discard the packet and exit the loop. Instead, it should continue
    processing subsequent packets.
    
    Fixes: d24b03535e5e ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
    Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/20240521153444.535399-1-ryasuoka@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: nci: Fix kcov check in nci_rx_work() [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Sun May 5 19:36:49 2024 +0900

    nfc: nci: Fix kcov check in nci_rx_work()
    
    [ Upstream commit 19e35f24750ddf860c51e51c68cf07ea181b4881 ]
    
    Commit 7e8cdc97148c ("nfc: Add KCOV annotations") added
    kcov_remote_start_common()/kcov_remote_stop() pair into nci_rx_work(),
    with an assumption that kcov_remote_stop() is called upon continue of
    the for loop. But commit d24b03535e5e ("nfc: nci: Fix uninit-value in
    nci_dev_up and nci_ntf_packet") forgot to call kcov_remote_stop() before
    break of the for loop.
    
    Reported-by: syzbot <syzbot+0438378d6f157baae1a2@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=0438378d6f157baae1a2
    Fixes: d24b03535e5e ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
    Suggested-by: Andrey Konovalov <andreyknvl@gmail.com>
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Link: https://lore.kernel.org/r/6d10f829-5a0c-405a-b39a-d7266f3a1a0b@I-love.SAKURA.ne.jp
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 6671e352497c ("nfc: nci: Fix handling of zero-length payload packets in nci_rx_work()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nfc: nci: Fix uninit-value in nci_rx_work [+ + +]
Author: Ryosuke Yasuoka <ryasuoka@redhat.com>
Date:   Sun May 19 18:43:03 2024 +0900

    nfc: nci: Fix uninit-value in nci_rx_work
    
    [ Upstream commit e4a87abf588536d1cdfb128595e6e680af5cf3ed ]
    
    syzbot reported the following uninit-value access issue [1]
    
    nci_rx_work() parses received packet from ndev->rx_q. It should be
    validated header size, payload size and total packet size before
    processing the packet. If an invalid packet is detected, it should be
    silently discarded.
    
    Fixes: d24b03535e5e ("nfc: nci: Fix uninit-value in nci_dev_up and nci_ntf_packet")
    Reported-and-tested-by: syzbot+d7b4dc6cd50410152534@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=d7b4dc6cd50410152534 [1]
    Signed-off-by: Ryosuke Yasuoka <ryasuoka@redhat.com>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfs: fix undefined behavior in nfs_block_bits() [+ + +]
Author: Sergey Shtylyov <s.shtylyov@omp.ru>
Date:   Fri May 10 23:24:04 2024 +0300

    nfs: fix undefined behavior in nfs_block_bits()
    
    commit 3c0a2e0b0ae661457c8505fecc7be5501aa7a715 upstream.
    
    Shifting *signed int* typed constant 1 left by 31 bits causes undefined
    behavior. Specify the correct *unsigned long* type by using 1UL instead.
    
    Found by Linux Verification Center (linuxtesting.org) with the Svace static
    analysis tool.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Sergey Shtylyov <s.shtylyov@omp.ru>
    Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfsd: drop st_mutex before calling move_to_close_lru() [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Mon Apr 8 12:09:18 2024 +1000

    nfsd: drop st_mutex before calling move_to_close_lru()
    
    [ Upstream commit 56c35f43eef013579c76c007ba1f386d8c2cac14 ]
    
    move_to_close_lru() is currently called with ->st_mutex held.
    This can lead to a deadlock as move_to_close_lru() waits for sc_count to
    drop to 2, and some threads holding a reference might be waiting for the
    mutex.  These references will never be dropped so sc_count will never
    reach 2.
    
    There can be no harm in dropping ->st_mutex before
    move_to_close_lru() because the only place that takes the mutex is
    nfsd4_lock_ol_stateid(), and it quickly aborts if sc_type is
    NFS4_CLOSED_STID, which it will be before move_to_close_lru() is called.
    
    See also
     https://lore.kernel.org/lkml/4dd1fe21e11344e5969bb112e954affb@jd.com/T/
    where this problem was raised but not successfully resolved.
    
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nilfs2: fix out-of-range warning [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Thu Mar 28 15:30:44 2024 +0100

    nilfs2: fix out-of-range warning
    
    [ Upstream commit c473bcdd80d4ab2ae79a7a509a6712818366e32a ]
    
    clang-14 points out that v_size is always smaller than a 64KB
    page size if that is configured by the CPU architecture:
    
    fs/nilfs2/ioctl.c:63:19: error: result of comparison of constant 65536 with expression of type '__u16' (aka 'unsigned short') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
            if (argv->v_size > PAGE_SIZE)
                ~~~~~~~~~~~~ ^ ~~~~~~~~~
    
    This is ok, so just shut up that warning with a cast.
    
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20240328143051.1069575-7-arnd@kernel.org
    Fixes: 3358b4aaa84f ("nilfs2: fix problems of memory allocation in ioctl")
    Acked-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reviewed-by: Justin Stitt <justinstitt@google.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nilfs2: fix potential hang in nilfs_detach_log_writer() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Mon May 20 22:26:21 2024 +0900

    nilfs2: fix potential hang in nilfs_detach_log_writer()
    
    commit eb85dace897c5986bc2f36b3c783c6abb8a4292e upstream.
    
    Syzbot has reported a potential hang in nilfs_detach_log_writer() called
    during nilfs2 unmount.
    
    Analysis revealed that this is because nilfs_segctor_sync(), which
    synchronizes with the log writer thread, can be called after
    nilfs_segctor_destroy() terminates that thread, as shown in the call trace
    below:
    
    nilfs_detach_log_writer
      nilfs_segctor_destroy
        nilfs_segctor_kill_thread  --> Shut down log writer thread
        flush_work
          nilfs_iput_work_func
            nilfs_dispose_list
              iput
                nilfs_evict_inode
                  nilfs_transaction_commit
                    nilfs_construct_segment (if inode needs sync)
                      nilfs_segctor_sync  --> Attempt to synchronize with
                                              log writer thread
                               *** DEADLOCK ***
    
    Fix this issue by changing nilfs_segctor_sync() so that the log writer
    thread returns normally without synchronizing after it terminates, and by
    forcing tasks that are already waiting to complete once after the thread
    terminates.
    
    The skipped inode metadata flushout will then be processed together in the
    subsequent cleanup work in nilfs_segctor_destroy().
    
    Link: https://lkml.kernel.org/r/20240520132621.4054-4-konishi.ryusuke@gmail.com
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+e3973c409251e136fdd0@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=e3973c409251e136fdd0
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: <stable@vger.kernel.org>
    Cc: "Bai, Shuangpeng" <sjb7183@psu.edu>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nilfs2: fix unexpected freezing of nilfs_segctor_sync() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Mon May 20 22:26:20 2024 +0900

    nilfs2: fix unexpected freezing of nilfs_segctor_sync()
    
    commit 936184eadd82906992ff1f5ab3aada70cce44cee upstream.
    
    A potential and reproducible race issue has been identified where
    nilfs_segctor_sync() would block even after the log writer thread writes a
    checkpoint, unless there is an interrupt or other trigger to resume log
    writing.
    
    This turned out to be because, depending on the execution timing of the
    log writer thread running in parallel, the log writer thread may skip
    responding to nilfs_segctor_sync(), which causes a call to schedule()
    waiting for completion within nilfs_segctor_sync() to lose the opportunity
    to wake up.
    
    The reason why waking up the task waiting in nilfs_segctor_sync() may be
    skipped is that updating the request generation issued using a shared
    sequence counter and adding an wait queue entry to the request wait queue
    to the log writer, are not done atomically.  There is a possibility that
    log writing and request completion notification by nilfs_segctor_wakeup()
    may occur between the two operations, and in that case, the wait queue
    entry is not yet visible to nilfs_segctor_wakeup() and the wake-up of
    nilfs_segctor_sync() will be carried over until the next request occurs.
    
    Fix this issue by performing these two operations simultaneously within
    the lock section of sc_state_lock.  Also, following the memory barrier
    guidelines for event waiting loops, move the call to set_current_state()
    in the same location into the event waiting loop to ensure that a memory
    barrier is inserted just before the event condition determination.
    
    Link: https://lkml.kernel.org/r/20240520132621.4054-3-konishi.ryusuke@gmail.com
    Fixes: 9ff05123e3bf ("nilfs2: segment constructor")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: <stable@vger.kernel.org>
    Cc: "Bai, Shuangpeng" <sjb7183@psu.edu>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nilfs2: fix use-after-free of timer for log writer thread [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Mon May 20 22:26:19 2024 +0900

    nilfs2: fix use-after-free of timer for log writer thread
    
    commit f5d4e04634c9cf68bdf23de08ada0bb92e8befe7 upstream.
    
    Patch series "nilfs2: fix log writer related issues".
    
    This bug fix series covers three nilfs2 log writer-related issues,
    including a timer use-after-free issue and potential deadlock issue on
    unmount, and a potential freeze issue in event synchronization found
    during their analysis.  Details are described in each commit log.
    
    
    This patch (of 3):
    
    A use-after-free issue has been reported regarding the timer sc_timer on
    the nilfs_sc_info structure.
    
    The problem is that even though it is used to wake up a sleeping log
    writer thread, sc_timer is not shut down until the nilfs_sc_info structure
    is about to be freed, and is used regardless of the thread's lifetime.
    
    Fix this issue by limiting the use of sc_timer only while the log writer
    thread is alive.
    
    Link: https://lkml.kernel.org/r/20240520132621.4054-1-konishi.ryusuke@gmail.com
    Link: https://lkml.kernel.org/r/20240520132621.4054-2-konishi.ryusuke@gmail.com
    Fixes: fdce895ea5dd ("nilfs2: change sc_timer from a pointer to an embedded one in struct nilfs_sc_info")
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: "Bai, Shuangpeng" <sjb7183@psu.edu>
    Closes: https://groups.google.com/g/syzkaller/c/MK_LYqtt8ko/m/8rgdWeseAwAJ
    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>

 
null_blk: Fix missing mutex_destroy() at module removal [+ + +]
Author: Zhu Yanjun <yanjun.zhu@linux.dev>
Date:   Thu Apr 25 19:16:35 2024 +0200

    null_blk: Fix missing mutex_destroy() at module removal
    
    [ Upstream commit 07d1b99825f40f9c0d93e6b99d79a08d0717bac1 ]
    
    When a mutex lock is not used any more, the function mutex_destroy
    should be called to mark the mutex lock uninitialized.
    
    Fixes: f2298c0403b0 ("null_blk: multi queue aware block test driver")
    Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Link: https://lore.kernel.org/r/20240425171635.4227-1-yanjun.zhu@linux.dev
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

null_blk: Fix the WARNING: modpost: missing MODULE_DESCRIPTION() [+ + +]
Author: Zhu Yanjun <yanjun.zhu@linux.dev>
Date:   Mon May 6 09:55:38 2024 +0200

    null_blk: Fix the WARNING: modpost: missing MODULE_DESCRIPTION()
    
    [ Upstream commit 9e6727f824edcdb8fdd3e6e8a0862eb49546e1cd ]
    
    No functional changes intended.
    
    Fixes: f2298c0403b0 ("null_blk: multi queue aware block test driver")
    Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Link: https://lore.kernel.org/r/20240506075538.6064-1-yanjun.zhu@linux.dev
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmet: fix ns enable/disable possible hang [+ + +]
Author: Sagi Grimberg <sagi@grimberg.me>
Date:   Tue May 21 23:20:28 2024 +0300

    nvmet: fix ns enable/disable possible hang
    
    [ Upstream commit f97914e35fd98b2b18fb8a092e0a0799f73afdfe ]
    
    When disabling an nvmet namespace, there is a period where the
    subsys->lock is released, as the ns disable waits for backend IO to
    complete, and the ns percpu ref to be properly killed. The original
    intent was to avoid taking the subsystem lock for a prolong period as
    other processes may need to acquire it (for example new incoming
    connections).
    
    However, it opens up a window where another process may come in and
    enable the ns, (re)intiailizing the ns percpu_ref, causing the disable
    sequence to hang.
    
    Solve this by taking the global nvmet_config_sem over the entire configfs
    enable/disable sequence.
    
    Fixes: a07b4970f464 ("nvmet: add a generic NVMe target")
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
openvswitch: Set the skbuff pkt_type for proper pmtud support. [+ + +]
Author: Aaron Conole <aconole@redhat.com>
Date:   Thu May 16 16:09:41 2024 -0400

    openvswitch: Set the skbuff pkt_type for proper pmtud support.
    
    [ Upstream commit 30a92c9e3d6b073932762bef2ac66f4ee784c657 ]
    
    Open vSwitch is originally intended to switch at layer 2, only dealing with
    Ethernet frames.  With the introduction of l3 tunnels support, it crossed
    into the realm of needing to care a bit about some routing details when
    making forwarding decisions.  If an oversized packet would need to be
    fragmented during this forwarding decision, there is a chance for pmtu
    to get involved and generate a routing exception.  This is gated by the
    skbuff->pkt_type field.
    
    When a flow is already loaded into the openvswitch module this field is
    set up and transitioned properly as a packet moves from one port to
    another.  In the case that a packet execute is invoked after a flow is
    newly installed this field is not properly initialized.  This causes the
    pmtud mechanism to omit sending the required exception messages across
    the tunnel boundary and a second attempt needs to be made to make sure
    that the routing exception is properly setup.  To fix this, we set the
    outgoing packet's pkt_type to PACKET_OUTGOING, since it can only get
    to the openvswitch module via a port device or packet command.
    
    Even for bridge ports as users, the pkt_type needs to be reset when
    doing the transmit as the packet is truly outgoing and routing needs
    to get involved post packet transformations, in the case of
    VXLAN/GENEVE/udp-tunnel packets.  In general, the pkt_type on output
    gets ignored, since we go straight to the driver, but in the case of
    tunnel ports they go through IP routing layer.
    
    This issue is periodically encountered in complex setups, such as large
    openshift deployments, where multiple sets of tunnel traversal occurs.
    A way to recreate this is with the ovn-heater project that can setup
    a networking environment which mimics such large deployments.  We need
    larger environments for this because we need to ensure that flow
    misses occur.  In these environment, without this patch, we can see:
    
      ./ovn_cluster.sh start
      podman exec ovn-chassis-1 ip r a 170.168.0.5/32 dev eth1 mtu 1200
      podman exec ovn-chassis-1 ip netns exec sw01p1 ip r flush cache
      podman exec ovn-chassis-1 ip netns exec sw01p1 \
             ping 21.0.0.3 -M do -s 1300 -c2
      PING 21.0.0.3 (21.0.0.3) 1300(1328) bytes of data.
      From 21.0.0.3 icmp_seq=2 Frag needed and DF set (mtu = 1142)
    
      --- 21.0.0.3 ping statistics ---
      ...
    
    Using tcpdump, we can also see the expected ICMP FRAG_NEEDED message is not
    sent into the server.
    
    With this patch, setting the pkt_type, we see the following:
    
      podman exec ovn-chassis-1 ip netns exec sw01p1 \
             ping 21.0.0.3 -M do -s 1300 -c2
      PING 21.0.0.3 (21.0.0.3) 1300(1328) bytes of data.
      From 21.0.0.3 icmp_seq=1 Frag needed and DF set (mtu = 1222)
      ping: local error: message too long, mtu=1222
    
      --- 21.0.0.3 ping statistics ---
      ...
    
    In this case, the first ping request receives the FRAG_NEEDED message and
    a local routing exception is created.
    
    Tested-by: Jaime Caamano <jcaamano@redhat.com>
    Reported-at: https://issues.redhat.com/browse/FDP-164
    Fixes: 58264848a5a7 ("openvswitch: Add vxlan tunneling support.")
    Signed-off-by: Aaron Conole <aconole@redhat.com>
    Acked-by: Eelco Chaudron <echaudro@redhat.com>
    Link: https://lore.kernel.org/r/20240516200941.16152-1-aconole@redhat.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
params: lift param_set_uint_minmax to common code [+ + +]
Author: Sagi Grimberg <sagi@grimberg.me>
Date:   Wed Jun 16 14:19:33 2021 -0700

    params: lift param_set_uint_minmax to common code
    
    [ Upstream commit 2a14c9ae15a38148484a128b84bff7e9ffd90d68 ]
    
    It is a useful helper hence move it to common code so others can enjoy
    it.
    
    Suggested-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Stable-dep-of: 3ebc46ca8675 ("tcp: Fix shift-out-of-bounds in dctcp_update_alpha().")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
parisc: add missing export of __cmpxchg_u8() [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Mon Apr 1 22:35:54 2024 -0400

    parisc: add missing export of __cmpxchg_u8()
    
    [ Upstream commit c57e5dccb06decf3cb6c272ab138c033727149b5 ]
    
    __cmpxchg_u8() had been added (initially) for the sake of
    drivers/phy/ti/phy-tusb1210.c; the thing is, that drivers is
    modular, so we need an export
    
    Fixes: b344d6a83d01 "parisc: add support for cmpxchg on u8 pointers"
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
power: supply: cros_usbpd: provide ID table for avoiding fallback match [+ + +]
Author: Tzung-Bi Shih <tzungbi@kernel.org>
Date:   Mon Apr 1 11:00:49 2024 +0800

    power: supply: cros_usbpd: provide ID table for avoiding fallback match
    
    [ Upstream commit 0f8678c34cbfdc63569a9b0ede1fe235ec6ec693 ]
    
    Instead of using fallback driver name match, provide ID table[1] for the
    primary match.
    
    [1]: https://elixir.bootlin.com/linux/v6.8/source/drivers/base/platform.c#L1353
    
    Reviewed-by: Benson Leung <bleung@chromium.org>
    Reviewed-by: Prashant Malani <pmalani@chromium.org>
    Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
    Link: https://lore.kernel.org/r/20240401030052.2887845-4-tzungbi@kernel.org
    Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/fsl-soc: hide unused const variable [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Apr 3 10:06:19 2024 +0200

    powerpc/fsl-soc: hide unused const variable
    
    [ Upstream commit 01acaf3aa75e1641442cc23d8fe0a7bb4226efb1 ]
    
    vmpic_msi_feature is only used conditionally, which triggers a rare
    -Werror=unused-const-variable= warning with gcc:
    
    arch/powerpc/sysdev/fsl_msi.c:567:37: error: 'vmpic_msi_feature' defined but not used [-Werror=unused-const-variable=]
      567 | static const struct fsl_msi_feature vmpic_msi_feature =
    
    Hide this one in the same #ifdef as the reference so we can turn on
    the warning by default.
    
    Fixes: 305bcf26128e ("powerpc/fsl-soc: use CONFIG_EPAPR_PARAVIRT for hcalls")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240403080702.3509288-2-arnd@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/pseries: Add failure related checks for h_get_mpp and h_get_ppp [+ + +]
Author: Shrikanth Hegde <sshegde@linux.ibm.com>
Date:   Fri Apr 12 14:50:47 2024 +0530

    powerpc/pseries: Add failure related checks for h_get_mpp and h_get_ppp
    
    [ Upstream commit 6d4341638516bf97b9a34947e0bd95035a8230a5 ]
    
    Couple of Minor fixes:
    
    - hcall return values are long. Fix that for h_get_mpp, h_get_ppp and
    parse_ppp_data
    
    - If hcall fails, values set should be at-least zero. It shouldn't be
    uninitialized values. Fix that for h_get_mpp and h_get_ppp
    
    Signed-off-by: Shrikanth Hegde <sshegde@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240412092047.455483-3-sshegde@linux.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ppdev: Add an error check in register_device [+ + +]
Author: Huai-Yuan Liu <qq810974084@gmail.com>
Date:   Fri Apr 12 16:38:40 2024 +0800

    ppdev: Add an error check in register_device
    
    [ Upstream commit fbf740aeb86a4fe82ad158d26d711f2f3be79b3e ]
    
    In register_device, the return value of ida_simple_get is unchecked,
    in witch ida_simple_get will use an invalid index value.
    
    To address this issue, index should be checked after ida_simple_get. When
    the index value is abnormal, a warning message should be printed, the port
    should be dropped, and the value should be recorded.
    
    Fixes: 9a69645dde11 ("ppdev: fix registering same device name")
    Signed-off-by: Huai-Yuan Liu <qq810974084@gmail.com>
    Link: https://lore.kernel.org/r/20240412083840.234085-1-qq810974084@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ppdev: Remove usage of the deprecated ida_simple_xx() API [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Tue Dec 19 06:01:47 2023 +0100

    ppdev: Remove usage of the deprecated ida_simple_xx() API
    
    [ Upstream commit d8407f71ebeaeb6f50bd89791837873e44609708 ]
    
    ida_alloc() and ida_free() should be preferred to the deprecated
    ida_simple_get() and ida_simple_remove().
    
    This is less verbose.
    
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Link: https://lore.kernel.org/r/ba9da12fdd5cdb2c28180b7160af5042447d803f.1702962092.git.christophe.jaillet@wanadoo.fr
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: fbf740aeb86a ("ppdev: Add an error check in register_device")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
qed: avoid truncating work queue length [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Mar 26 23:38:02 2024 +0100

    qed: avoid truncating work queue length
    
    [ Upstream commit 954fd908f177604d4cce77e2a88cc50b29bad5ff ]
    
    clang complains that the temporary string for the name passed into
    alloc_workqueue() is too short for its contents:
    
    drivers/net/ethernet/qlogic/qed/qed_main.c:1218:3: error: 'snprintf' will always be truncated; specified size is 16, but format string expands to at least 18 [-Werror,-Wformat-truncation]
    
    There is no need for a temporary buffer, and the actual name of a workqueue
    is 32 bytes (WQ_NAME_LEN), so just use the interface as intended to avoid
    the truncation.
    
    Fixes: 59ccf86fe69a ("qed: Add driver infrastucture for handling mfw requests.")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20240326223825.4084412-4-arnd@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/hns: Use complete parentheses in macros [+ + +]
Author: Chengchang Tang <tangchengchang@huawei.com>
Date:   Fri Apr 12 17:16:15 2024 +0800

    RDMA/hns: Use complete parentheses in macros
    
    [ Upstream commit 4125269bb9b22e1d8cdf4412c81be8074dbc61ca ]
    
    Use complete parentheses to ensure that macro expansion does
    not produce unexpected results.
    
    Fixes: a25d13cbe816 ("RDMA/hns: Add the interfaces to support multi hop addressing for the contexts in hip08")
    Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
    Signed-off-by: Junxian Huang <huangjunxian6@hisilicon.com>
    Link: https://lore.kernel.org/r/20240412091616.370789-10-huangjunxian6@hisilicon.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/IPoIB: Fix format truncation compilation errors [+ + +]
Author: Leon Romanovsky <leon@kernel.org>
Date:   Thu May 9 10:39:33 2024 +0300

    RDMA/IPoIB: Fix format truncation compilation errors
    
    [ Upstream commit 49ca2b2ef3d003402584c68ae7b3055ba72e750a ]
    
    Truncate the device name to store IPoIB VLAN name.
    
    [leonro@5b4e8fba4ddd kernel]$ make -s -j 20 allmodconfig
    [leonro@5b4e8fba4ddd kernel]$ make -s -j 20 W=1 drivers/infiniband/ulp/ipoib/
    drivers/infiniband/ulp/ipoib/ipoib_vlan.c: In function ‘ipoib_vlan_add’:
    drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:52: error: ‘%04x’
    directive output may be truncated writing 4 bytes into a region of size
    between 0 and 15 [-Werror=format-truncation=]
      187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
          |                                                    ^~~~
    drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:48: note: directive
    argument in the range [0, 65535]
      187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
          |                                                ^~~~~~~~~
    drivers/infiniband/ulp/ipoib/ipoib_vlan.c:187:9: note: ‘snprintf’ output
    between 6 and 21 bytes into a destination of size 16
      187 |         snprintf(intf_name, sizeof(intf_name), "%s.%04x",
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      188 |                  ppriv->dev->name, pkey);
          |                  ~~~~~~~~~~~~~~~~~~~~~~~
    cc1: all warnings being treated as errors
    make[6]: *** [scripts/Makefile.build:244: drivers/infiniband/ulp/ipoib/ipoib_vlan.o] Error 1
    make[6]: *** Waiting for unfinished jobs....
    
    Fixes: 9baa0b036410 ("IB/ipoib: Add rtnl_link_ops support")
    Link: https://lore.kernel.org/r/e9d3e1fef69df4c9beaf402cc3ac342bad680791.1715240029.git.leon@kernel.org
    Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "sh: Handle calling csum_partial with misaligned data" [+ + +]
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Sun Mar 24 16:18:04 2024 -0700

    Revert "sh: Handle calling csum_partial with misaligned data"
    
    [ Upstream commit b5319c96292ff877f6b58d349acf0a9dc8d3b454 ]
    
    This reverts commit cadc4e1a2b4d20d0cc0e81f2c6ba0588775e54e5.
    
    Commit cadc4e1a2b4d ("sh: Handle calling csum_partial with misaligned
    data") causes bad checksum calculations on unaligned data. Reverting
    it fixes the problem.
    
        # Subtest: checksum
        # module: checksum_kunit
        1..5
        # test_csum_fixed_random_inputs: ASSERTION FAILED at lib/checksum_kunit.c:500
        Expected ( u64)result == ( u64)expec, but
            ( u64)result == 53378 (0xd082)
            ( u64)expec == 33488 (0x82d0)
        # test_csum_fixed_random_inputs: pass:0 fail:1 skip:0 total:1
        not ok 1 test_csum_fixed_random_inputs
        # test_csum_all_carry_inputs: ASSERTION FAILED at lib/checksum_kunit.c:525
        Expected ( u64)result == ( u64)expec, but
            ( u64)result == 65281 (0xff01)
            ( u64)expec == 65280 (0xff00)
        # test_csum_all_carry_inputs: pass:0 fail:1 skip:0 total:1
        not ok 2 test_csum_all_carry_inputs
        # test_csum_no_carry_inputs: ASSERTION FAILED at lib/checksum_kunit.c:573
        Expected ( u64)result == ( u64)expec, but
            ( u64)result == 65535 (0xffff)
            ( u64)expec == 65534 (0xfffe)
        # test_csum_no_carry_inputs: pass:0 fail:1 skip:0 total:1
        not ok 3 test_csum_no_carry_inputs
        # test_ip_fast_csum: pass:1 fail:0 skip:0 total:1
        ok 4 test_ip_fast_csum
        # test_csum_ipv6_magic: pass:1 fail:0 skip:0 total:1
        ok 5 test_csum_ipv6_magic
     # checksum: pass:2 fail:3 skip:0 total:5
     # Totals: pass:2 fail:3 skip:0 total:5
    not ok 22 checksum
    
    Fixes: cadc4e1a2b4d ("sh: Handle calling csum_partial with misaligned data")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Link: https://lore.kernel.org/r/20240324231804.841099-1-linux@roeck-us.net
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ring-buffer: Fix a race between readers and resize checks [+ + +]
Author: Petr Pavlu <petr.pavlu@suse.com>
Date:   Fri May 17 15:40:08 2024 +0200

    ring-buffer: Fix a race between readers and resize checks
    
    commit c2274b908db05529980ec056359fae916939fdaa upstream.
    
    The reader code in rb_get_reader_page() swaps a new reader page into the
    ring buffer by doing cmpxchg on old->list.prev->next to point it to the
    new page. Following that, if the operation is successful,
    old->list.next->prev gets updated too. This means the underlying
    doubly-linked list is temporarily inconsistent, page->prev->next or
    page->next->prev might not be equal back to page for some page in the
    ring buffer.
    
    The resize operation in ring_buffer_resize() can be invoked in parallel.
    It calls rb_check_pages() which can detect the described inconsistency
    and stop further tracing:
    
    [  190.271762] ------------[ cut here ]------------
    [  190.271771] WARNING: CPU: 1 PID: 6186 at kernel/trace/ring_buffer.c:1467 rb_check_pages.isra.0+0x6a/0xa0
    [  190.271789] Modules linked in: [...]
    [  190.271991] Unloaded tainted modules: intel_uncore_frequency(E):1 skx_edac(E):1
    [  190.272002] CPU: 1 PID: 6186 Comm: cmd.sh Kdump: loaded Tainted: G            E      6.9.0-rc6-default #5 158d3e1e6d0b091c34c3b96bfd99a1c58306d79f
    [  190.272011] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.16.0-0-gd239552c-rebuilt.opensuse.org 04/01/2014
    [  190.272015] RIP: 0010:rb_check_pages.isra.0+0x6a/0xa0
    [  190.272023] Code: [...]
    [  190.272028] RSP: 0018:ffff9c37463abb70 EFLAGS: 00010206
    [  190.272034] RAX: ffff8eba04b6cb80 RBX: 0000000000000007 RCX: ffff8eba01f13d80
    [  190.272038] RDX: ffff8eba01f130c0 RSI: ffff8eba04b6cd00 RDI: ffff8eba0004c700
    [  190.272042] RBP: ffff8eba0004c700 R08: 0000000000010002 R09: 0000000000000000
    [  190.272045] R10: 00000000ffff7f52 R11: ffff8eba7f600000 R12: ffff8eba0004c720
    [  190.272049] R13: ffff8eba00223a00 R14: 0000000000000008 R15: ffff8eba067a8000
    [  190.272053] FS:  00007f1bd64752c0(0000) GS:ffff8eba7f680000(0000) knlGS:0000000000000000
    [  190.272057] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  190.272061] CR2: 00007f1bd6662590 CR3: 000000010291e001 CR4: 0000000000370ef0
    [  190.272070] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  190.272073] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    [  190.272077] Call Trace:
    [  190.272098]  <TASK>
    [  190.272189]  ring_buffer_resize+0x2ab/0x460
    [  190.272199]  __tracing_resize_ring_buffer.part.0+0x23/0xa0
    [  190.272206]  tracing_resize_ring_buffer+0x65/0x90
    [  190.272216]  tracing_entries_write+0x74/0xc0
    [  190.272225]  vfs_write+0xf5/0x420
    [  190.272248]  ksys_write+0x67/0xe0
    [  190.272256]  do_syscall_64+0x82/0x170
    [  190.272363]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [  190.272373] RIP: 0033:0x7f1bd657d263
    [  190.272381] Code: [...]
    [  190.272385] RSP: 002b:00007ffe72b643f8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    [  190.272391] RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007f1bd657d263
    [  190.272395] RDX: 0000000000000002 RSI: 0000555a6eb538e0 RDI: 0000000000000001
    [  190.272398] RBP: 0000555a6eb538e0 R08: 000000000000000a R09: 0000000000000000
    [  190.272401] R10: 0000555a6eb55190 R11: 0000000000000246 R12: 00007f1bd6662500
    [  190.272404] R13: 0000000000000002 R14: 00007f1bd6667c00 R15: 0000000000000002
    [  190.272412]  </TASK>
    [  190.272414] ---[ end trace 0000000000000000 ]---
    
    Note that ring_buffer_resize() calls rb_check_pages() only if the parent
    trace_buffer has recording disabled. Recent commit d78ab792705c
    ("tracing: Stop current tracer when resizing buffer") causes that it is
    now always the case which makes it more likely to experience this issue.
    
    The window to hit this race is nonetheless very small. To help
    reproducing it, one can add a delay loop in rb_get_reader_page():
    
     ret = rb_head_page_replace(reader, cpu_buffer->reader_page);
     if (!ret)
            goto spin;
     for (unsigned i = 0; i < 1U << 26; i++)  /* inserted delay loop */
            __asm__ __volatile__ ("" : : : "memory");
     rb_list_head(reader->list.next)->prev = &cpu_buffer->reader_page->list;
    
    .. and then run the following commands on the target system:
    
     echo 1 > /sys/kernel/tracing/events/sched/sched_switch/enable
     while true; do
            echo 16 > /sys/kernel/tracing/buffer_size_kb; sleep 0.1
            echo 8 > /sys/kernel/tracing/buffer_size_kb; sleep 0.1
     done &
     while true; do
            for i in /sys/kernel/tracing/per_cpu/*; do
                    timeout 0.1 cat $i/trace_pipe; sleep 0.2
            done
     done
    
    To fix the problem, make sure ring_buffer_resize() doesn't invoke
    rb_check_pages() concurrently with a reader operating on the same
    ring_buffer_per_cpu by taking its cpu_buffer->reader_lock.
    
    Link: https://lore.kernel.org/linux-trace-kernel/20240517134008.24529-3-petr.pavlu@suse.com
    
    Cc: stable@vger.kernel.org
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Fixes: 659f451ff213 ("ring-buffer: Add integrity check at end of iter read")
    Signed-off-by: Petr Pavlu <petr.pavlu@suse.com>
    [ Fixed whitespace ]
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/ap: Fix crash in AP internal function modify_bitmap() [+ + +]
Author: Harald Freudenberger <freude@linux.ibm.com>
Date:   Mon May 13 14:49:13 2024 +0200

    s390/ap: Fix crash in AP internal function modify_bitmap()
    
    commit d4f9d5a99a3fd1b1c691b7a1a6f8f3f25f4116c9 upstream.
    
    A system crash like this
    
      Failing address: 200000cb7df6f000 TEID: 200000cb7df6f403
      Fault in home space mode while using kernel ASCE.
      AS:00000002d71bc007 R3:00000003fe5b8007 S:000000011a446000 P:000000015660c13d
      Oops: 0038 ilc:3 [#1] PREEMPT SMP
      Modules linked in: mlx5_ib ...
      CPU: 8 PID: 7556 Comm: bash Not tainted 6.9.0-rc7 #8
      Hardware name: IBM 3931 A01 704 (LPAR)
      Krnl PSW : 0704e00180000000 0000014b75e7b606 (ap_parse_bitmap_str+0x10e/0x1f8)
      R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:2 PM:0 RI:0 EA:3
      Krnl GPRS: 0000000000000001 ffffffffffffffc0 0000000000000001 00000048f96b75d3
      000000cb00000100 ffffffffffffffff ffffffffffffffff 000000cb7df6fce0
      000000cb7df6fce0 00000000ffffffff 000000000000002b 00000048ffffffff
      000003ff9b2dbc80 200000cb7df6fcd8 0000014bffffffc0 000000cb7df6fbc8
      Krnl Code: 0000014b75e7b5fc: a7840047            brc     8,0000014b75e7b68a
      0000014b75e7b600: 18b2                lr      %r11,%r2
      #0000014b75e7b602: a7f4000a            brc     15,0000014b75e7b616
      >0000014b75e7b606: eb22d00000e6        laog    %r2,%r2,0(%r13)
      0000014b75e7b60c: a7680001            lhi     %r6,1
      0000014b75e7b610: 187b                lr      %r7,%r11
      0000014b75e7b612: 84960021            brxh    %r9,%r6,0000014b75e7b654
      0000014b75e7b616: 18e9                lr      %r14,%r9
      Call Trace:
      [<0000014b75e7b606>] ap_parse_bitmap_str+0x10e/0x1f8
      ([<0000014b75e7b5dc>] ap_parse_bitmap_str+0xe4/0x1f8)
      [<0000014b75e7b758>] apmask_store+0x68/0x140
      [<0000014b75679196>] kernfs_fop_write_iter+0x14e/0x1e8
      [<0000014b75598524>] vfs_write+0x1b4/0x448
      [<0000014b7559894c>] ksys_write+0x74/0x100
      [<0000014b7618a440>] __do_syscall+0x268/0x328
      [<0000014b761a3558>] system_call+0x70/0x98
      INFO: lockdep is turned off.
      Last Breaking-Event-Address:
      [<0000014b75e7b636>] ap_parse_bitmap_str+0x13e/0x1f8
      Kernel panic - not syncing: Fatal exception: panic_on_oops
    
    occured when /sys/bus/ap/a[pq]mask was updated with a relative mask value
    (like +0x10-0x12,+60,-90) with one of the numeric values exceeding INT_MAX.
    
    The fix is simple: use unsigned long values for the internal variables. The
    correct checks are already in place in the function but a simple int for
    the internal variables was used with the possibility to overflow.
    
    Reported-by: Marc Hartmayer <mhartmay@linux.ibm.com>
    Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
    Tested-by: Marc Hartmayer <mhartmay@linux.ibm.com>
    Reviewed-by: Holger Dengler <dengler@linux.ibm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/cio: fix tracepoint subchannel type field [+ + +]
Author: Peter Oberparleiter <oberpar@linux.ibm.com>
Date:   Tue Mar 26 17:04:56 2024 +0100

    s390/cio: fix tracepoint subchannel type field
    
    [ Upstream commit 8692a24d0fae19f674d51726d179ad04ba95d958 ]
    
    The subchannel-type field "st" of s390_cio_stsch and s390_cio_msch
    tracepoints is incorrectly filled with the subchannel-enabled SCHIB
    value "ena". Fix this by assigning the correct value.
    
    Fixes: d1de8633d96a ("s390 cio: Rewrite trace point class s390_class_schib")
    Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/fair: Allow disabling sched_balance_newidle with sched_relax_domain_level [+ + +]
Author: Vitalii Bursov <vitaly@bursov.com>
Date:   Tue Apr 30 18:05:23 2024 +0300

    sched/fair: Allow disabling sched_balance_newidle with sched_relax_domain_level
    
    [ Upstream commit a1fd0b9d751f840df23ef0e75b691fc00cfd4743 ]
    
    Change relax_domain_level checks so that it would be possible
    to include or exclude all domains from newidle balancing.
    
    This matches the behavior described in the documentation:
    
      -1   no request. use system default or follow request of others.
       0   no search.
       1   search siblings (hyperthreads in a core).
    
    "2" enables levels 0 and 1, level_max excludes the last (level_max)
    level, and level_max+1 includes all levels.
    
    Fixes: 1d3504fcf560 ("sched, cpuset: customize sched domains, core")
    Signed-off-by: Vitalii Bursov <vitaly@bursov.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
    Reviewed-by: Vincent Guittot <vincent.guittot@linaro.org>
    Reviewed-by: Valentin Schneider <vschneid@redhat.com>
    Link: https://lore.kernel.org/r/bd6de28e80073c79466ec6401cdeae78f0d4423d.1714488502.git.vitaly@bursov.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/topology: Don't set SD_BALANCE_WAKE on cpuset domain relax [+ + +]
Author: Valentin Schneider <vschneid@redhat.com>
Date:   Mon Oct 14 17:44:08 2019 +0100

    sched/topology: Don't set SD_BALANCE_WAKE on cpuset domain relax
    
    [ Upstream commit 9ae7ab20b4835dbea0e5fc6a5c70171dc354a72e ]
    
    As pointed out in commit
    
      182a85f8a119 ("sched: Disable wakeup balancing")
    
    SD_BALANCE_WAKE is a tad too aggressive, and is usually left unset.
    
    However, it turns out cpuset domain relaxation will unconditionally set it
    on domains below the relaxation level. This made sense back when
    SD_BALANCE_WAKE was set unconditionally, but it no longer is the case.
    
    We can improve things slightly by noticing that set_domain_attribute() is
    always called after sd_init(), so rather than setting flags we can rely on
    whatever sd_init() is doing and only clear certain flags when above the
    relaxation level.
    
    While at it, slightly clean up the function and flip the relax level
    check to be more human readable.
    
    Signed-off-by: Valentin Schneider <valentin.schneider@arm.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: mingo@kernel.org
    Cc: vincent.guittot@linaro.org
    Cc: juri.lelli@redhat.com
    Cc: seto.hidetoshi@jp.fujitsu.com
    Cc: qperret@google.com
    Cc: Dietmar.Eggemann@arm.com
    Cc: morten.rasmussen@arm.com
    Link: https://lkml.kernel.org/r/20191014164408.32596-1-valentin.schneider@arm.com
    Stable-dep-of: a1fd0b9d751f ("sched/fair: Allow disabling sched_balance_newidle with sched_relax_domain_level")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: bfa: Ensure the copied buf is NUL terminated [+ + +]
Author: Bui Quang Minh <minhquangbui99@gmail.com>
Date:   Wed Apr 24 21:44:20 2024 +0700

    scsi: bfa: Ensure the copied buf is NUL terminated
    
    [ Upstream commit 13d0cecb4626fae67c00c84d3c7851f6b62f7df3 ]
    
    Currently, we allocate a nbytes-sized kernel buffer and copy nbytes from
    userspace to that buffer. Later, we use sscanf on this buffer but we don't
    ensure that the string is terminated inside the buffer, this can lead to
    OOB read when using sscanf. Fix this issue by using memdup_user_nul instead
    of memdup_user.
    
    Fixes: 9f30b674759b ("bfa: replace 2 kzalloc/copy_from_user by memdup_user")
    Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
    Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-3-f1f1b53a10f4@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: hpsa: Fix allocation size for Scsi_Host private data [+ + +]
Author: Yuri Karpov <YKarpov@ispras.ru>
Date:   Tue Mar 12 20:04:47 2024 +0300

    scsi: hpsa: Fix allocation size for Scsi_Host private data
    
    [ Upstream commit 504e2bed5d50610c1836046c0c195b0a6dba9c72 ]
    
    struct Scsi_Host private data contains pointer to struct ctlr_info.
    
    Restore allocation of only 8 bytes to store pointer in struct Scsi_Host
    private data area.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: bbbd25499100 ("scsi: hpsa: Fix allocation size for scsi_host_alloc()")
    Signed-off-by: Yuri Karpov <YKarpov@ispras.ru>
    Link: https://lore.kernel.org/r/20240312170447.743709-1-YKarpov@ispras.ru
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: libsas: Fix the failure of adding phy with zero-address to port [+ + +]
Author: Xingui Yang <yangxingui@huawei.com>
Date:   Tue Mar 12 14:11:03 2024 +0000

    scsi: libsas: Fix the failure of adding phy with zero-address to port
    
    [ Upstream commit 06036a0a5db34642c5dbe22021a767141f010b7a ]
    
    As of commit 7d1d86518118 ("[SCSI] libsas: fix false positive 'device
    attached' conditions"), reset the phy->entacted_sas_addr address to a
    zero-address when the link rate is less than 1.5G.
    
    Currently we find that when a new device is attached, and the link rate is
    less than 1.5G, but the device type is not NO_DEVICE, for example: the link
    rate is SAS_PHY_RESET_IN_PROGRESS and the device type is stp. After setting
    the phy->entacted_sas_addr address to the zero address, the port will
    continue to be created for the phy with the zero-address, and other phys
    with the zero-address will be tried to be added to the new port:
    
    [562240.051197] sas: ex 500e004aaaaaaa1f phy19:U:0 attached: 0000000000000000 (no device)
    // phy19 is deleted but still on the parent port's phy_list
    [562240.062536] sas: ex 500e004aaaaaaa1f phy0 new device attached
    [562240.062616] sas: ex 500e004aaaaaaa1f phy00:U:5 attached: 0000000000000000 (stp)
    [562240.062680] port-7:7:0: trying to add phy phy-7:7:19 fails: it's already part of another port
    
    Therefore, it should be the same as sas_get_phy_attached_dev(). Only when
    device_type is SAS_PHY_UNUSED, sas_address is set to the 0 address.
    
    Fixes: 7d1d86518118 ("[SCSI] libsas: fix false positive 'device attached' conditions")
    Signed-off-by: Xingui Yang <yangxingui@huawei.com>
    Link: https://lore.kernel.org/r/20240312141103.31358-5-yangxingui@huawei.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: qedf: Ensure the copied buf is NUL terminated [+ + +]
Author: Bui Quang Minh <minhquangbui99@gmail.com>
Date:   Wed Apr 24 21:44:21 2024 +0700

    scsi: qedf: Ensure the copied buf is NUL terminated
    
    [ Upstream commit d0184a375ee797eb657d74861ba0935b6e405c62 ]
    
    Currently, we allocate a count-sized kernel buffer and copy count from
    userspace to that buffer. Later, we use kstrtouint on this buffer but we
    don't ensure that the string is terminated inside the buffer, this can
    lead to OOB read when using kstrtouint. Fix this issue by using
    memdup_user_nul instead of memdup_user.
    
    Fixes: 61d8658b4a43 ("scsi: qedf: Add QLogic FastLinQ offload FCoE driver framework.")
    Signed-off-by: Bui Quang Minh <minhquangbui99@gmail.com>
    Link: https://lore.kernel.org/r/20240424-fix-oob-read-v2-4-f1f1b53a10f4@gmail.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: add a low-level __ufshcd_issue_tm_cmd helper [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Sun Oct 7 17:30:33 2018 +0300

    scsi: ufs: add a low-level __ufshcd_issue_tm_cmd helper
    
    [ Upstream commit c6049cd98212dfe39f67fb411d18d53df0ad9436 ]
    
    Add a helper that takes a utp_task_req_desc and issues it, which will
    be useful for UFS bsg support.  Rewrite ufshcd_issue_tm_cmd0x to use
    this new helper.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Avri Altman <avri.altman@wdc.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: e4a628877119 ("scsi: ufs: core: Perform read back after disabling interrupts")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: cleanup struct utp_task_req_desc [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Sun Oct 7 17:30:32 2018 +0300

    scsi: ufs: cleanup struct utp_task_req_desc
    
    [ Upstream commit 391e388f853dad5d1d7462a31bb50ff2446e37f0 ]
    
    Remove the pointless task_req_upiu and task_rsp_upiu indirections,
    which are __le32 arrays always cast to given structures and just add
    the members directly.  Also clean up variables names in use in the
    callers a bit to make the code more readable.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Avri Altman <avri.altman@wdc.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Stable-dep-of: e4a628877119 ("scsi: ufs: core: Perform read back after disabling interrupts")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Perform read back after disabling interrupts [+ + +]
Author: Andrew Halaney <ahalaney@redhat.com>
Date:   Fri Mar 29 15:46:50 2024 -0500

    scsi: ufs: core: Perform read back after disabling interrupts
    
    [ Upstream commit e4a628877119bd40164a651d20321247b6f94a8b ]
    
    Currently, interrupts are cleared and disabled prior to registering the
    interrupt. An mb() is used to complete the clear/disable writes before the
    interrupt is registered.
    
    mb() ensures that the write completes, but completion doesn't mean that it
    isn't stored in a buffer somewhere. The recommendation for ensuring these
    bits have taken effect on the device is to perform a read back to force it
    to make it all the way to the device. This is documented in device-io.rst
    and a talk by Will Deacon on this can be seen over here:
    
        https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678
    
    Let's do that to ensure these bits hit the device. Because the mb()'s
    purpose wasn't to add extra ordering (on top of the ordering guaranteed by
    writel()/readl()), it can safely be removed.
    
    Fixes: 199ef13cac7d ("scsi: ufs: avoid spurious UFS host controller interrupts")
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Reviewed-by: Can Guo <quic_cang@quicinc.com>
    Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
    Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-8-181252004586@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: core: Perform read back after disabling UIC_COMMAND_COMPL [+ + +]
Author: Andrew Halaney <ahalaney@redhat.com>
Date:   Fri Mar 29 15:46:51 2024 -0500

    scsi: ufs: core: Perform read back after disabling UIC_COMMAND_COMPL
    
    [ Upstream commit 4bf3855497b60765ca03b983d064b25e99b97657 ]
    
    Currently, the UIC_COMMAND_COMPL interrupt is disabled and a wmb() is used
    to complete the register write before any following writes.
    
    wmb() ensures the writes complete in that order, but completion doesn't
    mean that it isn't stored in a buffer somewhere. The recommendation for
    ensuring this bit has taken effect on the device is to perform a read back
    to force it to make it all the way to the device. This is documented in
    device-io.rst and a talk by Will Deacon on this can be seen over here:
    
        https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678
    
    Let's do that to ensure the bit hits the device. Because the wmb()'s
    purpose wasn't to add extra ordering (on top of the ordering guaranteed by
    writel()/readl()), it can safely be removed.
    
    Fixes: d75f7fe495cf ("scsi: ufs: reduce the interrupts for power mode change requests")
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Reviewed-by: Can Guo <quic_cang@quicinc.com>
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
    Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-9-181252004586@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: ufs: qcom: Perform read back after writing reset bit [+ + +]
Author: Andrew Halaney <ahalaney@redhat.com>
Date:   Fri Mar 29 15:46:43 2024 -0500

    scsi: ufs: qcom: Perform read back after writing reset bit
    
    [ Upstream commit c4d28e06b0c94636f6e35d003fa9ebac0a94e1ae ]
    
    Currently, the reset bit for the UFS provided reset controller (used by its
    phy) is written to, and then a mb() happens to try and ensure that hit the
    device. Immediately afterwards a usleep_range() occurs.
    
    mb() ensures that the write completes, but completion doesn't mean that it
    isn't stored in a buffer somewhere. The recommendation for ensuring this
    bit has taken effect on the device is to perform a read back to force it to
    make it all the way to the device. This is documented in device-io.rst and
    a talk by Will Deacon on this can be seen over here:
    
        https://youtu.be/i6DayghhA8Q?si=MiyxB5cKJXSaoc01&t=1678
    
    Let's do that to ensure the bit hits the device. By doing so and
    guaranteeing the ordering against the immediately following usleep_range(),
    the mb() can safely be removed.
    
    Fixes: 81c0fc51b7a7 ("ufs-qcom: add support for Qualcomm Technologies Inc platforms")
    Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
    Reviewed-by: Can Guo <quic_cang@quicinc.com>
    Signed-off-by: Andrew Halaney <ahalaney@redhat.com>
    Link: https://lore.kernel.org/r/20240329-ufs-reset-ensure-effect-before-delay-v5-1-181252004586@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/kcmp: Make the test output consistent and clear [+ + +]
Author: Gautam Menghani <gautammenghani201@gmail.com>
Date:   Thu Jun 30 00:58:22 2022 +0530

    selftests/kcmp: Make the test output consistent and clear
    
    [ Upstream commit ff682226a353d88ffa5db9c2a9b945066776311e ]
    
    Make the output format of this test consistent. Currently the output is
    as follows:
    
    +TAP version 13
    +1..1
    +# selftests: kcmp: kcmp_test
    +# pid1:  45814 pid2:  45815 FD:  1 FILES:  1 VM:  2 FS:  1 SIGHAND:  2
    +  IO:  0 SYSVSEM:  0 INV: -1
    +# PASS: 0 returned as expected
    +# PASS: 0 returned as expected
    +# PASS: 0 returned as expected
    +# # Planned tests != run tests (0 != 3)
    +# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
    +# # Planned tests != run tests (0 != 3)
    +# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
    +# # Totals: pass:0 fail:0 xfail:0 xpass:0 skip:0 error:0
    +ok 1 selftests: kcmp: kcmp_test
    
    With this patch applied the output is as follows:
    
    +TAP version 13
    +1..1
    +# selftests: kcmp: kcmp_test
    +# TAP version 13
    +# 1..3
    +# pid1:  46330 pid2:  46331 FD:  1 FILES:  2 VM:  2 FS:  2 SIGHAND:  1
    +  IO:  0 SYSVSEM:  0 INV: -1
    +# PASS: 0 returned as expected
    +# PASS: 0 returned as expected
    +# PASS: 0 returned as expected
    +# # Totals: pass:3 fail:0 xfail:0 xpass:0 skip:0 error:0
    +ok 1 selftests: kcmp: kcmp_test
    
    Signed-off-by: Gautam Menghani <gautammenghani201@gmail.com>
    Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
    Stable-dep-of: eb59a5811371 ("selftests/kcmp: remove unused open mode")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

selftests/kcmp: remove unused open mode [+ + +]
Author: Edward Liaw <edliaw@google.com>
Date:   Mon Apr 29 23:46:09 2024 +0000

    selftests/kcmp: remove unused open mode
    
    [ Upstream commit eb59a58113717df04b8a8229befd8ab1e5dbf86e ]
    
    Android bionic warns that open modes are ignored if O_CREAT or O_TMPFILE
    aren't specified.  The permissions for the file are set above:
    
            fd1 = open(kpath, O_RDWR | O_CREAT | O_TRUNC, 0644);
    
    Link: https://lkml.kernel.org/r/20240429234610.191144-1-edliaw@google.com
    Fixes: d97b46a64674 ("syscalls, x86: add __NR_kcmp syscall")
    Signed-off-by: Edward Liaw <edliaw@google.com>
    Reviewed-by: Cyrill Gorcunov <gorcunov@gmail.com>
    Cc: Eric Biederman <ebiederm@xmission.com>
    Cc: Shuah Khan <shuah@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
serial: max3100: Fix bitwise types [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Apr 2 22:50:30 2024 +0300

    serial: max3100: Fix bitwise types
    
    [ Upstream commit e60955dbecb97f080848a57524827e2db29c70fd ]
    
    Sparse is not happy about misuse of bitwise types:
    
      .../max3100.c:194:13: warning: incorrect type in assignment (different base types)
      .../max3100.c:194:13:    expected unsigned short [addressable] [usertype] etx
      .../max3100.c:194:13:    got restricted __be16 [usertype]
      .../max3100.c:202:15: warning: cast to restricted __be16
    
    Fix this by choosing proper types for the respective variables.
    
    Fixes: 7831d56b0a35 ("tty: MAX3100")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20240402195306.269276-4-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: max3100: Lock port->lock when calling uart_handle_cts_change() [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Apr 2 22:50:28 2024 +0300

    serial: max3100: Lock port->lock when calling uart_handle_cts_change()
    
    [ Upstream commit 77ab53371a2066fdf9b895246505f5ef5a4b5d47 ]
    
    uart_handle_cts_change() has to be called with port lock taken,
    Since we run it in a separate work, the lock may not be taken at
    the time of running. Make sure that it's taken by explicitly doing
    that. Without it we got a splat:
    
      WARNING: CPU: 0 PID: 10 at drivers/tty/serial/serial_core.c:3491 uart_handle_cts_change+0xa6/0xb0
      ...
      Workqueue: max3100-0 max3100_work [max3100]
      RIP: 0010:uart_handle_cts_change+0xa6/0xb0
      ...
       max3100_handlerx+0xc5/0x110 [max3100]
       max3100_work+0x12a/0x340 [max3100]
    
    Fixes: 7831d56b0a35 ("tty: MAX3100")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://lore.kernel.org/r/20240402195306.269276-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: max3100: Update uart_driver_registered on driver removal [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Tue Apr 2 22:50:29 2024 +0300

    serial: max3100: Update uart_driver_registered on driver removal
    
    [ Upstream commit 712a1fcb38dc7cac6da63ee79a88708fbf9c45ec ]
    
    The removal of the last MAX3100 device triggers the removal of
    the driver. However, code doesn't update the respective global
    variable and after insmod — rmmod — insmod cycle the kernel
    oopses:
    
      max3100 spi-PRP0001:01: max3100_probe: adding port 0
      BUG: kernel NULL pointer dereference, address: 0000000000000408
      ...
      RIP: 0010:serial_core_register_port+0xa0/0x840
      ...
       max3100_probe+0x1b6/0x280 [max3100]
       spi_probe+0x8d/0xb0
    
    Update the actual state so next time UART driver will be registered
    again.
    
    Hugo also noticed, that the error path in the probe also affected
    by having the variable set, and not cleared. Instead of clearing it
    move the assignment after the successfull uart_register_driver() call.
    
    Fixes: 7831d56b0a35 ("tty: MAX3100")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
    Link: https://lore.kernel.org/r/20240402195306.269276-3-andriy.shevchenko@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: sh-sci: Extract sci_dma_rx_chan_invalidate() [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Mon Jan 7 17:23:17 2019 +0100

    serial: sh-sci: Extract sci_dma_rx_chan_invalidate()
    
    [ Upstream commit 11b3770d54b28dcd905155a6d4aa551187ff00eb ]
    
    The cookies and channel pointer for the DMA receive channel are
    invalidated in two places, and one more is planned.
    Extract this functionality in a common helper.
    
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: Simon Horman <horms+renesas@verge.net.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: aae20f6e34cd ("serial: sh-sci: protect invalidating RXDMA on shutdown")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

serial: sh-sci: protect invalidating RXDMA on shutdown [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Mon May 6 13:40:17 2024 +0200

    serial: sh-sci: protect invalidating RXDMA on shutdown
    
    [ Upstream commit aae20f6e34cd0cbd67a1d0e5877561c40109a81b ]
    
    The to-be-fixed commit removed locking when invalidating the DMA RX
    descriptors on shutdown. It overlooked that there is still a rx_timer
    running which may still access the protected data. So, re-add the
    locking.
    
    Reported-by: Dirk Behme <dirk.behme@de.bosch.com>
    Closes: https://lore.kernel.org/r/ee6c9e16-9f29-450e-81da-4a8dceaa8fc7@de.bosch.com
    Fixes: 2c4ee23530ff ("serial: sh-sci: Postpone DMA release when falling back to PIO")
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Link: https://lore.kernel.org/r/20240506114016.30498-7-wsa+renesas@sang-engineering.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sh: kprobes: Merge arch_copy_kprobe() into arch_prepare_kprobe() [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Fri Mar 1 22:02:30 2024 +0100

    sh: kprobes: Merge arch_copy_kprobe() into arch_prepare_kprobe()
    
    [ Upstream commit 1422ae080b66134fe192082d9b721ab7bd93fcc5 ]
    
    arch/sh/kernel/kprobes.c:52:16: warning: no previous prototype for 'arch_copy_kprobe' [-Wmissing-prototypes]
    
    Although SH kprobes support was only merged in v2.6.28, it missed the
    earlier removal of the arch_copy_kprobe() callback in v2.6.15.
    
    Based on the powerpc part of commit 49a2a1b83ba6fa40 ("[PATCH] kprobes:
    changed from using spinlock to mutex").
    
    Fixes: d39f5450146ff39f ("sh: Add kprobes support.")
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Link: https://lore.kernel.org/r/717d47a19689cc944fae6e981a1ad7cae1642c89.1709326528.git.geert+renesas@glider.be
    Signed-off-by: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smsc95xx: remove redundant function arguments [+ + +]
Author: Andre Edich <andre.edich@microchip.com>
Date:   Wed Aug 26 13:17:15 2020 +0200

    smsc95xx: remove redundant function arguments
    
    [ Upstream commit 368be1ca28f66deba16627e2a02e78adedd023a6 ]
    
    This patch removes arguments netdev and phy_id from the functions
    smsc95xx_mdio_read_nopm and smsc95xx_mdio_write_nopm.  Both removed
    arguments are recovered from a new argument `struct usbnet *dev`.
    
    Signed-off-by: Andre Edich <andre.edich@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 52a2f0608366 ("net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smsc95xx: use usbnet->driver_priv [+ + +]
Author: Andre Edich <andre.edich@microchip.com>
Date:   Wed Aug 26 13:17:16 2020 +0200

    smsc95xx: use usbnet->driver_priv
    
    [ Upstream commit ad90a73f0236c41f7a2dedc2e75c7b5a364eb93e ]
    
    Using `void *driver_priv` instead of `unsigned long data[]` is more
    straightforward way to recover the `struct smsc95xx_priv *` from the
    `struct net_device *`.
    
    Signed-off-by: Andre Edich <andre.edich@microchip.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 52a2f0608366 ("net: usb: smsc95xx: fix changing LED_SEL bit value updated from EEPROM")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sparc64: Fix number of online CPUs [+ + +]
Author: Sam Ravnborg <sam@ravnborg.org>
Date:   Sat Mar 30 10:57:45 2024 +0100

    sparc64: Fix number of online CPUs
    
    commit 98937707fea8375e8acea0aaa0b68a956dd52719 upstream.
    
    Nick Bowler reported:
        When using newer kernels on my Ultra 60 with dual 450MHz UltraSPARC-II
        CPUs, I noticed that only CPU 0 comes up, while older kernels (including
        4.7) are working fine with both CPUs.
    
          I bisected the failure to this commit:
    
          9b2f753ec23710aa32c0d837d2499db92fe9115b is the first bad commit
          commit 9b2f753ec23710aa32c0d837d2499db92fe9115b
          Author: Atish Patra <atish.patra@oracle.com>
          Date:   Thu Sep 15 14:54:40 2016 -0600
    
          sparc64: Fix cpu_possible_mask if nr_cpus is set
    
        This is a small change that reverts very easily on top of 5.18: there is
        just one trivial conflict.  Once reverted, both CPUs work again.
    
        Maybe this is related to the fact that the CPUs on this system are
        numbered CPU0 and CPU2 (there is no CPU1)?
    
    The current code that adjust cpu_possible based on nr_cpu_ids do not
    take into account that CPU's may not come one after each other.
    Move the chech to the function that setup the cpu_possible mask
    so there is no need to adjust it later.
    
    Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
    Fixes: 9b2f753ec237 ("sparc64: Fix cpu_possible_mask if nr_cpus is set")
    Reported-by: Nick Bowler <nbowler@draconx.ca>
    Tested-by: Nick Bowler <nbowler@draconx.ca>
    Link: https://lore.kernel.org/sparclinux/20201009161924.c8f031c079dd852941307870@gmx.de/
    Link: https://lore.kernel.org/all/CADyTPEwt=ZNams+1bpMB1F9w_vUdPsGCt92DBQxxq_VtaLoTdw@mail.gmail.com/
    Cc: stable@vger.kernel.org # v4.8+
    Cc: Andreas Larsson <andreas@gaisler.com>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Atish Patra <atish.patra@oracle.com>
    Cc: Bob Picco <bob.picco@oracle.com>
    Cc: Vijay Kumar <vijay.ac.kumar@oracle.com>
    Cc: David S. Miller <davem@davemloft.net>
    Reviewed-by: Andreas Larsson <andreas@gaisler.com>
    Acked-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20240330-sparc64-warnings-v1-9-37201023ee2f@ravnborg.org
    Signed-off-by: Andreas Larsson <andreas@gaisler.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sparc: move struct termio to asm/termios.h [+ + +]
Author: Mike Gilbert <floppym@gentoo.org>
Date:   Wed Mar 6 12:11:47 2024 -0500

    sparc: move struct termio to asm/termios.h
    
    commit c32d18e7942d7589b62e301eb426b32623366565 upstream.
    
    Every other arch declares struct termio in asm/termios.h, so make sparc
    match them.
    
    Resolves a build failure in the PPP software package, which includes
    both bits/ioctl-types.h via sys/ioctl.h (glibc) and asm/termbits.h.
    
    Closes: https://bugs.gentoo.org/918992
    Signed-off-by: Mike Gilbert <floppym@gentoo.org>
    Cc: stable@vger.kernel.org
    Reviewed-by: Andreas Larsson <andreas@gaisler.com>
    Tested-by: Andreas Larsson <andreas@gaisler.com>
    Link: https://lore.kernel.org/r/20240306171149.3843481-1-floppym@gentoo.org
    Signed-off-by: Andreas Larsson <andreas@gaisler.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
speakup: Fix sizeof() vs ARRAY_SIZE() bug [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Apr 15 14:02:23 2024 +0300

    speakup: Fix sizeof() vs ARRAY_SIZE() bug
    
    commit 008ab3c53bc4f0b2f20013c8f6c204a3203d0b8b upstream.
    
    The "buf" pointer is an array of u16 values.  This code should be
    using ARRAY_SIZE() (which is 256) instead of sizeof() (which is 512),
    otherwise it can the still got out of bounds.
    
    Fixes: c8d2f34ea96e ("speakup: Avoid crash on very long word")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
    Link: https://lore.kernel.org/r/d16f67d2-fd0a-4d45-adac-75ddd11001aa@moroto.mountain
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
spi: Don't mark message DMA mapped when no transfer in it is [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Wed May 22 20:09:49 2024 +0300

    spi: Don't mark message DMA mapped when no transfer in it is
    
    [ Upstream commit 9f788ba457b45b0ce422943fcec9fa35c4587764 ]
    
    There is no need to set the DMA mapped flag of the message if it has
    no mapped transfers. Moreover, it may give the code a chance to take
    the wrong paths, i.e. to exercise DMA related APIs on unmapped data.
    Make __spi_map_msg() to bail earlier on the above mentioned cases.
    
    Fixes: 99adef310f68 ("spi: Provide core support for DMA mapping transfers")
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Link: https://msgid.link/r/20240522171018.3362521-2-andriy.shevchenko@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
stm class: Fix a double free in stm_register_device() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Mon Apr 29 16:01:05 2024 +0300

    stm class: Fix a double free in stm_register_device()
    
    [ Upstream commit 3df463865ba42b8f88a590326f4c9ea17a1ce459 ]
    
    The put_device(&stm->dev) call will trigger stm_device_release() which
    frees "stm" so the vfree(stm) on the next line is a double free.
    
    Fixes: 389b6699a2aa ("stm class: Fix stm device initialization order")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Link: https://lore.kernel.org/r/20240429130119.1518073-2-alexander.shishkin@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
SUNRPC: Fix gss_free_in_token_pages() [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Tue May 7 09:10:41 2024 -0400

    SUNRPC: Fix gss_free_in_token_pages()
    
    [ Upstream commit bafa6b4d95d97877baa61883ff90f7e374427fae ]
    
    Dan Carpenter says:
    > Commit 5866efa8cbfb ("SUNRPC: Fix svcauth_gss_proxy_init()") from Oct
    > 24, 2019 (linux-next), leads to the following Smatch static checker
    > warning:
    >
    >       net/sunrpc/auth_gss/svcauth_gss.c:1039 gss_free_in_token_pages()
    >       warn: iterator 'i' not incremented
    >
    > net/sunrpc/auth_gss/svcauth_gss.c
    >     1034 static void gss_free_in_token_pages(struct gssp_in_token *in_token)
    >     1035 {
    >     1036         u32 inlen;
    >     1037         int i;
    >     1038
    > --> 1039         i = 0;
    >     1040         inlen = in_token->page_len;
    >     1041         while (inlen) {
    >     1042                 if (in_token->pages[i])
    >     1043                         put_page(in_token->pages[i]);
    >                                                          ^
    > This puts page zero over and over.
    >
    >     1044                 inlen -= inlen > PAGE_SIZE ? PAGE_SIZE : inlen;
    >     1045         }
    >     1046
    >     1047         kfree(in_token->pages);
    >     1048         in_token->pages = NULL;
    >     1049 }
    
    Based on the way that the ->pages[] array is constructed in
    gss_read_proxy_verf(), we know that once the loop encounters a NULL
    page pointer, the remaining array elements must also be NULL.
    
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Suggested-by: Trond Myklebust <trondmy@hammerspace.com>
    Fixes: 5866efa8cbfb ("SUNRPC: Fix svcauth_gss_proxy_init()")
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

SUNRPC: Fix loop termination condition in gss_free_in_token_pages() [+ + +]
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Sun Jun 2 18:15:25 2024 -0400

    SUNRPC: Fix loop termination condition in gss_free_in_token_pages()
    
    commit 4a77c3dead97339478c7422eb07bf4bf63577008 upstream.
    
    The in_token->pages[] array is not NULL terminated. This results in
    the following KASAN splat:
    
      KASAN: maybe wild-memory-access in range [0x04a2013400000008-0x04a201340000000f]
    
    Fixes: bafa6b4d95d9 ("SUNRPC: Fix gss_free_in_token_pages()")
    Reviewed-by: Benjamin Coddington <bcodding@redhat.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp: Fix shift-out-of-bounds in dctcp_update_alpha(). [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Fri May 17 18:16:26 2024 +0900

    tcp: Fix shift-out-of-bounds in dctcp_update_alpha().
    
    [ Upstream commit 3ebc46ca8675de6378e3f8f40768e180bb8afa66 ]
    
    In dctcp_update_alpha(), we use a module parameter dctcp_shift_g
    as follows:
    
      alpha -= min_not_zero(alpha, alpha >> dctcp_shift_g);
      ...
      delivered_ce <<= (10 - dctcp_shift_g);
    
    It seems syzkaller started fuzzing module parameters and triggered
    shift-out-of-bounds [0] by setting 100 to dctcp_shift_g:
    
      memcpy((void*)0x20000080,
             "/sys/module/tcp_dctcp/parameters/dctcp_shift_g\000", 47);
      res = syscall(__NR_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0x20000080ul,
                    /*flags=*/2ul, /*mode=*/0ul);
      memcpy((void*)0x20000000, "100\000", 4);
      syscall(__NR_write, /*fd=*/r[0], /*val=*/0x20000000ul, /*len=*/4ul);
    
    Let's limit the max value of dctcp_shift_g by param_set_uint_minmax().
    
    With this patch:
    
      # echo 10 > /sys/module/tcp_dctcp/parameters/dctcp_shift_g
      # cat /sys/module/tcp_dctcp/parameters/dctcp_shift_g
      10
      # echo 11 > /sys/module/tcp_dctcp/parameters/dctcp_shift_g
      -bash: echo: write error: Invalid argument
    
    [0]:
    UBSAN: shift-out-of-bounds in net/ipv4/tcp_dctcp.c:143:12
    shift exponent 100 is too large for 32-bit type 'u32' (aka 'unsigned int')
    CPU: 0 PID: 8083 Comm: syz-executor345 Not tainted 6.9.0-05151-g1b294a1f3561 #2
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    1.13.0-1ubuntu1.1 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0x201/0x300 lib/dump_stack.c:114
     ubsan_epilogue lib/ubsan.c:231 [inline]
     __ubsan_handle_shift_out_of_bounds+0x346/0x3a0 lib/ubsan.c:468
     dctcp_update_alpha+0x540/0x570 net/ipv4/tcp_dctcp.c:143
     tcp_in_ack_event net/ipv4/tcp_input.c:3802 [inline]
     tcp_ack+0x17b1/0x3bc0 net/ipv4/tcp_input.c:3948
     tcp_rcv_state_process+0x57a/0x2290 net/ipv4/tcp_input.c:6711
     tcp_v4_do_rcv+0x764/0xc40 net/ipv4/tcp_ipv4.c:1937
     sk_backlog_rcv include/net/sock.h:1106 [inline]
     __release_sock+0x20f/0x350 net/core/sock.c:2983
     release_sock+0x61/0x1f0 net/core/sock.c:3549
     mptcp_subflow_shutdown+0x3d0/0x620 net/mptcp/protocol.c:2907
     mptcp_check_send_data_fin+0x225/0x410 net/mptcp/protocol.c:2976
     __mptcp_close+0x238/0xad0 net/mptcp/protocol.c:3072
     mptcp_close+0x2a/0x1a0 net/mptcp/protocol.c:3127
     inet_release+0x190/0x1f0 net/ipv4/af_inet.c:437
     __sock_release net/socket.c:659 [inline]
     sock_close+0xc0/0x240 net/socket.c:1421
     __fput+0x41b/0x890 fs/file_table.c:422
     task_work_run+0x23b/0x300 kernel/task_work.c:180
     exit_task_work include/linux/task_work.h:38 [inline]
     do_exit+0x9c8/0x2540 kernel/exit.c:878
     do_group_exit+0x201/0x2b0 kernel/exit.c:1027
     __do_sys_exit_group kernel/exit.c:1038 [inline]
     __se_sys_exit_group kernel/exit.c:1036 [inline]
     __x64_sys_exit_group+0x3f/0x40 kernel/exit.c:1036
     do_syscall_x64 arch/x86/entry/common.c:52 [inline]
     do_syscall_64+0xe4/0x240 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x67/0x6f
    RIP: 0033:0x7f6c2b5005b6
    Code: Unable to access opcode bytes at 0x7f6c2b50058c.
    RSP: 002b:00007ffe883eb948 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
    RAX: ffffffffffffffda RBX: 00007f6c2b5862f0 RCX: 00007f6c2b5005b6
    RDX: 0000000000000001 RSI: 000000000000003c RDI: 0000000000000001
    RBP: 0000000000000001 R08: 00000000000000e7 R09: ffffffffffffffc0
    R10: 0000000000000006 R11: 0000000000000246 R12: 00007f6c2b5862f0
    R13: 0000000000000001 R14: 0000000000000000 R15: 0000000000000001
     </TASK>
    
    Reported-by: syzkaller <syzkaller@googlegroups.com>
    Reported-by: Yue Sun <samsun1006219@gmail.com>
    Reported-by: xingwei lee <xrivendell7@gmail.com>
    Closes: https://lore.kernel.org/netdev/CAEkJfYNJM=cw-8x7_Vmj1J6uYVCWMbbvD=EFmDPVBGpTsqOxEA@mail.gmail.com/
    Fixes: e3118e8359bb ("net: tcp: add DCTCP congestion control algorithm")
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://lore.kernel.org/r/20240517091626.32772-1-kuniyu@amazon.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tty: n_gsm: fix possible out-of-bounds in gsm0_receive() [+ + +]
Author: Daniel Starke <daniel.starke@siemens.com>
Date:   Wed Apr 24 07:48:41 2024 +0200

    tty: n_gsm: fix possible out-of-bounds in gsm0_receive()
    
    commit 47388e807f85948eefc403a8a5fdc5b406a65d5a upstream.
    
    Assuming the following:
    - side A configures the n_gsm in basic option mode
    - side B sends the header of a basic option mode frame with data length 1
    - side A switches to advanced option mode
    - side B sends 2 data bytes which exceeds gsm->len
      Reason: gsm->len is not used in advanced option mode.
    - side A switches to basic option mode
    - side B keeps sending until gsm0_receive() writes past gsm->buf
      Reason: Neither gsm->state nor gsm->len have been reset after
      reconfiguration.
    
    Fix this by changing gsm->count to gsm->len comparison from equal to less
    than. Also add upper limit checks against the constant MAX_MRU in
    gsm0_receive() and gsm1_receive() to harden against memory corruption of
    gsm->len and gsm->mru.
    
    All other checks remain as we still need to limit the data according to the
    user configuration and actual payload size.
    
    Reported-by: j51569436@gmail.com
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218708
    Tested-by: j51569436@gmail.com
    Fixes: e1eaea46bb40 ("tty: n_gsm line discipline")
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniel Starke <daniel.starke@siemens.com>
    Link: https://lore.kernel.org/r/20240424054842.7741-1-daniel.starke@siemens.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
um: Add winch to winch_handlers before registering winch IRQ [+ + +]
Author: Roberto Sassu <roberto.sassu@huawei.com>
Date:   Thu Mar 7 11:49:26 2024 +0100

    um: Add winch to winch_handlers before registering winch IRQ
    
    [ Upstream commit a0fbbd36c156b9f7b2276871d499c9943dfe5101 ]
    
    Registering a winch IRQ is racy, an interrupt may occur before the winch is
    added to the winch_handlers list.
    
    If that happens, register_winch_irq() adds to that list a winch that is
    scheduled to be (or has already been) freed, causing a panic later in
    winch_cleanup().
    
    Avoid the race by adding the winch to the winch_handlers list before
    registering the IRQ, and rolling back if um_request_irq() fails.
    
    Fixes: 42a359e31a0e ("uml: SIGIO support cleanup")
    Signed-off-by: Roberto Sassu <roberto.sassu@huawei.com>
    Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

um: Fix return value in ubd_init() [+ + +]
Author: Duoming Zhou <duoming@zju.edu.cn>
Date:   Wed Mar 6 17:12:59 2024 +0800

    um: Fix return value in ubd_init()
    
    [ Upstream commit 31a5990ed253a66712d7ddc29c92d297a991fdf2 ]
    
    When kmalloc_array() fails to allocate memory, the ubd_init()
    should return -ENOMEM instead of -1. So, fix it.
    
    Fixes: f88f0bdfc32f ("um: UBD Improvements")
    Signed-off-by: Duoming Zhou <duoming@zju.edu.cn>
    Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

um: Fix the -Wmissing-prototypes warning for __switch_mm [+ + +]
Author: Tiwei Bie <tiwei.btw@antgroup.com>
Date:   Tue Apr 23 20:58:53 2024 +0800

    um: Fix the -Wmissing-prototypes warning for __switch_mm
    
    [ Upstream commit 2cbade17b18c0f0fd9963f26c9fc9b057eb1cb3a ]
    
    The __switch_mm function is defined in the user code, and is called
    by the kernel code. It should be declared in a shared header.
    
    Fixes: 4dc706c2f292 ("um: take um_mmu.h to asm/mmu.h, clean asm/mmu_context.h a bit")
    Signed-off-by: Tiwei Bie <tiwei.btw@antgroup.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
usb: gadget: u_audio: Clear uac pointer when freed. [+ + +]
Author: Chris Wulff <Chris.Wulff@biamp.com>
Date:   Thu Apr 25 15:20:20 2024 +0000

    usb: gadget: u_audio: Clear uac pointer when freed.
    
    [ Upstream commit a2cf936ebef291ef7395172b9e2f624779fb6dc0 ]
    
    This prevents use of a stale pointer if functions are called after
    g_cleanup that shouldn't be. This doesn't fix any races, but converts
    a possibly silent kernel memory corruption into an obvious NULL pointer
    dereference report.
    
    Fixes: eb9fecb9e69b ("usb: gadget: f_uac2: split out audio core")
    Signed-off-by: Chris Wulff <chris.wulff@biamp.com>
    Link: https://lore.kernel.org/stable/CO1PR17MB54194226DA08BFC9EBD8C163E1172%40CO1PR17MB5419.namprd17.prod.outlook.com
    Link: https://lore.kernel.org/r/CO1PR17MB54194226DA08BFC9EBD8C163E1172@CO1PR17MB5419.namprd17.prod.outlook.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
virtio: delete vq in vp_find_vqs_msix() when request_irq() fails [+ + +]
Author: Jiri Pirko <jiri@resnulli.us>
Date:   Fri Apr 26 17:08:45 2024 +0200

    virtio: delete vq in vp_find_vqs_msix() when request_irq() fails
    
    [ Upstream commit 89875151fccdd024d571aa884ea97a0128b968b6 ]
    
    When request_irq() fails, error path calls vp_del_vqs(). There, as vq is
    present in the list, free_irq() is called for the same vector. That
    causes following splat:
    
    [    0.414355] Trying to free already-free IRQ 27
    [    0.414403] WARNING: CPU: 1 PID: 1 at kernel/irq/manage.c:1899 free_irq+0x1a1/0x2d0
    [    0.414510] Modules linked in:
    [    0.414540] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.9.0-rc4+ #27
    [    0.414540] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-1.fc39 04/01/2014
    [    0.414540] RIP: 0010:free_irq+0x1a1/0x2d0
    [    0.414540] Code: 1e 00 48 83 c4 08 48 89 e8 5b 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc 90 8b 74 24 04 48 c7 c7 98 80 6c b1 e8 00 c9 f7 ff 90 <0f> 0b 90 90 48 89 ee 4c 89 ef e8 e0 20 b8 00 49 8b 47 40 48 8b 40
    [    0.414540] RSP: 0000:ffffb71480013ae0 EFLAGS: 00010086
    [    0.414540] RAX: 0000000000000000 RBX: ffffa099c2722000 RCX: 0000000000000000
    [    0.414540] RDX: 0000000000000000 RSI: ffffb71480013998 RDI: 0000000000000001
    [    0.414540] RBP: 0000000000000246 R08: 00000000ffffdfff R09: 0000000000000001
    [    0.414540] R10: 00000000ffffdfff R11: ffffffffb18729c0 R12: ffffa099c1c91760
    [    0.414540] R13: ffffa099c1c916a4 R14: ffffa099c1d2f200 R15: ffffa099c1c91600
    [    0.414540] FS:  0000000000000000(0000) GS:ffffa099fec40000(0000) knlGS:0000000000000000
    [    0.414540] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [    0.414540] CR2: 0000000000000000 CR3: 0000000008e3e001 CR4: 0000000000370ef0
    [    0.414540] Call Trace:
    [    0.414540]  <TASK>
    [    0.414540]  ? __warn+0x80/0x120
    [    0.414540]  ? free_irq+0x1a1/0x2d0
    [    0.414540]  ? report_bug+0x164/0x190
    [    0.414540]  ? handle_bug+0x3b/0x70
    [    0.414540]  ? exc_invalid_op+0x17/0x70
    [    0.414540]  ? asm_exc_invalid_op+0x1a/0x20
    [    0.414540]  ? free_irq+0x1a1/0x2d0
    [    0.414540]  vp_del_vqs+0xc1/0x220
    [    0.414540]  vp_find_vqs_msix+0x305/0x470
    [    0.414540]  vp_find_vqs+0x3e/0x1a0
    [    0.414540]  vp_modern_find_vqs+0x1b/0x70
    [    0.414540]  init_vqs+0x387/0x600
    [    0.414540]  virtnet_probe+0x50a/0xc80
    [    0.414540]  virtio_dev_probe+0x1e0/0x2b0
    [    0.414540]  really_probe+0xc0/0x2c0
    [    0.414540]  ? __pfx___driver_attach+0x10/0x10
    [    0.414540]  __driver_probe_device+0x73/0x120
    [    0.414540]  driver_probe_device+0x1f/0xe0
    [    0.414540]  __driver_attach+0x88/0x180
    [    0.414540]  bus_for_each_dev+0x85/0xd0
    [    0.414540]  bus_add_driver+0xec/0x1f0
    [    0.414540]  driver_register+0x59/0x100
    [    0.414540]  ? __pfx_virtio_net_driver_init+0x10/0x10
    [    0.414540]  virtio_net_driver_init+0x90/0xb0
    [    0.414540]  do_one_initcall+0x58/0x230
    [    0.414540]  kernel_init_freeable+0x1a3/0x2d0
    [    0.414540]  ? __pfx_kernel_init+0x10/0x10
    [    0.414540]  kernel_init+0x1a/0x1c0
    [    0.414540]  ret_from_fork+0x31/0x50
    [    0.414540]  ? __pfx_kernel_init+0x10/0x10
    [    0.414540]  ret_from_fork_asm+0x1a/0x30
    [    0.414540]  </TASK>
    
    Fix this by calling deleting the current vq when request_irq() fails.
    
    Fixes: 0b0f9dc52ed0 ("Revert "virtio_pci: use shared interrupts for virtqueues"")
    Signed-off-by: Jiri Pirko <jiri@nvidia.com>
    Message-Id: <20240426150845.3999481-1-jiri@resnulli.us>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vxlan: Fix regression when dropping packets due to invalid src addresses [+ + +]
Author: Daniel Borkmann <daniel@iogearbox.net>
Date:   Mon Jun 3 10:59:26 2024 +0200

    vxlan: Fix regression when dropping packets due to invalid src addresses
    
    commit 1cd4bc987abb2823836cbb8f887026011ccddc8a upstream.
    
    Commit f58f45c1e5b9 ("vxlan: drop packets from invalid src-address")
    has recently been added to vxlan mainly in the context of source
    address snooping/learning so that when it is enabled, an entry in the
    FDB is not being created for an invalid address for the corresponding
    tunnel endpoint.
    
    Before commit f58f45c1e5b9 vxlan was similarly behaving as geneve in
    that it passed through whichever macs were set in the L2 header. It
    turns out that this change in behavior breaks setups, for example,
    Cilium with netkit in L3 mode for Pods as well as tunnel mode has been
    passing before the change in f58f45c1e5b9 for both vxlan and geneve.
    After mentioned change it is only passing for geneve as in case of
    vxlan packets are dropped due to vxlan_set_mac() returning false as
    source and destination macs are zero which for E/W traffic via tunnel
    is totally fine.
    
    Fix it by only opting into the is_valid_ether_addr() check in
    vxlan_set_mac() when in fact source address snooping/learning is
    actually enabled in vxlan. This is done by moving the check into
    vxlan_snoop(). With this change, the Cilium connectivity test suite
    passes again for both tunnel flavors.
    
    Fixes: f58f45c1e5b9 ("vxlan: drop packets from invalid src-address")
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Cc: David Bauer <mail@david-bauer.net>
    Cc: Ido Schimmel <idosch@nvidia.com>
    Cc: Nikolay Aleksandrov <razor@blackwall.org>
    Cc: Martin KaFai Lau <martin.lau@kernel.org>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: David Bauer <mail@david-bauer.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [ Backport note: vxlan snooping/learning not supported in 6.8 or older,
      so commit is simply a revert. ]
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: ar5523: enable proper endpoint verification [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Mon Apr 8 05:14:25 2024 -0700

    wifi: ar5523: enable proper endpoint verification
    
    [ Upstream commit e120b6388d7d88635d67dcae6483f39c37111850 ]
    
    Syzkaller reports [1] hitting a warning about an endpoint in use
    not having an expected type to it.
    
    Fix the issue by checking for the existence of all proper
    endpoints with their according types intact.
    
    Sadly, this patch has not been tested on real hardware.
    
    [1] Syzkaller report:
    ------------[ cut here ]------------
    usb 1-1: BOGUS urb xfer, pipe 3 != type 1
    WARNING: CPU: 0 PID: 3643 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
    ...
    Call Trace:
     <TASK>
     ar5523_cmd+0x41b/0x780 drivers/net/wireless/ath/ar5523/ar5523.c:275
     ar5523_cmd_read drivers/net/wireless/ath/ar5523/ar5523.c:302 [inline]
     ar5523_host_available drivers/net/wireless/ath/ar5523/ar5523.c:1376 [inline]
     ar5523_probe+0x14b0/0x1d10 drivers/net/wireless/ath/ar5523/ar5523.c:1655
     usb_probe_interface+0x30f/0x7f0 drivers/usb/core/driver.c:396
     call_driver_probe drivers/base/dd.c:560 [inline]
     really_probe+0x249/0xb90 drivers/base/dd.c:639
     __driver_probe_device+0x1df/0x4d0 drivers/base/dd.c:778
     driver_probe_device+0x4c/0x1a0 drivers/base/dd.c:808
     __device_attach_driver+0x1d4/0x2e0 drivers/base/dd.c:936
     bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:427
     __device_attach+0x1e4/0x530 drivers/base/dd.c:1008
     bus_probe_device+0x1e8/0x2a0 drivers/base/bus.c:487
     device_add+0xbd9/0x1e90 drivers/base/core.c:3517
     usb_set_configuration+0x101d/0x1900 drivers/usb/core/message.c:2170
     usb_generic_driver_probe+0xbe/0x100 drivers/usb/core/generic.c:238
     usb_probe_device+0xd8/0x2c0 drivers/usb/core/driver.c:293
     call_driver_probe drivers/base/dd.c:560 [inline]
     really_probe+0x249/0xb90 drivers/base/dd.c:639
     __driver_probe_device+0x1df/0x4d0 drivers/base/dd.c:778
     driver_probe_device+0x4c/0x1a0 drivers/base/dd.c:808
     __device_attach_driver+0x1d4/0x2e0 drivers/base/dd.c:936
     bus_for_each_drv+0x163/0x1e0 drivers/base/bus.c:427
     __device_attach+0x1e4/0x530 drivers/base/dd.c:1008
     bus_probe_device+0x1e8/0x2a0 drivers/base/bus.c:487
     device_add+0xbd9/0x1e90 drivers/base/core.c:3517
     usb_new_device.cold+0x685/0x10ad drivers/usb/core/hub.c:2573
     hub_port_connect drivers/usb/core/hub.c:5353 [inline]
     hub_port_connect_change drivers/usb/core/hub.c:5497 [inline]
     port_event drivers/usb/core/hub.c:5653 [inline]
     hub_event+0x26cb/0x45d0 drivers/usb/core/hub.c:5735
     process_one_work+0x9bf/0x1710 kernel/workqueue.c:2289
     worker_thread+0x669/0x1090 kernel/workqueue.c:2436
     kthread+0x2e8/0x3a0 kernel/kthread.c:376
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:306
     </TASK>
    
    Reported-and-tested-by: syzbot+1bc2c2afd44f820a669f@syzkaller.appspotmail.com
    Fixes: b7d572e1871d ("ar5523: Add new driver")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://msgid.link/20240408121425.29392-1-n.zhandarovich@fintech.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath10k: Fix an error code problem in ath10k_dbg_sta_write_peer_debug_trigger() [+ + +]
Author: Su Hui <suhui@nfschina.com>
Date:   Mon Apr 22 11:42:44 2024 +0800

    wifi: ath10k: Fix an error code problem in ath10k_dbg_sta_write_peer_debug_trigger()
    
    [ Upstream commit c511a9c12674d246916bb16c479d496b76983193 ]
    
    Clang Static Checker (scan-build) warns:
    
    drivers/net/wireless/ath/ath10k/debugfs_sta.c:line 429, column 3
    Value stored to 'ret' is never read.
    
    Return 'ret' rather than 'count' when 'ret' stores an error code.
    
    Fixes: ee8b08a1be82 ("ath10k: add debugfs support to get per peer tids log via tracing")
    Signed-off-by: Su Hui <suhui@nfschina.com>
    Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://msgid.link/20240422034243.938962-1-suhui@nfschina.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath10k: poll service ready message before failing [+ + +]
Author: Baochen Qiang <quic_bqiang@quicinc.com>
Date:   Wed Mar 6 07:15:14 2024 +0200

    wifi: ath10k: poll service ready message before failing
    
    [ Upstream commit e57b7d62a1b2f496caf0beba81cec3c90fad80d5 ]
    
    Currently host relies on CE interrupts to get notified that
    the service ready message is ready. This results in timeout
    issue if the interrupt is not fired, due to some unknown
    reasons. See below logs:
    
    [76321.937866] ath10k_pci 0000:02:00.0: wmi service ready event not received
    ...
    [76322.016738] ath10k_pci 0000:02:00.0: Could not init core: -110
    
    And finally it causes WLAN interface bring up failure.
    
    Change to give it one more chance here by polling CE rings,
    before failing directly.
    
    Tested-on: QCA6174 hw3.2 PCI WLAN.RM.4.4.1-00157-QCARMSWPZ-1
    
    Fixes: 5e3dd157d7e7 ("ath10k: mac80211 driver for Qualcomm Atheros 802.11ac CQA98xx devices")
    Reported-by: James Prestwood <prestwoj@gmail.com>
    Tested-By: James Prestwood <prestwoj@gmail.com> # on QCA6174 hw3.2
    Link: https://lore.kernel.org/linux-wireless/304ce305-fbe6-420e-ac2a-d61ae5e6ca1a@gmail.com/
    Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
    Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://msgid.link/20240227030409.89702-1-quic_bqiang@quicinc.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: ath10k: populate board data for WCN3990 [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Tue Jan 30 08:47:06 2024 +0200

    wifi: ath10k: populate board data for WCN3990
    
    [ Upstream commit f1f1b5b055c9f27a2f90fd0f0521f5920e9b3c18 ]
    
    Specify board data size (and board.bin filename) for the WCN3990
    platform.
    
    Reported-by: Yongqin Liu <yongqin.liu@linaro.org>
    Fixes: 03a72288c546 ("ath10k: wmi: add hw params entry for wcn3990")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://msgid.link/20240130-wcn3990-board-fw-v1-1-738f7c19a8c8@linaro.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: carl9170: add a proper sanity check for endpoints [+ + +]
Author: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
Date:   Mon Apr 22 11:33:55 2024 -0700

    wifi: carl9170: add a proper sanity check for endpoints
    
    [ Upstream commit b6dd09b3dac89b45d1ea3e3bd035a3859c0369a0 ]
    
    Syzkaller reports [1] hitting a warning which is caused by presence
    of a wrong endpoint type at the URB sumbitting stage. While there
    was a check for a specific 4th endpoint, since it can switch types
    between bulk and interrupt, other endpoints are trusted implicitly.
    Similar warning is triggered in a couple of other syzbot issues [2].
    
    Fix the issue by doing a comprehensive check of all endpoints
    taking into account difference between high- and full-speed
    configuration.
    
    [1] Syzkaller report:
    ...
    WARNING: CPU: 0 PID: 4721 at drivers/usb/core/urb.c:504 usb_submit_urb+0xed6/0x1880 drivers/usb/core/urb.c:504
    ...
    Call Trace:
     <TASK>
     carl9170_usb_send_rx_irq_urb+0x273/0x340 drivers/net/wireless/ath/carl9170/usb.c:504
     carl9170_usb_init_device drivers/net/wireless/ath/carl9170/usb.c:939 [inline]
     carl9170_usb_firmware_finish drivers/net/wireless/ath/carl9170/usb.c:999 [inline]
     carl9170_usb_firmware_step2+0x175/0x240 drivers/net/wireless/ath/carl9170/usb.c:1028
     request_firmware_work_func+0x130/0x240 drivers/base/firmware_loader/main.c:1107
     process_one_work+0x9bf/0x1710 kernel/workqueue.c:2289
     worker_thread+0x669/0x1090 kernel/workqueue.c:2436
     kthread+0x2e8/0x3a0 kernel/kthread.c:376
     ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:308
     </TASK>
    
    [2] Related syzkaller crashes:
    Link: https://syzkaller.appspot.com/bug?extid=e394db78ae0b0032cb4d
    Link: https://syzkaller.appspot.com/bug?extid=9468df99cb63a4a4c4e1
    
    Reported-and-tested-by: syzbot+0ae4804973be759fa420@syzkaller.appspotmail.com
    Fixes: a84fab3cbfdc ("carl9170: 802.11 rx/tx processing and usb backend")
    Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
    Acked-By: Christian Lamparter <chunkeey@gmail.com>
    Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
    Link: https://msgid.link/20240422183355.3785-1-n.zhandarovich@fintech.ru
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: fix the order of arguments for trace events of the tx_rx_evt class [+ + +]
Author: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
Date:   Fri Apr 5 18:24:30 2024 +0300

    wifi: cfg80211: fix the order of arguments for trace events of the tx_rx_evt class
    
    [ Upstream commit 9ef369973cd2c97cce3388d2c0c7e3c056656e8a ]
    
    The declarations of the tx_rx_evt class and the rdev_set_antenna event
    use the wrong order of arguments in the TP_ARGS macro.
    
    Fix the order of arguments in the TP_ARGS macro.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Signed-off-by: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
    Link: https://msgid.link/20240405152431.270267-1-Igor.A.Artemiev@mcst.ru
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mwl8k: initialize cmd->addr[] properly [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Sat May 4 14:38:15 2024 +0300

    wifi: mwl8k: initialize cmd->addr[] properly
    
    [ Upstream commit 1d60eabb82694e58543e2b6366dae3e7465892a5 ]
    
    This loop is supposed to copy the mac address to cmd->addr but the
    i++ increment is missing so it copies everything to cmd->addr[0] and
    only the last address is recorded.
    
    Fixes: 22bedad3ce11 ("net: convert multicast list to list_head")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://msgid.link/b788be9a-15f5-4cca-a3fe-79df4c8ce7b2@moroto.mountain
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: rtl8xxxu: Fix the TX power of RTL8192CU, RTL8723AU [+ + +]
Author: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Date:   Mon Apr 15 23:59:05 2024 +0300

    wifi: rtl8xxxu: Fix the TX power of RTL8192CU, RTL8723AU
    
    commit 08b5d052d17a89bb8706b2888277d0b682dc1610 upstream.
    
    Don't subtract 1 from the power index. This was added in commit
    2fc0b8e5a17d ("rtl8xxxu: Add TX power base values for gen1 parts")
    for unknown reasons. The vendor drivers don't do this.
    
    Also correct the calculations of values written to
    REG_OFDM0_X{C,D}_TX_IQ_IMBALANCE. According to the vendor driver,
    these are used for TX power training.
    
    With these changes rtl8xxxu sets the TX power of RTL8192CU the same
    as the vendor driver.
    
    None of this appears to have any effect on my RTL8192CU device.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
    Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
    Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
    Link: https://msgid.link/6ae5945b-644e-45e4-a78f-4c7d9c987910@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/boot: Ignore relocations in .notes sections in walk_relocs() too [+ + +]
Author: Guixiong Wei <weiguixiong@bytedance.com>
Date:   Sun Mar 17 23:05:47 2024 +0800

    x86/boot: Ignore relocations in .notes sections in walk_relocs() too
    
    [ Upstream commit 76e9762d66373354b45c33b60e9a53ef2a3c5ff2 ]
    
    Commit:
    
      aaa8736370db ("x86, relocs: Ignore relocations in .notes section")
    
    ... only started ignoring the .notes sections in print_absolute_relocs(),
    but the same logic should also by applied in walk_relocs() to avoid
    such relocations.
    
    [ mingo: Fixed various typos in the changelog, removed extra curly braces from the code. ]
    
    Fixes: aaa8736370db ("x86, relocs: Ignore relocations in .notes section")
    Fixes: 5ead97c84fa7 ("xen: Core Xen implementation")
    Fixes: da1a679cde9b ("Add /sys/kernel/notes")
    Signed-off-by: Guixiong Wei <weiguixiong@bytedance.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Link: https://lore.kernel.org/r/20240317150547.24910-1-weiguixiong@bytedance.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/insn: Fix PUSH instruction in x86 instruction decoder opcode map [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Thu May 2 13:58:45 2024 +0300

    x86/insn: Fix PUSH instruction in x86 instruction decoder opcode map
    
    [ Upstream commit 59162e0c11d7257cde15f907d19fefe26da66692 ]
    
    The x86 instruction decoder is used not only for decoding kernel
    instructions. It is also used by perf uprobes (user space probes) and by
    perf tools Intel Processor Trace decoding. Consequently, it needs to
    support instructions executed by user space also.
    
    Opcode 0x68 PUSH instruction is currently defined as 64-bit operand size
    only i.e. (d64). That was based on Intel SDM Opcode Map. However that is
    contradicted by the Instruction Set Reference section for PUSH in the
    same manual.
    
    Remove 64-bit operand size only annotation from opcode 0x68 PUSH
    instruction.
    
    Example:
    
      $ cat pushw.s
      .global  _start
      .text
      _start:
              pushw   $0x1234
              mov     $0x1,%eax   # system call number (sys_exit)
              int     $0x80
      $ as -o pushw.o pushw.s
      $ ld -s -o pushw pushw.o
      $ objdump -d pushw | tail -4
      0000000000401000 <.text>:
        401000:       66 68 34 12             pushw  $0x1234
        401004:       b8 01 00 00 00          mov    $0x1,%eax
        401009:       cd 80                   int    $0x80
      $ perf record -e intel_pt//u ./pushw
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.014 MB perf.data ]
    
     Before:
    
      $ perf script --insn-trace=disasm
      Warning:
      1 instruction trace errors
               pushw   10349 [000] 10586.869237014:            401000 [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           pushw $0x1234
               pushw   10349 [000] 10586.869237014:            401006 [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           addb %al, (%rax)
               pushw   10349 [000] 10586.869237014:            401008 [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           addb %cl, %ch
               pushw   10349 [000] 10586.869237014:            40100a [unknown] (/home/ahunter/git/misc/rtit-tests/pushw)           addb $0x2e, (%rax)
       instruction trace error type 1 time 10586.869237224 cpu 0 pid 10349 tid 10349 ip 0x40100d code 6: Trace doesn't match instruction
    
     After:
    
      $ perf script --insn-trace=disasm
                 pushw   10349 [000] 10586.869237014:            401000 [unknown] (./pushw)           pushw $0x1234
                 pushw   10349 [000] 10586.869237014:            401004 [unknown] (./pushw)           movl $1, %eax
    
    Fixes: eb13296cfaf6 ("x86: Instruction decoder API")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20240502105853.5338-3-adrian.hunter@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/kconfig: Select ARCH_WANT_FRAME_POINTERS again when UNWINDER_FRAME_POINTER=y [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sun Feb 4 21:20:03 2024 +0900

    x86/kconfig: Select ARCH_WANT_FRAME_POINTERS again when UNWINDER_FRAME_POINTER=y
    
    [ Upstream commit 66ee3636eddcc82ab82b539d08b85fb5ac1dff9b ]
    
    It took me some time to understand the purpose of the tricky code at
    the end of arch/x86/Kconfig.debug.
    
    Without it, the following would be shown:
    
      WARNING: unmet direct dependencies detected for FRAME_POINTER
    
    because
    
      81d387190039 ("x86/kconfig: Consolidate unwinders into multiple choice selection")
    
    removed 'select ARCH_WANT_FRAME_POINTERS'.
    
    The correct and more straightforward approach should have been to move
    it where 'select FRAME_POINTER' is located.
    
    Several architectures properly handle the conditional selection of
    ARCH_WANT_FRAME_POINTERS. For example, 'config UNWINDER_FRAME_POINTER'
    in arch/arm/Kconfig.debug.
    
    Fixes: 81d387190039 ("x86/kconfig: Consolidate unwinders into multiple choice selection")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Link: https://lore.kernel.org/r/20240204122003.53795-1-masahiroy@kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/purgatory: Switch to the position-independent small code model [+ + +]
Author: Ard Biesheuvel <ardb@kernel.org>
Date:   Thu Apr 18 22:17:06 2024 +0200

    x86/purgatory: Switch to the position-independent small code model
    
    [ Upstream commit cba786af84a0f9716204e09f518ce3b7ada8555e ]
    
    On x86, the ordinary, position dependent small and kernel code models
    only support placement of the executable in 32-bit addressable memory,
    due to the use of 32-bit signed immediates to generate references to
    global variables. For the kernel, this implies that all global variables
    must reside in the top 2 GiB of the kernel virtual address space, where
    the implicit address bits 63:32 are equal to sign bit 31.
    
    This means the kernel code model is not suitable for other bare metal
    executables such as the kexec purgatory, which can be placed arbitrarily
    in the physical address space, where its address may no longer be
    representable as a sign extended 32-bit quantity. For this reason,
    commit
    
      e16c2983fba0 ("x86/purgatory: Change compiler flags from -mcmodel=kernel to -mcmodel=large to fix kexec relocation errors")
    
    switched to the large code model, which uses 64-bit immediates for all
    symbol references, including function calls, in order to avoid relying
    on any assumptions regarding proximity of symbols in the final
    executable.
    
    The large code model is rarely used, clunky and the least likely to
    operate in a similar fashion when comparing GCC and Clang, so it is best
    avoided. This is especially true now that Clang 18 has started to emit
    executable code in two separate sections (.text and .ltext), which
    triggers an issue in the kexec loading code at runtime.
    
    The SUSE bugzilla fixes tag points to gcc 13 having issues with the
    large model too and that perhaps the large model should simply not be
    used at all.
    
    Instead, use the position independent small code model, which makes no
    assumptions about placement but only about proximity, where all
    referenced symbols must be within -/+ 2 GiB, i.e., in range for a
    RIP-relative reference. Use hidden visibility to suppress the use of a
    GOT, which carries absolute addresses that are not covered by static ELF
    relocations, and is therefore incompatible with the kexec loader's
    relocation logic.
    
      [ bp: Massage commit message. ]
    
    Fixes: e16c2983fba0 ("x86/purgatory: Change compiler flags from -mcmodel=kernel to -mcmodel=large to fix kexec relocation errors")
    Fixes: https://bugzilla.suse.com/show_bug.cgi?id=1211853
    Closes: https://github.com/ClangBuiltLinux/linux/issues/2016
    Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Fangrui Song <maskray@google.com>
    Acked-by: Nick Desaulniers <ndesaulniers@google.com>
    Tested-by: Nathan Chancellor <nathan@kernel.org>
    Link: https://lore.kernel.org/all/20240417-x86-fix-kexec-with-llvm-18-v1-0-5383121e8fb7@kernel.org/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/tsc: Trust initial offset in architectural TSC-adjust MSRs [+ + +]
Author: Daniel J Blueman <daniel@quora.org>
Date:   Fri Apr 19 16:51:46 2024 +0800

    x86/tsc: Trust initial offset in architectural TSC-adjust MSRs
    
    commit 455f9075f14484f358b3c1d6845b4a438de198a7 upstream.
    
    When the BIOS configures the architectural TSC-adjust MSRs on secondary
    sockets to correct a constant inter-chassis offset, after Linux brings the
    cores online, the TSC sync check later resets the core-local MSR to 0,
    triggering HPET fallback and leading to performance loss.
    
    Fix this by unconditionally using the initial adjust values read from the
    MSRs. Trusting the initial offsets in this architectural mechanism is a
    better approach than special-casing workarounds for specific platforms.
    
    Signed-off-by: Daniel J Blueman <daniel@quora.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Steffen Persvold <sp@numascale.com>
    Reviewed-by: James Cleverdon <james.cleverdon.external@eviden.com>
    Reviewed-by: Dimitri Sivanich <sivanich@hpe.com>
    Reviewed-by: Prarit Bhargava <prarit@redhat.com>
    Link: https://lore.kernel.org/r/20240419085146.175665-1-daniel@quora.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>