Changelog in Linux kernel 6.1.107

 
9P FS: Fix wild-memory-access write in v9fs_get_acl [+ + +]
Author: Ivan Orlov <ivan.orlov0322@gmail.com>
Date:   Sat Mar 11 16:50:25 2023 +0400

    9P FS: Fix wild-memory-access write in v9fs_get_acl
    
    [ Upstream commit 707823e7f22f3864ddc7d85e8e9b614afe4f1b16 ]
    
    KASAN reported the following issue:
    [   36.825817][ T5923] BUG: KASAN: wild-memory-access in v9fs_get_acl+0x1a4/0x390
    [   36.827479][ T5923] Write of size 4 at addr 9fffeb37f97f1c00 by task syz-executor798/5923
    [   36.829303][ T5923]
    [   36.829846][ T5923] CPU: 0 PID: 5923 Comm: syz-executor798 Not tainted 6.2.0-syzkaller-18302-g596b6b709632 #0
    [   36.832110][ T5923] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/21/2023
    [   36.834464][ T5923] Call trace:
    [   36.835196][ T5923]  dump_backtrace+0x1c8/0x1f4
    [   36.836229][ T5923]  show_stack+0x2c/0x3c
    [   36.837100][ T5923]  dump_stack_lvl+0xd0/0x124
    [   36.838103][ T5923]  print_report+0xe4/0x4c0
    [   36.839068][ T5923]  kasan_report+0xd4/0x130
    [   36.840052][ T5923]  kasan_check_range+0x264/0x2a4
    [   36.841199][ T5923]  __kasan_check_write+0x2c/0x3c
    [   36.842216][ T5923]  v9fs_get_acl+0x1a4/0x390
    [   36.843232][ T5923]  v9fs_mount+0x77c/0xa5c
    [   36.844163][ T5923]  legacy_get_tree+0xd4/0x16c
    [   36.845173][ T5923]  vfs_get_tree+0x90/0x274
    [   36.846137][ T5923]  do_new_mount+0x25c/0x8c8
    [   36.847066][ T5923]  path_mount+0x590/0xe58
    [   36.848147][ T5923]  __arm64_sys_mount+0x45c/0x594
    [   36.849273][ T5923]  invoke_syscall+0x98/0x2c0
    [   36.850421][ T5923]  el0_svc_common+0x138/0x258
    [   36.851397][ T5923]  do_el0_svc+0x64/0x198
    [   36.852398][ T5923]  el0_svc+0x58/0x168
    [   36.853224][ T5923]  el0t_64_sync_handler+0x84/0xf0
    [   36.854293][ T5923]  el0t_64_sync+0x190/0x194
    
    Calling '__v9fs_get_acl' method in 'v9fs_get_acl' creates the
    following chain of function calls:
    
    __v9fs_get_acl
            v9fs_fid_get_acl
                    v9fs_fid_xattr_get
                            p9_client_xattrwalk
    
    Function p9_client_xattrwalk accepts a pointer to u64-typed
    variable attr_size and puts some u64 value into it. However,
    after the executing the p9_client_xattrwalk, in some circumstances
    we assign the value of u64-typed variable 'attr_size' to the
    variable 'retval', which we will return. However, the type of
    'retval' is ssize_t, and if the value of attr_size is larger
    than SSIZE_MAX, we will face the signed type overflow. If the
    overflow occurs, the result of v9fs_fid_xattr_get may be
    negative, but not classified as an error. When we try to allocate
    an acl with 'broken' size we receive an error, but don't process
    it. When we try to free this acl, we face the 'wild-memory-access'
    error (because it wasn't allocated).
    
    This patch will add new condition to the 'v9fs_fid_xattr_get'
    function, so it will return an EOVERFLOW error if the 'attr_size'
    is larger than SSIZE_MAX.
    
    In this version of the patch I simplified the condition.
    
    In previous (v2) version of the patch I removed explicit type conversion
    and added separate condition to check the possible overflow and return
    an error (in v1 version I've just modified the existing condition).
    
    Tested via syzkaller.
    
    Suggested-by: Christian Schoenebeck <linux_oss@crudebyte.com>
    Reported-by: syzbot+cb1d16facb3cc90de5fb@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?id=fbbef66d9e4d096242f3617de5d14d12705b4659
    Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com>
    Reviewed-by: Christian Schoenebeck <linux_oss@crudebyte.com>
    Signed-off-by: Eric Van Hensbergen <ericvh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
afs: fix __afs_break_callback() / afs_drop_open_mmap() race [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Fri Sep 29 20:24:34 2023 -0400

    afs: fix __afs_break_callback() / afs_drop_open_mmap() race
    
    [ Upstream commit 275655d3207b9e65d1561bf21c06a622d9ec1d43 ]
    
    In __afs_break_callback() we might check ->cb_nr_mmap and if it's non-zero
    do queue_work(&vnode->cb_work).  In afs_drop_open_mmap() we decrement
    ->cb_nr_mmap and do flush_work(&vnode->cb_work) if it reaches zero.
    
    The trouble is, there's nothing to prevent __afs_break_callback() from
    seeing ->cb_nr_mmap before the decrement and do queue_work() after both
    the decrement and flush_work().  If that happens, we might be in trouble -
    vnode might get freed before the queued work runs.
    
    __afs_break_callback() is always done under ->cb_lock, so let's make
    sure that ->cb_nr_mmap can change from non-zero to zero while holding
    ->cb_lock (the spinlock component of it - it's a seqlock and we don't
    need to mess with the counter).
    
    Acked-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda/realtek: Fix noise from speakers on Lenovo IdeaPad 3 15IAU7 [+ + +]
Author: Parsa Poorshikhian <parsa.poorsh@gmail.com>
Date:   Sat Aug 10 18:39:06 2024 +0330

    ALSA: hda/realtek: Fix noise from speakers on Lenovo IdeaPad 3 15IAU7
    
    [ Upstream commit ef9718b3d54e822de294351251f3a574f8a082ce ]
    
    Fix noise from speakers connected to AUX port when no sound is playing.
    The problem occurs because the `alc_shutup_pins` function includes
    a 0x10ec0257 vendor ID, which causes noise on Lenovo IdeaPad 3 15IAU7 with
    Realtek ALC257 codec when no sound is playing.
    Removing this vendor ID from the function fixes the bug.
    
    Fixes: 70794b9563fe ("ALSA: hda/realtek: Add more codec ID to no shutup pins list")
    Signed-off-by: Parsa Poorshikhian <parsa.poorsh@gmail.com>
    Link: https://patch.msgid.link/20240810150939.330693-1-parsa.poorsh@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: timer: Relax start tick time check for slave timer elements [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Aug 10 10:48:32 2024 +0200

    ALSA: timer: Relax start tick time check for slave timer elements
    
    commit ccbfcac05866ebe6eb3bc6d07b51d4ed4fcde436 upstream.
    
    The recent addition of a sanity check for a too low start tick time
    seems breaking some applications that uses aloop with a certain slave
    timer setup.  They may have the initial resolution 0, hence it's
    treated as if it were a too low value.
    
    Relax and skip the check for the slave timer instance for addressing
    the regression.
    
    Fixes: 4a63bd179fa8 ("ALSA: timer: Set lower bound of start tick time")
    Cc: <stable@vger.kernel.org>
    Link: https://github.com/raspberrypi/linux/issues/6294
    Link: https://patch.msgid.link/20240810084833.10939-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Add delay quirk for VIVO USB-C-XE710 HEADSET [+ + +]
Author: Lianqin Hu <hulianqin@vivo.com>
Date:   Sun Aug 11 08:30:11 2024 +0000

    ALSA: usb-audio: Add delay quirk for VIVO USB-C-XE710 HEADSET
    
    commit 004eb8ba776ccd3e296ea6f78f7ae7985b12824e upstream.
    
    Audio control requests that sets sampling frequency sometimes fail on
    this card. Adding delay between control messages eliminates that problem.
    
    Signed-off-by: Lianqin Hu <hulianqin@vivo.com>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/TYUPR06MB6217FF67076AF3E49E12C877D2842@TYUPR06MB6217.apcprd06.prod.outlook.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb-audio: Support Yamaha P-125 quirk entry [+ + +]
Author: Juan José Arboleda <soyjuanarbol@gmail.com>
Date:   Tue Aug 13 11:10:53 2024 -0500

    ALSA: usb-audio: Support Yamaha P-125 quirk entry
    
    commit c286f204ce6ba7b48e3dcba53eda7df8eaa64dd9 upstream.
    
    This patch adds a USB quirk for the Yamaha P-125 digital piano.
    
    Signed-off-by: Juan José Arboleda <soyjuanarbol@gmail.com>
    Cc: <stable@vger.kernel.org>
    Link: https://patch.msgid.link/20240813161053.70256-1-soyjuanarbol@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: usb: Fix UBSAN warning in parse_audio_unit() [+ + +]
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Jul 15 14:35:54 2024 +0200

    ALSA: usb: Fix UBSAN warning in parse_audio_unit()
    
    [ Upstream commit 2f38cf730caedaeacdefb7ff35b0a3c1168117f9 ]
    
    A malformed USB descriptor may pass the lengthy mixer description with
    a lot of channels, and this may overflow the 32bit integer shift
    size, as caught by syzbot UBSAN test.  Although this won't cause any
    real trouble, it's better to address.
    
    This patch introduces a sanity check of the number of channels to bail
    out the parsing when too many channels are found.
    
    Reported-by: syzbot+78d5b129a762182225aa@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/0000000000000adac5061d3c7355@google.com
    Link: https://patch.msgid.link/20240715123619.26612-1-tiwai@suse.de
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: ACPI: NUMA: initialize all values of acpi_early_node_map to NUMA_NO_NODE [+ + +]
Author: Haibo Xu <haibo1.xu@intel.com>
Date:   Mon Aug 5 11:30:24 2024 +0800

    arm64: ACPI: NUMA: initialize all values of acpi_early_node_map to NUMA_NO_NODE
    
    commit a21dcf0ea8566ebbe011c79d6ed08cdfea771de3 upstream.
    
    Currently, only acpi_early_node_map[0] was initialized to NUMA_NO_NODE.
    To ensure all the values were properly initialized, switch to initialize
    all of them to NUMA_NO_NODE.
    
    Fixes: e18962491696 ("arm64: numa: rework ACPI NUMA initialization")
    Cc: <stable@vger.kernel.org> # 4.19.x
    Reported-by: Andrew Jones <ajones@ventanamicro.com>
    Suggested-by: Andrew Jones <ajones@ventanamicro.com>
    Signed-off-by: Haibo Xu <haibo1.xu@intel.com>
    Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com>
    Reviewed-by: Sunil V L <sunilvl@ventanamicro.com>
    Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
    Acked-by: Catalin Marinas <catalin.marinas@arm.com>
    Acked-by: Lorenzo Pieralisi <lpieralisi@kernel.org>
    Reviewed-by: Hanjun Guo <guohanjun@huawei.com>
    Link: https://lore.kernel.org/r/853d7f74aa243f6f5999e203246f0d1ae92d2b61.1722828421.git.haibo1.xu@intel.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: Fix KASAN random tag seed initialization [+ + +]
Author: Samuel Holland <samuel.holland@sifive.com>
Date:   Wed Aug 14 02:09:53 2024 -0700

    arm64: Fix KASAN random tag seed initialization
    
    [ Upstream commit f75c235565f90c4a17b125e47f1c68ef6b8c2bce ]
    
    Currently, kasan_init_sw_tags() is called before setup_per_cpu_areas(),
    so per_cpu(prng_state, cpu) accesses the same address regardless of the
    value of "cpu", and the same seed value gets copied to the percpu area
    for every CPU. Fix this by moving the call to smp_prepare_boot_cpu(),
    which is the first architecture hook after setup_per_cpu_areas().
    
    Fixes: 3c9e3aa11094 ("kasan: add tag related helper functions")
    Fixes: 3f41b6093823 ("kasan: fix random seed generation for tag-based mode")
    Signed-off-by: Samuel Holland <samuel.holland@sifive.com>
    Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com>
    Link: https://lore.kernel.org/r/20240814091005.969756-1-samuel.holland@sifive.com
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: SOF: ipc4: check return value of snd_sof_ipc_msg_data [+ + +]
Author: Bard Liao <yung-chuan.liao@linux.intel.com>
Date:   Wed Nov 29 14:20:21 2023 +0200

    ASoC: SOF: ipc4: check return value of snd_sof_ipc_msg_data
    
    [ Upstream commit 2bd512626f8ea3957c981cadd2ebf75feff737dd ]
    
    snd_sof_ipc_msg_data could return error.
    
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Link: https://lore.kernel.org/r/20231129122021.679-1-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
atm: idt77252: prevent use after free in dequeue_rx() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Aug 9 15:28:19 2024 +0300

    atm: idt77252: prevent use after free in dequeue_rx()
    
    [ Upstream commit a9a18e8f770c9b0703dab93580d0b02e199a4c79 ]
    
    We can't dereference "skb" after calling vcc->push() because the skb
    is released.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
binfmt_misc: cleanup on filesystem umount [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Thu Oct 28 12:31:13 2021 +0200

    binfmt_misc: cleanup on filesystem umount
    
    [ Upstream commit 1c5976ef0f7ad76319df748ccb99a4c7ba2ba464 ]
    
    Currently, registering a new binary type pins the binfmt_misc
    filesystem. Specifically, this means that as long as there is at least
    one binary type registered the binfmt_misc filesystem survives all
    umounts, i.e. the superblock is not destroyed. Meaning that a umount
    followed by another mount will end up with the same superblock and the
    same binary type handlers. This is a behavior we tend to discourage for
    any new filesystems (apart from a few special filesystems such as e.g.
    configfs or debugfs). A umount operation without the filesystem being
    pinned - by e.g. someone holding a file descriptor to an open file -
    should usually result in the destruction of the superblock and all
    associated resources. This makes introspection easier and leads to
    clearly defined, simple and clean semantics. An administrator can rely
    on the fact that a umount will guarantee a clean slate making it
    possible to reinitialize a filesystem. Right now all binary types would
    need to be explicitly deleted before that can happen.
    
    This allows us to remove the heavy-handed calls to simple_pin_fs() and
    simple_release_fs() when creating and deleting binary types. This in
    turn allows us to replace the current brittle pinning mechanism abusing
    dget() which has caused a range of bugs judging from prior fixes in [2]
    and [3]. The additional dget() in load_misc_binary() pins the dentry but
    only does so for the sake to prevent ->evict_inode() from freeing the
    node when a user removes the binary type and kill_node() is run. Which
    would mean ->interpreter and ->interp_file would be freed causing a UAF.
    
    This isn't really nicely documented nor is it very clean because it
    relies on simple_pin_fs() pinning the filesystem as long as at least one
    binary type exists. Otherwise it would cause load_misc_binary() to hold
    on to a dentry belonging to a superblock that has been shutdown.
    Replace that implicit pinning with a clean and simple per-node refcount
    and get rid of the ugly dget() pinning. A similar mechanism exists for
    e.g. binderfs (cf. [4]). All the cleanup work can now be done in
    ->evict_inode().
    
    In a follow-up patch we will make it possible to use binfmt_misc in
    sandboxes. We will use the cleaner semantics where a umount for the
    filesystem will cause the superblock and all resources to be
    deallocated. In preparation for this apply the same semantics to the
    initial binfmt_misc mount. Note, that this is a user-visible change and
    as such a uapi change but one that we can reasonably risk. We've
    discussed this in earlier versions of this patchset (cf. [1]).
    
    The main user and provider of binfmt_misc is systemd. Systemd provides
    binfmt_misc via autofs since it is configurable as a kernel module and
    is used by a few exotic packages and users. As such a binfmt_misc mount
    is triggered when /proc/sys/fs/binfmt_misc is accessed and is only
    provided on demand. Other autofs on demand filesystems include EFI ESP
    which systemd umounts if the mountpoint stays idle for a certain amount
    of time. This doesn't apply to the binfmt_misc autofs mount which isn't
    touched once it is mounted meaning this change can't accidently wipe
    binary type handlers without someone having explicitly unmounted
    binfmt_misc. After speaking to systemd folks they don't expect this
    change to affect them.
    
    In line with our general policy, if we see a regression for systemd or
    other users with this change we will switch back to the old behavior for
    the initial binfmt_misc mount and have binary types pin the filesystem
    again. But while we touch this code let's take the chance and let's
    improve on the status quo.
    
    [1]: https://lore.kernel.org/r/20191216091220.465626-2-laurent@vivier.eu
    [2]: commit 43a4f2619038 ("exec: binfmt_misc: fix race between load_misc_binary() and kill_node()"
    [3]: commit 83f918274e4b ("exec: binfmt_misc: shift filp_close(interp_file) from kill_node() to bm_evict_inode()")
    [4]: commit f0fe2c0f050d ("binder: prevent UAF for binderfs devices II")
    
    Link: https://lore.kernel.org/r/20211028103114.2849140-1-brauner@kernel.org (v1)
    Cc: Sargun Dhillon <sargun@sargun.me>
    Cc: Serge Hallyn <serge@hallyn.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: Henning Schild <henning.schild@siemens.com>
    Cc: Andrei Vagin <avagin@gmail.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Laurent Vivier <laurent@vivier.eu>
    Cc: linux-fsdevel@vger.kernel.org
    Acked-by: Serge Hallyn <serge@hallyn.com>
    Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bitmap: introduce generic optimized bitmap_size() [+ + +]
Author: Alexander Lobakin <aleksander.lobakin@intel.com>
Date:   Wed Mar 27 16:23:49 2024 +0100

    bitmap: introduce generic optimized bitmap_size()
    
    commit a37fbe666c016fd89e4460d0ebfcea05baba46dc upstream.
    
    The number of times yet another open coded
    `BITS_TO_LONGS(nbits) * sizeof(long)` can be spotted is huge.
    Some generic helper is long overdue.
    
    Add one, bitmap_size(), but with one detail.
    BITS_TO_LONGS() uses DIV_ROUND_UP(). The latter works well when both
    divident and divisor are compile-time constants or when the divisor
    is not a pow-of-2. When it is however, the compilers sometimes tend
    to generate suboptimal code (GCC 13):
    
    48 83 c0 3f             add    $0x3f,%rax
    48 c1 e8 06             shr    $0x6,%rax
    48 8d 14 c5 00 00 00 00 lea    0x0(,%rax,8),%rdx
    
    %BITS_PER_LONG is always a pow-2 (either 32 or 64), but GCC still does
    full division of `nbits + 63` by it and then multiplication by 8.
    Instead of BITS_TO_LONGS(), use ALIGN() and then divide by 8. GCC:
    
    8d 50 3f                lea    0x3f(%rax),%edx
    c1 ea 03                shr    $0x3,%edx
    81 e2 f8 ff ff 1f       and    $0x1ffffff8,%edx
    
    Now it shifts `nbits + 63` by 3 positions (IOW performs fast division
    by 8) and then masks bits[2:0]. bloat-o-meter:
    
    add/remove: 0/0 grow/shrink: 20/133 up/down: 156/-773 (-617)
    
    Clang does it better and generates the same code before/after starting
    from -O1, except that with the ALIGN() approach it uses %edx and thus
    still saves some bytes:
    
    add/remove: 0/0 grow/shrink: 9/133 up/down: 18/-538 (-520)
    
    Note that we can't expand DIV_ROUND_UP() by adding a check and using
    this approach there, as it's used in array declarations where
    expressions are not allowed.
    Add this helper to tools/ as well.
    
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Acked-by: Yury Norov <yury.norov@gmail.com>
    Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: Fix lockdep warning in blk_mq_mark_tag_wait [+ + +]
Author: Li Lingfeng <lilingfeng3@huawei.com>
Date:   Thu Aug 15 10:47:36 2024 +0800

    block: Fix lockdep warning in blk_mq_mark_tag_wait
    
    [ Upstream commit b313a8c835516bdda85025500be866ac8a74e022 ]
    
    Lockdep reported a warning in Linux version 6.6:
    
    [  414.344659] ================================
    [  414.345155] WARNING: inconsistent lock state
    [  414.345658] 6.6.0-07439-gba2303cacfda #6 Not tainted
    [  414.346221] --------------------------------
    [  414.346712] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
    [  414.347545] kworker/u10:3/1152 [HC0[0]:SC0[0]:HE0:SE1] takes:
    [  414.349245] ffff88810edd1098 (&sbq->ws[i].wait){+.?.}-{2:2}, at: blk_mq_dispatch_rq_list+0x131c/0x1ee0
    [  414.351204] {IN-SOFTIRQ-W} state was registered at:
    [  414.351751]   lock_acquire+0x18d/0x460
    [  414.352218]   _raw_spin_lock_irqsave+0x39/0x60
    [  414.352769]   __wake_up_common_lock+0x22/0x60
    [  414.353289]   sbitmap_queue_wake_up+0x375/0x4f0
    [  414.353829]   sbitmap_queue_clear+0xdd/0x270
    [  414.354338]   blk_mq_put_tag+0xdf/0x170
    [  414.354807]   __blk_mq_free_request+0x381/0x4d0
    [  414.355335]   blk_mq_free_request+0x28b/0x3e0
    [  414.355847]   __blk_mq_end_request+0x242/0xc30
    [  414.356367]   scsi_end_request+0x2c1/0x830
    [  414.345155] WARNING: inconsistent lock state
    [  414.345658] 6.6.0-07439-gba2303cacfda #6 Not tainted
    [  414.346221] --------------------------------
    [  414.346712] inconsistent {IN-SOFTIRQ-W} -> {SOFTIRQ-ON-W} usage.
    [  414.347545] kworker/u10:3/1152 [HC0[0]:SC0[0]:HE0:SE1] takes:
    [  414.349245] ffff88810edd1098 (&sbq->ws[i].wait){+.?.}-{2:2}, at: blk_mq_dispatch_rq_list+0x131c/0x1ee0
    [  414.351204] {IN-SOFTIRQ-W} state was registered at:
    [  414.351751]   lock_acquire+0x18d/0x460
    [  414.352218]   _raw_spin_lock_irqsave+0x39/0x60
    [  414.352769]   __wake_up_common_lock+0x22/0x60
    [  414.353289]   sbitmap_queue_wake_up+0x375/0x4f0
    [  414.353829]   sbitmap_queue_clear+0xdd/0x270
    [  414.354338]   blk_mq_put_tag+0xdf/0x170
    [  414.354807]   __blk_mq_free_request+0x381/0x4d0
    [  414.355335]   blk_mq_free_request+0x28b/0x3e0
    [  414.355847]   __blk_mq_end_request+0x242/0xc30
    [  414.356367]   scsi_end_request+0x2c1/0x830
    [  414.356863]   scsi_io_completion+0x177/0x1610
    [  414.357379]   scsi_complete+0x12f/0x260
    [  414.357856]   blk_complete_reqs+0xba/0xf0
    [  414.358338]   __do_softirq+0x1b0/0x7a2
    [  414.358796]   irq_exit_rcu+0x14b/0x1a0
    [  414.359262]   sysvec_call_function_single+0xaf/0xc0
    [  414.359828]   asm_sysvec_call_function_single+0x1a/0x20
    [  414.360426]   default_idle+0x1e/0x30
    [  414.360873]   default_idle_call+0x9b/0x1f0
    [  414.361390]   do_idle+0x2d2/0x3e0
    [  414.361819]   cpu_startup_entry+0x55/0x60
    [  414.362314]   start_secondary+0x235/0x2b0
    [  414.362809]   secondary_startup_64_no_verify+0x18f/0x19b
    [  414.363413] irq event stamp: 428794
    [  414.363825] hardirqs last  enabled at (428793): [<ffffffff816bfd1c>] ktime_get+0x1dc/0x200
    [  414.364694] hardirqs last disabled at (428794): [<ffffffff85470177>] _raw_spin_lock_irq+0x47/0x50
    [  414.365629] softirqs last  enabled at (428444): [<ffffffff85474780>] __do_softirq+0x540/0x7a2
    [  414.366522] softirqs last disabled at (428419): [<ffffffff813f65ab>] irq_exit_rcu+0x14b/0x1a0
    [  414.367425]
                   other info that might help us debug this:
    [  414.368194]  Possible unsafe locking scenario:
    [  414.368900]        CPU0
    [  414.369225]        ----
    [  414.369548]   lock(&sbq->ws[i].wait);
    [  414.370000]   <Interrupt>
    [  414.370342]     lock(&sbq->ws[i].wait);
    [  414.370802]
                    *** DEADLOCK ***
    [  414.371569] 5 locks held by kworker/u10:3/1152:
    [  414.372088]  #0: ffff88810130e938 ((wq_completion)writeback){+.+.}-{0:0}, at: process_scheduled_works+0x357/0x13f0
    [  414.373180]  #1: ffff88810201fdb8 ((work_completion)(&(&wb->dwork)->work)){+.+.}-{0:0}, at: process_scheduled_works+0x3a3/0x13f0
    [  414.374384]  #2: ffffffff86ffbdc0 (rcu_read_lock){....}-{1:2}, at: blk_mq_run_hw_queue+0x637/0xa00
    [  414.375342]  #3: ffff88810edd1098 (&sbq->ws[i].wait){+.?.}-{2:2}, at: blk_mq_dispatch_rq_list+0x131c/0x1ee0
    [  414.376377]  #4: ffff888106205a08 (&hctx->dispatch_wait_lock){+.-.}-{2:2}, at: blk_mq_dispatch_rq_list+0x1337/0x1ee0
    [  414.378607]
                   stack backtrace:
    [  414.379177] CPU: 0 PID: 1152 Comm: kworker/u10:3 Not tainted 6.6.0-07439-gba2303cacfda #6
    [  414.380032] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
    [  414.381177] Workqueue: writeback wb_workfn (flush-253:0)
    [  414.381805] Call Trace:
    [  414.382136]  <TASK>
    [  414.382429]  dump_stack_lvl+0x91/0xf0
    [  414.382884]  mark_lock_irq+0xb3b/0x1260
    [  414.383367]  ? __pfx_mark_lock_irq+0x10/0x10
    [  414.383889]  ? stack_trace_save+0x8e/0xc0
    [  414.384373]  ? __pfx_stack_trace_save+0x10/0x10
    [  414.384903]  ? graph_lock+0xcf/0x410
    [  414.385350]  ? save_trace+0x3d/0xc70
    [  414.385808]  mark_lock.part.20+0x56d/0xa90
    [  414.386317]  mark_held_locks+0xb0/0x110
    [  414.386791]  ? __pfx_do_raw_spin_lock+0x10/0x10
    [  414.387320]  lockdep_hardirqs_on_prepare+0x297/0x3f0
    [  414.387901]  ? _raw_spin_unlock_irq+0x28/0x50
    [  414.388422]  trace_hardirqs_on+0x58/0x100
    [  414.388917]  _raw_spin_unlock_irq+0x28/0x50
    [  414.389422]  __blk_mq_tag_busy+0x1d6/0x2a0
    [  414.389920]  __blk_mq_get_driver_tag+0x761/0x9f0
    [  414.390899]  blk_mq_dispatch_rq_list+0x1780/0x1ee0
    [  414.391473]  ? __pfx_blk_mq_dispatch_rq_list+0x10/0x10
    [  414.392070]  ? sbitmap_get+0x2b8/0x450
    [  414.392533]  ? __blk_mq_get_driver_tag+0x210/0x9f0
    [  414.393095]  __blk_mq_sched_dispatch_requests+0xd99/0x1690
    [  414.393730]  ? elv_attempt_insert_merge+0x1b1/0x420
    [  414.394302]  ? __pfx___blk_mq_sched_dispatch_requests+0x10/0x10
    [  414.394970]  ? lock_acquire+0x18d/0x460
    [  414.395456]  ? blk_mq_run_hw_queue+0x637/0xa00
    [  414.395986]  ? __pfx_lock_acquire+0x10/0x10
    [  414.396499]  blk_mq_sched_dispatch_requests+0x109/0x190
    [  414.397100]  blk_mq_run_hw_queue+0x66e/0xa00
    [  414.397616]  blk_mq_flush_plug_list.part.17+0x614/0x2030
    [  414.398244]  ? __pfx_blk_mq_flush_plug_list.part.17+0x10/0x10
    [  414.398897]  ? writeback_sb_inodes+0x241/0xcc0
    [  414.399429]  blk_mq_flush_plug_list+0x65/0x80
    [  414.399957]  __blk_flush_plug+0x2f1/0x530
    [  414.400458]  ? __pfx___blk_flush_plug+0x10/0x10
    [  414.400999]  blk_finish_plug+0x59/0xa0
    [  414.401467]  wb_writeback+0x7cc/0x920
    [  414.401935]  ? __pfx_wb_writeback+0x10/0x10
    [  414.402442]  ? mark_held_locks+0xb0/0x110
    [  414.402931]  ? __pfx_do_raw_spin_lock+0x10/0x10
    [  414.403462]  ? lockdep_hardirqs_on_prepare+0x297/0x3f0
    [  414.404062]  wb_workfn+0x2b3/0xcf0
    [  414.404500]  ? __pfx_wb_workfn+0x10/0x10
    [  414.404989]  process_scheduled_works+0x432/0x13f0
    [  414.405546]  ? __pfx_process_scheduled_works+0x10/0x10
    [  414.406139]  ? do_raw_spin_lock+0x101/0x2a0
    [  414.406641]  ? assign_work+0x19b/0x240
    [  414.407106]  ? lock_is_held_type+0x9d/0x110
    [  414.407604]  worker_thread+0x6f2/0x1160
    [  414.408075]  ? __kthread_parkme+0x62/0x210
    [  414.408572]  ? lockdep_hardirqs_on_prepare+0x297/0x3f0
    [  414.409168]  ? __kthread_parkme+0x13c/0x210
    [  414.409678]  ? __pfx_worker_thread+0x10/0x10
    [  414.410191]  kthread+0x33c/0x440
    [  414.410602]  ? __pfx_kthread+0x10/0x10
    [  414.411068]  ret_from_fork+0x4d/0x80
    [  414.411526]  ? __pfx_kthread+0x10/0x10
    [  414.411993]  ret_from_fork_asm+0x1b/0x30
    [  414.412489]  </TASK>
    
    When interrupt is turned on while a lock holding by spin_lock_irq it
    throws a warning because of potential deadlock.
    
    blk_mq_prep_dispatch_rq
     blk_mq_get_driver_tag
      __blk_mq_get_driver_tag
       __blk_mq_alloc_driver_tag
        blk_mq_tag_busy -> tag is already busy
        // failed to get driver tag
     blk_mq_mark_tag_wait
      spin_lock_irq(&wq->lock) -> lock A (&sbq->ws[i].wait)
      __add_wait_queue(wq, wait) -> wait queue active
      blk_mq_get_driver_tag
      __blk_mq_tag_busy
    -> 1) tag must be idle, which means there can't be inflight IO
       spin_lock_irq(&tags->lock) -> lock B (hctx->tags)
       spin_unlock_irq(&tags->lock) -> unlock B, turn on interrupt accidentally
    -> 2) context must be preempt by IO interrupt to trigger deadlock.
    
    As shown above, the deadlock is not possible in theory, but the warning
    still need to be fixed.
    
    Fix it by using spin_lock_irqsave to get lockB instead of spin_lock_irq.
    
    Fixes: 4f1731df60f9 ("blk-mq: fix potential io hang by wrong 'wake_batch'")
    Signed-off-by: Li Lingfeng <lilingfeng3@huawei.com>
    Reviewed-by: Ming Lei <ming.lei@redhat.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Link: https://lore.kernel.org/r/20240815024736.2040971-1-lilingfeng@huaweicloud.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Bluetooth: bnep: Fix out-of-bound access [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Wed Feb 28 12:11:08 2024 -0500

    Bluetooth: bnep: Fix out-of-bound access
    
    [ Upstream commit 0f0639b4d6f649338ce29c62da3ec0787fa08cd1 ]
    
    This fixes attempting to access past ethhdr.h_source, although it seems
    intentional to copy also the contents of h_proto this triggers
    out-of-bound access problems with the likes of static analyzer, so this
    instead just copy ETH_ALEN and then proceed to use put_unaligned to copy
    h_proto separetely.
    
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: Fix hci_link_tx_to RCU lock usage [+ + +]
Author: Ying Hsu <yinghsu@chromium.org>
Date:   Mon Sep 4 14:11:51 2023 +0000

    Bluetooth: Fix hci_link_tx_to RCU lock usage
    
    [ Upstream commit c7eaf80bfb0c8cef852cce9501b95dd5a6bddcb9 ]
    
    Syzbot found a bug "BUG: sleeping function called from invalid context
    at kernel/locking/mutex.c:580". It is because hci_link_tx_to holds an
    RCU read lock and calls hci_disconnect which would hold a mutex lock
    since the commit a13f316e90fd ("Bluetooth: hci_conn: Consolidate code
    for aborting connections"). Here's an example call trace:
    
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xfc/0x174 lib/dump_stack.c:106
       ___might_sleep+0x4a9/0x4d3 kernel/sched/core.c:9663
       __mutex_lock_common kernel/locking/mutex.c:576 [inline]
       __mutex_lock+0xc7/0x6e7 kernel/locking/mutex.c:732
       hci_cmd_sync_queue+0x3a/0x287 net/bluetooth/hci_sync.c:388
       hci_abort_conn+0x2cd/0x2e4 net/bluetooth/hci_conn.c:1812
       hci_disconnect+0x207/0x237 net/bluetooth/hci_conn.c:244
       hci_link_tx_to net/bluetooth/hci_core.c:3254 [inline]
       __check_timeout net/bluetooth/hci_core.c:3419 [inline]
       __check_timeout+0x310/0x361 net/bluetooth/hci_core.c:3399
       hci_sched_le net/bluetooth/hci_core.c:3602 [inline]
       hci_tx_work+0xe8f/0x12d0 net/bluetooth/hci_core.c:3652
       process_one_work+0x75c/0xba1 kernel/workqueue.c:2310
       worker_thread+0x5b2/0x73a kernel/workqueue.c:2457
       kthread+0x2f7/0x30b kernel/kthread.c:319
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:298
    
    This patch releases RCU read lock before calling hci_disconnect and
    reacquires it afterward to fix the bug.
    
    Fixes: a13f316e90fd ("Bluetooth: hci_conn: Consolidate code for aborting connections")
    Signed-off-by: Ying Hsu <yinghsu@chromium.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_conn: Check non NULL function before calling for HFP offload [+ + +]
Author: Zijun Hu <quic_zijuhu@quicinc.com>
Date:   Fri Dec 8 09:51:26 2023 +0800

    Bluetooth: hci_conn: Check non NULL function before calling for HFP offload
    
    [ Upstream commit 132d0fd0b8418094c9e269e5bc33bf5b864f4a65 ]
    
    For some controllers such as QCA2066, it does not need to send
    HCI_Configure_Data_Path to configure non-HCI data transport path to support
    HFP offload, their device drivers may set hdev->get_codec_config_data as
    NULL, so Explicitly add this non NULL checking before calling the function.
    
    Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_core: Fix LE quote calculation [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Aug 12 11:22:08 2024 -0400

    Bluetooth: hci_core: Fix LE quote calculation
    
    [ Upstream commit 932021a11805b9da4bd6abf66fe233cccd59fe0e ]
    
    Function hci_sched_le needs to update the respective counter variable
    inplace other the likes of hci_quote_sent would attempt to use the
    possible outdated value of conn->{le_cnt,acl_cnt}.
    
    Link: https://github.com/bluez/bluez/issues/915
    Fixes: 73d80deb7bdf ("Bluetooth: prioritizing data over HCI")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: hci_ldisc: check HCI_UART_PROTO_READY flag in HCIUARTGETPROTO [+ + +]
Author: Lee, Chun-Yi <joeyli.kernel@gmail.com>
Date:   Mon Jul 10 23:17:23 2023 +0800

    Bluetooth: hci_ldisc: check HCI_UART_PROTO_READY flag in HCIUARTGETPROTO
    
    commit 9c33663af9ad115f90c076a1828129a3fbadea98 upstream.
    
    This patch adds code to check HCI_UART_PROTO_READY flag before
    accessing hci_uart->proto. It fixes the race condition in
    hci_uart_tty_ioctl() between HCIUARTSETPROTO and HCIUARTGETPROTO.
    This issue bug found by Yu Hao and Weiteng Chen:
    
    BUG: general protection fault in hci_uart_tty_ioctl [1]
    
    The information of C reproducer can also reference the link [2]
    
    Reported-by: Yu Hao <yhao016@ucr.edu>
    Closes: https://lore.kernel.org/all/CA+UBctC3p49aTgzbVgkSZ2+TQcqq4fPDO7yZitFT5uBPDeCO2g@mail.gmail.com/ [1]
    Reported-by: Weiteng Chen <wchen130@ucr.edu>
    Closes: https://lore.kernel.org/lkml/CA+UBctDPEvHdkHMwD340=n02rh+jNRJNNQ5LBZNA+Wm4Keh2ow@mail.gmail.com/T/ [2]
    Signed-off-by: "Lee, Chun-Yi" <jlee@suse.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Harshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: MGMT: Add error handling to pair_device() [+ + +]
Author: Griffin Kroah-Hartman <griffin@kroah.com>
Date:   Thu Aug 15 13:51:00 2024 +0200

    Bluetooth: MGMT: Add error handling to pair_device()
    
    commit 538fd3921afac97158d4177139a0ad39f056dbb2 upstream.
    
    hci_conn_params_add() never checks for a NULL value and could lead to a NULL
    pointer dereference causing a crash.
    
    Fixed by adding error handling in the function.
    
    Cc: Stable <stable@kernel.org>
    Fixes: 5157b8a503fa ("Bluetooth: Fix initializing conn_params in scan phase")
    Signed-off-by: Griffin Kroah-Hartman <griffin@kroah.com>
    Reported-by: Yiwei Zhang <zhan4630@purdue.edu>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: RFCOMM: Fix not validating setsockopt user input [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Fri Apr 5 15:43:45 2024 -0400

    Bluetooth: RFCOMM: Fix not validating setsockopt user input
    
    [ Upstream commit a97de7bff13b1cc825c1b1344eaed8d6c2d3e695 ]
    
    syzbot reported rfcomm_sock_setsockopt_old() is copying data without
    checking user input length.
    
    BUG: KASAN: slab-out-of-bounds in copy_from_sockptr_offset
    include/linux/sockptr.h:49 [inline]
    BUG: KASAN: slab-out-of-bounds in copy_from_sockptr
    include/linux/sockptr.h:55 [inline]
    BUG: KASAN: slab-out-of-bounds in rfcomm_sock_setsockopt_old
    net/bluetooth/rfcomm/sock.c:632 [inline]
    BUG: KASAN: slab-out-of-bounds in rfcomm_sock_setsockopt+0x893/0xa70
    net/bluetooth/rfcomm/sock.c:673
    Read of size 4 at addr ffff8880209a8bc3 by task syz-executor632/5064
    
    Fixes: 9f2c8a03fbb3 ("Bluetooth: Replace RFCOMM link mode with security level")
    Fixes: bb23c0ab8246 ("Bluetooth: Add support for deferring RFCOMM connection setup")
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

Bluetooth: SMP: Fix assumption of Central always being Initiator [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Wed Aug 30 15:08:06 2023 -0700

    Bluetooth: SMP: Fix assumption of Central always being Initiator
    
    [ Upstream commit 28cd47f75185c4818b0fb1b46f2f02faaba96376 ]
    
    SMP initiator role shall be considered the one that initiates the
    pairing procedure with SMP_CMD_PAIRING_REQ:
    
    BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 3, Part H
    page 1557:
    
    Figure 2.1: LE pairing phases
    
    Note that by sending SMP_CMD_SECURITY_REQ it doesn't change the role to
    be Initiator.
    
    Link: https://github.com/bluez/bluez/issues/567
    Fixes: b28b4943660f ("Bluetooth: Add strict checks for allowed SMP PDUs")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bonding: fix bond_ipsec_offload_ok return type [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Aug 16 14:48:10 2024 +0300

    bonding: fix bond_ipsec_offload_ok return type
    
    [ Upstream commit fc59b9a5f7201b9f7272944596113a82cc7773d5 ]
    
    Fix the return type which should be bool.
    
    Fixes: 955b785ec6b3 ("bonding: fix suspicious RCU usage in bond_ipsec_offload_ok()")
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bonding: fix null pointer deref in bond_ipsec_offload_ok [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Aug 16 14:48:11 2024 +0300

    bonding: fix null pointer deref in bond_ipsec_offload_ok
    
    [ Upstream commit 95c90e4ad89d493a7a14fa200082e466e2548f9d ]
    
    We must check if there is an active slave before dereferencing the pointer.
    
    Fixes: 18cb261afd7b ("bonding: support hardware encryption offload to slaves")
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bonding: fix xfrm real_dev null pointer dereference [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Aug 16 14:48:12 2024 +0300

    bonding: fix xfrm real_dev null pointer dereference
    
    [ Upstream commit f8cde9805981c50d0c029063dc7d82821806fc44 ]
    
    We shouldn't set real_dev to NULL because packets can be in transit and
    xfrm might call xdo_dev_offload_ok() in parallel. All callbacks assume
    real_dev is set.
    
     Example trace:
     kernel: BUG: unable to handle page fault for address: 0000000000001030
     kernel: bond0: (slave eni0np1): making interface the new active one
     kernel: #PF: supervisor write access in kernel mode
     kernel: #PF: error_code(0x0002) - not-present page
     kernel: PGD 0 P4D 0
     kernel: Oops: 0002 [#1] PREEMPT SMP
     kernel: CPU: 4 PID: 2237 Comm: ping Not tainted 6.7.7+ #12
     kernel: Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
     kernel: RIP: 0010:nsim_ipsec_offload_ok+0xc/0x20 [netdevsim]
     kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
     kernel: Code: e0 0f 0b 48 83 7f 38 00 74 de 0f 0b 48 8b 47 08 48 8b 37 48 8b 78 40 e9 b2 e5 9a d7 66 90 0f 1f 44 00 00 48 8b 86 80 02 00 00 <83> 80 30 10 00 00 01 b8 01 00 00 00 c3 0f 1f 80 00 00 00 00 0f 1f
     kernel: bond0: (slave eni0np1): making interface the new active one
     kernel: RSP: 0018:ffffabde81553b98 EFLAGS: 00010246
     kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
     kernel:
     kernel: RAX: 0000000000000000 RBX: ffff9eb404e74900 RCX: ffff9eb403d97c60
     kernel: RDX: ffffffffc090de10 RSI: ffff9eb404e74900 RDI: ffff9eb3c5de9e00
     kernel: RBP: ffff9eb3c0a42000 R08: 0000000000000010 R09: 0000000000000014
     kernel: R10: 7974203030303030 R11: 3030303030303030 R12: 0000000000000000
     kernel: R13: ffff9eb3c5de9e00 R14: ffffabde81553cc8 R15: ffff9eb404c53000
     kernel: FS:  00007f2a77a3ad00(0000) GS:ffff9eb43bd00000(0000) knlGS:0000000000000000
     kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     kernel: CR2: 0000000000001030 CR3: 00000001122ab000 CR4: 0000000000350ef0
     kernel: bond0: (slave eni0np1): making interface the new active one
     kernel: Call Trace:
     kernel:  <TASK>
     kernel:  ? __die+0x1f/0x60
     kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
     kernel:  ? page_fault_oops+0x142/0x4c0
     kernel:  ? do_user_addr_fault+0x65/0x670
     kernel:  ? kvm_read_and_reset_apf_flags+0x3b/0x50
     kernel: bond0: (slave eni0np1): making interface the new active one
     kernel:  ? exc_page_fault+0x7b/0x180
     kernel:  ? asm_exc_page_fault+0x22/0x30
     kernel:  ? nsim_bpf_uninit+0x50/0x50 [netdevsim]
     kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
     kernel:  ? nsim_ipsec_offload_ok+0xc/0x20 [netdevsim]
     kernel: bond0: (slave eni0np1): making interface the new active one
     kernel:  bond_ipsec_offload_ok+0x7b/0x90 [bonding]
     kernel:  xfrm_output+0x61/0x3b0
     kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
     kernel:  ip_push_pending_frames+0x56/0x80
    
    Fixes: 18cb261afd7b ("bonding: support hardware encryption offload to slaves")
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bonding: fix xfrm state handling when clearing active slave [+ + +]
Author: Nikolay Aleksandrov <razor@blackwall.org>
Date:   Fri Aug 16 14:48:13 2024 +0300

    bonding: fix xfrm state handling when clearing active slave
    
    [ Upstream commit c4c5c5d2ef40a9f67a9241dc5422eac9ffe19547 ]
    
    If the active slave is cleared manually the xfrm state is not flushed.
    This leads to xfrm add/del imbalance and adding the same state multiple
    times. For example when the device cannot handle anymore states we get:
     [ 1169.884811] bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
    because it's filled with the same state after multiple active slave
    clearings. This change also has a few nice side effects: user-space
    gets a notification for the change, the old device gets its mac address
    and promisc/mcast adjusted properly.
    
    Fixes: 18cb261afd7b ("bonding: support hardware encryption offload to slaves")
    Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
    Reviewed-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf, net: Use DEV_STAT_INC() [+ + +]
Author: yunshui <jiangyunshui@kylinos.cn>
Date:   Thu May 23 11:35:20 2024 +0800

    bpf, net: Use DEV_STAT_INC()
    
    [ Upstream commit d9cbd8343b010016fcaabc361c37720dcafddcbe ]
    
    syzbot/KCSAN reported that races happen when multiple CPUs updating
    dev->stats.tx_error concurrently. Adopt SMP safe DEV_STATS_INC() to
    update the dev->stats fields.
    
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Signed-off-by: yunshui <jiangyunshui@kylinos.cn>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20240523033520.4029314-1-jiangyunshui@kylinos.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
bpf: Avoid kfree_rcu() under lock in bpf_lpm_trie. [+ + +]
Author: Alexei Starovoitov <ast@kernel.org>
Date:   Fri Mar 29 10:14:39 2024 -0700

    bpf: Avoid kfree_rcu() under lock in bpf_lpm_trie.
    
    [ Upstream commit 59f2f841179aa6a0899cb9cf53659149a35749b7 ]
    
    syzbot reported the following lock sequence:
    cpu 2:
      grabs timer_base lock
        spins on bpf_lpm lock
    
    cpu 1:
      grab rcu krcp lock
        spins on timer_base lock
    
    cpu 0:
      grab bpf_lpm lock
        spins on rcu krcp lock
    
    bpf_lpm lock can be the same.
    timer_base lock can also be the same due to timer migration.
    but rcu krcp lock is always per-cpu, so it cannot be the same lock.
    Hence it's a false positive.
    To avoid lockdep complaining move kfree_rcu() after spin_unlock.
    
    Reported-by: syzbot+1fa663a2100308ab6eab@syzkaller.appspotmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20240329171439.37813-1-alexei.starovoitov@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: drop unnecessary user-triggerable WARN_ONCE in verifierl log [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Tue May 16 11:04:09 2023 -0700

    bpf: drop unnecessary user-triggerable WARN_ONCE in verifierl log
    
    [ Upstream commit cff36398bd4c7d322d424433db437f3c3391c491 ]
    
    It's trivial for user to trigger "verifier log line truncated" warning,
    as verifier has a fixed-sized buffer of 1024 bytes (as of now), and there are at
    least two pieces of user-provided information that can be output through
    this buffer, and both can be arbitrarily sized by user:
      - BTF names;
      - BTF.ext source code lines strings.
    
    Verifier log buffer should be properly sized for typical verifier state
    output. But it's sort-of expected that this buffer won't be long enough
    in some circumstances. So let's drop the check. In any case code will
    work correctly, at worst truncating a part of a single line output.
    
    Reported-by: syzbot+8b2a08dfbd25fd933d75@syzkaller.appspotmail.com
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20230516180409.3549088-1-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Fix updating attached freplace prog in prog_array map [+ + +]
Author: Leon Hwang <leon.hwang@linux.dev>
Date:   Sun Jul 28 19:46:11 2024 +0800

    bpf: Fix updating attached freplace prog in prog_array map
    
    [ Upstream commit fdad456cbcca739bae1849549c7a999857c56f88 ]
    
    The commit f7866c358733 ("bpf: Fix null pointer dereference in resolve_prog_type() for BPF_PROG_TYPE_EXT")
    fixed a NULL pointer dereference panic, but didn't fix the issue that
    fails to update attached freplace prog to prog_array map.
    
    Since commit 1c123c567fb1 ("bpf: Resolve fext program type when checking map compatibility"),
    freplace prog and its target prog are able to tail call each other.
    
    And the commit 3aac1ead5eb6 ("bpf: Move prog->aux->linked_prog and trampoline into bpf_link on attach")
    sets prog->aux->dst_prog as NULL after attaching freplace prog to its
    target prog.
    
    After loading freplace the prog_array's owner type is BPF_PROG_TYPE_SCHED_CLS.
    Then, after attaching freplace its prog->aux->dst_prog is NULL.
    Then, while updating freplace in prog_array the bpf_prog_map_compatible()
    incorrectly returns false because resolve_prog_type() returns
    BPF_PROG_TYPE_EXT instead of BPF_PROG_TYPE_SCHED_CLS.
    After this patch the resolve_prog_type() returns BPF_PROG_TYPE_SCHED_CLS
    and update to prog_array can succeed.
    
    Fixes: f7866c358733 ("bpf: Fix null pointer dereference in resolve_prog_type() for BPF_PROG_TYPE_EXT")
    Cc: Toke Høiland-Jørgensen <toke@redhat.com>
    Cc: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Yonghong Song <yonghong.song@linux.dev>
    Signed-off-by: Leon Hwang <leon.hwang@linux.dev>
    Link: https://lore.kernel.org/r/20240728114612.48486-2-leon.hwang@linux.dev
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Replace bpf_lpm_trie_key 0-length array with flexible array [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Thu Feb 22 07:56:15 2024 -0800

    bpf: Replace bpf_lpm_trie_key 0-length array with flexible array
    
    [ Upstream commit 896880ff30866f386ebed14ab81ce1ad3710cfc4 ]
    
    Replace deprecated 0-length array in struct bpf_lpm_trie_key with
    flexible array. Found with GCC 13:
    
    ../kernel/bpf/lpm_trie.c:207:51: warning: array subscript i is outside array bounds of 'const __u8[0]' {aka 'const unsigned char[]'} [-Warray-bounds=]
      207 |                                        *(__be16 *)&key->data[i]);
          |                                                   ^~~~~~~~~~~~~
    ../include/uapi/linux/swab.h:102:54: note: in definition of macro '__swab16'
      102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
          |                                                      ^
    ../include/linux/byteorder/generic.h:97:21: note: in expansion of macro '__be16_to_cpu'
       97 | #define be16_to_cpu __be16_to_cpu
          |                     ^~~~~~~~~~~~~
    ../kernel/bpf/lpm_trie.c:206:28: note: in expansion of macro 'be16_to_cpu'
      206 |                 u16 diff = be16_to_cpu(*(__be16 *)&node->data[i]
    ^
          |                            ^~~~~~~~~~~
    In file included from ../include/linux/bpf.h:7:
    ../include/uapi/linux/bpf.h:82:17: note: while referencing 'data'
       82 |         __u8    data[0];        /* Arbitrary size */
          |                 ^~~~
    
    And found at run-time under CONFIG_FORTIFY_SOURCE:
    
      UBSAN: array-index-out-of-bounds in kernel/bpf/lpm_trie.c:218:49
      index 0 is out of range for type '__u8 [*]'
    
    Changing struct bpf_lpm_trie_key is difficult since has been used by
    userspace. For example, in Cilium:
    
            struct egress_gw_policy_key {
                    struct bpf_lpm_trie_key lpm_key;
                    __u32 saddr;
                    __u32 daddr;
            };
    
    While direct references to the "data" member haven't been found, there
    are static initializers what include the final member. For example,
    the "{}" here:
    
            struct egress_gw_policy_key in_key = {
                    .lpm_key = { 32 + 24, {} },
                    .saddr   = CLIENT_IP,
                    .daddr   = EXTERNAL_SVC_IP & 0Xffffff,
            };
    
    To avoid the build time and run time warnings seen with a 0-sized
    trailing array for struct bpf_lpm_trie_key, introduce a new struct
    that correctly uses a flexible array for the trailing bytes,
    struct bpf_lpm_trie_key_u8. As part of this, include the "header"
    portion (which is just the "prefixlen" member), so it can be used
    by anything building a bpf_lpr_trie_key that has trailing members that
    aren't a u8 flexible array (like the self-test[1]), which is named
    struct bpf_lpm_trie_key_hdr.
    
    Unfortunately, C++ refuses to parse the __struct_group() helper, so
    it is not possible to define struct bpf_lpm_trie_key_hdr directly in
    struct bpf_lpm_trie_key_u8, so we must open-code the union directly.
    
    Adjust the kernel code to use struct bpf_lpm_trie_key_u8 through-out,
    and for the selftest to use struct bpf_lpm_trie_key_hdr. Add a comment
    to the UAPI header directing folks to the two new options.
    
    Reported-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Closes: https://paste.debian.net/hidden/ca500597/
    Link: https://lore.kernel.org/all/202206281009.4332AA33@keescook/ [1]
    Link: https://lore.kernel.org/bpf/20240222155612.it.533-kees@kernel.org
    Stable-dep-of: 59f2f841179a ("bpf: Avoid kfree_rcu() under lock in bpf_lpm_trie.")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

bpf: Split off basic BPF verifier log into separate file [+ + +]
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu Apr 6 16:41:47 2023 -0700

    bpf: Split off basic BPF verifier log into separate file
    
    [ Upstream commit 4294a0a7ab6282c3d92f03de84e762dda993c93d ]
    
    kernel/bpf/verifier.c file is large and growing larger all the time. So
    it's good to start splitting off more or less self-contained parts into
    separate files to keep source code size (somewhat) somewhat under
    control.
    
    This patch is a one step in this direction, moving some of BPF verifier log
    routines into a separate kernel/bpf/log.c. Right now it's most low-level
    and isolated routines to append data to log, reset log to previous
    position, etc. Eventually we could probably move verifier state
    printing logic here as well, but this patch doesn't attempt to do that
    yet.
    
    Subsequent patches will add more logic to verifier log management, so
    having basics in a separate file will make sure verifier.c doesn't grow
    more with new changes.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Lorenz Bauer <lmb@isovalent.com>
    Link: https://lore.kernel.org/bpf/20230406234205.323208-2-andrii@kernel.org
    Stable-dep-of: cff36398bd4c ("bpf: drop unnecessary user-triggerable WARN_ONCE in verifierl log")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: change BUG_ON to assertion in tree_move_down() [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Tue Feb 6 23:06:46 2024 +0100

    btrfs: change BUG_ON to assertion in tree_move_down()
    
    [ Upstream commit 56f335e043ae73c32dbb70ba95488845dc0f1e6e ]
    
    There's only one caller of tree_move_down() that does not pass level 0
    so the assertion is better suited here.
    
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: change BUG_ON to assertion when checking for delayed_node root [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Sat Jan 20 02:26:32 2024 +0100

    btrfs: change BUG_ON to assertion when checking for delayed_node root
    
    [ Upstream commit be73f4448b607e6b7ce41cd8ef2214fdf6e7986f ]
    
    The pointer to root is initialized in btrfs_init_delayed_node(), no need
    to check for it again. Change the BUG_ON to assertion.
    
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: delayed-inode: drop pointless BUG_ON in __btrfs_remove_delayed_item() [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Sat Jan 20 02:22:37 2024 +0100

    btrfs: delayed-inode: drop pointless BUG_ON in __btrfs_remove_delayed_item()
    
    [ Upstream commit 778e618b8bfedcc39354373c1b072c5fe044fa7b ]
    
    There's a BUG_ON checking for a valid pointer of fs_info::delayed_root
    but it is valid since init_mount_fs_info() and has the same lifetime as
    fs_info.
    
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: delete pointless BUG_ON check on quota root in btrfs_qgroup_account_extent() [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Tue Feb 6 23:20:53 2024 +0100

    btrfs: delete pointless BUG_ON check on quota root in btrfs_qgroup_account_extent()
    
    [ Upstream commit f40a3ea94881f668084f68f6b9931486b1606db0 ]
    
    The BUG_ON is deep in the qgroup code where we can expect that it
    exists. A NULL pointer would cause a crash.
    
    It was added long ago in 550d7a2ed5db35 ("btrfs: qgroup: Add new qgroup
    calculation function btrfs_qgroup_account_extents()."). It maybe made
    sense back then as the quota enable/disable state machine was not that
    robust as it is nowadays, so we can just delete it.
    
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: handle invalid root reference found in may_destroy_subvol() [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Wed Jan 24 22:58:01 2024 +0100

    btrfs: handle invalid root reference found in may_destroy_subvol()
    
    [ Upstream commit 6fbc6f4ac1f4907da4fc674251527e7dc79ffbf6 ]
    
    The may_destroy_subvol() looks up a root by a key, allowing to do an
    inexact search when key->offset is -1.  It's never expected to find such
    item, as it would break the allowed range of a root id.
    
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: rename bitmap_set_bits() -> btrfs_bitmap_set_bits() [+ + +]
Author: Alexander Lobakin <aleksander.lobakin@intel.com>
Date:   Wed Mar 27 16:23:47 2024 +0100

    btrfs: rename bitmap_set_bits() -> btrfs_bitmap_set_bits()
    
    commit 4ca532d64648d4776d15512caed3efea05ca7195 upstream.
    
    bitmap_set_bits() does not start with the FS' prefix and may collide
    with a new generic helper one day. It operates with the FS-specific
    types, so there's no change those two could do the same thing.
    Just add the prefix to exclude such possible conflict.
    
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Acked-by: David Sterba <dsterba@suse.com>
    Reviewed-by: Yury Norov <yury.norov@gmail.com>
    Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: replace sb::s_blocksize by fs_info::sectorsize [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Tue Jan 16 17:33:20 2024 +0100

    btrfs: replace sb::s_blocksize by fs_info::sectorsize
    
    [ Upstream commit 4e00422ee62663e31e611d7de4d2c4aa3f8555f2 ]
    
    The block size stored in the super block is used by subsystems outside
    of btrfs and it's a copy of fs_info::sectorsize. Unify that to always
    use our sectorsize, with the exception of mount where we first need to
    use fixed values (4K) until we read the super block and can set the
    sectorsize.
    
    Replace all uses, in most cases it's fewer pointer indirections.
    
    Reviewed-by: Josef Bacik <josef@toxicpanda.com>
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Stable-dep-of: 46a6e10a1ab1 ("btrfs: send: allow cloning non-aligned extent if it ends at i_size")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: send: allow cloning non-aligned extent if it ends at i_size [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Mon Aug 12 14:18:06 2024 +0100

    btrfs: send: allow cloning non-aligned extent if it ends at i_size
    
    [ Upstream commit 46a6e10a1ab16cc71d4a3cab73e79aabadd6b8ea ]
    
    If we a find that an extent is shared but its end offset is not sector
    size aligned, then we don't clone it and issue write operations instead.
    This is because the reflink (remap_file_range) operation does not allow
    to clone unaligned ranges, except if the end offset of the range matches
    the i_size of the source and destination files (and the start offset is
    sector size aligned).
    
    While this is not incorrect because send can only guarantee that a file
    has the same data in the source and destination snapshots, it's not
    optimal and generates confusion and surprising behaviour for users.
    
    For example, running this test:
    
      $ cat test.sh
      #!/bin/bash
    
      DEV=/dev/sdi
      MNT=/mnt/sdi
    
      mkfs.btrfs -f $DEV
      mount $DEV $MNT
    
      # Use a file size not aligned to any possible sector size.
      file_size=$((1 * 1024 * 1024 + 5)) # 1MB + 5 bytes
      dd if=/dev/random of=$MNT/foo bs=$file_size count=1
      cp --reflink=always $MNT/foo $MNT/bar
    
      btrfs subvolume snapshot -r $MNT/ $MNT/snap
      rm -f /tmp/send-test
      btrfs send -f /tmp/send-test $MNT/snap
    
      umount $MNT
      mkfs.btrfs -f $DEV
      mount $DEV $MNT
    
      btrfs receive -vv -f /tmp/send-test $MNT
    
      xfs_io -r -c "fiemap -v" $MNT/snap/bar
    
      umount $MNT
    
    Gives the following result:
    
      (...)
      mkfile o258-7-0
      rename o258-7-0 -> bar
      write bar - offset=0 length=49152
      write bar - offset=49152 length=49152
      write bar - offset=98304 length=49152
      write bar - offset=147456 length=49152
      write bar - offset=196608 length=49152
      write bar - offset=245760 length=49152
      write bar - offset=294912 length=49152
      write bar - offset=344064 length=49152
      write bar - offset=393216 length=49152
      write bar - offset=442368 length=49152
      write bar - offset=491520 length=49152
      write bar - offset=540672 length=49152
      write bar - offset=589824 length=49152
      write bar - offset=638976 length=49152
      write bar - offset=688128 length=49152
      write bar - offset=737280 length=49152
      write bar - offset=786432 length=49152
      write bar - offset=835584 length=49152
      write bar - offset=884736 length=49152
      write bar - offset=933888 length=49152
      write bar - offset=983040 length=49152
      write bar - offset=1032192 length=16389
      chown bar - uid=0, gid=0
      chmod bar - mode=0644
      utimes bar
      utimes
      BTRFS_IOC_SET_RECEIVED_SUBVOL uuid=06d640da-9ca1-604c-b87c-3375175a8eb3, stransid=7
      /mnt/sdi/snap/bar:
       EXT: FILE-OFFSET      BLOCK-RANGE      TOTAL FLAGS
         0: [0..2055]:       26624..28679      2056   0x1
    
    There's no clone operation to clone extents from the file foo into file
    bar and fiemap confirms there's no shared flag (0x2000).
    
    So update send_write_or_clone() so that it proceeds with cloning if the
    source and destination ranges end at the i_size of the respective files.
    
    After this changes the result of the test is:
    
      (...)
      mkfile o258-7-0
      rename o258-7-0 -> bar
      clone bar - source=foo source offset=0 offset=0 length=1048581
      chown bar - uid=0, gid=0
      chmod bar - mode=0644
      utimes bar
      utimes
      BTRFS_IOC_SET_RECEIVED_SUBVOL uuid=582420f3-ea7d-564e-bbe5-ce440d622190, stransid=7
      /mnt/sdi/snap/bar:
       EXT: FILE-OFFSET      BLOCK-RANGE      TOTAL FLAGS
         0: [0..2055]:       26624..28679      2056 0x2001
    
    A test case for fstests will also follow up soon.
    
    Link: https://github.com/kdave/btrfs-progs/issues/572#issuecomment-2282841416
    CC: stable@vger.kernel.org # 5.10+
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: send: handle unexpected data in header buffer in begin_cmd() [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Tue Feb 6 22:47:13 2024 +0100

    btrfs: send: handle unexpected data in header buffer in begin_cmd()
    
    [ Upstream commit e80e3f732cf53c64b0d811e1581470d67f6c3228 ]
    
    Change BUG_ON to a proper error handling in the unlikely case of seeing
    data when the command is started. This is supposed to be reset when the
    command is finished (send_cmd, send_encoded_extent).
    
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: tests: allocate dummy fs_info and root in test_find_delalloc() [+ + +]
Author: David Sterba <dsterba@suse.com>
Date:   Mon Jan 29 19:04:33 2024 +0100

    btrfs: tests: allocate dummy fs_info and root in test_find_delalloc()
    
    [ Upstream commit b2136cc288fce2f24a92f3d656531b2d50ebec5a ]
    
    Allocate fs_info and root to have a valid fs_info pointer in case it's
    dereferenced by a helper outside of tests, like find_lock_delalloc_range().
    
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

btrfs: tree-checker: add dev extent item checks [+ + +]
Author: Qu Wenruo <wqu@suse.com>
Date:   Sun Aug 11 15:00:22 2024 +0930

    btrfs: tree-checker: add dev extent item checks
    
    commit 008e2512dc5696ab2dc5bf264e98a9fe9ceb830e upstream.
    
    [REPORT]
    There is a corruption report that btrfs refused to mount a fs that has
    overlapping dev extents:
    
      BTRFS error (device sdc): dev extent devid 4 physical offset 14263979671552 overlap with previous dev extent end 14263980982272
      BTRFS error (device sdc): failed to verify dev extents against chunks: -117
      BTRFS error (device sdc): open_ctree failed
    
    [CAUSE]
    The direct cause is very obvious, there is a bad dev extent item with
    incorrect length.
    
    With btrfs check reporting two overlapping extents, the second one shows
    some clue on the cause:
    
      ERROR: dev extent devid 4 offset 14263979671552 len 6488064 overlap with previous dev extent end 14263980982272
      ERROR: dev extent devid 13 offset 2257707008000 len 6488064 overlap with previous dev extent end 2257707270144
      ERROR: errors found in extent allocation tree or chunk allocation
    
    The second one looks like a bitflip happened during new chunk
    allocation:
    hex(2257707008000) = 0x20da9d30000
    hex(2257707270144) = 0x20da9d70000
    diff               = 0x00000040000
    
    So it looks like a bitflip happened during new dev extent allocation,
    resulting the second overlap.
    
    Currently we only do the dev-extent verification at mount time, but if the
    corruption is caused by memory bitflip, we really want to catch it before
    writing the corruption to the storage.
    
    Furthermore the dev extent items has the following key definition:
    
            (<device id> DEV_EXTENT <physical offset>)
    
    Thus we can not just rely on the generic key order check to make sure
    there is no overlapping.
    
    [ENHANCEMENT]
    Introduce dedicated dev extent checks, including:
    
    - Fixed member checks
      * chunk_tree should always be BTRFS_CHUNK_TREE_OBJECTID (3)
      * chunk_objectid should always be
        BTRFS_FIRST_CHUNK_CHUNK_TREE_OBJECTID (256)
    
    - Alignment checks
      * chunk_offset should be aligned to sectorsize
      * length should be aligned to sectorsize
      * key.offset should be aligned to sectorsize
    
    - Overlap checks
      If the previous key is also a dev-extent item, with the same
      device id, make sure we do not overlap with the previous dev extent.
    
    Reported: Stefan N <stefannnau@gmail.com>
    Link: https://lore.kernel.org/linux-btrfs/CA+W5K0rSO3koYTo=nzxxTm1-Pdu1HYgVxEpgJ=aGc7d=E8mGEg@mail.gmail.com/
    CC: stable@vger.kernel.org # 5.10+
    Reviewed-by: Anand Jain <anand.jain@oracle.com>
    Signed-off-by: Qu Wenruo <wqu@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: zoned: properly take lock to read/update block group's zoned variables [+ + +]
Author: Naohiro Aota <naohiro.aota@wdc.com>
Date:   Thu Aug 1 16:47:52 2024 +0900

    btrfs: zoned: properly take lock to read/update block group's zoned variables
    
    commit e30729d4bd4001881be4d1ad4332a5d4985398f8 upstream.
    
    __btrfs_add_free_space_zoned() references and modifies bg's alloc_offset,
    ro, and zone_unusable, but without taking the lock. It is mostly safe
    because they monotonically increase (at least for now) and this function is
    mostly called by a transaction commit, which is serialized by itself.
    
    Still, taking the lock is a safer and correct option and I'm going to add a
    change to reset zone_unusable while a block group is still alive. So, add
    locking around the operations.
    
    Fixes: 169e0da91a21 ("btrfs: zoned: track unusable bytes for zones")
    CC: stable@vger.kernel.org # 5.15+
    Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
cgroup: Avoid extra dereference in css_populate_dir() [+ + +]
Author: Kamalesh Babulal <kamalesh.babulal@oracle.com>
Date:   Tue Sep 12 12:34:35 2023 +0530

    cgroup: Avoid extra dereference in css_populate_dir()
    
    [ Upstream commit d24f05987ce8bf61e62d86fedbe47523dc5c3393 ]
    
    Use css directly instead of dereferencing it from &cgroup->self, while
    adding the cgroup v2 cft base and psi files in css_populate_dir(). Both
    points to the same css, when css->ss is NULL, this avoids extra deferences
    and makes code consistent in usage across the function.
    
    Signed-off-by: Kamalesh Babulal <kamalesh.babulal@oracle.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
char: xillybus: Check USB endpoints when probing device [+ + +]
Author: Eli Billauer <eli.billauer@gmail.com>
Date:   Fri Aug 16 10:02:00 2024 +0300

    char: xillybus: Check USB endpoints when probing device
    
    commit 2374bf7558de915edc6ec8cb10ec3291dfab9594 upstream.
    
    Ensure, as the driver probes the device, that all endpoints that the
    driver may attempt to access exist and are of the correct type.
    
    All XillyUSB devices must have a Bulk IN and Bulk OUT endpoint at
    address 1. This is verified in xillyusb_setup_base_eps().
    
    On top of that, a XillyUSB device may have additional Bulk OUT
    endpoints. The information about these endpoints' addresses is deduced
    from a data structure (the IDT) that the driver fetches from the device
    while probing it. These endpoints are checked in setup_channels().
    
    A XillyUSB device never has more than one IN endpoint, as all data
    towards the host is multiplexed in this single Bulk IN endpoint. This is
    why setup_channels() only checks OUT endpoints.
    
    Reported-by: syzbot+eac39cba052f2e750dbe@syzkaller.appspotmail.com
    Cc: stable <stable@kernel.org>
    Closes: https://lore.kernel.org/all/0000000000001d44a6061f7a54ee@google.com/T/
    Fixes: a53d1202aef1 ("char: xillybus: Add driver for XillyUSB (Xillybus variant for USB)").
    Signed-off-by: Eli Billauer <eli.billauer@gmail.com>
    Link: https://lore.kernel.org/r/20240816070200.50695-2-eli.billauer@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

char: xillybus: Don't destroy workqueue from work item running on it [+ + +]
Author: Eli Billauer <eli.billauer@gmail.com>
Date:   Thu Aug 1 15:11:26 2024 +0300

    char: xillybus: Don't destroy workqueue from work item running on it
    
    commit ccbde4b128ef9c73d14d0d7817d68ef795f6d131 upstream.
    
    Triggered by a kref decrement, destroy_workqueue() may be called from
    within a work item for destroying its own workqueue. This illegal
    situation is averted by adding a module-global workqueue for exclusive
    use of the offending work item. Other work items continue to be queued
    on per-device workqueues to ensure performance.
    
    Reported-by: syzbot+91dbdfecdd3287734d8e@syzkaller.appspotmail.com
    Cc: stable <stable@kernel.org>
    Closes: https://lore.kernel.org/lkml/0000000000000ab25a061e1dfe9f@google.com/
    Signed-off-by: Eli Billauer <eli.billauer@gmail.com>
    Link: https://lore.kernel.org/r/20240801121126.60183-1-eli.billauer@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

char: xillybus: Refine workqueue handling [+ + +]
Author: Eli Billauer <eli.billauer@gmail.com>
Date:   Fri Aug 16 10:01:59 2024 +0300

    char: xillybus: Refine workqueue handling
    
    commit ad899c301c880766cc709aad277991b3ab671b66 upstream.
    
    As the wakeup work item now runs on a separate workqueue, it needs to be
    flushed separately along with flushing the device's workqueue.
    
    Also, move the destroy_workqueue() call to the end of the exit method,
    so that deinitialization is done in the opposite order of
    initialization.
    
    Fixes: ccbde4b128ef ("char: xillybus: Don't destroy workqueue from work item running on it")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Eli Billauer <eli.billauer@gmail.com>
    Link: https://lore.kernel.org/r/20240816070200.50695-1-eli.billauer@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
clk: visconti: Add bounds-checking coverage for struct visconti_pll_provider [+ + +]
Author: Gustavo A. R. Silva <gustavoars@kernel.org>
Date:   Mon Oct 16 16:06:16 2023 -0600

    clk: visconti: Add bounds-checking coverage for struct visconti_pll_provider
    
    [ Upstream commit 397d887c1601a71e8a8abdb6beea67d58f0472d3 ]
    
    In order to gain the bounds-checking coverage that __counted_by provides
    to flexible-array members at run-time via CONFIG_UBSAN_BOUNDS (for array
    indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family functions),
    we must make sure that the counter member, in this particular case `num`,
    is updated before the first access to the flex-array member, in this
    particular case array `hws`. See below:
    
    commit f316cdff8d67 ("clk: Annotate struct clk_hw_onecell_data with
    __counted_by") introduced `__counted_by` for `struct clk_hw_onecell_data`
    together with changes to relocate some of assignments of counter `num`
    before `hws` is accessed:
    
    include/linux/clk-provider.h:
    1380 struct clk_hw_onecell_data {
    1381         unsigned int num;
    1382         struct clk_hw *hws[] __counted_by(num);
    1383 };
    
    However, this structure is used as a member in other structs, in this
    case in `struct visconti_pll_provider`:
    
    drivers/clk/visconti/pll.h:
     16 struct visconti_pll_provider {
     17         void __iomem *reg_base;
     18         struct device_node *node;
     19
     20         /* Must be last */
     21         struct clk_hw_onecell_data clk_data;
     22 };
    
    Hence, we need to move the assignments to `ctx->clk_data.num` after
    allocation for `struct visconti_pll_provider` and before accessing the
    flexible array `ctx->clk_data.hws`. And, as assignments for all members
    in `struct visconti_pll_provider` are originally adjacent to each other,
    relocate all assignments together, so we don't split up
    `ctx->clk_data.hws = nr_plls` from the rest. :)
    
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Acked-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/e3189f3e40e8723b6d794fb2260e2e9ab6b960bd.1697492890.git.gustavoars@kernel.org
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clocksource/drivers/arm_global_timer: Guard against division by zero [+ + +]
Author: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Date:   Sun Feb 25 16:13:35 2024 +0100

    clocksource/drivers/arm_global_timer: Guard against division by zero
    
    [ Upstream commit e651f2fae33634175fae956d896277cf916f5d09 ]
    
    The result of the division of new_rate by gt_target_rate can be zero (if
    new_rate is smaller than gt_target_rate). Using that result as divisor
    without checking can result in a division by zero error. Guard against
    this by checking for a zero value earlier.
    While here, also change the psv variable to an unsigned long to make
    sure we don't overflow the datatype as all other types involved are also
    unsiged long.
    
    Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
    Link: https://lore.kernel.org/r/20240225151336.2728533-3-martin.blumenstingl@googlemail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
clocksource: Make watchdog and suspend-timing multiplication overflow safe [+ + +]
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Mon Mar 25 08:40:23 2024 +0200

    clocksource: Make watchdog and suspend-timing multiplication overflow safe
    
    [ Upstream commit d0304569fb019d1bcfbbbce1ce6df6b96f04079b ]
    
    Kernel timekeeping is designed to keep the change in cycles (since the last
    timer interrupt) below max_cycles, which prevents multiplication overflow
    when converting cycles to nanoseconds. However, if timer interrupts stop,
    the clocksource_cyc2ns() calculation will eventually overflow.
    
    Add protection against that. Simplify by folding together
    clocksource_delta() and clocksource_cyc2ns() into cycles_to_nsec_safe().
    Check against max_cycles, falling back to a slower higher precision
    calculation.
    
    Suggested-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Link: https://lore.kernel.org/r/20240325064023.2997-20-adrian.hunter@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cxgb4: add forgotten u64 ivlan cast before shift [+ + +]
Author: Nikolay Kuratov <kniv@yandex-team.ru>
Date:   Mon Aug 19 10:54:08 2024 +0300

    cxgb4: add forgotten u64 ivlan cast before shift
    
    commit 80a1e7b83bb1834b5568a3872e64c05795d88f31 upstream.
    
    It is done everywhere in cxgb4 code, e.g. in is_filter_exact_match()
    There is no reason it should not be done here
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE
    
    Signed-off-by: Nikolay Kuratov <kniv@yandex-team.ru>
    Cc: stable@vger.kernel.org
    Fixes: 12b276fbf6e0 ("cxgb4: add support to create hash filters")
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20240819075408.92378-1-kniv@yandex-team.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm persistent data: fix memory allocation failure [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Tue Aug 13 16:35:14 2024 +0200

    dm persistent data: fix memory allocation failure
    
    commit faada2174c08662ae98b439c69efe3e79382c538 upstream.
    
    kmalloc is unreliable when allocating more than 8 pages of memory. It may
    fail when there is plenty of free memory but the memory is fragmented.
    Zdenek Kabelac observed such failure in his tests.
    
    This commit changes kmalloc to kvmalloc - kvmalloc will fall back to
    vmalloc if the large allocation fails.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Reported-by: Zdenek Kabelac <zkabelac@redhat.com>
    Reviewed-by: Mike Snitzer <snitzer@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm resume: don't return EINVAL when signalled [+ + +]
Author: Khazhismel Kumykov <khazhy@google.com>
Date:   Tue Aug 13 12:39:52 2024 +0200

    dm resume: don't return EINVAL when signalled
    
    commit 7a636b4f03af9d541205f69e373672e7b2b60a8a upstream.
    
    If the dm_resume method is called on a device that is not suspended, the
    method will suspend the device briefly, before resuming it (so that the
    table will be swapped).
    
    However, there was a bug that the return value of dm_suspended_md was not
    checked. dm_suspended_md may return an error when it is interrupted by a
    signal. In this case, do_resume would call dm_swap_table, which would
    return -EINVAL.
    
    This commit fixes the logic, so that error returned by dm_suspend is
    checked and the resume operation is undone.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Khazhismel Kumykov <khazhy@google.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm suspend: return -ERESTARTSYS instead of -EINTR [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Tue Aug 13 12:38:51 2024 +0200

    dm suspend: return -ERESTARTSYS instead of -EINTR
    
    [ Upstream commit 1e1fd567d32fcf7544c6e09e0e5bc6c650da6e23 ]
    
    This commit changes device mapper, so that it returns -ERESTARTSYS
    instead of -EINTR when it is interrupted by a signal (so that the ioctl
    can be restarted).
    
    The manpage signal(7) says that the ioctl function should be restarted if
    the signal was handled with SA_RESTART.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
docs/bpf: Document BPF_MAP_TYPE_LPM_TRIE map [+ + +]
Author: Donald Hunter <donald.hunter@gmail.com>
Date:   Tue Nov 1 11:45:42 2022 +0000

    docs/bpf: Document BPF_MAP_TYPE_LPM_TRIE map
    
    [ Upstream commit 83177c0dca3811faa051124731a692609caee7c7 ]
    
    Add documentation for BPF_MAP_TYPE_LPM_TRIE including kernel
    BPF helper usage, userspace usage and examples.
    
    Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20221101114542.24481-2-donald.hunter@gmail.com
    Stable-dep-of: 59f2f841179a ("bpf: Avoid kfree_rcu() under lock in bpf_lpm_trie.")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dpaa2-switch: Fix error checking in dpaa2_switch_seed_bp() [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Sat Aug 17 09:52:46 2024 +0300

    dpaa2-switch: Fix error checking in dpaa2_switch_seed_bp()
    
    [ Upstream commit c50e7475961c36ec4d21d60af055b32f9436b431 ]
    
    The dpaa2_switch_add_bufs() function returns the number of bufs that it
    was able to add.  It returns BUFS_PER_CMD (7) for complete success or a
    smaller number if there are not enough pages available.  However, the
    error checking is looking at the total number of bufs instead of the
    number which were added on this iteration.  Thus the error checking
    only works correctly for the first iteration through the loop and
    subsequent iterations are always counted as a success.
    
    Fix this by checking only the bufs added in the current iteration.
    
    Fixes: 0b1b71370458 ("staging: dpaa2-switch: handle Rx path on control interface")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
    Link: https://patch.msgid.link/eec27f30-b43f-42b6-b8ee-04a6f83423b6@stanley.mountain
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/amdgpu/imu_v11_0: Increase buffer size to ensure all possible values can be stored [+ + +]
Author: Lee Jones <lee@kernel.org>
Date:   Thu Aug 24 08:37:05 2023 +0100

    drm/amd/amdgpu/imu_v11_0: Increase buffer size to ensure all possible values can be stored
    
    [ Upstream commit a728342ae4ec2a7fdab0038b11427579424f133e ]
    
    Fixes the following W=1 kernel build warning(s):
    
     drivers/gpu/drm/amd/amdgpu/imu_v11_0.c: In function ‘imu_v11_0_init_microcode’:
     drivers/gpu/drm/amd/amdgpu/imu_v11_0.c:52:54: warning: ‘_imu.bin’ directive output may be truncated writing 8 bytes into a region of size between 4 and 33 [-Wformat-truncation=]
     drivers/gpu/drm/amd/amdgpu/imu_v11_0.c:52:9: note: ‘snprintf’ output between 16 and 45 bytes into a destination of size 40
    
    Signed-off-by: Lee Jones <lee@kernel.org>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amd/display: Adjust cursor position [+ + +]
Author: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Date:   Thu Aug 1 16:16:35 2024 -0600

    drm/amd/display: Adjust cursor position
    
    [ Upstream commit 56fb276d0244d430496f249335a44ae114dd5f54 ]
    
    [why & how]
    When the commit 9d84c7ef8a87 ("drm/amd/display: Correct cursor position
    on horizontal mirror") was introduced, it used the wrong calculation for
    the position copy for X. This commit uses the correct calculation for that
    based on the original patch.
    
    Fixes: 9d84c7ef8a87 ("drm/amd/display: Correct cursor position on horizontal mirror")
    Cc: Mario Limonciello <mario.limonciello@amd.com>
    Cc: Alex Deucher <alexander.deucher@amd.com>
    Acked-by: Wayne Lin <wayne.lin@amd.com>
    Signed-off-by: Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
    Signed-off-by: Tom Chung <chiahsuan.chung@amd.com>
    Tested-by: Daniel Wheeler <daniel.wheeler@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 8f9b23abbae5ffcd64856facd26a86b67195bc2f)
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: Validate hw_points_num before using it [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Mon Jul 10 18:23:58 2023 -0600

    drm/amd/display: Validate hw_points_num before using it
    
    [ Upstream commit 58c3b3341cea4f75dc8c003b89f8a6dd8ec55e50 ]
    
    [WHAT]
    hw_points_num is 0 before ogam LUT is programmed; however, function
    "dwb3_program_ogam_pwl" assumes hw_points_num is always greater than 0,
    i.e. substracting it by 1 as an array index.
    
    [HOW]
    Check hw_points_num is not equal to 0 before using it.
    
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/amdgpu/jpeg2: properly set atomics vmid field [+ + +]
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Fri Jul 12 10:00:33 2024 -0400

    drm/amdgpu/jpeg2: properly set atomics vmid field
    
    commit e414a304f2c5368a84f03ad34d29b89f965a33c9 upstream.
    
    This needs to be set as well if the IB uses atomics.
    
    Reviewed-by: Leo Liu <leo.liu@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 35c628774e50b3784c59e8ca7973f03bcb067132)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu/vcn: identify unified queue in sw init [+ + +]
Author: Boyuan Zhang <boyuan.zhang@amd.com>
Date:   Thu Jul 11 16:19:54 2024 -0400

    drm/amdgpu/vcn: identify unified queue in sw init
    
    commit ecfa23c8df7ef3ea2a429dfe039341bf792e95b4 upstream.
    
    Determine whether VCN using unified queue in sw_init, instead of calling
    functions later on.
    
    v2: fix coding style
    
    Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu/vcn: not pause dpg for unified queue [+ + +]
Author: Boyuan Zhang <boyuan.zhang@amd.com>
Date:   Wed Jul 10 16:17:12 2024 -0400

    drm/amdgpu/vcn: not pause dpg for unified queue
    
    commit 7d75ef3736a025db441be652c8cc8e84044a215f upstream.
    
    For unified queue, DPG pause for encoding is done inside VCN firmware,
    so there is no need to pause dpg based on ring type in kernel.
    
    For VCN3 and below, pausing DPG for encoding in kernel is still needed.
    
    v2: add more comments
    v3: update commit message
    
    Signed-off-by: Boyuan Zhang <boyuan.zhang@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Actually check flags for all context ops. [+ + +]
Author: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Date:   Tue Aug 6 22:27:32 2024 +0200

    drm/amdgpu: Actually check flags for all context ops.
    
    commit 0573a1e2ea7e35bff08944a40f1adf2bb35cea61 upstream.
    
    Missing validation ...
    
    Checked libdrm and it clears all the structs, so we should be
    safe to just check everything.
    
    Signed-off-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit c6b86421f1f9ddf9d706f2453159813ee39d0cf9)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: fix dereference null return value for the function amdgpu_vm_pt_parent [+ + +]
Author: Jesse Zhang <jesse.zhang@amd.com>
Date:   Thu May 23 17:14:45 2024 +0800

    drm/amdgpu: fix dereference null return value for the function amdgpu_vm_pt_parent
    
    [ Upstream commit 511a623fb46a6cf578c61d4f2755783c48807c77 ]
    
    The pointer parent may be NULLed by the function amdgpu_vm_pt_parent.
    To make the code more robust, check the pointer parent.
    
    Signed-off-by: Jesse Zhang <Jesse.Zhang@amd.com>
    Suggested-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdgpu: Validate TA binary size [+ + +]
Author: Candice Li <candice.li@amd.com>
Date:   Thu Aug 15 11:37:28 2024 +0800

    drm/amdgpu: Validate TA binary size
    
    commit c99769bceab4ecb6a067b9af11f9db281eea3e2a upstream.
    
    Add TA binary size validation to avoid OOB write.
    
    Signed-off-by: Candice Li <candice.li@amd.com>
    Reviewed-by: Hawking Zhang <Hawking.Zhang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit c0a04e3570d72aaf090962156ad085e37c62e442)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdkfd: Move dma unmapping after TLB flush [+ + +]
Author: Philip Yang <Philip.Yang@amd.com>
Date:   Mon Sep 11 14:44:22 2023 -0400

    drm/amdkfd: Move dma unmapping after TLB flush
    
    [ Upstream commit 101b8104307eac734f2dfa4d3511430b0b631c73 ]
    
    Otherwise GPU may access the stale mapping and generate IOMMU
    IO_PAGE_FAULT.
    
    Move this to inside p->mutex to prevent multiple threads mapping and
    unmapping concurrently race condition.
    
    After kfd_mem_dmaunmap_attachment is removed from unmap_bo_from_gpuvm,
    kfd_mem_dmaunmap_attachment is called if failed to map to GPUs, and
    before free the mem attachment in case failed to unmap from GPUs.
    
    Signed-off-by: Philip Yang <Philip.Yang@amd.com>
    Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amdkfd: reserve the BO before validating it [+ + +]
Author: Lang Yu <Lang.Yu@amd.com>
Date:   Thu Jan 11 12:27:07 2024 +0800

    drm/amdkfd: reserve the BO before validating it
    
    [ Upstream commit 0c93bd49576677ae1a18817d5ec000ef031d5187 ]
    
    Fix a warning.
    
    v2: Avoid unmapping attachment repeatedly when ERESTARTSYS.
    
    v3: Lock the BO before accessing ttm->sg to avoid race conditions.(Felix)
    
    [   41.708711] WARNING: CPU: 0 PID: 1463 at drivers/gpu/drm/ttm/ttm_bo.c:846 ttm_bo_validate+0x146/0x1b0 [ttm]
    [   41.708989] Call Trace:
    [   41.708992]  <TASK>
    [   41.708996]  ? show_regs+0x6c/0x80
    [   41.709000]  ? ttm_bo_validate+0x146/0x1b0 [ttm]
    [   41.709008]  ? __warn+0x93/0x190
    [   41.709014]  ? ttm_bo_validate+0x146/0x1b0 [ttm]
    [   41.709024]  ? report_bug+0x1f9/0x210
    [   41.709035]  ? handle_bug+0x46/0x80
    [   41.709041]  ? exc_invalid_op+0x1d/0x80
    [   41.709048]  ? asm_exc_invalid_op+0x1f/0x30
    [   41.709057]  ? amdgpu_amdkfd_gpuvm_dmaunmap_mem+0x2c/0x80 [amdgpu]
    [   41.709185]  ? ttm_bo_validate+0x146/0x1b0 [ttm]
    [   41.709197]  ? amdgpu_amdkfd_gpuvm_dmaunmap_mem+0x2c/0x80 [amdgpu]
    [   41.709337]  ? srso_alias_return_thunk+0x5/0x7f
    [   41.709346]  kfd_mem_dmaunmap_attachment+0x9e/0x1e0 [amdgpu]
    [   41.709467]  amdgpu_amdkfd_gpuvm_dmaunmap_mem+0x56/0x80 [amdgpu]
    [   41.709586]  kfd_ioctl_unmap_memory_from_gpu+0x1b7/0x300 [amdgpu]
    [   41.709710]  kfd_ioctl+0x1ec/0x650 [amdgpu]
    [   41.709822]  ? __pfx_kfd_ioctl_unmap_memory_from_gpu+0x10/0x10 [amdgpu]
    [   41.709945]  ? srso_alias_return_thunk+0x5/0x7f
    [   41.709949]  ? tomoyo_file_ioctl+0x20/0x30
    [   41.709959]  __x64_sys_ioctl+0x9c/0xd0
    [   41.709967]  do_syscall_64+0x3f/0x90
    [   41.709973]  entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Fixes: 101b8104307e ("drm/amdkfd: Move dma unmapping after TLB flush")
    Signed-off-by: Lang Yu <Lang.Yu@amd.com>
    Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/bridge: tc358768: Attempt to fix DSI horizontal timings [+ + +]
Author: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Date:   Wed Sep 6 09:50:59 2023 +0300

    drm/bridge: tc358768: Attempt to fix DSI horizontal timings
    
    [ Upstream commit 9fc75c40faa29df14ba16066be6bdfaea9f39ce4 ]
    
    The DSI horizontal timing calculations done by the driver seem to often
    lead to underflows or overflows, depending on the videomode.
    
    There are two main things the current driver doesn't seem to get right:
    DSI HSW and HFP, and VSDly. However, even following Toshiba's
    documentation it seems we don't always get a working display.
    
    This patch attempts to fix the horizontal timings for DSI event mode, and
    on a system with a DSI->HDMI encoder, a lot of standard HDMI modes now
    seem to work. The work relies on Toshiba's documentation, but also quite
    a bit on empirical testing.
    
    This also adds timing related debug prints to make it easier to improve
    on this later.
    
    The DSI pulse mode has only been tested with a fixed-resolution panel,
    which limits the testing of different modes on DSI pulse mode. However,
    as the VSDly calculation also affects pulse mode, so this might cause a
    regression.
    
    Reviewed-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
    Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
    Tested-by: Maxim Schwalm <maxim.schwalm@gmail.com> # Asus TF700T
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Signed-off-by: Robert Foss <rfoss@kernel.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230906-tc358768-v4-12-31725f008a50@ideasonboard.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/lima: set gp bus_stop bit before hard reset [+ + +]
Author: Erico Nunes <nunes.erico@gmail.com>
Date:   Wed Jan 24 03:59:43 2024 +0100

    drm/lima: set gp bus_stop bit before hard reset
    
    [ Upstream commit 27aa58ec85f973d98d336df7b7941149308db80f ]
    
    This is required for reliable hard resets. Otherwise, doing a hard reset
    while a task is still running (such as a task which is being stopped by
    the drm_sched timeout handler) may result in random mmu write timeouts
    or lockups which cause the entire gpu to hang.
    
    Signed-off-by: Erico Nunes <nunes.erico@gmail.com>
    Signed-off-by: Qiang Yu <yuq825@gmail.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240124025947.2110659-5-nunes.erico@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dp: fix the max supported bpp logic [+ + +]
Author: Abhinav Kumar <quic_abhinavk@quicinc.com>
Date:   Mon Aug 5 13:20:08 2024 -0700

    drm/msm/dp: fix the max supported bpp logic
    
    [ Upstream commit d19d5b8d8f6dab942ce5ddbcf34bf7275e778250 ]
    
    Fix the dp_panel_get_supported_bpp() API to return the minimum
    supported bpp correctly for relevant cases and use this API
    to correct the behavior of DP driver which hard-codes the max supported
    bpp to 30.
    
    This is incorrect because the number of lanes and max data rate
    supported by the lanes need to be taken into account.
    
    Replace the hardcoded limit with the appropriate math which accounts
    for the accurate number of lanes and max data rate.
    
    changes in v2:
            - Fix the dp_panel_get_supported_bpp() and use it
            - Drop the max_t usage as dp_panel_get_supported_bpp() already
              returns the min_bpp correctly now
    
    changes in v3:
            - replace min_t with just min as all params are u32
    
    Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support")
    Reported-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/43
    Tested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> # SM8350-HDK
    Reviewed-by: Stephen Boyd <swboyd@chromium.org>
    Patchwork: https://patchwork.freedesktop.org/patch/607073/
    Link: https://lore.kernel.org/r/20240805202009.1120981-1-quic_abhinavk@quicinc.com
    Signed-off-by: Stephen Boyd <swboyd@chromium.org>
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dp: reset the link phy params before link training [+ + +]
Author: Abhinav Kumar <quic_abhinavk@quicinc.com>
Date:   Thu Jul 25 15:04:50 2024 -0700

    drm/msm/dp: reset the link phy params before link training
    
    [ Upstream commit 319aca883bfa1b85ee08411541b51b9a934ac858 ]
    
    Before re-starting link training reset the link phy params namely
    the pre-emphasis and voltage swing levels otherwise the next
    link training begins at the previously cached levels which can result
    in link training failures.
    
    Fixes: 8ede2ecc3e5e ("drm/msm/dp: Add DP compliance tests on Snapdragon Chipsets")
    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Tested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> # SM8350-HDK
    Reviewed-by: Stephen Boyd <swboyd@chromium.org>
    Patchwork: https://patchwork.freedesktop.org/patch/605946/
    Link: https://lore.kernel.org/r/20240725220450.131245-1-quic_abhinavk@quicinc.com
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm/dpu: cleanup FB if dpu_format_populate_layout fails [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Tue Jun 25 00:13:41 2024 +0300

    drm/msm/dpu: cleanup FB if dpu_format_populate_layout fails
    
    [ Upstream commit bfa1a6283be390947d3649c482e5167186a37016 ]
    
    If the dpu_format_populate_layout() fails, then FB is prepared, but not
    cleaned up. This ends up leaking the pin_count on the GEM object and
    causes a splat during DRM file closure:
    
    msm_obj->pin_count
    WARNING: CPU: 2 PID: 569 at drivers/gpu/drm/msm/msm_gem.c:121 update_lru_locked+0xc4/0xcc
    [...]
    Call trace:
     update_lru_locked+0xc4/0xcc
     put_pages+0xac/0x100
     msm_gem_free_object+0x138/0x180
     drm_gem_object_free+0x1c/0x30
     drm_gem_object_handle_put_unlocked+0x108/0x10c
     drm_gem_object_release_handle+0x58/0x70
     idr_for_each+0x68/0xec
     drm_gem_release+0x28/0x40
     drm_file_free+0x174/0x234
     drm_release+0xb0/0x160
     __fput+0xc0/0x2c8
     __fput_sync+0x50/0x5c
     __arm64_sys_close+0x38/0x7c
     invoke_syscall+0x48/0x118
     el0_svc_common.constprop.0+0x40/0xe0
     do_el0_svc+0x1c/0x28
     el0_svc+0x4c/0x120
     el0t_64_sync_handler+0x100/0x12c
     el0t_64_sync+0x190/0x194
    irq event stamp: 129818
    hardirqs last  enabled at (129817): [<ffffa5f6d953fcc0>] console_unlock+0x118/0x124
    hardirqs last disabled at (129818): [<ffffa5f6da7dcf04>] el1_dbg+0x24/0x8c
    softirqs last  enabled at (129808): [<ffffa5f6d94afc18>] handle_softirqs+0x4c8/0x4e8
    softirqs last disabled at (129785): [<ffffa5f6d94105e4>] __do_softirq+0x14/0x20
    
    Fixes: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/600714/
    Link: https://lore.kernel.org/r/20240625-dpu-mode-config-width-v5-1-501d984d634f@linaro.org
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/msm/dpu: don't play tricks with debug macros [+ + +]
Author: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date:   Fri Aug 2 22:47:34 2024 +0300

    drm/msm/dpu: don't play tricks with debug macros
    
    [ Upstream commit df24373435f5899a2a98b7d377479c8d4376613b ]
    
    DPU debugging macros need to be converted to a proper drm_debug_*
    macros, however this is a going an intrusive patch, not suitable for a
    fix. Wire DPU_DEBUG and DPU_DEBUG_DRIVER to always use DRM_DEBUG_DRIVER
    to make sure that DPU debugging messages always end up in the drm debug
    messages and are controlled via the usual drm.debug mask.
    
    I don't think that it is a good idea for a generic DPU_DEBUG macro to be
    tied to DRM_UT_KMS. It is used to report a debug message from driver, so by
    default it should go to the DRM_UT_DRIVER channel. While refactoring
    debug macros later on we might end up with particular messages going to
    ATOMIC or KMS, but DRIVER should be the default.
    
    Fixes: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
    Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Patchwork: https://patchwork.freedesktop.org/patch/606932/
    Link: https://lore.kernel.org/r/20240802-dpu-fix-wb-v2-2-7eac9eb8e895@linaro.org
    Signed-off-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/msm: Reduce fallout of fence signaling vs reclaim hangs [+ + +]
Author: Rob Clark <robdclark@chromium.org>
Date:   Fri Nov 17 07:14:19 2023 -0800

    drm/msm: Reduce fallout of fence signaling vs reclaim hangs
    
    [ Upstream commit 4bea53b9c7c72fd12a0ceebe88a71723c0a514b8 ]
    
    Until various PM devfreq/QoS and interconnect patches land, we could
    potentially trigger reclaim from gpu scheduler thread, and under enough
    memory pressure that could trigger a sort of deadlock.  Eventually the
    wait will timeout and we'll move on to consider other GEM objects.  But
    given that there is still a potential for deadlock/stalling, we should
    reduce the timeout to contain the damage.
    
    Signed-off-by: Rob Clark <robdclark@chromium.org>
    Patchwork: https://patchwork.freedesktop.org/patch/568031/
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/rockchip: vop2: clear afbc en and transform bit for cluster window at linear mode [+ + +]
Author: Andy Yan <andy.yan@rock-chips.com>
Date:   Mon Dec 11 19:57:41 2023 +0800

    drm/rockchip: vop2: clear afbc en and transform bit for cluster window at linear mode
    
    [ Upstream commit 20529a68307feed00dd3d431d3fff0572616b0f2 ]
    
    The enable bit and transform offset of cluster windows should be
    cleared when it work at linear mode, or we may have a iommu fault
    issue on rk3588 which cluster windows switch between afbc and linear
    mode.
    
    As the cluster windows of rk3568 only supports afbc format
    so is therefore not affected.
    
    Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
    Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20231211115741.1784954-1-andyshrk@163.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/tegra: Zero-initialize iosys_map [+ + +]
Author: Mikko Perttunen <mperttunen@nvidia.com>
Date:   Fri Sep 1 14:59:10 2023 +0300

    drm/tegra: Zero-initialize iosys_map
    
    [ Upstream commit 3868ff006b572cf501a3327832d36c64a9eca86a ]
    
    UBSAN reports an invalid load for bool, as the iosys_map is read
    later without being initialized. Zero-initialize it to avoid this.
    
    Reported-by: Ashish Mhetre <amhetre@nvidia.com>
    Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230901115910.701518-2-cyndis@kapsi.fi
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
erofs: avoid debugging output for (de)compressed data [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Wed Dec 27 23:19:03 2023 +0800

    erofs: avoid debugging output for (de)compressed data
    
    [ Upstream commit 496530c7c1dfc159d59a75ae00b572f570710c53 ]
    
    Syzbot reported a KMSAN warning,
    erofs: (device loop0): z_erofs_lz4_decompress_mem: failed to decompress -12 in[46, 4050] out[917]
    =====================================================
    BUG: KMSAN: uninit-value in hex_dump_to_buffer+0xae9/0x10f0 lib/hexdump.c:194
      ..
      print_hex_dump+0x13d/0x3e0 lib/hexdump.c:276
      z_erofs_lz4_decompress_mem fs/erofs/decompressor.c:252 [inline]
      z_erofs_lz4_decompress+0x257e/0x2a70 fs/erofs/decompressor.c:311
      z_erofs_decompress_pcluster fs/erofs/zdata.c:1290 [inline]
      z_erofs_decompress_queue+0x338c/0x6460 fs/erofs/zdata.c:1372
      z_erofs_runqueue+0x36cd/0x3830
      z_erofs_read_folio+0x435/0x810 fs/erofs/zdata.c:1843
    
    The root cause is that the printed decompressed buffer may be filled
    incompletely due to decompression failure.  Since they were once only
    used for debugging, get rid of them now.
    
    Reported-and-tested-by: syzbot+6c746eea496f34b3161d@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/r/000000000000321c24060d7cfa1c@google.com
    Reviewed-by: Yue Hu <huyue2@coolpad.com>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20231227151903.2900413-1-hsiangkao@linux.alibaba.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ext4, jbd2: add an optimized bmap for the journal inode [+ + +]
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Tue Mar 7 23:15:49 2023 -0500

    ext4, jbd2: add an optimized bmap for the journal inode
    
    [ Upstream commit 62913ae96de747091c4dacd06d158e7729c1a76d ]
    
    The generic bmap() function exported by the VFS takes locks and does
    checks that are not necessary for the journal inode.  So allow the
    file system to set a journal-optimized bmap function in
    journal->j_bmap.
    
    Reported-by: syzbot+9543479984ae9e576000@syzkaller.appspotmail.com
    Link: https://syzkaller.appspot.com/bug?id=e4aaa78795e490421c79f76ec3679006c8ff4cf0
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ext4: check the return value of ext4_xattr_inode_dec_ref() [+ + +]
Author: Li Zhong <floridsleeves@gmail.com>
Date:   Fri Sep 16 17:28:16 2022 -0700

    ext4: check the return value of ext4_xattr_inode_dec_ref()
    
    [ Upstream commit 56d0d0b9289dae041becc7ee6bd966a00dd610e0 ]
    
    Check the return value of ext4_xattr_inode_dec_ref(), which could
    return error code and need to be warned.
    
    Signed-off-by: Li Zhong <floridsleeves@gmail.com>
    Link: https://lore.kernel.org/r/20220917002816.3804400-1-floridsleeves@gmail.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 0a46ef234756 ("ext4: do not create EA inode under buffer lock")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: do not create EA inode under buffer lock [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Thu Mar 21 17:26:50 2024 +0100

    ext4: do not create EA inode under buffer lock
    
    [ Upstream commit 0a46ef234756dca04623b7591e8ebb3440622f0b ]
    
    ext4_xattr_set_entry() creates new EA inodes while holding buffer lock
    on the external xattr block. This is problematic as it nests all the
    allocation locking (which acquires locks on other buffers) under the
    buffer lock. This can even deadlock when the filesystem is corrupted and
    e.g. quota file is setup to contain xattr block as data block. Move the
    allocation of EA inode out of ext4_xattr_set_entry() into the callers.
    
    Reported-by: syzbot+a43d4f48b8397d0e41a9@syzkaller.appspotmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240321162657.27420-2-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: do not trim the group with corrupted block bitmap [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Thu Jan 4 22:20:34 2024 +0800

    ext4: do not trim the group with corrupted block bitmap
    
    [ Upstream commit 172202152a125955367393956acf5f4ffd092e0d ]
    
    Otherwise operating on an incorrupted block bitmap can lead to all sorts
    of unknown problems.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240104142040.2835097-3-libaokun1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: fold quota accounting into ext4_xattr_inode_lookup_create() [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Fri Feb 9 12:20:59 2024 +0100

    ext4: fold quota accounting into ext4_xattr_inode_lookup_create()
    
    [ Upstream commit 8208c41c43ad5e9b63dce6c45a73e326109ca658 ]
    
    When allocating EA inode, quota accounting is done just before
    ext4_xattr_inode_lookup_create(). Logically these two operations belong
    together so just fold quota accounting into
    ext4_xattr_inode_lookup_create(). We also make
    ext4_xattr_inode_lookup_create() return the looked up / created inode to
    convert the function to a more standard calling convention.
    
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240209112107.10585-1-jack@suse.cz
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Stable-dep-of: 0a46ef234756 ("ext4: do not create EA inode under buffer lock")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ext4: set the type of max_zeroout to unsigned int to avoid overflow [+ + +]
Author: Baokun Li <libaokun1@huawei.com>
Date:   Tue Mar 19 19:33:24 2024 +0800

    ext4: set the type of max_zeroout to unsigned int to avoid overflow
    
    [ Upstream commit 261341a932d9244cbcd372a3659428c8723e5a49 ]
    
    The max_zeroout is of type int and the s_extent_max_zeroout_kb is of
    type uint, and the s_extent_max_zeroout_kb can be freely modified via
    the sysfs interface. When the block size is 1024, max_zeroout may
    overflow, so declare it as unsigned int to avoid overflow.
    
    Signed-off-by: Baokun Li <libaokun1@huawei.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20240319113325.3110393-9-libaokun1@huawei.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix to do sanity check in update_sit_entry [+ + +]
Author: Zhiguo Niu <zhiguo.niu@unisoc.com>
Date:   Wed Feb 28 19:59:54 2024 +0800

    f2fs: fix to do sanity check in update_sit_entry
    
    [ Upstream commit 36959d18c3cf09b3c12157c6950e18652067de77 ]
    
    If GET_SEGNO return NULL_SEGNO for some unecpected case,
    update_sit_entry will access invalid memory address,
    cause system crash. It is better to do sanity check about
    GET_SEGNO just like update_segment_mtime & locate_dirty_segment.
    
    Also remove some redundant judgment code.
    
    Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbdev: offb: replace of_node_put with __free(device_node) [+ + +]
Author: Abdulrasaq Lawani <abdulrasaqolawani@gmail.com>
Date:   Mon Apr 22 21:20:21 2024 -0400

    fbdev: offb: replace of_node_put with __free(device_node)
    
    [ Upstream commit ce4a7ae84a58b9f33aae8d6c769b3c94f3d5ce76 ]
    
    Replaced instance of of_node_put with __free(device_node)
    to simplify code and protect against any memory leaks
    due to future changes in the control flow.
    
    Suggested-by: Julia Lawall <julia.lawall@inria.fr>
    Signed-off-by: Abdulrasaq Lawani <abdulrasaqolawani@gmail.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
firmware: cirrus: cs_dsp: Initialize debugfs_root to invalid [+ + +]
Author: Richard Fitzgerald <rf@opensource.cirrus.com>
Date:   Thu Mar 7 10:53:53 2024 +0000

    firmware: cirrus: cs_dsp: Initialize debugfs_root to invalid
    
    [ Upstream commit 66626b15636b5f5cf3d7f6104799f77462748974 ]
    
    Initialize debugfs_root to -ENODEV so that if the client never sets a
    valid debugfs root the debugfs files will not be created.
    
    A NULL pointer passed to any of the debugfs_create_*() functions means
    "create in the root of debugfs". It doesn't mean "ignore".
    
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Link: https://msgid.link/r/20240307105353.40067-1-rf@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Aug 3 18:02:00 2024 -0400

    fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE
    
    commit 9a2fa1472083580b6c66bdaf291f591e1170123a upstream.
    
    copy_fd_bitmaps(new, old, count) is expected to copy the first
    count/BITS_PER_LONG bits from old->full_fds_bits[] and fill
    the rest with zeroes.  What it does is copying enough words
    (BITS_TO_LONGS(count/BITS_PER_LONG)), then memsets the rest.
    That works fine, *if* all bits past the cutoff point are
    clear.  Otherwise we are risking garbage from the last word
    we'd copied.
    
    For most of the callers that is true - expand_fdtable() has
    count equal to old->max_fds, so there's no open descriptors
    past count, let alone fully occupied words in ->open_fds[],
    which is what bits in ->full_fds_bits[] correspond to.
    
    The other caller (dup_fd()) passes sane_fdtable_size(old_fdt, max_fds),
    which is the smallest multiple of BITS_PER_LONG that covers all
    opened descriptors below max_fds.  In the common case (copying on
    fork()) max_fds is ~0U, so all opened descriptors will be below
    it and we are fine, by the same reasons why the call in expand_fdtable()
    is safe.
    
    Unfortunately, there is a case where max_fds is less than that
    and where we might, indeed, end up with junk in ->full_fds_bits[] -
    close_range(from, to, CLOSE_RANGE_UNSHARE) with
            * descriptor table being currently shared
            * 'to' being above the current capacity of descriptor table
            * 'from' being just under some chunk of opened descriptors.
    In that case we end up with observably wrong behaviour - e.g. spawn
    a child with CLONE_FILES, get all descriptors in range 0..127 open,
    then close_range(64, ~0U, CLOSE_RANGE_UNSHARE) and watch dup(0) ending
    up with descriptor #128, despite #64 being observably not open.
    
    The minimally invasive fix would be to deal with that in dup_fd().
    If this proves to add measurable overhead, we can go that way, but
    let's try to fix copy_fd_bitmaps() first.
    
    * new helper: bitmap_copy_and_expand(to, from, bits_to_copy, size).
    * make copy_fd_bitmaps() take the bitmap size in words, rather than
    bits; it's 'count' argument is always a multiple of BITS_PER_LONG,
    so we are not losing any information, and that way we can use the
    same helper for all three bitmaps - compiler will see that count
    is a multiple of BITS_PER_LONG for the large ones, so it'll generate
    plain memcpy()+memset().
    
    Reproducer added to tools/testing/selftests/core/close_range_test.c
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fou: remove warn in gue_gro_receive on unsupported protocol [+ + +]
Author: Willem de Bruijn <willemb@google.com>
Date:   Fri Jun 14 08:25:18 2024 -0400

    fou: remove warn in gue_gro_receive on unsupported protocol
    
    [ Upstream commit dd89a81d850fa9a65f67b4527c0e420d15bf836c ]
    
    Drop the WARN_ON_ONCE inn gue_gro_receive if the encapsulated type is
    not known or does not have a GRO handler.
    
    Such a packet is easily constructed. Syzbot generates them and sets
    off this warning.
    
    Remove the warning as it is expected and not actionable.
    
    The warning was previously reduced from WARN_ON to WARN_ON_ONCE in
    commit 270136613bf7 ("fou: Do WARN_ON_ONCE in gue_gro_receive for bad
    proto callbacks").
    
    Signed-off-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/r/20240614122552.1649044-1-willemdebruijn.kernel@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs/netfs/fscache_cookie: add missing "n_accesses" check [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Mon Jul 29 17:19:30 2024 +0100

    fs/netfs/fscache_cookie: add missing "n_accesses" check
    
    commit f71aa06398aabc2e3eaac25acdf3d62e0094ba70 upstream.
    
    This fixes a NULL pointer dereference bug due to a data race which
    looks like this:
    
      BUG: kernel NULL pointer dereference, address: 0000000000000008
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 0 P4D 0
      Oops: 0000 [#1] SMP PTI
      CPU: 33 PID: 16573 Comm: kworker/u97:799 Not tainted 6.8.7-cm4all1-hp+ #43
      Hardware name: HP ProLiant DL380 Gen9/ProLiant DL380 Gen9, BIOS P89 10/17/2018
      Workqueue: events_unbound netfs_rreq_write_to_cache_work
      RIP: 0010:cachefiles_prepare_write+0x30/0xa0
      Code: 57 41 56 45 89 ce 41 55 49 89 cd 41 54 49 89 d4 55 53 48 89 fb 48 83 ec 08 48 8b 47 08 48 83 7f 10 00 48 89 34 24 48 8b 68 20 <48> 8b 45 08 4c 8b 38 74 45 49 8b 7f 50 e8 4e a9 b0 ff 48 8b 73 10
      RSP: 0018:ffffb4e78113bde0 EFLAGS: 00010286
      RAX: ffff976126be6d10 RBX: ffff97615cdb8438 RCX: 0000000000020000
      RDX: ffff97605e6c4c68 RSI: ffff97605e6c4c60 RDI: ffff97615cdb8438
      RBP: 0000000000000000 R08: 0000000000278333 R09: 0000000000000001
      R10: ffff97605e6c4600 R11: 0000000000000001 R12: ffff97605e6c4c68
      R13: 0000000000020000 R14: 0000000000000001 R15: ffff976064fe2c00
      FS:  0000000000000000(0000) GS:ffff9776dfd40000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000008 CR3: 000000005942c002 CR4: 00000000001706f0
      Call Trace:
       <TASK>
       ? __die+0x1f/0x70
       ? page_fault_oops+0x15d/0x440
       ? search_module_extables+0xe/0x40
       ? fixup_exception+0x22/0x2f0
       ? exc_page_fault+0x5f/0x100
       ? asm_exc_page_fault+0x22/0x30
       ? cachefiles_prepare_write+0x30/0xa0
       netfs_rreq_write_to_cache_work+0x135/0x2e0
       process_one_work+0x137/0x2c0
       worker_thread+0x2e9/0x400
       ? __pfx_worker_thread+0x10/0x10
       kthread+0xcc/0x100
       ? __pfx_kthread+0x10/0x10
       ret_from_fork+0x30/0x50
       ? __pfx_kthread+0x10/0x10
       ret_from_fork_asm+0x1b/0x30
       </TASK>
      Modules linked in:
      CR2: 0000000000000008
      ---[ end trace 0000000000000000 ]---
    
    This happened because fscache_cookie_state_machine() was slow and was
    still running while another process invoked fscache_unuse_cookie();
    this led to a fscache_cookie_lru_do_one() call, setting the
    FSCACHE_COOKIE_DO_LRU_DISCARD flag, which was picked up by
    fscache_cookie_state_machine(), withdrawing the cookie via
    cachefiles_withdraw_cookie(), clearing cookie->cache_priv.
    
    At the same time, yet another process invoked
    cachefiles_prepare_write(), which found a NULL pointer in this code
    line:
    
      struct cachefiles_object *object = cachefiles_cres_object(cres);
    
    The next line crashes, obviously:
    
      struct cachefiles_cache *cache = object->volume->cache;
    
    During cachefiles_prepare_write(), the "n_accesses" counter is
    non-zero (via fscache_begin_operation()).  The cookie must not be
    withdrawn until it drops to zero.
    
    The counter is checked by fscache_cookie_state_machine() before
    switching to FSCACHE_COOKIE_STATE_RELINQUISHING and
    FSCACHE_COOKIE_STATE_WITHDRAWING (in "case
    FSCACHE_COOKIE_STATE_FAILED"), but not for
    FSCACHE_COOKIE_STATE_LRU_DISCARDING ("case
    FSCACHE_COOKIE_STATE_ACTIVE").
    
    This patch adds the missing check.  With a non-zero access counter,
    the function returns and the next fscache_end_cookie_access() call
    will queue another fscache_cookie_state_machine() call to handle the
    still-pending FSCACHE_COOKIE_DO_LRU_DISCARD.
    
    Fixes: 12bb21a29c19 ("fscache: Implement cookie user counting and resource pinning")
    Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Link: https://lore.kernel.org/r/20240729162002.3436763-2-dhowells@redhat.com
    cc: Jeff Layton <jlayton@kernel.org>
    cc: netfs@lists.linux.dev
    cc: linux-fsdevel@vger.kernel.org
    cc: stable@vger.kernel.org
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs/ntfs3: add prefix to bitmap_size() and use BITS_TO_U64() [+ + +]
Author: Alexander Lobakin <aleksander.lobakin@intel.com>
Date:   Wed Mar 27 16:23:46 2024 +0100

    fs/ntfs3: add prefix to bitmap_size() and use BITS_TO_U64()
    
    commit 3f5ef5109f6a054ce58b3bec7214ed76c9cc269f upstream.
    
    bitmap_size() is a pretty generic name and one may want to use it for
    a generic bitmap API function. At the same time, its logic is
    NTFS-specific, as it aligns to the sizeof(u64), not the sizeof(long)
    (although it uses ideologically right ALIGN() instead of division).
    Add the prefix 'ntfs3_' used for that FS (not just 'ntfs_' to not mix
    it with the legacy module) and use generic BITS_TO_U64() while at it.
    
    Suggested-by: Yury Norov <yury.norov@gmail.com> # BITS_TO_U64()
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Reviewed-by: Yury Norov <yury.norov@gmail.com>
    Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fs/ntfs3: Do copy_to_user out of run_lock [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Mon Jun 17 15:14:07 2024 +0300

    fs/ntfs3: Do copy_to_user out of run_lock
    
    [ Upstream commit d57431c6f511bf020e474026d9f3123d7bfbea8c ]
    
    In order not to call copy_to_user (from fiemap_fill_next_extent)
    we allocate memory in the kernel, fill it and copy it to user memory
    after up_read(run_lock).
    
    Reported-by: syzbot+36bb70085ef6edc2ebb9@syzkaller.appspotmail.com
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fs: binfmt_elf_efpic: don't use missing interpreter's properties [+ + +]
Author: Max Filippov <jcmvbkbc@gmail.com>
Date:   Thu Jan 18 07:06:37 2024 -0800

    fs: binfmt_elf_efpic: don't use missing interpreter's properties
    
    [ Upstream commit 15fd1dc3dadb4268207fa6797e753541aca09a2a ]
    
    Static FDPIC executable may get an executable stack even when it has
    non-executable GNU_STACK segment. This happens when STACK segment has rw
    permissions, but does not specify stack size. In that case FDPIC loader
    uses permissions of the interpreter's stack, and for static executables
    with no interpreter it results in choosing the arch-default permissions
    for the stack.
    
    Fix that by using the interpreter's properties only when the interpreter
    is actually used.
    
    Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
    Link: https://lore.kernel.org/r/20240118150637.660461-1-jcmvbkbc@gmail.com
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fuse: fix UAF in rcu pathwalks [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Sep 28 00:19:39 2023 -0400

    fuse: fix UAF in rcu pathwalks
    
    [ Upstream commit 053fc4f755ad43cf35210677bcba798ccdc48d0c ]
    
    ->permission(), ->get_link() and ->inode_get_acl() might dereference
    ->s_fs_info (and, in case of ->permission(), ->s_fs_info->fc->user_ns
    as well) when called from rcu pathwalk.
    
    Freeing ->s_fs_info->fc is rcu-delayed; we need to make freeing ->s_fs_info
    and dropping ->user_ns rcu-delayed too.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

fuse: Initialize beyond-EOF page contents before setting uptodate [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Tue Aug 6 21:51:42 2024 +0200

    fuse: Initialize beyond-EOF page contents before setting uptodate
    
    commit 3c0da3d163eb32f1f91891efaade027fa9b245b9 upstream.
    
    fuse_notify_store(), unlike fuse_do_readpage(), does not enable page
    zeroing (because it can be used to change partial page contents).
    
    So fuse_notify_store() must be more careful to fully initialize page
    contents (including parts of the page that are beyond end-of-file)
    before marking the page uptodate.
    
    The current code can leave beyond-EOF page contents uninitialized, which
    makes these uninitialized page contents visible to userspace via mmap().
    
    This is an information leak, but only affects systems which do not
    enable init-on-alloc (via CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y or the
    corresponding kernel command line parameter).
    
    Link: https://bugs.chromium.org/p/project-zero/issues/detail?id=2574
    Cc: stable@kernel.org
    Fixes: a1d75f258230 ("fuse: add store request")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gfs2: don't withdraw if init_threads() got interrupted [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Thu Nov 2 20:52:30 2023 +0100

    gfs2: don't withdraw if init_threads() got interrupted
    
    commit 0cdc6f44e9fdc2d20d720145bf99a39f611f6d61 upstream.
    
    In gfs2_fill_super(), when mounting a gfs2 filesystem is interrupted,
    kthread_create() can return -EINTR.  When that happens, we roll back
    what has already been done and abort the mount.
    
    Since commit 62dd0f98a0e5 ("gfs2: Flag a withdraw if init_threads()
    fails), we are calling gfs2_withdraw_delayed() in gfs2_fill_super();
    first via gfs2_make_fs_rw(), then directly.  But gfs2_withdraw_delayed()
    only marks the filesystem as withdrawing and relies on a caller further
    up the stack to do the actual withdraw, which doesn't exist in the
    gfs2_fill_super() case.  Because the filesystem is marked as withdrawing
    / withdrawn, function gfs2_lm_unmount() doesn't release the dlm
    lockspace, so when we try to mount that filesystem again, we get:
    
        gfs2: fsid=gohan:gohan0: Trying to join cluster "lock_dlm", "gohan:gohan0"
        gfs2: fsid=gohan:gohan0: dlm_new_lockspace error -17
    
    Since commit b77b4a4815a9 ("gfs2: Rework freeze / thaw logic"), the
    deadlock this gfs2_withdraw_delayed() call was supposed to work around
    cannot occur anymore because freeze_go_callback() won't take the
    sb->s_umount semaphore unconditionally anymore, so we can get rid of the
    gfs2_withdraw_delayed() in gfs2_fill_super() entirely.
    
    Reported-by: Alexander Aring <aahringo@redhat.com>
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Cc: stable@vger.kernel.org # v6.5+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gfs2: Fix another freeze/thaw hang [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Sep 11 20:00:28 2023 +0200

    gfs2: Fix another freeze/thaw hang
    
    commit 52954b750958dcab9e44935f0c32643279091c85 upstream.
    
    On a thawed filesystem, the freeze glock is held in shared mode.  In
    order to initiate a cluster-wide freeze, the node initiating the freeze
    drops the freeze glock and grabs it in exclusive mode.  The other nodes
    recognize this as contention on the freeze glock; function
    freeze_go_callback is invoked.  This indicates to them that they must
    freeze the filesystem locally, drop the freeze glock, and then
    re-acquire it in shared mode before being able to unfreeze the
    filesystem locally.
    
    While a node is trying to re-acquire the freeze glock in shared mode,
    additional contention can occur.  In that case, the node must behave in
    the same way as above.
    
    Unfortunately, freeze_go_callback() contains a check that causes it to
    bail out when the freeze glock isn't held in shared mode.  Fix that to
    allow the glock to be unlocked or held in shared mode.
    
    In addition, update a reference to trylock_super() which has been
    renamed to super_trylock_shared() in the meantime.
    
    Fixes: b77b4a4815a9 ("gfs2: Rework freeze / thaw logic")
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gfs2: Refcounting fix in gfs2_thaw_super [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Dec 25 20:07:46 2023 +0100

    gfs2: Refcounting fix in gfs2_thaw_super
    
    [ Upstream commit 4e58543e7da4859c4ba61d15493e3522b6ad71fd ]
    
    It turns out that the .freeze_super and .thaw_super operations require
    the filesystem to manage the superblock refcount itself.  We are using
    the freeze_super() and thaw_super() helpers to mostly take care of that
    for us, but this means that the superblock may no longer be around by
    when thaw_super() returns, and gfs2_thaw_super() will then access freed
    memory.  Take an extra superblock reference in gfs2_thaw_super() to fix
    that.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gfs2: Remove freeze_go_demote_ok [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Fri Sep 1 21:39:26 2023 +0200

    gfs2: Remove freeze_go_demote_ok
    
    commit bbacb395ac5c57290cdfd02389788cbce64c237e upstream.
    
    Before commit b77b4a4815a9 ("gfs2: Rework freeze / thaw logic"), the
    freeze glock was kept around in the glock cache in shared mode without
    being actively held while a filesystem is in thawed state.  In that
    state, memory pressure could have eventually evicted the freeze glock,
    and the freeze_go_demote_ok callback was needed to prevent that from
    happening.
    
    With the freeze / thaw rework, the freeze glock is now always actively
    held in shared mode while a filesystem is thawed, and the
    freeze_go_demote_ok hack is no longer needed.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gfs2: Remove LM_FLAG_PRIORITY flag [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Tue Aug 8 20:27:46 2023 +0200

    gfs2: Remove LM_FLAG_PRIORITY flag
    
    commit 0b93bac2271e11beb980fca037a34a9819c7dc37 upstream.
    
    The last user of this flag was removed in commit b77b4a4815a9 ("gfs2:
    Rework freeze / thaw logic").
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gfs2: Rename gfs2_freeze_lock{ => _shared } [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Nov 14 18:26:00 2022 +0100

    gfs2: Rename gfs2_freeze_lock{ => _shared }
    
    [ Upstream commit e392edd5d52a6742595ecaf8270c1af3e96b9a38 ]
    
    Rename gfs2_freeze_lock to gfs2_freeze_lock_shared to make it a bit more
    obvious that this function establishes the "thawed" state of the freeze
    glock.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Stable-dep-of: f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for withdraw")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gfs2: Rename remaining "transaction" glock references [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Wed Nov 16 14:19:06 2022 +0100

    gfs2: Rename remaining "transaction" glock references
    
    [ Upstream commit af1abe11466f1a6cb6ba22ee0d815c21c3559947 ]
    
    The transaction glock was repurposed to serve as the new freeze glock
    years ago.  Don't refer to it as the transaction glock anymore.
    
    Also, to be more precise, call it the "freeze glock" instead of the
    "freeze lock".  Ditto for the journal glock.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Stable-dep-of: f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for withdraw")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gfs2: Rename SDF_{FS_FROZEN => FREEZE_INITIATOR} [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Nov 21 23:09:38 2022 +0100

    gfs2: Rename SDF_{FS_FROZEN => FREEZE_INITIATOR}
    
    [ Upstream commit cad1e15804a83afd9a5c1d95a428d60d1f9c0340 ]
    
    Rename the SDF_FS_FROZEN flag to SDF_FREEZE_INITIATOR to indicate more
    clearly that the node that has this flag set is the initiator of the
    freeze.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com
    Stable-dep-of: f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for withdraw")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gfs2: Rename the {freeze,thaw}_super callbacks [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Nov 14 16:40:15 2022 +0100

    gfs2: Rename the {freeze,thaw}_super callbacks
    
    [ Upstream commit 097cca525adf10f35c9dac037155564f1b1a688b ]
    
    Rename gfs2_freeze to gfs2_freeze_super and gfs2_unfreeze to
    gfs2_thaw_super to match the names of the corresponding super
    operations.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Stable-dep-of: f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for withdraw")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gfs2: Rework freeze / thaw logic [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Nov 14 23:34:50 2022 +0100

    gfs2: Rework freeze / thaw logic
    
    [ Upstream commit b77b4a4815a9651d1d6e07b8e6548eee9531a5eb ]
    
    So far, at mount time, gfs2 would take the freeze glock in shared mode
    and then immediately drop it again, turning it into a cached glock that
    can be reclaimed at any time.  To freeze the filesystem cluster-wide,
    the node initiating the freeze would take the freeze glock in exclusive
    mode, which would cause the freeze glock's freeze_go_sync() callback to
    run on each node.  There, gfs2 would freeze the filesystem and schedule
    gfs2_freeze_func() to run.  gfs2_freeze_func() would re-acquire the
    freeze glock in shared mode, thaw the filesystem, and drop the freeze
    glock again.  The initiating node would keep the freeze glock held in
    exclusive mode.  To thaw the filesystem, the initiating node would drop
    the freeze glock again, which would allow gfs2_freeze_func() to resume
    on all nodes, leaving the filesystem in the thawed state.
    
    It turns out that in freeze_go_sync(), we cannot reliably and safely
    freeze the filesystem.  This is primarily because the final unmount of a
    filesystem takes a write lock on the s_umount rw semaphore before
    calling into gfs2_put_super(), and freeze_go_sync() needs to call
    freeze_super() which also takes a write lock on the same semaphore,
    causing a deadlock.  We could work around this by trying to take an
    active reference on the super block first, which would prevent unmount
    from running at the same time.  But that can fail, and freeze_go_sync()
    isn't actually allowed to fail.
    
    To get around this, this patch changes the freeze glock locking scheme
    as follows:
    
    At mount time, each node takes the freeze glock in shared mode.  To
    freeze a filesystem, the initiating node first freezes the filesystem
    locally and then drops and re-acquires the freeze glock in exclusive
    mode.  All other nodes notice that there is contention on the freeze
    glock in their go_callback callbacks, and they schedule
    gfs2_freeze_func() to run.  There, they freeze the filesystem locally
    and drop and re-acquire the freeze glock before re-thawing the
    filesystem.  This is happening outside of the glock state engine, so
    there, we are allowed to fail.
    
    From a cluster point of view, taking and immediately dropping a glock is
    indistinguishable from taking the glock and only dropping it upon
    contention, so this new scheme is compatible with the old one.
    
    Thanks to Li Dong <lidong@vivo.com> for reporting a locking bug in
    gfs2_freeze_func() in a previous version of this commit.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Stable-dep-of: f66af88e3321 ("gfs2: Stop using gfs2_make_fs_ro for withdraw")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gfs2: setattr_chown: Add missing initialization [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Sat Oct 21 20:51:13 2023 +0200

    gfs2: setattr_chown: Add missing initialization
    
    [ Upstream commit 2d8d7990619878a848b1d916c2f936d3012ee17d ]
    
    Add a missing initialization of variable ap in setattr_chown().
    Without, chown() may be able to bypass quotas.
    
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gfs2: Stop using gfs2_make_fs_ro for withdraw [+ + +]
Author: Andreas Gruenbacher <agruenba@redhat.com>
Date:   Mon Aug 28 16:39:20 2023 +0200

    gfs2: Stop using gfs2_make_fs_ro for withdraw
    
    [ Upstream commit f66af88e33212b57ea86da2c5d66c0d9d5c46344 ]
    
    [   81.372851][ T5532] CPU: 1 PID: 5532 Comm: syz-executor.0 Not tainted 6.2.0-rc1-syzkaller-dirty #0
    [   81.382080][ T5532] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/12/2023
    [   81.392343][ T5532] Call Trace:
    [   81.395654][ T5532]  <TASK>
    [   81.398603][ T5532]  dump_stack_lvl+0x1b1/0x290
    [   81.418421][ T5532]  gfs2_assert_warn_i+0x19a/0x2e0
    [   81.423480][ T5532]  gfs2_quota_cleanup+0x4c6/0x6b0
    [   81.428611][ T5532]  gfs2_make_fs_ro+0x517/0x610
    [   81.457802][ T5532]  gfs2_withdraw+0x609/0x1540
    [   81.481452][ T5532]  gfs2_inode_refresh+0xb2d/0xf60
    [   81.506658][ T5532]  gfs2_instantiate+0x15e/0x220
    [   81.511504][ T5532]  gfs2_glock_wait+0x1d9/0x2a0
    [   81.516352][ T5532]  do_sync+0x485/0xc80
    [   81.554943][ T5532]  gfs2_quota_sync+0x3da/0x8b0
    [   81.559738][ T5532]  gfs2_sync_fs+0x49/0xb0
    [   81.564063][ T5532]  sync_filesystem+0xe8/0x220
    [   81.568740][ T5532]  generic_shutdown_super+0x6b/0x310
    [   81.574112][ T5532]  kill_block_super+0x79/0xd0
    [   81.578779][ T5532]  deactivate_locked_super+0xa7/0xf0
    [   81.584064][ T5532]  cleanup_mnt+0x494/0x520
    [   81.593753][ T5532]  task_work_run+0x243/0x300
    [   81.608837][ T5532]  exit_to_user_mode_loop+0x124/0x150
    [   81.614232][ T5532]  exit_to_user_mode_prepare+0xb2/0x140
    [   81.619820][ T5532]  syscall_exit_to_user_mode+0x26/0x60
    [   81.625287][ T5532]  do_syscall_64+0x49/0xb0
    [   81.629710][ T5532]  entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    In this backtrace, gfs2_quota_sync() takes quota data references and
    then calls do_sync().  Function do_sync() encounters filesystem
    corruption and withdraws the filesystem, which (among other things) calls
    gfs2_quota_cleanup().  Function gfs2_quota_cleanup() wrongly assumes
    that nobody is holding any quota data references anymore, and destroys
    all quota data objects.  When gfs2_quota_sync() then resumes and
    dereferences the quota data objects it is holding, those objects are no
    longer there.
    
    Function gfs2_quota_cleanup() deals with resource deallocation and can
    easily be delayed until gfs2_put_super() in the case of a filesystem
    withdraw.  In fact, most of the other work gfs2_make_fs_ro() does is
    unnecessary during a withdraw as well, so change signal_our_withdraw()
    to skip gfs2_make_fs_ro() and perform the necessary steps directly
    instead.
    
    Thanks to Edward Adam Davis <eadavis@sina.com> for the initial patches.
    
    Link: https://lore.kernel.org/all/0000000000002b5e2405f14e860f@google.com
    Reported-by: syzbot+3f6a670108ce43356017@syzkaller.appspotmail.com
    Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gso: fix dodgy bit handling for GSO_UDP_L4 [+ + +]
Author: Yan Zhai <yan@cloudflare.com>
Date:   Thu Jul 13 10:28:00 2023 -0700

    gso: fix dodgy bit handling for GSO_UDP_L4
    
    commit 9840036786d90cea11a90d1f30b6dc003b34ee67 upstream.
    
    Commit 1fd54773c267 ("udp: allow header check for dodgy GSO_UDP_L4
    packets.") checks DODGY bit for UDP, but for packets that can be fed
    directly to the device after gso_segs reset, it actually falls through
    to fragmentation:
    
    https://lore.kernel.org/all/CAJPywTKDdjtwkLVUW6LRA2FU912qcDmQOQGt2WaDo28KzYDg+A@mail.gmail.com/
    
    This change restores the expected behavior of GSO_UDP_L4 packets.
    
    Fixes: 1fd54773c267 ("udp: allow header check for dodgy GSO_UDP_L4 packets.")
    Suggested-by: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
    Signed-off-by: Yan Zhai <yan@cloudflare.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gtp: pull network headers in gtp_dev_xmit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Aug 8 13:24:55 2024 +0000

    gtp: pull network headers in gtp_dev_xmit()
    
    commit 3a3be7ff9224f424e485287b54be00d2c6bd9c40 upstream.
    
    syzbot/KMSAN reported use of uninit-value in get_dev_xmit() [1]
    
    We must make sure the IPv4 or Ipv6 header is pulled in skb->head
    before accessing fields in them.
    
    Use pskb_inet_may_pull() to fix this issue.
    
    [1]
    BUG: KMSAN: uninit-value in ipv6_pdp_find drivers/net/gtp.c:220 [inline]
     BUG: KMSAN: uninit-value in gtp_build_skb_ip6 drivers/net/gtp.c:1229 [inline]
     BUG: KMSAN: uninit-value in gtp_dev_xmit+0x1424/0x2540 drivers/net/gtp.c:1281
      ipv6_pdp_find drivers/net/gtp.c:220 [inline]
      gtp_build_skb_ip6 drivers/net/gtp.c:1229 [inline]
      gtp_dev_xmit+0x1424/0x2540 drivers/net/gtp.c:1281
      __netdev_start_xmit include/linux/netdevice.h:4913 [inline]
      netdev_start_xmit include/linux/netdevice.h:4922 [inline]
      xmit_one net/core/dev.c:3580 [inline]
      dev_hard_start_xmit+0x247/0xa20 net/core/dev.c:3596
      __dev_queue_xmit+0x358c/0x5610 net/core/dev.c:4423
      dev_queue_xmit include/linux/netdevice.h:3105 [inline]
      packet_xmit+0x9c/0x6c0 net/packet/af_packet.c:276
      packet_snd net/packet/af_packet.c:3145 [inline]
      packet_sendmsg+0x90e3/0xa3a0 net/packet/af_packet.c:3177
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:745
      __sys_sendto+0x685/0x830 net/socket.c:2204
      __do_sys_sendto net/socket.c:2216 [inline]
      __se_sys_sendto net/socket.c:2212 [inline]
      __x64_sys_sendto+0x125/0x1d0 net/socket.c:2212
      x64_sys_call+0x3799/0x3c10 arch/x86/include/generated/asm/syscalls_64.h:45
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:3994 [inline]
      slab_alloc_node mm/slub.c:4037 [inline]
      kmem_cache_alloc_node_noprof+0x6bf/0xb80 mm/slub.c:4080
      kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:583
      __alloc_skb+0x363/0x7b0 net/core/skbuff.c:674
      alloc_skb include/linux/skbuff.h:1320 [inline]
      alloc_skb_with_frags+0xc8/0xbf0 net/core/skbuff.c:6526
      sock_alloc_send_pskb+0xa81/0xbf0 net/core/sock.c:2815
      packet_alloc_skb net/packet/af_packet.c:2994 [inline]
      packet_snd net/packet/af_packet.c:3088 [inline]
      packet_sendmsg+0x749c/0xa3a0 net/packet/af_packet.c:3177
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0x30f/0x380 net/socket.c:745
      __sys_sendto+0x685/0x830 net/socket.c:2204
      __do_sys_sendto net/socket.c:2216 [inline]
      __se_sys_sendto net/socket.c:2212 [inline]
      __x64_sys_sendto+0x125/0x1d0 net/socket.c:2212
      x64_sys_call+0x3799/0x3c10 arch/x86/include/generated/asm/syscalls_64.h:45
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 0 UID: 0 PID: 7115 Comm: syz.1.515 Not tainted 6.11.0-rc1-syzkaller-00043-g94ede2a3e913 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 06/27/2024
    
    Fixes: 999cb275c807 ("gtp: add IPv6 support")
    Fixes: 459aa660eb1d ("gtp: add initial driver for datapath of GPRS Tunneling Protocol (GTP-U)")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Harald Welte <laforge@gnumonks.org>
    Reviewed-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Link: https://patch.msgid.link/20240808132455.3413916-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HID: microsoft: Add rumble support to latest xbox controllers [+ + +]
Author: Siarhei Vishniakou <svv@google.com>
Date:   Tue Apr 25 09:38:44 2023 -0700

    HID: microsoft: Add rumble support to latest xbox controllers
    
    commit f5554725f30475b05b5178b998366f11ecb50c7f upstream.
    
    Currently, rumble is only supported via bluetooth on a single xbox
    controller, called 'model 1708'. On the back of the device, it's named
    'wireless controller for xbox one'. However, in 2021, Microsoft released
    a firmware update for this controller. As part of this update, the HID
    descriptor of the device changed. The product ID was also changed from
    0x02fd to 0x0b20. On this controller, rumble was supported via
    hid-microsoft, which matched against the old product id (0x02fd). As a
    result, the firmware update broke rumble support on this controller.
    
    See:
    https://news.xbox.com/en-us/2021/09/08/xbox-controller-firmware-update-rolling-out-to-insiders-starting-today/
    
    The hid-microsoft driver actually supports rumble on the new firmware,
    as well. So simply adding new product id is sufficient to bring back
    this support.
    
    After discussing further with the xbox team, it was pointed out that
    another xbox controller, xbox elite series 2, can be supported in a
    similar way.
    
    Add rumble support for all of these devices in this patch. Two of the
    devices have received firmware updates that caused their product id's to
    change. Both old and new firmware versions of these devices were tested.
    
    The tested controllers are:
    
    1. 'wireless controller for xbox one', model 1708
    2. 'xbox wireless controller', model 1914. This is also sometimes
       referred to as 'xbox series S|X'.
    3. 'elite series 2', model 1797.
    
    The tested configurations are:
    1. model 1708, pid 0x02fd (old firmware)
    2. model 1708, pid 0x0b20 (new firmware)
    3. model 1914, pid 0x0b13
    4. model 1797, pid 0x0b05 (old firmware)
    5. model 1797, pid 0x0b22 (new firmware)
    
    I verified rumble support on both bluetooth and usb.
    
    Reviewed-by: Bastien Nocera <hadess@hadess.net>
    Signed-off-by: Siarhei Vishniakou <svv@google.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

HID: wacom: Defer calculation of resolution until resolution_code is known [+ + +]
Author: Jason Gerecke <jason.gerecke@wacom.com>
Date:   Tue Jul 30 08:51:55 2024 -0700

    HID: wacom: Defer calculation of resolution until resolution_code is known
    
    commit 1b8f9c1fb464968a5b18d3acc1da8c00bad24fad upstream.
    
    The Wacom driver maps the HID_DG_TWIST usage to ABS_Z (rather than ABS_RZ)
    for historic reasons. When the code to support twist was introduced in
    commit 50066a042da5 ("HID: wacom: generic: Add support for height, tilt,
    and twist usages"), we were careful to write it in such a way that it had
    HID calculate the resolution of the twist axis assuming ABS_RZ instead
    (so that we would get correct angular behavior). This was broken with
    the introduction of commit 08a46b4190d3 ("HID: wacom: Set a default
    resolution for older tablets"), which moved the resolution calculation
    to occur *before* the adjustment from ABS_Z to ABS_RZ occurred.
    
    This commit moves the calculation of resolution after the point that
    we are finished setting things up for its proper use.
    
    Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
    Fixes: 08a46b4190d3 ("HID: wacom: Set a default resolution for older tablets")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hrtimer: Prevent queuing of hrtimer without a function callback [+ + +]
Author: Phil Chang <phil.chang@mediatek.com>
Date:   Mon Jun 10 21:31:36 2024 +0800

    hrtimer: Prevent queuing of hrtimer without a function callback
    
    [ Upstream commit 5a830bbce3af16833fe0092dec47b6dd30279825 ]
    
    The hrtimer function callback must not be NULL. It has to be specified by
    the call side but it is not validated by the hrtimer code. When a hrtimer
    is queued without a function callback, the kernel crashes with a null
    pointer dereference when trying to execute the callback in __run_hrtimer().
    
    Introduce a validation before queuing the hrtimer in
    hrtimer_start_range_ns().
    
    [anna-maria: Rephrase commit message]
    
    Signed-off-by: Phil Chang <phil.chang@mediatek.com>
    Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hrtimer: Select housekeeping CPU during migration [+ + +]
Author: Costa Shulyupin <costa.shul@redhat.com>
Date:   Thu Feb 22 22:08:56 2024 +0200

    hrtimer: Select housekeeping CPU during migration
    
    [ Upstream commit 56c2cb10120894be40c40a9bf0ce798da14c50f6 ]
    
    During CPU-down hotplug, hrtimers may migrate to isolated CPUs,
    compromising CPU isolation.
    
    Address this issue by masking valid CPUs for hrtimers using
    housekeeping_cpumask(HK_TYPE_TIMER).
    
    Suggested-by: Waiman Long <longman@redhat.com>
    Signed-off-by: Costa Shulyupin <costa.shul@redhat.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Waiman Long <longman@redhat.com>
    Link: https://lore.kernel.org/r/20240222200856.569036-1-costa.shul@redhat.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (ltc2992) Avoid division by zero [+ + +]
Author: Antoniu Miclaus <antoniu.miclaus@analog.com>
Date:   Wed Oct 11 16:57:53 2023 +0300

    hwmon: (ltc2992) Avoid division by zero
    
    [ Upstream commit 10b02902048737f376104bc69e5212466e65a542 ]
    
    Do not allow setting shunt resistor to 0. This results in a division by
    zero when performing current value computations based on input voltages
    and connected resistor values.
    
    Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com>
    Link: https://lore.kernel.org/r/20231011135754.13508-1-antoniu.miclaus@analog.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

hwmon: (ltc2992) Fix memory leak in ltc2992_parse_dt() [+ + +]
Author: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Date:   Thu May 23 17:47:14 2024 +0200

    hwmon: (ltc2992) Fix memory leak in ltc2992_parse_dt()
    
    commit a94ff8e50c20bde6d50864849a98b106e45d30c6 upstream.
    
    A new error path was added to the fwnode_for_each_available_node() loop
    in ltc2992_parse_dt(), which leads to an early return that requires a
    call to fwnode_handle_put() to avoid a memory leak in that case.
    
    Add the missing fwnode_handle_put() in the error path from a zero value
    shunt resistor.
    
    Cc: stable@vger.kernel.org
    Fixes: 10b029020487 ("hwmon: (ltc2992) Avoid division by zero")
    Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
    Link: https://lore.kernel.org/r/20240523-fwnode_for_each_available_child_node_scoped-v2-1-701f3a03f2fb@gmail.com
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

hwmon: (pc87360) Bounds check data->innr usage [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Thu Nov 30 12:02:07 2023 -0800

    hwmon: (pc87360) Bounds check data->innr usage
    
    [ Upstream commit 4265eb062a7303e537ab3792ade31f424c3c5189 ]
    
    Without visibility into the initializers for data->innr, GCC suspects
    using it as an index could walk off the end of the various 14-element
    arrays in data. Perform an explicit clamp to the array size. Silences
    the following warning with GCC 12+:
    
    ../drivers/hwmon/pc87360.c: In function 'pc87360_update_device':
    ../drivers/hwmon/pc87360.c:341:49: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
      341 |                                 data->in_max[i] = pc87360_read_value(data,
          |                                 ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
      342 |                                                   LD_IN, i,
          |                                                   ~~~~~~~~~
      343 |                                                   PC87365_REG_IN_MAX);
          |                                                   ~~~~~~~~~~~~~~~~~~~
    ../drivers/hwmon/pc87360.c:209:12: note: at offset 255 into destination object 'in_max' of size 14
      209 |         u8 in_max[14];          /* Register value */
          |            ^~~~~~
    
    Cc: Jim Cromie <jim.cromie@gmail.com>
    Cc: Jean Delvare <jdelvare@suse.com>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Cc: linux-hwmon@vger.kernel.org
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/20231130200207.work.679-kees@kernel.org
    [groeck: Added comment into code clarifying context]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume [+ + +]
Author: Andi Shyti <andi.shyti@kernel.org>
Date:   Mon Aug 12 21:40:28 2024 +0200

    i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume
    
    commit 4e91fa1ef3ce6290b4c598e54b5eb6cf134fbec8 upstream.
    
    Add the missing geni_icc_disable() call before returning in the
    geni_i2c_runtime_resume() function.
    
    Commit 9ba48db9f77c ("i2c: qcom-geni: Add missing
    geni_icc_disable in geni_i2c_runtime_resume") by Gaosheng missed
    disabling the interconnect in one case.
    
    Fixes: bf225ed357c6 ("i2c: i2c-qcom-geni: Add interconnect support")
    Cc: Gaosheng Cui <cuigaosheng1@huawei.com>
    Cc: stable@vger.kernel.org # v5.9+
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: riic: avoid potential division by zero [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Wed Sep 6 22:00:23 2023 +0200

    i2c: riic: avoid potential division by zero
    
    [ Upstream commit 7890fce6201aed46d3576e3d641f9ee5c1f0e16f ]
    
    Value comes from DT, so it could be 0. Unlikely, but could be.
    
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: tegra: allow DVC support to be compiled out [+ + +]
Author: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Date:   Sat May 6 23:19:01 2023 +0200

    i2c: tegra: allow DVC support to be compiled out
    
    [ Upstream commit a55efa7edf37dc428da7058b25c58a54dc9db4e4 ]
    
    Save a bit of code for newer Tegra platforms by compiling out
    DVC's I2C mode support that's used only for Tegra2.
    
    $ size i2c-tegra.o
        text    data     bss     dec     hex filename
    -  11381     292       8   11681    2da1 i2c-tegra.o
    +  10193     292       8   10493    28fd i2c-tegra.o
    
    Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
    Reviewed-by: Dmitry Osipenko <digetx@gmail.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 14d069d92951 ("i2c: tegra: Do not mark ACPI devices as irq safe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: tegra: allow VI support to be compiled out [+ + +]
Author: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Date:   Sat May 6 23:19:02 2023 +0200

    i2c: tegra: allow VI support to be compiled out
    
    [ Upstream commit 4f5d68c8591498c3955dc0228ed6606c1b138278 ]
    
    Save a bit of code for older Tegra platforms by compiling out
    VI's I2C mode support that's used only for Tegra210.
    
    $ size i2c-tegra.o
       text    data     bss     dec     hex filename
      11381     292       8   11681    2da1 i2c-tegra.o (full)
      10193     292       8   10493    28fd i2c-tegra.o (no-dvc)
       9145     292       8    9445    24e5 i2c-tegra.o (no-vi,no-dvc)
    
    Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
    Reviewed-by: Dmitry Osipenko <digetx@gmail.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Stable-dep-of: 14d069d92951 ("i2c: tegra: Do not mark ACPI devices as irq safe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i2c: tegra: Do not mark ACPI devices as irq safe [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Tue Aug 13 09:12:53 2024 -0700

    i2c: tegra: Do not mark ACPI devices as irq safe
    
    [ Upstream commit 14d069d92951a3e150c0a81f2ca3b93e54da913b ]
    
    On ACPI machines, the tegra i2c module encounters an issue due to a
    mutex being called inside a spinlock. This leads to the following bug:
    
            BUG: sleeping function called from invalid context at kernel/locking/mutex.c:585
            ...
    
            Call trace:
            __might_sleep
            __mutex_lock_common
            mutex_lock_nested
            acpi_subsys_runtime_resume
            rpm_resume
            tegra_i2c_xfer
    
    The problem arises because during __pm_runtime_resume(), the spinlock
    &dev->power.lock is acquired before rpm_resume() is called. Later,
    rpm_resume() invokes acpi_subsys_runtime_resume(), which relies on
    mutexes, triggering the error.
    
    To address this issue, devices on ACPI are now marked as not IRQ-safe,
    considering the dependency of acpi_subsys_runtime_resume() on mutexes.
    
    Fixes: bd2fdedbf2ba ("i2c: tegra: Add the ACPI support")
    Cc: <stable@vger.kernel.org> # v5.17+
    Co-developed-by: Michael van der Westhuizen <rmikey@meta.com>
    Signed-off-by: Michael van der Westhuizen <rmikey@meta.com>
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Dmitry Osipenko <digetx@gmail.com>
    Reviewed-by: Andy Shevchenko <andy@kernel.org>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
i3c: mipi-i3c-hci: Do not unmap region not mapped for transfer [+ + +]
Author: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Date:   Thu Sep 21 08:57:01 2023 +0300

    i3c: mipi-i3c-hci: Do not unmap region not mapped for transfer
    
    [ Upstream commit b8806e0c939f168237593af0056c309bf31022b0 ]
    
    Fix following warning (with CONFIG_DMA_API_DEBUG) which happens with a
    transfer without a data buffer.
    
            DMA-API: i3c mipi-i3c-hci.0: device driver tries to free DMA memory it has not allocated [device address=0x0000000000000000] [size=0 bytes]
    
    For those transfers the hci_dma_queue_xfer() doesn't create a mapping and
    the DMA address pointer xfer->data_dma is not set.
    
    Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Link: https://lore.kernel.org/r/20230921055704.1087277-10-jarkko.nikula@linux.intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

i3c: mipi-i3c-hci: Remove BUG() when Ring Abort request times out [+ + +]
Author: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Date:   Thu Sep 21 08:56:57 2023 +0300

    i3c: mipi-i3c-hci: Remove BUG() when Ring Abort request times out
    
    [ Upstream commit 361acacaf7c706223968c8186f0d3b6e214e7403 ]
    
    Ring Abort request will timeout in case there is an error in the Host
    Controller interrupt delivery or Ring Header configuration. Using BUG()
    makes hard to debug those cases.
    
    Make it less severe and turn BUG() to WARN_ON().
    
    Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Link: https://lore.kernel.org/r/20230921055704.1087277-6-jarkko.nikula@linux.intel.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
IB/hfi1: Fix potential deadlock on &irq_src_lock and &dd->uctxt_lock [+ + +]
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Tue Sep 26 10:11:16 2023 +0000

    IB/hfi1: Fix potential deadlock on &irq_src_lock and &dd->uctxt_lock
    
    [ Upstream commit 2f19c4b8395ccb6eb25ccafee883c8cfbe3fc193 ]
    
    handle_receive_interrupt_napi_sp() running inside interrupt handler
    could introduce inverse lock ordering between &dd->irq_src_lock
    and &dd->uctxt_lock, if read_mod_write() is preempted by the isr.
    
              [CPU0]                                        |          [CPU1]
    hfi1_ipoib_dev_open()                                   |
    --> hfi1_netdev_enable_queues()                         |
    --> enable_queues(rx)                                   |
    --> hfi1_rcvctrl()                                      |
    --> set_intr_bits()                                     |
    --> read_mod_write()                                    |
    --> spin_lock(&dd->irq_src_lock)                        |
                                                            | hfi1_poll()
                                                            | --> poll_next()
                                                            | --> spin_lock_irq(&dd->uctxt_lock)
                                                            |
                                                            | --> hfi1_rcvctrl()
                                                            | --> set_intr_bits()
                                                            | --> read_mod_write()
                                                            | --> spin_lock(&dd->irq_src_lock)
    <interrupt>                                             |
       --> handle_receive_interrupt_napi_sp()               |
       --> set_all_fastpath()                               |
       --> hfi1_rcd_get_by_index()                          |
       --> spin_lock_irqsave(&dd->uctxt_lock)               |
    
    This flaw was found by an experimental static analysis tool I am
    developing for irq-related deadlock.
    
    To prevent the potential deadlock, the patch use spin_lock_irqsave()
    on &dd->irq_src_lock inside read_mod_write() to prevent the possible
    deadlock scenario.
    
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Link: https://lore.kernel.org/r/20230926101116.2797-1-dg573847474@gmail.com
    Acked-by: Dennis Dalessandro <dennis.dalessandro@cornelisnetworks.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ice: Add xdp_buff to ice_rx_ring struct [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Tue Jan 31 21:44:55 2023 +0100

    ice: Add xdp_buff to ice_rx_ring struct
    
    [ Upstream commit cb0473e0e9dccaa0ddafb252f2c3ef943b86bb56 ]
    
    In preparation for XDP multi-buffer support, let's store xdp_buff on
    Rx ring struct. This will allow us to combine fragmented frames across
    separate NAPI cycles in the same way as currently skb fragments are
    handled. This means that skb pointer on Rx ring will become redundant
    and will be removed. For now it is kept and layout of Rx ring struct was
    not inspected, some member movement will be needed later on so that will
    be the time to take care of it.
    
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Alexander Lobakin <alexandr.lobakin@intel.com>
    Link: https://lore.kernel.org/bpf/20230131204506.219292-3-maciej.fijalkowski@intel.com
    Stable-dep-of: 50b2143356e8 ("ice: fix page reuse when PAGE_SIZE is over 8k")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: fix ICE_LAST_OFFSET formula [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Wed Aug 7 12:53:25 2024 +0200

    ice: fix ICE_LAST_OFFSET formula
    
    [ Upstream commit b966ad832942b5a11e002f9b5ef102b08425b84a ]
    
    For bigger PAGE_SIZE archs, ice driver works on 3k Rx buffers.
    Therefore, ICE_LAST_OFFSET should take into account ICE_RXBUF_3072, not
    ICE_RXBUF_2048.
    
    Fixes: 7237f5b0dba4 ("ice: introduce legacy Rx flag")
    Suggested-by: Luiz Capitulino <luizcap@redhat.com>
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Tested-by: Chandan Kumar Rout <chandanx.rout@intel.com> (A Contingent Worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: fix page reuse when PAGE_SIZE is over 8k [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Wed Aug 7 12:53:24 2024 +0200

    ice: fix page reuse when PAGE_SIZE is over 8k
    
    [ Upstream commit 50b2143356e888777fc5bca023c39f34f404613a ]
    
    Architectures that have PAGE_SIZE >= 8192 such as arm64 should act the
    same as x86 currently, meaning reuse of a page should only take place
    when no one else is busy with it.
    
    Do two things independently of underlying PAGE_SIZE:
    - store the page count under ice_rx_buf::pgcnt
    - then act upon its value vs ice_rx_buf::pagecnt_bias when making the
      decision regarding page reuse
    
    Fixes: 2b245cb29421 ("ice: Implement transmit and NAPI support")
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Tested-by: Chandan Kumar Rout <chandanx.rout@intel.com> (A Contingent Worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: fix W=1 headers mismatch [+ + +]
Author: Jesse Brandeburg <jesse.brandeburg@intel.com>
Date:   Mon Mar 13 13:36:07 2023 -0700

    ice: fix W=1 headers mismatch
    
    commit 66ceaa4c4507f2b598d37b528796dd34158d31bf upstream.
    
    make modules W=1 returns:
    .../ice/ice_txrx_lib.c:448: warning: Function parameter or member 'first_idx' not described in 'ice_finalize_xdp_rx'
    .../ice/ice_txrx.c:948: warning: Function parameter or member 'ntc' not described in 'ice_get_rx_buf'
    .../ice/ice_txrx.c:1038: warning: Excess function parameter 'rx_buf' description in 'ice_construct_skb'
    
    Fix these warnings by adding and deleting the deviant arguments.
    
    Fixes: 2fba7dc5157b ("ice: Add support for XDP multi-buffer on Rx side")
    Fixes: d7956d81f150 ("ice: Pull out next_to_clean bump out of ice_put_rx_buf()")
    CC: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
    Reviewed-by: Piotr Raczynski <piotr.raczynski@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ice: Prepare legacy-rx for upcoming XDP multi-buffer support [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Tue Jan 31 21:44:54 2023 +0100

    ice: Prepare legacy-rx for upcoming XDP multi-buffer support
    
    [ Upstream commit c61bcebde72de7f5dc194d28f29894f0f7661ff7 ]
    
    Rx path is going to be modified in a way that fragmented frame will be
    gathered within xdp_buff in the first place. This approach implies that
    underlying buffer has to provide tailroom for skb_shared_info. This is
    currently the case when ring uses build_skb but not when legacy-rx knob
    is turned on. This case configures 2k Rx buffers and has no way to
    provide either headroom or tailroom - FWIW it currently has
    XDP_PACKET_HEADROOM which is broken and in here it is removed. 2k Rx
    buffers were used so driver in this setting was able to support 9k MTU
    as it can chain up to 5 Rx buffers. With offset configuring HW writing
    2k of a data was passing the half of the page which broke the assumption
    of our internal page recycling tricks.
    
    Now if above got fixed and legacy-rx path would be left as is, when
    referring to skb_shared_info via xdp_get_shared_info_from_buff(),
    packet's content would be corrupted again. Hence size of Rx buffer needs
    to be lowered and therefore supported MTU. This operation will allow us
    to keep the unified data path and with 8k MTU users (if any of
    legacy-rx) would still be good to go. However, tendency is to drop the
    support for this code path at some point.
    
    Add ICE_RXBUF_1664 as vsi::rx_buf_len and ICE_MAX_FRAME_LEGACY_RX (8320)
    as vsi::max_frame for legacy-rx. For bigger page sizes configure 3k Rx
    buffers, not 2k.
    
    Since headroom support is removed, disable data_meta support on legacy-rx.
    When preparing XDP buff, rely on ice_rx_ring::rx_offset setting when
    deciding whether to support data_meta or not.
    
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Alexander Lobakin <alexandr.lobakin@intel.com>
    Link: https://lore.kernel.org/bpf/20230131204506.219292-2-maciej.fijalkowski@intel.com
    Stable-dep-of: 50b2143356e8 ("ice: fix page reuse when PAGE_SIZE is over 8k")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Pull out next_to_clean bump out of ice_put_rx_buf() [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Tue Jan 31 21:44:57 2023 +0100

    ice: Pull out next_to_clean bump out of ice_put_rx_buf()
    
    [ Upstream commit d7956d81f1502d3818500cff4847f3e9ae0c6aa4 ]
    
    Plan is to move ice_put_rx_buf() to the end of ice_clean_rx_irq() so
    in order to keep the ability of walking through HW Rx descriptors, pull
    out next_to_clean handling out of ice_put_rx_buf().
    
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Alexander Lobakin <alexandr.lobakin@intel.com>
    Link: https://lore.kernel.org/bpf/20230131204506.219292-5-maciej.fijalkowski@intel.com
    Stable-dep-of: 50b2143356e8 ("ice: fix page reuse when PAGE_SIZE is over 8k")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ice: Store page count inside ice_rx_buf [+ + +]
Author: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
Date:   Tue Jan 31 21:44:56 2023 +0100

    ice: Store page count inside ice_rx_buf
    
    [ Upstream commit ac0753391195011ded23696d7882428e5c419a98 ]
    
    This will allow us to avoid carrying additional auxiliary array of page
    counts when dealing with XDP multi buffer support. Previously combining
    fragmented frame to skb was not affected in the same way as XDP would be
    as whole frame is needed to be in place before executing XDP prog.
    Therefore, when going through HW Rx descriptors one-by-one, calls to
    ice_put_rx_buf() need to be taken *after* running XDP prog on a
    potentially multi buffered frame, so some additional storage of
    page count is needed.
    
    By adding page count to rx buf, it will make it easier to walk through
    processed entries at the end of rx cleaning routine and decide whether
    or not buffers should be recycled.
    
    While at it, bump ice_rx_buf::pagecnt_bias from u16 up to u32. It was
    proven many times that calculations on variables smaller than standard
    register size are harmful. This was also the case during experiments
    with embedding page count to ice_rx_buf - when this was added as u16 it
    had a performance impact.
    
    Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Alexander Lobakin <alexandr.lobakin@intel.com>
    Link: https://lore.kernel.org/bpf/20230131204506.219292-4-maciej.fijalkowski@intel.com
    Stable-dep-of: 50b2143356e8 ("ice: fix page reuse when PAGE_SIZE is over 8k")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
igc: Correct the launchtime offset [+ + +]
Author: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
Date:   Wed Sep 21 10:49:40 2022 +0800

    igc: Correct the launchtime offset
    
    [ Upstream commit 790835fcc0cb9992349ae3c9010dbc7321aaa24d ]
    
    The launchtime offset should be corrected according to sections 7.5.2.6
    Transmit Scheduling Latency of the Intel Ethernet I225/I226 Software
    User Manual.
    
    Software can compensate the latency between the transmission scheduling
    and the time that packet is transmitted to the network by setting this
    GTxOffset register. Without setting this register, there may be a
    significant delay between the packet scheduling and the network point.
    
    This patch helps to reduce the latency for each of the link speed.
    
    Before:
    
    10Mbps   : 11000 - 13800 nanosecond
    100Mbps  : 1300 - 1700 nanosecond
    1000Mbps : 190 - 600 nanosecond
    2500Mbps : 1400 - 1700 nanosecond
    
    After:
    
    10Mbps   : less than 750 nanosecond
    100Mbps  : less than 192 nanosecond
    1000Mbps : less than 128 nanosecond
    2500Mbps : less than 128 nanosecond
    
    Test Setup:
    
    Talker : Use l2_tai.c to generate the launchtime into packet payload.
    Listener: Use timedump.c to compute the delta between packet arrival and
    LaunchTime packet payload.
    
    Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Signed-off-by: Muhammad Husaini Zulkifli <muhammad.husaini.zulkifli@intel.com>
    Acked-by: Sasha Neftin <sasha.neftin@intel.com>
    Acked-by: Paul Menzel <pmenzel@molgen.mpg.de>
    Tested-by: Naama Meir <naamax.meir@linux.intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Stable-dep-of: e037a26ead18 ("igc: Fix packet still tx after gate close by reducing i226 MAC retry buffer")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

igc: Fix packet still tx after gate close by reducing i226 MAC retry buffer [+ + +]
Author: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
Date:   Sat Jul 6 11:38:07 2024 -0400

    igc: Fix packet still tx after gate close by reducing i226 MAC retry buffer
    
    [ Upstream commit e037a26ead187901f83cad9c503ccece5ff6817a ]
    
    Testing uncovered that even when the taprio gate is closed, some packets
    still transmit.
    
    According to i225/6 hardware errata [1], traffic might overflow the
    planned QBV window. This happens because MAC maintains an internal buffer,
    primarily for supporting half duplex retries. Therefore, even when the
    gate closes, residual MAC data in the buffer may still transmit.
    
    To mitigate this for i226, reduce the MAC's internal buffer from 192 bytes
    to the recommended 88 bytes by modifying the RETX_CTL register value.
    
    This follows guidelines from:
    [1] Ethernet Controller I225/I22 Spec Update Rev 2.1 Errata Item 9:
        TSN: Packet Transmission Might Cross Qbv Window
    [2] I225/6 SW User Manual Rev 1.2.4: Section 8.11.5 Retry Buffer Control
    
    Note that the RETX_CTL register can't be used in TSN mode because half
    duplex feature cannot coexist with TSN.
    
    Test Steps:
    1.  Send taprio cmd to board A:
        tc qdisc replace dev enp1s0 parent root handle 100 taprio \
        num_tc 4 \
        map 3 2 1 0 3 3 3 3 3 3 3 3 3 3 3 3 \
        queues 1@0 1@1 1@2 1@3 \
        base-time 0 \
        sched-entry S 0x07 500000 \
        sched-entry S 0x0f 500000 \
        flags 0x2 \
        txtime-delay 0
    
        Note that for TC3, gate should open for 500us and close for another
        500us.
    
    3.  Take tcpdump log on Board B.
    
    4.  Send udp packets via UDP tai app from Board A to Board B.
    
    5.  Analyze tcpdump log via wireshark log on Board B. Ensure that the
        total time from the first to the last packet received during one cycle
        for TC3 does not exceed 500us.
    
    Fixes: 43546211738e ("igc: Add new device ID's")
    Signed-off-by: Faizal Rahim <faizal.abdul.rahim@linux.intel.com>
    Acked-by: Vinicius Costa Gomes <vinicius.gomes@intel.com>
    Tested-by: Mor Bar-Gabay <morx.bar.gabay@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Input: i8042 - add forcenorestore quirk to leave controller untouched even on s3 [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Thu Jan 4 19:31:17 2024 +0100

    Input: i8042 - add forcenorestore quirk to leave controller untouched even on s3
    
    commit 3d765ae2daccc570b3f4fbcb57eb321b12cdded2 upstream.
    
    On s3 resume the i8042 driver tries to restore the controller to a known
    state by reinitializing things, however this can confuse the controller
    with different effects. Mostly occasionally unresponsive keyboards after
    resume.
    
    These issues do not rise on s0ix resume as here the controller is assumed
    to preserved its state from before suspend.
    
    This patch adds a quirk for devices where the reinitialization on s3 resume
    is not needed and might be harmful as described above. It does this by
    using the s0ix resume code path at selected locations.
    
    This new quirk goes beyond what the preexisting reset=never quirk does,
    which only skips some reinitialization steps.
    
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240104183118.779778-2-wse@tuxedocomputers.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: i8042 - use new forcenorestore quirk to replace old buggy quirk combination [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Thu Jan 4 19:31:18 2024 +0100

    Input: i8042 - use new forcenorestore quirk to replace old buggy quirk combination
    
    commit aaa4ca873d3da768896ffc909795359a01e853ef upstream.
    
    The old quirk combination sometimes cause a laggy keyboard after boot. With
    the new quirk the initial issue of an unresponsive keyboard after s3 resume
    is also fixed, but it doesn't have the negative side effect of the
    sometimes laggy keyboard.
    
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Cc: stable@vger.kernel.org
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Link: https://lore.kernel.org/r/20240104183118.779778-3-wse@tuxedocomputers.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: MT - limit max slots [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Mon Jul 29 21:51:30 2024 +0900

    Input: MT - limit max slots
    
    commit 99d3bf5f7377d42f8be60a6b9cb60fb0be34dceb upstream.
    
    syzbot is reporting too large allocation at input_mt_init_slots(), for
    num_slots is supplied from userspace using ioctl(UI_DEV_CREATE).
    
    Since nobody knows possible max slots, this patch chose 1024.
    
    Reported-by: syzbot <syzbot+0122fa359a69694395d5@syzkaller.appspotmail.com>
    Closes: https://syzkaller.appspot.com/bug?extid=0122fa359a69694395d5
    Suggested-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: George Kennedy <george.kennedy@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ip6_tunnel: Fix broken GRO [+ + +]
Author: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Date:   Thu Aug 15 17:14:16 2024 +0200

    ip6_tunnel: Fix broken GRO
    
    [ Upstream commit 4b3e33fcc38f7750604b065c55a43e94c5bc3145 ]
    
    GRO code checks for matching layer 2 headers to see, if packet belongs
    to the same flow and because ip6 tunnel set dev->hard_header_len
    this check fails in cases, where it shouldn't. To fix this don't
    set hard_header_len, but use needed_headroom like ipv4/ip_tunnel.c
    does.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
    Link: https://patch.msgid.link/20240815151419.109864-1-tbogendoerfer@suse.de
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: fix possible UAF in ip6_finish_output2() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Aug 20 16:08:58 2024 +0000

    ipv6: fix possible UAF in ip6_finish_output2()
    
    [ Upstream commit da273b377ae0d9bd255281ed3c2adb228321687b ]
    
    If skb_expand_head() returns NULL, skb has been freed
    and associated dst/idev could also have been freed.
    
    We need to hold rcu_read_lock() to make sure the dst and
    associated idev are alive.
    
    Fixes: 5796015fa968 ("ipv6: allocate enough headroom in ip6_finish_output2()")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Vasily Averin <vasily.averin@linux.dev>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20240820160859.3786976-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: prevent possible UAF in ip6_xmit() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Aug 20 16:08:59 2024 +0000

    ipv6: prevent possible UAF in ip6_xmit()
    
    [ Upstream commit 2d5ff7e339d04622d8282661df36151906d0e1c7 ]
    
    If skb_expand_head() returns NULL, skb has been freed
    and the associated dst/idev could also have been freed.
    
    We must use rcu_read_lock() to prevent a possible UAF.
    
    Fixes: 0c9f227bee11 ("ipv6: use skb_expand_head in ip6_xmit")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Vasily Averin <vasily.averin@linux.dev>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20240820160859.3786976-4-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ipv6: prevent UAF in ip6_send_skb() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Tue Aug 20 16:08:57 2024 +0000

    ipv6: prevent UAF in ip6_send_skb()
    
    [ Upstream commit faa389b2fbaaec7fd27a390b4896139f9da662e3 ]
    
    syzbot reported an UAF in ip6_send_skb() [1]
    
    After ip6_local_out() has returned, we no longer can safely
    dereference rt, unless we hold rcu_read_lock().
    
    A similar issue has been fixed in commit
    a688caa34beb ("ipv6: take rcu lock in rawv6_send_hdrinc()")
    
    Another potential issue in ip6_finish_output2() is handled in a
    separate patch.
    
    [1]
     BUG: KASAN: slab-use-after-free in ip6_send_skb+0x18d/0x230 net/ipv6/ip6_output.c:1964
    Read of size 8 at addr ffff88806dde4858 by task syz.1.380/6530
    
    CPU: 1 UID: 0 PID: 6530 Comm: syz.1.380 Not tainted 6.11.0-rc3-syzkaller-00306-gdf6cbc62cc9b #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
    Call Trace:
     <TASK>
      __dump_stack lib/dump_stack.c:93 [inline]
      dump_stack_lvl+0x241/0x360 lib/dump_stack.c:119
      print_address_description mm/kasan/report.c:377 [inline]
      print_report+0x169/0x550 mm/kasan/report.c:488
      kasan_report+0x143/0x180 mm/kasan/report.c:601
      ip6_send_skb+0x18d/0x230 net/ipv6/ip6_output.c:1964
      rawv6_push_pending_frames+0x75c/0x9e0 net/ipv6/raw.c:588
      rawv6_sendmsg+0x19c7/0x23c0 net/ipv6/raw.c:926
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0x1a6/0x270 net/socket.c:745
      sock_write_iter+0x2dd/0x400 net/socket.c:1160
     do_iter_readv_writev+0x60a/0x890
      vfs_writev+0x37c/0xbb0 fs/read_write.c:971
      do_writev+0x1b1/0x350 fs/read_write.c:1018
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7f936bf79e79
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007f936cd7f038 EFLAGS: 00000246 ORIG_RAX: 0000000000000014
    RAX: ffffffffffffffda RBX: 00007f936c115f80 RCX: 00007f936bf79e79
    RDX: 0000000000000001 RSI: 0000000020000040 RDI: 0000000000000004
    RBP: 00007f936bfe7916 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 0000000000000000 R14: 00007f936c115f80 R15: 00007fff2860a7a8
     </TASK>
    
    Allocated by task 6530:
      kasan_save_stack mm/kasan/common.c:47 [inline]
      kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
      unpoison_slab_object mm/kasan/common.c:312 [inline]
      __kasan_slab_alloc+0x66/0x80 mm/kasan/common.c:338
      kasan_slab_alloc include/linux/kasan.h:201 [inline]
      slab_post_alloc_hook mm/slub.c:3988 [inline]
      slab_alloc_node mm/slub.c:4037 [inline]
      kmem_cache_alloc_noprof+0x135/0x2a0 mm/slub.c:4044
      dst_alloc+0x12b/0x190 net/core/dst.c:89
      ip6_blackhole_route+0x59/0x340 net/ipv6/route.c:2670
      make_blackhole net/xfrm/xfrm_policy.c:3120 [inline]
      xfrm_lookup_route+0xd1/0x1c0 net/xfrm/xfrm_policy.c:3313
      ip6_dst_lookup_flow+0x13e/0x180 net/ipv6/ip6_output.c:1257
      rawv6_sendmsg+0x1283/0x23c0 net/ipv6/raw.c:898
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0x1a6/0x270 net/socket.c:745
      ____sys_sendmsg+0x525/0x7d0 net/socket.c:2597
      ___sys_sendmsg net/socket.c:2651 [inline]
      __sys_sendmsg+0x2b0/0x3a0 net/socket.c:2680
      do_syscall_x64 arch/x86/entry/common.c:52 [inline]
      do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 45:
      kasan_save_stack mm/kasan/common.c:47 [inline]
      kasan_save_track+0x3f/0x80 mm/kasan/common.c:68
      kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:579
      poison_slab_object+0xe0/0x150 mm/kasan/common.c:240
      __kasan_slab_free+0x37/0x60 mm/kasan/common.c:256
      kasan_slab_free include/linux/kasan.h:184 [inline]
      slab_free_hook mm/slub.c:2252 [inline]
      slab_free mm/slub.c:4473 [inline]
      kmem_cache_free+0x145/0x350 mm/slub.c:4548
      dst_destroy+0x2ac/0x460 net/core/dst.c:124
      rcu_do_batch kernel/rcu/tree.c:2569 [inline]
      rcu_core+0xafd/0x1830 kernel/rcu/tree.c:2843
      handle_softirqs+0x2c4/0x970 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
      asm_sysvec_apic_timer_interrupt+0x1a/0x20 arch/x86/include/asm/idtentry.h:702
    
    Last potentially related work creation:
      kasan_save_stack+0x3f/0x60 mm/kasan/common.c:47
      __kasan_record_aux_stack+0xac/0xc0 mm/kasan/generic.c:541
      __call_rcu_common kernel/rcu/tree.c:3106 [inline]
      call_rcu+0x167/0xa70 kernel/rcu/tree.c:3210
      refdst_drop include/net/dst.h:263 [inline]
      skb_dst_drop include/net/dst.h:275 [inline]
      nf_ct_frag6_queue net/ipv6/netfilter/nf_conntrack_reasm.c:306 [inline]
      nf_ct_frag6_gather+0xb9a/0x2080 net/ipv6/netfilter/nf_conntrack_reasm.c:485
      ipv6_defrag+0x2c8/0x3c0 net/ipv6/netfilter/nf_defrag_ipv6_hooks.c:67
      nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
      nf_hook_slow+0xc3/0x220 net/netfilter/core.c:626
      nf_hook include/linux/netfilter.h:269 [inline]
      __ip6_local_out+0x6fa/0x800 net/ipv6/output_core.c:143
      ip6_local_out+0x26/0x70 net/ipv6/output_core.c:153
      ip6_send_skb+0x112/0x230 net/ipv6/ip6_output.c:1959
      rawv6_push_pending_frames+0x75c/0x9e0 net/ipv6/raw.c:588
      rawv6_sendmsg+0x19c7/0x23c0 net/ipv6/raw.c:926
      sock_sendmsg_nosec net/socket.c:730 [inline]
      __sock_sendmsg+0x1a6/0x270 net/socket.c:745
      sock_write_iter+0x2dd/0x400 net/socket.c:1160
     do_iter_readv_writev+0x60a/0x890
    
    Fixes: 0625491493d9 ("ipv6: ip6_push_pending_frames() should increment IPSTATS_MIB_OUTDISCARDS")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: syzbot <syzkaller@googlegroups.com>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Link: https://patch.msgid.link/20240820160859.3786976-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc [+ + +]
Author: Guanrui Huang <guanrui.huang@linux.alibaba.com>
Date:   Thu Apr 18 14:10:53 2024 +0800

    irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc
    
    [ Upstream commit 382d2ffe86efb1e2fa803d2cf17e5bfc34e574f3 ]
    
    This BUG_ON() is useless, because the same effect will be obtained
    by letting the code run its course and vm being dereferenced,
    triggering an exception.
    
    So just remove this check.
    
    Signed-off-by: Guanrui Huang <guanrui.huang@linux.alibaba.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Zenghui Yu <yuzenghui@huawei.com>
    Acked-by: Marc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20240418061053.96803-3-guanrui.huang@linux.alibaba.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
irqchip/renesas-rzg2l: Do not set TIEN and TINT source at the same time [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Mon Mar 18 08:50:40 2024 +0000

    irqchip/renesas-rzg2l: Do not set TIEN and TINT source at the same time
    
    [ Upstream commit dce0919c83c325ac9dec5bc8838d5de6d32c01b1 ]
    
    As per the hardware team, TIEN and TINT source should not set at the same
    time due to a possible hardware race leading to spurious IRQ.
    
    Currently on some scenarios hardware settings for TINT detection is not in
    sync with TINT source as the enable/disable overrides source setting value
    leading to hardware inconsistent state. For eg: consider the case GPIOINT0
    is used as TINT interrupt and configuring GPIOINT5 as edge type. During
    rzg2l_irq_set_type(), TINT source for GPIOINT5 is set. On disable(),
    clearing of the entire bytes of TINT source selection for GPIOINT5 is same
    as GPIOINT0 with TIEN disabled. Apart from this during enable(), the
    setting of GPIOINT5 with TIEN results in spurious IRQ as due to a HW race,
    it is possible that IP can use the TIEN with previous source value
    (GPIOINT0).
    
    So, just update TIEN during enable/disable as TINT source is already set
    during rzg2l_irq_set_type(). This will make the consistent hardware
    settings for detection method tied with TINT source and allows to simplify
    the code.
    
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
jfs: fix null ptr deref in dtInsertEntry [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Thu Apr 11 20:05:28 2024 +0800

    jfs: fix null ptr deref in dtInsertEntry
    
    [ Upstream commit ce6dede912f064a855acf6f04a04cbb2c25b8c8c ]
    
    [syzbot reported]
    general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
    CPU: 0 PID: 5061 Comm: syz-executor404 Not tainted 6.8.0-syzkaller-08951-gfe46a7dd189e #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
    RIP: 0010:dtInsertEntry+0xd0c/0x1780 fs/jfs/jfs_dtree.c:3713
    ...
    [Analyze]
    In dtInsertEntry(), when the pointer h has the same value as p, after writing
    name in UniStrncpy_to_le(), p->header.flag will be cleared. This will cause the
    previously true judgment "p->header.flag & BT-LEAF" to change to no after writing
    the name operation, this leads to entering an incorrect branch and accessing the
    uninitialized object ih when judging this condition for the second time.
    
    [Fix]
    After got the page, check freelist first, if freelist == 0 then exit dtInsert()
    and return -EINVAL.
    
    Reported-by: syzbot+bba84aef3a26fb93deb9@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: Fix shift-out-of-bounds in dbDiscardAG [+ + +]
Author: Pei Li <peili.dev@gmail.com>
Date:   Tue Jun 25 09:42:05 2024 -0700

    jfs: Fix shift-out-of-bounds in dbDiscardAG
    
    [ Upstream commit 7063b80268e2593e58bee8a8d709c2f3ff93e2f2 ]
    
    When searching for the next smaller log2 block, BLKSTOL2() returned 0,
    causing shift exponent -1 to be negative.
    
    This patch fixes the issue by exiting the loop directly when negative
    shift is found.
    
    Reported-by: syzbot+61be3359d2ee3467e7e4@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=61be3359d2ee3467e7e4
    Signed-off-by: Pei Li <peili.dev@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

jfs: fix shift-out-of-bounds in dbJoin [+ + +]
Author: Manas Ghandat <ghandatmanas@gmail.com>
Date:   Wed Oct 11 20:09:37 2023 +0530

    jfs: fix shift-out-of-bounds in dbJoin
    
    [ Upstream commit cca974daeb6c43ea971f8ceff5a7080d7d49ee30 ]
    
    Currently while joining the leaf in a buddy system there is shift out
    of bound error in calculation of BUDSIZE. Added the required check
    to the BUDSIZE and fixed the documentation as well.
    
    Reported-by: syzbot+411debe54d318eaed386@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=411debe54d318eaed386
    Signed-off-by: Manas Ghandat <ghandatmanas@gmail.com>
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kbuild: rust_is_available: handle failures calling `$RUSTC`/`$BINDGEN` [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri Jun 16 02:16:29 2023 +0200

    kbuild: rust_is_available: handle failures calling `$RUSTC`/`$BINDGEN`
    
    [ Upstream commit f295522886a4ebb628cadb2cd74d0661d6292978 ]
    
    The script already checks if `$RUSTC` and `$BINDGEN` exists via
    `command`, but the environment variables may point to a
    non-executable file, or the programs may fail for some other reason.
    While the script successfully exits with a failure as it should,
    the error given can be quite confusing depending on the shell and
    the behavior of its `command`. For instance, with `dash`:
    
        $ RUSTC=./mm BINDGEN=bindgen CC=clang scripts/rust_is_available.sh
        scripts/rust_is_available.sh: 19: arithmetic expression: expecting primary: "100000 *  + 100 *  + "
    
    Thus detect failure exit codes when calling `$RUSTC` and `$BINDGEN` and
    print a better message, in a similar way to what we do when extracting
    the `libclang` version found by `bindgen`.
    
    Link: https://lore.kernel.org/rust-for-linux/CAK7LNAQYk6s11MASRHW6oxtkqF00EJVqhHOP=5rynWt-QDUsXw@mail.gmail.com/
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
    Link: https://lore.kernel.org/r/20230616001631.463536-10-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Stable-dep-of: 5ce86c6c8613 ("rust: suppress error messages from CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

kbuild: rust_is_available: normalize version matching [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Fri Jun 16 02:16:28 2023 +0200

    kbuild: rust_is_available: normalize version matching
    
    [ Upstream commit 7cd6a3e1f94bab4f2a3425e06f70ab13eb8190d4 ]
    
    In order to match the version string, `sed` is used in a couple
    cases, and `grep` and `head` in a couple others.
    
    Make the script more consistent and easier to understand by
    using the same method, `sed`, for all of them.
    
    This makes the version matching also a bit more strict for
    the changed cases, since the strings `rustc ` and `bindgen `
    will now be required, which should be fine since `rustc`
    complains if one attempts to call it with another program
    name, and `bindgen` uses a hardcoded string.
    
    In addition, clarify why one of the existing `sed` commands
    does not provide an address like the others.
    
    Reviewed-by: Nathan Chancellor <nathan@kernel.org>
    Reviewed-by: Masahiro Yamada <masahiroy@kernel.org>
    Reviewed-by: Martin Rodriguez Reboredo <yakoyoku@gmail.com>
    Link: https://lore.kernel.org/r/20230616001631.463536-9-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Stable-dep-of: 5ce86c6c8613 ("rust: suppress error messages from CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kcm: Serialise kcm_sendmsg() for the same socket. [+ + +]
Author: Kuniyuki Iwashima <kuniyu@amazon.com>
Date:   Thu Aug 15 15:04:37 2024 -0700

    kcm: Serialise kcm_sendmsg() for the same socket.
    
    [ Upstream commit 807067bf014d4a3ae2cc55bd3de16f22a01eb580 ]
    
    syzkaller reported UAF in kcm_release(). [0]
    
    The scenario is
    
      1. Thread A builds a skb with MSG_MORE and sets kcm->seq_skb.
    
      2. Thread A resumes building skb from kcm->seq_skb but is blocked
         by sk_stream_wait_memory()
    
      3. Thread B calls sendmsg() concurrently, finishes building kcm->seq_skb
         and puts the skb to the write queue
    
      4. Thread A faces an error and finally frees skb that is already in the
         write queue
    
      5. kcm_release() does double-free the skb in the write queue
    
    When a thread is building a MSG_MORE skb, another thread must not touch it.
    
    Let's add a per-sk mutex and serialise kcm_sendmsg().
    
    [0]:
    BUG: KASAN: slab-use-after-free in __skb_unlink include/linux/skbuff.h:2366 [inline]
    BUG: KASAN: slab-use-after-free in __skb_dequeue include/linux/skbuff.h:2385 [inline]
    BUG: KASAN: slab-use-after-free in __skb_queue_purge_reason include/linux/skbuff.h:3175 [inline]
    BUG: KASAN: slab-use-after-free in __skb_queue_purge include/linux/skbuff.h:3181 [inline]
    BUG: KASAN: slab-use-after-free in kcm_release+0x170/0x4c8 net/kcm/kcmsock.c:1691
    Read of size 8 at addr ffff0000ced0fc80 by task syz-executor329/6167
    
    CPU: 1 PID: 6167 Comm: syz-executor329 Tainted: G    B              6.8.0-rc5-syzkaller-g9abbc24128bc #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/25/2024
    Call trace:
     dump_backtrace+0x1b8/0x1e4 arch/arm64/kernel/stacktrace.c:291
     show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:298
     __dump_stack lib/dump_stack.c:88 [inline]
     dump_stack_lvl+0xd0/0x124 lib/dump_stack.c:106
     print_address_description mm/kasan/report.c:377 [inline]
     print_report+0x178/0x518 mm/kasan/report.c:488
     kasan_report+0xd8/0x138 mm/kasan/report.c:601
     __asan_report_load8_noabort+0x20/0x2c mm/kasan/report_generic.c:381
     __skb_unlink include/linux/skbuff.h:2366 [inline]
     __skb_dequeue include/linux/skbuff.h:2385 [inline]
     __skb_queue_purge_reason include/linux/skbuff.h:3175 [inline]
     __skb_queue_purge include/linux/skbuff.h:3181 [inline]
     kcm_release+0x170/0x4c8 net/kcm/kcmsock.c:1691
     __sock_release net/socket.c:659 [inline]
     sock_close+0xa4/0x1e8 net/socket.c:1421
     __fput+0x30c/0x738 fs/file_table.c:376
     ____fput+0x20/0x30 fs/file_table.c:404
     task_work_run+0x230/0x2e0 kernel/task_work.c:180
     exit_task_work include/linux/task_work.h:38 [inline]
     do_exit+0x618/0x1f64 kernel/exit.c:871
     do_group_exit+0x194/0x22c kernel/exit.c:1020
     get_signal+0x1500/0x15ec kernel/signal.c:2893
     do_signal+0x23c/0x3b44 arch/arm64/kernel/signal.c:1249
     do_notify_resume+0x74/0x1f4 arch/arm64/kernel/entry-common.c:148
     exit_to_user_mode_prepare arch/arm64/kernel/entry-common.c:169 [inline]
     exit_to_user_mode arch/arm64/kernel/entry-common.c:178 [inline]
     el0_svc+0xac/0x168 arch/arm64/kernel/entry-common.c:713
     el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:730
     el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
    
    Allocated by task 6166:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x40/0x78 mm/kasan/common.c:68
     kasan_save_alloc_info+0x70/0x84 mm/kasan/generic.c:626
     unpoison_slab_object mm/kasan/common.c:314 [inline]
     __kasan_slab_alloc+0x74/0x8c mm/kasan/common.c:340
     kasan_slab_alloc include/linux/kasan.h:201 [inline]
     slab_post_alloc_hook mm/slub.c:3813 [inline]
     slab_alloc_node mm/slub.c:3860 [inline]
     kmem_cache_alloc_node+0x204/0x4c0 mm/slub.c:3903
     __alloc_skb+0x19c/0x3d8 net/core/skbuff.c:641
     alloc_skb include/linux/skbuff.h:1296 [inline]
     kcm_sendmsg+0x1d3c/0x2124 net/kcm/kcmsock.c:783
     sock_sendmsg_nosec net/socket.c:730 [inline]
     __sock_sendmsg net/socket.c:745 [inline]
     sock_sendmsg+0x220/0x2c0 net/socket.c:768
     splice_to_socket+0x7cc/0xd58 fs/splice.c:889
     do_splice_from fs/splice.c:941 [inline]
     direct_splice_actor+0xec/0x1d8 fs/splice.c:1164
     splice_direct_to_actor+0x438/0xa0c fs/splice.c:1108
     do_splice_direct_actor fs/splice.c:1207 [inline]
     do_splice_direct+0x1e4/0x304 fs/splice.c:1233
     do_sendfile+0x460/0xb3c fs/read_write.c:1295
     __do_sys_sendfile64 fs/read_write.c:1362 [inline]
     __se_sys_sendfile64 fs/read_write.c:1348 [inline]
     __arm64_sys_sendfile64+0x160/0x3b4 fs/read_write.c:1348
     __invoke_syscall arch/arm64/kernel/syscall.c:37 [inline]
     invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:51
     el0_svc_common+0x130/0x23c arch/arm64/kernel/syscall.c:136
     do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:155
     el0_svc+0x54/0x168 arch/arm64/kernel/entry-common.c:712
     el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:730
     el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
    
    Freed by task 6167:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x40/0x78 mm/kasan/common.c:68
     kasan_save_free_info+0x5c/0x74 mm/kasan/generic.c:640
     poison_slab_object+0x124/0x18c mm/kasan/common.c:241
     __kasan_slab_free+0x3c/0x78 mm/kasan/common.c:257
     kasan_slab_free include/linux/kasan.h:184 [inline]
     slab_free_hook mm/slub.c:2121 [inline]
     slab_free mm/slub.c:4299 [inline]
     kmem_cache_free+0x15c/0x3d4 mm/slub.c:4363
     kfree_skbmem+0x10c/0x19c
     __kfree_skb net/core/skbuff.c:1109 [inline]
     kfree_skb_reason+0x240/0x6f4 net/core/skbuff.c:1144
     kfree_skb include/linux/skbuff.h:1244 [inline]
     kcm_release+0x104/0x4c8 net/kcm/kcmsock.c:1685
     __sock_release net/socket.c:659 [inline]
     sock_close+0xa4/0x1e8 net/socket.c:1421
     __fput+0x30c/0x738 fs/file_table.c:376
     ____fput+0x20/0x30 fs/file_table.c:404
     task_work_run+0x230/0x2e0 kernel/task_work.c:180
     exit_task_work include/linux/task_work.h:38 [inline]
     do_exit+0x618/0x1f64 kernel/exit.c:871
     do_group_exit+0x194/0x22c kernel/exit.c:1020
     get_signal+0x1500/0x15ec kernel/signal.c:2893
     do_signal+0x23c/0x3b44 arch/arm64/kernel/signal.c:1249
     do_notify_resume+0x74/0x1f4 arch/arm64/kernel/entry-common.c:148
     exit_to_user_mode_prepare arch/arm64/kernel/entry-common.c:169 [inline]
     exit_to_user_mode arch/arm64/kernel/entry-common.c:178 [inline]
     el0_svc+0xac/0x168 arch/arm64/kernel/entry-common.c:713
     el0t_64_sync_handler+0x84/0xfc arch/arm64/kernel/entry-common.c:730
     el0t_64_sync+0x190/0x194 arch/arm64/kernel/entry.S:598
    
    The buggy address belongs to the object at ffff0000ced0fc80
     which belongs to the cache skbuff_head_cache of size 240
    The buggy address is located 0 bytes inside of
     freed 240-byte region [ffff0000ced0fc80, ffff0000ced0fd70)
    
    The buggy address belongs to the physical page:
    page:00000000d35f4ae4 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x10ed0f
    flags: 0x5ffc00000000800(slab|node=0|zone=2|lastcpupid=0x7ff)
    page_type: 0xffffffff()
    raw: 05ffc00000000800 ffff0000c1cbf640 fffffdffc3423100 dead000000000004
    raw: 0000000000000000 00000000000c000c 00000001ffffffff 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff0000ced0fb80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff0000ced0fc00: fb fb fb fb fb fb fc fc fc fc fc fc fc fc fc fc
    >ffff0000ced0fc80: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                       ^
     ffff0000ced0fd00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fc fc
     ffff0000ced0fd80: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
    
    Fixes: ab7ac4eb9832 ("kcm: Kernel Connection Multiplexor module")
    Reported-by: syzbot+b72d86aa5df17ce74c60@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b72d86aa5df17ce74c60
    Tested-by: syzbot+b72d86aa5df17ce74c60@syzkaller.appspotmail.com
    Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240815220437.69511-1-kuniyu@amazon.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kernfs: fix false-positive WARN(nr_mmapped) in kernfs_drain_open_files [+ + +]
Author: Neel Natu <neelnatu@google.com>
Date:   Sat Jan 27 15:46:36 2024 -0800

    kernfs: fix false-positive WARN(nr_mmapped) in kernfs_drain_open_files
    
    [ Upstream commit 05d8f255867e3196565bb31a911a437697fab094 ]
    
    Prior to this change 'on->nr_mmapped' tracked the total number of
    mmaps across all of its associated open files via kernfs_fop_mmap().
    Thus if the file descriptor associated with a kernfs_open_file was
    mmapped 10 times then we would have: 'of->mmapped = true' and
    'of_on(of)->nr_mmapped = 10'.
    
    The problem is that closing or draining a 'of->mmapped' file would
    only decrement one from the 'of_on(of)->nr_mmapped' counter.
    
    For e.g. we have this from kernfs_unlink_open_file():
            if (of->mmapped)
                    on->nr_mmapped--;
    
    The WARN_ON_ONCE(on->nr_mmapped) in kernfs_drain_open_files() is
    easy to reproduce by:
    1. opening a (mmap-able) kernfs file.
    2. mmap-ing that file more than once (mapping just once masks the issue).
    3. trigger a drain of that kernfs file.
    
    Modulo out-of-tree patches I was able to trigger this reliably by
    identifying pci device nodes in sysfs that have resource regions
    that are mmap-able and that don't have any driver attached to them
    (steps 1 and 2). For step 3 we can "echo 1 > remove" to trigger a
    kernfs_drain.
    
    Signed-off-by: Neel Natu <neelnatu@google.com>
    Link: https://lore.kernel.org/r/20240127234636.609265-1-neelnatu@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: the buffer of smb2 query dir response has at least 1 byte [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Tue Aug 20 22:07:38 2024 +0900

    ksmbd: the buffer of smb2 query dir response has at least 1 byte
    
    commit ce61b605a00502c59311d0a4b1f58d62b48272d0 upstream.
    
    When STATUS_NO_MORE_FILES status is set to smb2 query dir response,
    ->StructureSize is set to 9, which mean buffer has 1 byte.
    This issue occurs because ->Buffer[1] in smb2_query_directory_rsp to
    flex-array.
    
    Fixes: eb3e28c1e89b ("smb3: Replace smb2pdu 1-element arrays with flex-arrays")
    Cc: stable@vger.kernel.org # v6.1+
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: arm64: Make ICC_*SGI*_EL1 undef in the absence of a vGICv3 [+ + +]
Author: Marc Zyngier <maz@kernel.org>
Date:   Tue Aug 20 11:03:38 2024 +0100

    KVM: arm64: Make ICC_*SGI*_EL1 undef in the absence of a vGICv3
    
    commit 3e6245ebe7ef341639e9a7e402b3ade8ad45a19f upstream.
    
    On a system with a GICv3, if a guest hasn't been configured with
    GICv3 and that the host is not capable of GICv2 emulation,
    a write to any of the ICC_*SGI*_EL1 registers is trapped to EL2.
    
    We therefore try to emulate the SGI access, only to hit a NULL
    pointer as no private interrupt is allocated (no GIC, remember?).
    
    The obvious fix is to give the guest what it deserves, in the
    shape of a UNDEF exception.
    
    Reported-by: Alexander Potapenko <glider@google.com>
    Signed-off-by: Marc Zyngier <maz@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240820100349.3544850-2-maz@kernel.org
    Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: fire timer when it is migrated and expired, and in oneshot mode [+ + +]
Author: Li RongQing <lirongqing@baidu.com>
Date:   Fri Jan 6 12:06:25 2023 +0800

    KVM: x86: fire timer when it is migrated and expired, and in oneshot mode
    
    commit 8e6ed96cdd5001c55fccc80a17f651741c1ca7d2 upstream.
    
    when the vCPU was migrated, if its timer is expired, KVM _should_ fire
    the timer ASAP, zeroing the deadline here will cause the timer to
    immediately fire on the destination
    
    Cc: Sean Christopherson <seanjc@google.com>
    Cc: Peter Shier <pshier@google.com>
    Cc: Jim Mattson <jmattson@google.com>
    Cc: Wanpeng Li <wanpengli@tencent.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Li RongQing <lirongqing@baidu.com>
    Link: https://lore.kernel.org/r/20230106040625.8404-1-lirongqing@baidu.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: David Hunter <david.hunter.linux@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.1.107 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Aug 29 17:30:57 2024 +0200

    Linux 6.1.107
    
    Link: https://lore.kernel.org/r/20240827143838.192435816@linuxfoundation.org
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: SeongJae Park <sj@kernel.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Pavel Machek (CIP) <pavel@denx.de>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: kernelci.org bot <bot@kernelci.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
md/raid5-cache: use READ_ONCE/WRITE_ONCE for 'conf->log' [+ + +]
Author: Yu Kuai <yukuai3@huawei.com>
Date:   Tue Oct 10 23:19:41 2023 +0800

    md/raid5-cache: use READ_ONCE/WRITE_ONCE for 'conf->log'
    
    [ Upstream commit 06a4d0d8c642b5ea654e832b74dca12965356da0 ]
    
    'conf->log' is set with 'reconfig_mutex' grabbed, however, readers are
    not procted, hence protect it with READ_ONCE/WRITE_ONCE to prevent
    reading abnormal values.
    
    Signed-off-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20231010151958.145896-3-yukuai1@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
md: clean up invalid BUG_ON in md_ioctl [+ + +]
Author: Li Nan <linan122@huawei.com>
Date:   Mon Feb 26 11:14:38 2024 +0800

    md: clean up invalid BUG_ON in md_ioctl
    
    [ Upstream commit 9dd8702e7cd28ebf076ff838933f29cf671165ec ]
    
    'disk->private_data' is set to mddev in md_alloc() and never set to NULL,
    and users need to open mddev before submitting ioctl. So mddev must not
    have been freed during ioctl, and there is no need to check mddev here.
    Clean up it.
    
    Signed-off-by: Li Nan <linan122@huawei.com>
    Reviewed-by: Yu Kuai <yukuai3@huawei.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Link: https://lore.kernel.org/r/20240226031444.3606764-4-linan666@huaweicloud.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: drivers/media/dvb-core: copy user arrays safely [+ + +]
Author: Philipp Stanner <pstanner@redhat.com>
Date:   Thu Nov 2 20:16:34 2023 +0100

    media: drivers/media/dvb-core: copy user arrays safely
    
    [ Upstream commit 102fb77c2deb0df3683ef8ff7a6f4cf91dc456e2 ]
    
    At several positions in dvb_frontend.c, memdup_user() is utilized to
    copy userspace arrays. This is done without overflow checks.
    
    Use the new wrapper memdup_array_user() to copy the arrays more safely.
    
    Link: https://lore.kernel.org/linux-media/20231102191633.52592-2-pstanner@redhat.com
    Suggested-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Philipp Stanner <pstanner@redhat.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: pci: cx23885: check cx23885_vdev_init() return [+ + +]
Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Date:   Thu Oct 19 08:58:49 2023 +0200

    media: pci: cx23885: check cx23885_vdev_init() return
    
    [ Upstream commit 15126b916e39b0cb67026b0af3c014bfeb1f76b3 ]
    
    cx23885_vdev_init() can return a NULL pointer, but that pointer
    is used in the next line without a check.
    
    Add a NULL pointer check and go to the error unwind if it is NULL.
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Reported-by: Sicong Huang <huangsicong@iie.ac.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: qcom: venus: fix incorrect return value [+ + +]
Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Date:   Fri Oct 6 12:08:47 2023 +0200

    media: qcom: venus: fix incorrect return value
    
    [ Upstream commit 51b74c09ac8c5862007fc2bf0d465529d06dd446 ]
    
    'pd' can be NULL, and in that case it shouldn't be passed to
    PTR_ERR. Fixes a smatch warning:
    
    drivers/media/platform/qcom/venus/pm_helpers.c:873 vcodec_domains_get() warn: passing zero to 'PTR_ERR'
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: radio-isa: use dev_name to fill in bus_info [+ + +]
Author: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Date:   Sat Sep 23 17:21:04 2023 +0200

    media: radio-isa: use dev_name to fill in bus_info
    
    [ Upstream commit 8b7f3cf4eb9a95940eaabad3226caeaa0d9aa59d ]
    
    This fixes this warning:
    
    drivers/media/radio/radio-isa.c: In function 'radio_isa_querycap':
    drivers/media/radio/radio-isa.c:39:57: warning: '%s' directive output may be truncated writing up to 35 bytes into a region of size 28 [-Wformat-truncation=]
       39 |         snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", isa->v4l2_dev.name);
          |                                                         ^~
    drivers/media/radio/radio-isa.c:39:9: note: 'snprintf' output between 5 and 40 bytes into a destination of size 32
       39 |         snprintf(v->bus_info, sizeof(v->bus_info), "ISA:%s", isa->v4l2_dev.name);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: s5p-mfc: Fix potential deadlock on condlock [+ + +]
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Tue Sep 26 10:53:30 2023 +0000

    media: s5p-mfc: Fix potential deadlock on condlock
    
    [ Upstream commit 04d19e65137e3cd4a5004e624c85c762933d115c ]
    
    As &dev->condlock is acquired under irq context along the following
    call chain from s5p_mfc_irq(), other acquisition of the same lock
    inside process context or softirq context should disable irq avoid double
    lock. enc_post_frame_start() seems to be one such function that execute
    under process context or softirq context.
    
    <deadlock #1>
    
    enc_post_frame_start()
    --> clear_work_bit()
    --> spin_loc(&dev->condlock)
    <interrupt>
       --> s5p_mfc_irq()
       --> s5p_mfc_handle_frame()
       --> clear_work_bit()
       --> spin_lock(&dev->condlock)
    
    This flaw was found by an experimental static analysis tool I am
    developing for irq-related deadlock.
    
    To prevent the potential deadlock, the patch change clear_work_bit()
    inside enc_post_frame_start() to clear_work_bit_irqsave().
    
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Acked-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: solo6x10: replace max(a, min(b, c)) by clamp(b, a, c) [+ + +]
Author: Aurelien Jarno <aurelien@aurel32.net>
Date:   Sat Jan 13 19:33:31 2024 +0100

    media: solo6x10: replace max(a, min(b, c)) by clamp(b, a, c)
    
    commit 31e97d7c9ae3de072d7b424b2cf706a03ec10720 upstream.
    
    This patch replaces max(a, min(b, c)) by clamp(b, a, c) in the solo6x10
    driver.  This improves the readability and more importantly, for the
    solo6x10-p2m.c file, this reduces on my system (x86-64, gcc 13):
    
     - the preprocessed size from 121 MiB to 4.5 MiB;
    
     - the build CPU time from 46.8 s to 1.6 s;
    
     - the build memory from 2786 MiB to 98MiB.
    
    In fine, this allows this relatively simple C file to be built on a
    32-bit system.
    
    Reported-by: Jiri Slaby <jirislaby@gmail.com>
    Closes: https://lore.kernel.org/lkml/18c6df0d-45ed-450c-9eda-95160a2bbb8e@gmail.com/
    Cc:  <stable@vger.kernel.org> # v6.7+
    Suggested-by: David Laight <David.Laight@ACULAB.COM>
    Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
    Reviewed-by: David Laight <David.Laight@ACULAB.COM>
    Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
memcg_write_event_control(): fix a user-triggerable oops [+ + +]
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Jul 21 14:45:08 2024 -0400

    memcg_write_event_control(): fix a user-triggerable oops
    
    commit 046667c4d3196938e992fba0dfcde570aa85cd0e upstream.
    
    we are *not* guaranteed that anything past the terminating NUL
    is mapped (let alone initialized with anything sane).
    
    Fixes: 0dea116876ee ("cgroup: implement eventfd-based generic API for notifications")
    Cc: stable@vger.kernel.org
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
memory: stm32-fmc2-ebi: check regmap_read return value [+ + +]
Author: Christophe Kerello <christophe.kerello@foss.st.com>
Date:   Mon Feb 26 11:14:25 2024 +0100

    memory: stm32-fmc2-ebi: check regmap_read return value
    
    [ Upstream commit 722463f73bcf65a8c818752a38c14ee672c77da1 ]
    
    Check regmap_read return value to avoid to use uninitialized local
    variables.
    
    Signed-off-by: Christophe Kerello <christophe.kerello@foss.st.com>
    Link: https://lore.kernel.org/r/20240226101428.37791-3-christophe.kerello@foss.st.com
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

memory: tegra: Skip SID programming if SID registers aren't set [+ + +]
Author: Ashish Mhetre <amhetre@nvidia.com>
Date:   Tue Nov 7 16:57:13 2023 +0530

    memory: tegra: Skip SID programming if SID registers aren't set
    
    [ Upstream commit 0d6c918011ce4764ed277de4726a468b7ffe5fed ]
    
    There are few MC clients where SID security and override register
    offsets are not specified like "sw_cluster0" in tegra234. Don't program
    SID override for such clients because it leads to access to invalid
    addresses.
    
    Signed-off-by: Ashish Mhetre <amhetre@nvidia.com>
    Link: https://lore.kernel.org/r/20231107112713.21399-2-amhetre@nvidia.com
    Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: Loongson64: Set timer mode in cpu-probe [+ + +]
Author: Jiaxun Yang <jiaxun.yang@flygoat.com>
Date:   Tue Jul 23 17:15:44 2024 +0800

    MIPS: Loongson64: Set timer mode in cpu-probe
    
    commit 1cb6ab446424649f03c82334634360c2e3043684 upstream.
    
    Loongson64 C and G processors have EXTIMER feature which
    is conflicting with CP0 counter.
    
    Although the processor resets in EXTIMER disabled & INTIMER
    enabled mode, which is compatible with MIPS CP0 compare, firmware
    may attempt to enable EXTIMER and interfere CP0 compare.
    
    Set timer mode back to MIPS compatible mode to fix booting on
    systems with such firmware before we have an actual driver for
    EXTIMER.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mlxbf_gige: disable RX filters until RX path initialized [+ + +]
Author: David Thompson <davthompson@nvidia.com>
Date:   Fri Aug 9 12:36:12 2024 -0400

    mlxbf_gige: disable RX filters until RX path initialized
    
    [ Upstream commit df934abb185c71c9f2fa07a5013672d0cbd36560 ]
    
    A recent change to the driver exposed a bug where the MAC RX
    filters (unicast MAC, broadcast MAC, and multicast MAC) are
    configured and enabled before the RX path is fully initialized.
    The result of this bug is that after the PHY is started packets
    that match these MAC RX filters start to flow into the RX FIFO.
    And then, after rx_init() is completed, these packets will go
    into the driver RX ring as well. If enough packets are received
    to fill the RX ring (default size is 128 packets) before the call
    to request_irq() completes, the driver RX function becomes stuck.
    
    This bug is intermittent but is most likely to be seen where the
    oob_net0 interface is connected to a busy network with lots of
    broadcast and multicast traffic.
    
    All the MAC RX filters must be disabled until the RX path is ready,
    i.e. all initialization is done and all the IRQs are installed.
    
    Fixes: f7442a634ac0 ("mlxbf_gige: call request_irq() after NAPI initialized")
    Reviewed-by: Asmaa Mnebhi <asmaa@nvidia.com>
    Signed-off-by: David Thompson <davthompson@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240809163612.12852-1-davthompson@nvidia.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mlxbf_gige: Remove two unused function declarations [+ + +]
Author: Yue Haibing <yuehaibing@huawei.com>
Date:   Tue Aug 8 22:52:49 2023 +0800

    mlxbf_gige: Remove two unused function declarations
    
    [ Upstream commit 98261be155f8de38f11b6542d4a8935e5532687b ]
    
    Commit f92e1869d74e ("Add Mellanox BlueField Gigabit Ethernet driver")
    declared but never implemented these.
    
    Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Asmaa Mnebhi <asmaa@nvidia.com>
    Link: https://lore.kernel.org/r/20230808145249.41596-1-yuehaibing@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: df934abb185c ("mlxbf_gige: disable RX filters until RX path initialized")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mm/memory-failure: use raw_spinlock_t in struct memory_failure_cpu [+ + +]
Author: Waiman Long <longman@redhat.com>
Date:   Tue Aug 6 12:41:07 2024 -0400

    mm/memory-failure: use raw_spinlock_t in struct memory_failure_cpu
    
    commit d75abd0d0bc29e6ebfebbf76d11b4067b35844af upstream.
    
    The memory_failure_cpu structure is a per-cpu structure.  Access to its
    content requires the use of get_cpu_var() to lock in the current CPU and
    disable preemption.  The use of a regular spinlock_t for locking purpose
    is fine for a non-RT kernel.
    
    Since the integration of RT spinlock support into the v5.15 kernel, a
    spinlock_t in a RT kernel becomes a sleeping lock and taking a sleeping
    lock in a preemption disabled context is illegal resulting in the
    following kind of warning.
    
      [12135.732244] BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
      [12135.732248] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 270076, name: kworker/0:0
      [12135.732252] preempt_count: 1, expected: 0
      [12135.732255] RCU nest depth: 2, expected: 2
        :
      [12135.732420] Hardware name: Dell Inc. PowerEdge R640/0HG0J8, BIOS 2.10.2 02/24/2021
      [12135.732423] Workqueue: kacpi_notify acpi_os_execute_deferred
      [12135.732433] Call Trace:
      [12135.732436]  <TASK>
      [12135.732450]  dump_stack_lvl+0x57/0x81
      [12135.732461]  __might_resched.cold+0xf4/0x12f
      [12135.732479]  rt_spin_lock+0x4c/0x100
      [12135.732491]  memory_failure_queue+0x40/0xe0
      [12135.732503]  ghes_do_memory_failure+0x53/0x390
      [12135.732516]  ghes_do_proc.constprop.0+0x229/0x3e0
      [12135.732575]  ghes_proc+0xf9/0x1a0
      [12135.732591]  ghes_notify_hed+0x6a/0x150
      [12135.732602]  notifier_call_chain+0x43/0xb0
      [12135.732626]  blocking_notifier_call_chain+0x43/0x60
      [12135.732637]  acpi_ev_notify_dispatch+0x47/0x70
      [12135.732648]  acpi_os_execute_deferred+0x13/0x20
      [12135.732654]  process_one_work+0x41f/0x500
      [12135.732695]  worker_thread+0x192/0x360
      [12135.732715]  kthread+0x111/0x140
      [12135.732733]  ret_from_fork+0x29/0x50
      [12135.732779]  </TASK>
    
    Fix it by using a raw_spinlock_t for locking instead.
    
    Also move the pr_err() out of the lock critical section and after
    put_cpu_ptr() to avoid indeterminate latency and the possibility of sleep
    with this call.
    
    [longman@redhat.com: don't hold percpu ref across pr_err(), per Miaohe]
      Link: https://lkml.kernel.org/r/20240807181130.1122660-1-longman@redhat.com
    Link: https://lkml.kernel.org/r/20240806164107.1044956-1-longman@redhat.com
    Fixes: 0f383b6dc96e ("locking/spinlock: Provide RT variant")
    Signed-off-by: Waiman Long <longman@redhat.com>
    Acked-by: Miaohe Lin <linmiaohe@huawei.com>
    Cc: "Huang, Ying" <ying.huang@intel.com>
    Cc: Juri Lelli <juri.lelli@redhat.com>
    Cc: Len Brown <len.brown@intel.com>
    Cc: Naoya Horiguchi <nao.horiguchi@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>

 
mm/numa: no task_numa_fault() call if PMD is changed [+ + +]
Author: Zi Yan <ziy@nvidia.com>
Date:   Fri Aug 9 10:59:05 2024 -0400

    mm/numa: no task_numa_fault() call if PMD is changed
    
    commit fd8c35a92910f4829b7c99841f39b1b952c259d5 upstream.
    
    When handling a numa page fault, task_numa_fault() should be called by a
    process that restores the page table of the faulted folio to avoid
    duplicated stats counting.  Commit c5b5a3dd2c1f ("mm: thp: refactor NUMA
    fault handling") restructured do_huge_pmd_numa_page() and did not avoid
    task_numa_fault() call in the second page table check after a numa
    migration failure.  Fix it by making all !pmd_same() return immediately.
    
    This issue can cause task_numa_fault() being called more than necessary
    and lead to unexpected numa balancing results (It is hard to tell whether
    the issue will cause positive or negative performance impact due to
    duplicated numa fault counting).
    
    Link: https://lkml.kernel.org/r/20240809145906.1513458-3-ziy@nvidia.com
    Fixes: c5b5a3dd2c1f ("mm: thp: refactor NUMA fault handling")
    Reported-by: "Huang, Ying" <ying.huang@intel.com>
    Closes: https://lore.kernel.org/linux-mm/87zfqfw0yw.fsf@yhuang6-desk2.ccr.corp.intel.com/
    Signed-off-by: Zi Yan <ziy@nvidia.com>
    Acked-by: David Hildenbrand <david@redhat.com>
    Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: "Huang, Ying" <ying.huang@intel.com>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Yang Shi <shy828301@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>

mm/numa: no task_numa_fault() call if PTE is changed [+ + +]
Author: Zi Yan <ziy@nvidia.com>
Date:   Fri Aug 9 10:59:04 2024 -0400

    mm/numa: no task_numa_fault() call if PTE is changed
    
    commit 40b760cfd44566bca791c80e0720d70d75382b84 upstream.
    
    When handling a numa page fault, task_numa_fault() should be called by a
    process that restores the page table of the faulted folio to avoid
    duplicated stats counting.  Commit b99a342d4f11 ("NUMA balancing: reduce
    TLB flush via delaying mapping on hint page fault") restructured
    do_numa_page() and did not avoid task_numa_fault() call in the second page
    table check after a numa migration failure.  Fix it by making all
    !pte_same() return immediately.
    
    This issue can cause task_numa_fault() being called more than necessary
    and lead to unexpected numa balancing results (It is hard to tell whether
    the issue will cause positive or negative performance impact due to
    duplicated numa fault counting).
    
    Link: https://lkml.kernel.org/r/20240809145906.1513458-2-ziy@nvidia.com
    Fixes: b99a342d4f11 ("NUMA balancing: reduce TLB flush via delaying mapping on hint page fault")
    Signed-off-by: Zi Yan <ziy@nvidia.com>
    Reported-by: "Huang, Ying" <ying.huang@intel.com>
    Closes: https://lore.kernel.org/linux-mm/87zfqfw0yw.fsf@yhuang6-desk2.ccr.corp.intel.com/
    Acked-by: David Hildenbrand <david@redhat.com>
    Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Yang Shi <shy828301@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>

 
mm/vmalloc: fix page mapping if vm_area_alloc_pages() with high order fallback to order 0 [+ + +]
Author: Hailong Liu <hailong.liu@oppo.com>
Date:   Thu Aug 8 20:19:56 2024 +0800

    mm/vmalloc: fix page mapping if vm_area_alloc_pages() with high order fallback to order 0
    
    commit 61ebe5a747da649057c37be1c37eb934b4af79ca upstream.
    
    The __vmap_pages_range_noflush() assumes its argument pages** contains
    pages with the same page shift.  However, since commit e9c3cda4d86e ("mm,
    vmalloc: fix high order __GFP_NOFAIL allocations"), if gfp_flags includes
    __GFP_NOFAIL with high order in vm_area_alloc_pages() and page allocation
    failed for high order, the pages** may contain two different page shifts
    (high order and order-0).  This could lead __vmap_pages_range_noflush() to
    perform incorrect mappings, potentially resulting in memory corruption.
    
    Users might encounter this as follows (vmap_allow_huge = true, 2M is for
    PMD_SIZE):
    
    kvmalloc(2M, __GFP_NOFAIL|GFP_X)
        __vmalloc_node_range_noprof(vm_flags=VM_ALLOW_HUGE_VMAP)
            vm_area_alloc_pages(order=9) ---> order-9 allocation failed and fallback to order-0
                vmap_pages_range()
                    vmap_pages_range_noflush()
                        __vmap_pages_range_noflush(page_shift = 21) ----> wrong mapping happens
    
    We can remove the fallback code because if a high-order allocation fails,
    __vmalloc_node_range_noprof() will retry with order-0.  Therefore, it is
    unnecessary to fallback to order-0 here.  Therefore, fix this by removing
    the fallback code.
    
    Link: https://lkml.kernel.org/r/20240808122019.3361-1-hailong.liu@oppo.com
    Fixes: e9c3cda4d86e ("mm, vmalloc: fix high order __GFP_NOFAIL allocations")
    Signed-off-by: Hailong Liu <hailong.liu@oppo.com>
    Reported-by: Tangquan Zheng <zhengtangquan@oppo.com>
    Reviewed-by: Baoquan He <bhe@redhat.com>
    Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
    Acked-by: Barry Song <baohua@kernel.org>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: khugepaged: fix kernel BUG in hpage_collapse_scan_file() [+ + +]
Author: Ivan Orlov <ivan.orlov0322@gmail.com>
Date:   Wed Mar 29 18:53:30 2023 +0400

    mm: khugepaged: fix kernel BUG in hpage_collapse_scan_file()
    
    [ Upstream commit 2ce0bdfebc74f6cbd4e97a4e767d505a81c38cf2 ]
    
    Syzkaller reported the following issue:
    
    kernel BUG at mm/khugepaged.c:1823!
    invalid opcode: 0000 [#1] PREEMPT SMP KASAN
    CPU: 1 PID: 5097 Comm: syz-executor220 Not tainted 6.2.0-syzkaller-13154-g857f1268a591 #0
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/16/2023
    RIP: 0010:collapse_file mm/khugepaged.c:1823 [inline]
    RIP: 0010:hpage_collapse_scan_file+0x67c8/0x7580 mm/khugepaged.c:2233
    Code: 00 00 89 de e8 c9 66 a3 ff 31 ff 89 de e8 c0 66 a3 ff 45 84 f6 0f 85 28 0d 00 00 e8 22 64 a3 ff e9 dc f7 ff ff e8 18 64 a3 ff <0f> 0b f3 0f 1e fa e8 0d 64 a3 ff e9 93 f6 ff ff f3 0f 1e fa 4c 89
    RSP: 0018:ffffc90003dff4e0 EFLAGS: 00010093
    RAX: ffffffff81e95988 RBX: 00000000000001c1 RCX: ffff8880205b3a80
    RDX: 0000000000000000 RSI: 00000000000001c0 RDI: 00000000000001c1
    RBP: ffffc90003dff830 R08: ffffffff81e90e67 R09: fffffbfff1a433c3
    R10: 0000000000000000 R11: dffffc0000000001 R12: 0000000000000000
    R13: ffffc90003dff6c0 R14: 00000000000001c0 R15: 0000000000000000
    FS:  00007fdbae5ee700(0000) GS:ffff8880b9900000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007fdbae6901e0 CR3: 000000007b2dd000 CR4: 00000000003506e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     <TASK>
     madvise_collapse+0x721/0xf50 mm/khugepaged.c:2693
     madvise_vma_behavior mm/madvise.c:1086 [inline]
     madvise_walk_vmas mm/madvise.c:1260 [inline]
     do_madvise+0x9e5/0x4680 mm/madvise.c:1439
     __do_sys_madvise mm/madvise.c:1452 [inline]
     __se_sys_madvise mm/madvise.c:1450 [inline]
     __x64_sys_madvise+0xa5/0xb0 mm/madvise.c:1450
     do_syscall_x64 arch/x86/entry/common.c:50 [inline]
     do_syscall_64+0x41/0xc0 arch/x86/entry/common.c:80
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    The xas_store() call during page cache scanning can potentially translate
    'xas' into the error state (with the reproducer provided by the syzkaller
    the error code is -ENOMEM).  However, there are no further checks after
    the 'xas_store', and the next call of 'xas_next' at the start of the
    scanning cycle doesn't increase the xa_index, and the issue occurs.
    
    This patch will add the xarray state error checking after the xas_store()
    and the corresponding result error code.
    
    Tested via syzbot.
    
    [akpm@linux-foundation.org: update include/trace/events/huge_memory.h's SCAN_STATUS]
    Link: https://lkml.kernel.org/r/20230329145330.23191-1-ivan.orlov0322@gmail.com
    Link: https://syzkaller.appspot.com/bug?id=7d6bb3760e026ece7524500fe44fb024a0e959fc
    Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com>
    Reported-by: syzbot+9578faa5475acb35fa50@syzkaller.appspotmail.com
    Tested-by: Zach O'Keefe <zokeefe@google.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Himadri Pandya <himadrispandya@gmail.com>
    Cc: Ivan Orlov <ivan.orlov0322@gmail.com>
    Cc: Shuah Khan <skhan@linuxfoundation.org>
    Cc: Song Liu <songliubraving@fb.com>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mm: Remove kmem_valid_obj() [+ + +]
Author: Zhen Lei <thunder.leizhen@huawei.com>
Date:   Sat Aug 5 11:17:25 2023 +0800

    mm: Remove kmem_valid_obj()
    
    commit 6e284c55fc0bef7d25fd34d29db11f483da60ea4 upstream.
    
    Function kmem_dump_obj() will splat if passed a pointer to a non-slab
    object. So nothing calls it directly, instead calling kmem_valid_obj()
    first to determine whether the passed pointer to a valid slab object. This
    means that merging kmem_valid_obj() into kmem_dump_obj() will make the
    code more concise. Therefore, convert kmem_dump_obj() to work the same
    way as vmalloc_dump_obj(), removing the need for the kmem_dump_obj()
    caller to check kmem_valid_obj().  After this, there are no remaining
    calls to kmem_valid_obj() anymore, and it can be safely removed.
    
    Suggested-by: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Acked-by: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: dw_mmc: allow biu and ciu clocks to defer [+ + +]
Author: Ben Whitten <ben.whitten@gmail.com>
Date:   Sun Aug 11 22:22:11 2024 +0100

    mmc: dw_mmc: allow biu and ciu clocks to defer
    
    commit 6275c7bc8dd07644ea8142a1773d826800f0f3f7 upstream.
    
    Fix a race condition if the clock provider comes up after mmc is probed,
    this causes mmc to fail without retrying.
    When given the DEFER error from the clk source, pass it on up the chain.
    
    Fixes: f90a0612f0e1 ("mmc: dw_mmc: lookup for optional biu and ciu clocks")
    Signed-off-by: Ben Whitten <ben.whitten@gmail.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240811212212.123255-1-ben.whitten@gmail.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: mmc_test: Fix NULL dereference on allocation failure [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Tue Aug 20 11:44:08 2024 +0300

    mmc: mmc_test: Fix NULL dereference on allocation failure
    
    [ Upstream commit a1e627af32ed60713941cbfc8075d44cad07f6dd ]
    
    If the "test->highmem = alloc_pages()" allocation fails then calling
    __free_pages(test->highmem) will result in a NULL dereference.  Also
    change the error code to -ENOMEM instead of returning success.
    
    Fixes: 2661081f5ab9 ("mmc_test: highmem tests")
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Link: https://lore.kernel.org/r/8c90be28-67b4-4b0d-a105-034dc72a0b31@stanley.mountain
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mptcp: correct MPTCP_SUBFLOW_ATTR_SSN_OFFSET reserved size [+ + +]
Author: Eugene Syromiatnikov <esyr@redhat.com>
Date:   Mon Aug 12 08:51:23 2024 +0200

    mptcp: correct MPTCP_SUBFLOW_ATTR_SSN_OFFSET reserved size
    
    [ Upstream commit 655111b838cdabdb604f3625a9ff08c5eedb11da ]
    
    ssn_offset field is u32 and is placed into the netlink response with
    nla_put_u32(), but only 2 bytes are reserved for the attribute payload
    in subflow_get_info_size() (even though it makes no difference
    in the end, as it is aligned up to 4 bytes).  Supply the correct
    argument to the relevant nla_total_size() call to make it less
    confusing.
    
    Fixes: 5147dfb50832 ("mptcp: allow dumping subflow context to userspace")
    Signed-off-by: Eugene Syromiatnikov <esyr@redhat.com>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20240812065024.GA19719@asgard.redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

mptcp: pm: only decrement add_addr_accepted for MPJ req [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Aug 19 21:45:27 2024 +0200

    mptcp: pm: only decrement add_addr_accepted for MPJ req
    
    commit 1c1f721375989579e46741f59523e39ec9b2a9bd upstream.
    
    Adding the following warning ...
    
      WARN_ON_ONCE(msk->pm.add_addr_accepted == 0)
    
    ... before decrementing the add_addr_accepted counter helped to find a
    bug when running the "remove single subflow" subtest from the
    mptcp_join.sh selftest.
    
    Removing a 'subflow' endpoint will first trigger a RM_ADDR, then the
    subflow closure. Before this patch, and upon the reception of the
    RM_ADDR, the other peer will then try to decrement this
    add_addr_accepted. That's not correct because the attached subflows have
    not been created upon the reception of an ADD_ADDR.
    
    A way to solve that is to decrement the counter only if the attached
    subflow was an MP_JOIN to a remote id that was not 0, and initiated by
    the host receiving the RM_ADDR.
    
    Fixes: d0876b2284cf ("mptcp: add the incoming RM_ADDR support")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20240819-net-mptcp-pm-reusing-id-v1-9-38035d40de5b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: re-using ID of unused flushed subflows [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Aug 19 21:45:23 2024 +0200

    mptcp: pm: re-using ID of unused flushed subflows
    
    commit ef34a6ea0cab1800f4b3c9c3c2cefd5091e03379 upstream.
    
    If no subflows are attached to the 'subflow' endpoints that are being
    flushed, the corresponding addr IDs will not be marked as available
    again.
    
    Mark all ID as being available when flushing all the 'subflow'
    endpoints, and reset local_addr_used counter to cover these cases.
    
    Note that mptcp_pm_remove_addrs_and_subflows() helper is only called for
    flushing operations, not to remove a specific set of addresses and
    subflows.
    
    Fixes: 06faa2271034 ("mptcp: remove multi addresses and subflows in PM")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20240819-net-mptcp-pm-reusing-id-v1-5-38035d40de5b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: re-using ID of unused removed ADD_ADDR [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Aug 19 21:45:19 2024 +0200

    mptcp: pm: re-using ID of unused removed ADD_ADDR
    
    commit e255683c06df572ead96db5efb5d21be30c0efaa upstream.
    
    If no subflow is attached to the 'signal' endpoint that is being
    removed, the addr ID will not be marked as available again.
    
    Mark the linked ID as available when removing the address entry from the
    list to cover this case.
    
    Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20240819-net-mptcp-pm-reusing-id-v1-1-38035d40de5b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: re-using ID of unused removed subflows [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Aug 19 21:45:21 2024 +0200

    mptcp: pm: re-using ID of unused removed subflows
    
    commit edd8b5d868a4d459f3065493001e293901af758d upstream.
    
    If no subflow is attached to the 'subflow' endpoint that is being
    removed, the addr ID will not be marked as available again.
    
    Mark the linked ID as available when removing the 'subflow' endpoint if
    no subflow is attached to it.
    
    While at it, the local_addr_used counter is decremented if the ID was
    marked as being used to reflect the reality, but also to allow adding
    new endpoints after that.
    
    Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink")
    Cc: stable@vger.kernel.org
    Reviewed-by: Mat Martineau <martineau@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20240819-net-mptcp-pm-reusing-id-v1-3-38035d40de5b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5e: Correctly report errors for ethtool rx flows [+ + +]
Author: Cosmin Ratiu <cratiu@nvidia.com>
Date:   Thu Aug 8 17:41:05 2024 +0300

    net/mlx5e: Correctly report errors for ethtool rx flows
    
    [ Upstream commit cbc796be1779c4dbc9a482c7233995e2a8b6bfb3 ]
    
    Previously, an ethtool rx flow with no attrs would not be added to the
    NIC as it has no rules to configure the hw with, but it would be
    reported as successful to the caller (return code 0). This is confusing
    for the user as ethtool then reports "Added rule $num", but no rule was
    actually added.
    
    This change corrects that by instead reporting these wrong rules as
    -EINVAL.
    
    Fixes: b29c61dac3a2 ("net/mlx5e: Ethtool steering flow validation refactoring")
    Signed-off-by: Cosmin Ratiu <cratiu@nvidia.com>
    Reviewed-by: Saeed Mahameed <saeedm@nvidia.com>
    Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20240808144107.2095424-5-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/mlx5e: Take state lock during tx timeout reporter [+ + +]
Author: Dragos Tatulea <dtatulea@nvidia.com>
Date:   Thu Aug 8 17:41:04 2024 +0300

    net/mlx5e: Take state lock during tx timeout reporter
    
    [ Upstream commit e6b5afd30b99b43682a7764e1a74a42fe4d5f4b3 ]
    
    mlx5e_safe_reopen_channels() requires the state lock taken. The
    referenced changed in the Fixes tag removed the lock to fix another
    issue. This patch adds it back but at a later point (when calling
    mlx5e_safe_reopen_channels()) to avoid the deadlock referenced in the
    Fixes tag.
    
    Fixes: eab0da38912e ("net/mlx5e: Fix possible deadlock on mlx5e_tx_timeout_work")
    Signed-off-by: Dragos Tatulea <dtatulea@nvidia.com>
    Link: https://lore.kernel.org/all/ZplpKq8FKi3vwfxv@gmail.com/T/
    Reviewed-by: Breno Leitao <leitao@debian.org>
    Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Link: https://patch.msgid.link/20240808144107.2095424-4-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sun3_82586: Avoid reading past buffer in debug output [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Tue Feb 6 08:16:54 2024 -0800

    net/sun3_82586: Avoid reading past buffer in debug output
    
    [ Upstream commit 4bea747f3fbec33c16d369b2f51e55981d7c78d0 ]
    
    Since NUM_XMIT_BUFFS is always 1, building m68k with sun3_defconfig and
    -Warraybounds, this build warning is visible[1]:
    
    drivers/net/ethernet/i825xx/sun3_82586.c: In function 'sun3_82586_timeout':
    drivers/net/ethernet/i825xx/sun3_82586.c:990:122: warning: array subscript 1 is above array bounds of 'volatile struct transmit_cmd_struct *[1]' [-Warray-bounds=]
      990 |                 printk("%s: command-stats: %04x %04x\n",dev->name,swab16(p->xmit_cmds[0]->cmd_status),swab16(p->xmit_cmds[1]->cmd_status));
          |                                                                                                               ~~~~~~~~~~~~^~~
    ...
    drivers/net/ethernet/i825xx/sun3_82586.c:156:46: note: while referencing 'xmit_cmds'
      156 |         volatile struct transmit_cmd_struct *xmit_cmds[NUM_XMIT_BUFFS];
    
    Avoid accessing index 1 since it doesn't exist.
    
    Link: https://github.com/KSPP/linux/issues/325 [1]
    Cc: Sam Creasey <sammy@sammy.net>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Simon Horman <horms@kernel.org> # build-tested
    Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/20240206161651.work.876-kees@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: axienet: Fix register defines comment description [+ + +]
Author: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
Date:   Fri Aug 9 11:56:09 2024 +0530

    net: axienet: Fix register defines comment description
    
    [ Upstream commit 9ff2f816e2aa65ca9a1cdf0954842f8173c0f48d ]
    
    In axiethernet header fix register defines comment description to be
    inline with IP documentation. It updates MAC configuration register,
    MDIO configuration register and frame filter control description.
    
    Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
    Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: change maximum number of UDP segments to 128 [+ + +]
Author: Yuri Benditovich <yuri.benditovich@daynix.com>
Date:   Thu Apr 11 08:11:24 2024 +0300

    net: change maximum number of UDP segments to 128
    
    commit 1382e3b6a3500c245e5278c66d210c02926f804f upstream.
    
    The commit fc8b2a619469
    ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
    adds check of potential number of UDP segments vs
    UDP_MAX_SEGMENTS in linux/virtio_net.h.
    After this change certification test of USO guest-to-guest
    transmit on Windows driver for virtio-net device fails,
    for example with packet size of ~64K and mss of 536 bytes.
    In general the USO should not be more restrictive than TSO.
    Indeed, in case of unreasonably small mss a lot of segments
    can cause queue overflow and packet loss on the destination.
    Limit of 128 segments is good for any practical purpose,
    with minimal meaningful mss of 536 the maximal UDP packet will
    be divided to ~120 segments.
    The number of segments for UDP packets is validated vs
    UDP_MAX_SEGMENTS also in udp.c (v4,v6), this does not affect
    quest-to-guest path but does affect packets sent to host, for
    example.
    It is important to mention that UDP_MAX_SEGMENTS is kernel-only
    define and not available to user mode socket applications.
    In order to request MSS smaller than MTU the applications
    just uses setsockopt with SOL_UDP and UDP_SEGMENT and there is
    no limitations on socket API level.
    
    Fixes: fc8b2a619469 ("net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation")
    Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: don't dump stack on queue timeout [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Tue Nov 14 00:11:42 2023 -0500

    net: don't dump stack on queue timeout
    
    [ Upstream commit e316dd1cf1358ff9c44b37c7be273a7dc4349986 ]
    
    The top syzbot report for networking (#14 for the entire kernel)
    is the queue timeout splat. We kept it around for a long time,
    because in real life it provides pretty strong signal that
    something is wrong with the driver or the device.
    
    Removing it is also likely to break monitoring for those who
    track it as a kernel warning.
    
    Nevertheless, WARN()ings are best suited for catching kernel
    programming bugs. If a Tx queue gets starved due to a pause
    storm, priority configuration, or other weirdness - that's
    obviously a problem, but not a problem we can fix at
    the kernel level.
    
    Bite the bullet and convert the WARN() to a print.
    
    Before:
    
      NETDEV WATCHDOG: eni1np1 (netdevsim): transmit queue 0 timed out 1975 ms
      WARNING: CPU: 0 PID: 0 at net/sched/sch_generic.c:525 dev_watchdog+0x39e/0x3b0
      [... completely pointless stack trace of a timer follows ...]
    
    Now:
    
      netdevsim netdevsim1 eni1np1: NETDEV WATCHDOG: CPU: 0: transmit queue 0 timed out 1769 ms
    
    Alternatively we could mark the drivers which syzbot has
    learned to abuse as "print-instead-of-WARN" selectively.
    
    Reported-by: syzbot+d55372214aff0faa1f1f@syzkaller.appspotmail.com
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: drop bad gso csum_start and offset in virtio_net_hdr [+ + +]
Author: Willem de Bruijn <willemb@google.com>
Date:   Mon Jul 29 16:10:12 2024 -0400

    net: drop bad gso csum_start and offset in virtio_net_hdr
    
    commit 89add40066f9ed9abe5f7f886fe5789ff7e0c50e upstream.
    
    Tighten csum_start and csum_offset checks in virtio_net_hdr_to_skb
    for GSO packets.
    
    The function already checks that a checksum requested with
    VIRTIO_NET_HDR_F_NEEDS_CSUM is in skb linear. But for GSO packets
    this might not hold for segs after segmentation.
    
    Syzkaller demonstrated to reach this warning in skb_checksum_help
    
            offset = skb_checksum_start_offset(skb);
            ret = -EINVAL;
            if (WARN_ON_ONCE(offset >= skb_headlen(skb)))
    
    By injecting a TSO packet:
    
    WARNING: CPU: 1 PID: 3539 at net/core/dev.c:3284 skb_checksum_help+0x3d0/0x5b0
     ip_do_fragment+0x209/0x1b20 net/ipv4/ip_output.c:774
     ip_finish_output_gso net/ipv4/ip_output.c:279 [inline]
     __ip_finish_output+0x2bd/0x4b0 net/ipv4/ip_output.c:301
     iptunnel_xmit+0x50c/0x930 net/ipv4/ip_tunnel_core.c:82
     ip_tunnel_xmit+0x2296/0x2c70 net/ipv4/ip_tunnel.c:813
     __gre_xmit net/ipv4/ip_gre.c:469 [inline]
     ipgre_xmit+0x759/0xa60 net/ipv4/ip_gre.c:661
     __netdev_start_xmit include/linux/netdevice.h:4850 [inline]
     netdev_start_xmit include/linux/netdevice.h:4864 [inline]
     xmit_one net/core/dev.c:3595 [inline]
     dev_hard_start_xmit+0x261/0x8c0 net/core/dev.c:3611
     __dev_queue_xmit+0x1b97/0x3c90 net/core/dev.c:4261
     packet_snd net/packet/af_packet.c:3073 [inline]
    
    The geometry of the bad input packet at tcp_gso_segment:
    
    [   52.003050][ T8403] skb len=12202 headroom=244 headlen=12093 tailroom=0
    [   52.003050][ T8403] mac=(168,24) mac_len=24 net=(192,52) trans=244
    [   52.003050][ T8403] shinfo(txflags=0 nr_frags=1 gso(size=1552 type=3 segs=0))
    [   52.003050][ T8403] csum(0x60000c7 start=199 offset=1536
    ip_summed=3 complete_sw=0 valid=0 level=0)
    
    Mitigate with stricter input validation.
    
    csum_offset: for GSO packets, deduce the correct value from gso_type.
    This is already done for USO. Extend it to TSO. Let UFO be:
    udp[46]_ufo_fragment ignores these fields and always computes the
    checksum in software.
    
    csum_start: finding the real offset requires parsing to the transport
    header. Do not add a parser, use existing segmentation parsing. Thanks
    to SKB_GSO_DODGY, that also catches bad packets that are hw offloaded.
    Again test both TSO and USO. Do not test UFO for the above reason, and
    do not test UDP tunnel offload.
    
    GSO packet are almost always CHECKSUM_PARTIAL. USO packets may be
    CHECKSUM_NONE since commit 10154dbded6d6 ("udp: Allow GSO transmit
    from devices with no checksum offload"), but then still these fields
    are initialized correctly in udp4_hwcsum/udp6_hwcsum_outgoing. So no
    need to test for ip_summed == CHECKSUM_PARTIAL first.
    
    This revises an existing fix mentioned in the Fixes tag, which broke
    small packets with GSO offload, as detected by kselftests.
    
    Link: https://syzkaller.appspot.com/bug?extid=e1db31216c789f552871
    Link: https://lore.kernel.org/netdev/20240723223109.2196886-1-kuba@kernel.org
    Fixes: e269d79c7d35 ("net: missing check virtio")
    Cc: stable@vger.kernel.org
    Signed-off-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20240729201108.1615114-1-willemdebruijn.kernel@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: dsa: mv88e6xxx: Fix out-of-bound access [+ + +]
Author: Joseph Huang <Joseph.Huang@garmin.com>
Date:   Mon Aug 19 19:52:50 2024 -0400

    net: dsa: mv88e6xxx: Fix out-of-bound access
    
    [ Upstream commit 528876d867a23b5198022baf2e388052ca67c952 ]
    
    If an ATU violation was caused by a CPU Load operation, the SPID could
    be larger than DSA_MAX_PORTS (the size of mv88e6xxx_chip.ports[] array).
    
    Fixes: 75c05a74e745 ("net: dsa: mv88e6xxx: Fix counting of ATU violations")
    Signed-off-by: Joseph Huang <Joseph.Huang@garmin.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/20240819235251.1331763-1-Joseph.Huang@garmin.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: tag_ocelot: call only the relevant portion of __skb_vlan_pop() on TX [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Fri Apr 21 01:56:01 2023 +0300

    net: dsa: tag_ocelot: call only the relevant portion of __skb_vlan_pop() on TX
    
    [ Upstream commit 0bcf2e4aca6c29a07555b713f2fb461dc38d5977 ]
    
    ocelot_xmit_get_vlan_info() calls __skb_vlan_pop() as the most
    appropriate helper I could find which strips away a VLAN header.
    That's all I need it to do, but __skb_vlan_pop() has more logic, which
    will become incompatible with the future revert of commit 6d1ccff62780
    ("net: reset mac header in dev_start_xmit()").
    
    Namely, it performs a sanity check on skb_mac_header(), which will stop
    being set after the above revert, so it will return an error instead of
    removing the VLAN tag.
    
    ocelot_xmit_get_vlan_info() gets called in 2 circumstances:
    
    (1) the port is under a VLAN-aware bridge and the bridge sends
        VLAN-tagged packets
    
    (2) the port is under a VLAN-aware bridge and somebody else (an 8021q
        upper) sends VLAN-tagged packets (using a VID that isn't in the
        bridge vlan tables)
    
    In case (1), there is actually no bug to defend against, because
    br_dev_xmit() calls skb_reset_mac_header() and things continue to work.
    
    However, in case (2), illustrated using the commands below, it can be
    seen that our intervention is needed, since __skb_vlan_pop() complains:
    
    $ ip link add br0 type bridge vlan_filtering 1 && ip link set br0 up
    $ ip link set $eth master br0 && ip link set $eth up
    $ ip link add link $eth name $eth.100 type vlan id 100 && ip link set $eth.100 up
    $ ip addr add 192.168.100.1/24 dev $eth.100
    
    I could fend off the checks in __skb_vlan_pop() with some
    skb_mac_header_was_set() calls, but seeing how few callers of
    __skb_vlan_pop() there are from TX paths, that seems rather
    unproductive.
    
    As an alternative solution, extract the bare minimum logic to strip a
    VLAN header, and move it to a new helper named vlan_remove_tag(), close
    to the definition of vlan_insert_tag(). Document it appropriately and
    make ocelot_xmit_get_vlan_info() call this smaller helper instead.
    
    Seeing that it doesn't appear illegal to test skb->protocol in the TX
    path, I guess it would be a good for vlan_remove_tag() to also absorb
    the vlan_set_encap_proto() function call.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 67c3ca2c5cfe ("net: mscc: ocelot: use ocelot_xmit_get_vlan_info() also for FDMA and register injection")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: tag_ocelot: do not rely on skb_mac_header() for VLAN xmit [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Fri Apr 21 01:55:56 2023 +0300

    net: dsa: tag_ocelot: do not rely on skb_mac_header() for VLAN xmit
    
    [ Upstream commit eabb1494c9f20362ae53a9991481a1523be4f4b7 ]
    
    skb_mac_header() will no longer be available in the TX path when
    reverting commit 6d1ccff62780 ("net: reset mac header in
    dev_start_xmit()"). As preparation for that, let's use
    skb_vlan_eth_hdr() to get to the VLAN header instead, which assumes it's
    located at skb->data (assumption which holds true here).
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 67c3ca2c5cfe ("net: mscc: ocelot: use ocelot_xmit_get_vlan_info() also for FDMA and register injection")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: vsc73xx: check busy flag in MDIO operations [+ + +]
Author: Pawel Dembicki <paweldembicki@gmail.com>
Date:   Fri Aug 9 21:38:04 2024 +0200

    net: dsa: vsc73xx: check busy flag in MDIO operations
    
    [ Upstream commit fa63c6434b6f6aaf9d8d599dc899bc0a074cc0ad ]
    
    The VSC73xx has a busy flag used during MDIO operations. It is raised
    when MDIO read/write operations are in progress. Without it, PHYs are
    misconfigured and bus operations do not work as expected.
    
    Fixes: 05bd97fc559d ("net: dsa: Add Vitesse VSC73xx DSA router driver")
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: vsc73xx: pass value in phy_write operation [+ + +]
Author: Pawel Dembicki <paweldembicki@gmail.com>
Date:   Fri Aug 9 21:38:03 2024 +0200

    net: dsa: vsc73xx: pass value in phy_write operation
    
    [ Upstream commit 5b9eebc2c7a5f0cc7950d918c1e8a4ad4bed5010 ]
    
    In the 'vsc73xx_phy_write' function, the register value is missing,
    and the phy write operation always sends zeros.
    
    This commit passes the value variable into the proper register.
    
    Fixes: 05bd97fc559d ("net: dsa: Add Vitesse VSC73xx DSA router driver")
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: dsa: vsc73xx: use read_poll_timeout instead delay loop [+ + +]
Author: Pawel Dembicki <paweldembicki@gmail.com>
Date:   Wed Apr 17 22:50:44 2024 +0200

    net: dsa: vsc73xx: use read_poll_timeout instead delay loop
    
    [ Upstream commit eb7e33d01db3aec128590391b2397384bab406b6 ]
    
    Switch the delay loop during the Arbiter empty check from
    vsc73xx_adjust_link() to use read_poll_timeout(). Functionally,
    one msleep() call is eliminated at the end of the loop in the timeout
    case.
    
    As Russell King suggested:
    
    "This [change] avoids the issue that on the last iteration, the code reads
    the register, tests it, finds the condition that's being waiting for is
    false, _then_ waits and end up printing the error message - that last
    wait is rather useless, and as the arbiter state isn't checked after
    waiting, it could be that we had success during the last wait."
    
    Suggested-by: Russell King <linux@armlinux.org.uk>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
    Link: https://lore.kernel.org/r/20240417205048.3542839-2-paweldembicki@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: fa63c6434b6f ("net: dsa: vsc73xx: check busy flag in MDIO operations")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: add checking for vf id of mailbox [+ + +]
Author: Jian Shen <shenjian15@huawei.com>
Date:   Thu Mar 7 09:01:15 2024 +0800

    net: hns3: add checking for vf id of mailbox
    
    [ Upstream commit 4e2969a0d6a7549bc0bc1ebc990588b622c4443d ]
    
    Add checking for vf id of mailbox, in order to avoid array
    out-of-bounds risk.
    
    Signed-off-by: Jian Shen <shenjian15@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Reviewed-by: Sunil Goutham <sgoutham@marvell.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: fix a deadlock problem when config TC during resetting [+ + +]
Author: Jie Wang <wangjie125@huawei.com>
Date:   Tue Aug 13 22:10:22 2024 +0800

    net: hns3: fix a deadlock problem when config TC during resetting
    
    [ Upstream commit be5e816d00a506719e9dbb1a9c861c5ced30a109 ]
    
    When config TC during the reset process, may cause a deadlock, the flow is
    as below:
                                 pf reset start
                                     │
                                     ▼
                                  ......
    setup tc                         │
        │                            ▼
        ▼                      DOWN: napi_disable()
    napi_disable()(skip)             │
        │                            │
        ▼                            ▼
      ......                      ......
        │                            │
        ▼                            │
    napi_enable()                    │
                                     ▼
                               UINIT: netif_napi_del()
                                     │
                                     ▼
                                  ......
                                     │
                                     ▼
                               INIT: netif_napi_add()
                                     │
                                     ▼
                                  ......                 global reset start
                                     │                      │
                                     ▼                      ▼
                               UP: napi_enable()(skip)    ......
                                     │                      │
                                     ▼                      ▼
                                  ......                 napi_disable()
    
    In reset process, the driver will DOWN the port and then UINIT, in this
    case, the setup tc process will UP the port before UINIT, so cause the
    problem. Adds a DOWN process in UINIT to fix it.
    
    Fixes: bb6b94a896d4 ("net: hns3: Add reset interface implementation in client")
    Signed-off-by: Jie Wang <wangjie125@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: fix wrong use of semaphore up [+ + +]
Author: Jie Wang <wangjie125@huawei.com>
Date:   Tue Aug 13 22:10:20 2024 +0800

    net: hns3: fix wrong use of semaphore up
    
    [ Upstream commit 8445d9d3c03101859663d34fda747f6a50947556 ]
    
    Currently, if hns3 PF or VF FLR reset failed after five times retry,
    the reset done process will directly release the semaphore
    which has already released in hclge_reset_prepare_general.
    This will cause down operation fail.
    
    So this patch fixes it by adding reset state judgement. The up operation is
    only called after successful PF FLR reset.
    
    Fixes: 8627bdedc435 ("net: hns3: refactor the precedure of PF FLR")
    Fixes: f28368bb4542 ("net: hns3: refactor the procedure of VF FLR")
    Signed-off-by: Jie Wang <wangjie125@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: hns3: use the user's cfg after reset [+ + +]
Author: Peiyang Wang <wangpeiyang1@huawei.com>
Date:   Tue Aug 13 22:10:21 2024 +0800

    net: hns3: use the user's cfg after reset
    
    [ Upstream commit 30545e17eac1f50c5ef49644daf6af205100a965 ]
    
    Consider the followed case that the user change speed and reset the net
    interface. Before the hw change speed successfully, the driver get old
    old speed from hw by timer task. After reset, the previous speed is config
    to hw. As a result, the new speed is configed successfully but lost after
    PF reset. The followed pictured shows more dirrectly.
    
    +------+              +----+                 +----+
    | USER |              | PF |                 | HW |
    +---+--+              +-+--+                 +-+--+
        |  ethtool -s 100G  |                      |
        +------------------>|   set speed 100G     |
        |                   +--------------------->|
        |                   |  set successfully    |
        |                   |<---------------------+---+
        |                   |query cfg (timer task)|   |
        |                   +--------------------->|   | handle speed
        |                   |     return 200G      |   | changing event
        |  ethtool --reset  |<---------------------+   | (100G)
        +------------------>|  cfg previous speed  |<--+
        |                   |  after reset (200G)  |
        |                   +--------------------->|
        |                   |                      +---+
        |                   |query cfg (timer task)|   |
        |                   +--------------------->|   | handle speed
        |                   |     return 100G      |   | changing event
        |                   |<---------------------+   | (200G)
        |                   |                      |<--+
        |                   |query cfg (timer task)|
        |                   +--------------------->|
        |                   |     return 200G      |
        |                   |<---------------------+
        |                   |                      |
        v                   v                      v
    
    This patch save new speed if hw change speed successfully, which will be
    used after reset successfully.
    
    Fixes: 2d03eacc0b7e ("net: hns3: Only update mac configuation when necessary")
    Signed-off-by: Peiyang Wang <wangpeiyang1@huawei.com>
    Signed-off-by: Jijie Shao <shaojijie@huawei.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mana: Fix doorbell out of order violation and avoid unnecessary doorbell rings [+ + +]
Author: Long Li <longli@microsoft.com>
Date:   Fri Aug 9 08:58:58 2024 -0700

    net: mana: Fix doorbell out of order violation and avoid unnecessary doorbell rings
    
    [ Upstream commit 58a63729c957621f1990c3494c702711188ca347 ]
    
    After napi_complete_done() is called when NAPI is polling in the current
    process context, another NAPI may be scheduled and start running in
    softirq on another CPU and may ring the doorbell before the current CPU
    does. When combined with unnecessary rings when there is no need to arm
    the CQ, it triggers error paths in the hardware.
    
    This patch fixes this by calling napi_complete_done() after doorbell
    rings. It limits the number of unnecessary rings when there is
    no need to arm. MANA hardware specifies that there must be one doorbell
    ring every 8 CQ wraparounds. This driver guarantees one doorbell ring as
    soon as the number of consumed CQEs exceeds 4 CQ wraparounds. In practical
    workloads, the 4 CQ wraparounds proves to be big enough that it rarely
    exceeds this limit before all the napi weight is consumed.
    
    To implement this, add a per-CQ counter cq->work_done_since_doorbell,
    and make sure the CQ is armed as soon as passing 4 wraparounds of the CQ.
    
    Cc: stable@vger.kernel.org
    Fixes: e1b5683ff62e ("net: mana: Move NAPI from EQ to CQ")
    Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: Long Li <longli@microsoft.com>
    Link: https://patch.msgid.link/1723219138-29887-1-git-send-email-longli@linuxonhyperv.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mctp: test: Use correct skb for route input check [+ + +]
Author: Jeremy Kerr <jk@codeconstruct.com.au>
Date:   Fri Aug 16 18:29:17 2024 +0800

    net: mctp: test: Use correct skb for route input check
    
    [ Upstream commit ce335db0621648472f9bb4b7191eb2e13a5793cf ]
    
    In the MCTP route input test, we're routing one skb, then (when delivery
    is expected) checking the resulting routed skb.
    
    However, we're currently checking the original skb length, rather than
    the routed skb. Check the routed skb instead; the original will have
    been freed at this point.
    
    Fixes: 8892c0490779 ("mctp: Add route input to socket tests")
    Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
    Closes: https://lore.kernel.org/kernel-janitors/4ad204f0-94cf-46c5-bdab-49592addf315@kili.mountain/
    Signed-off-by: Jeremy Kerr <jk@codeconstruct.com.au>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240816-mctp-kunit-skb-fix-v1-1-3c367ac89c27@codeconstruct.com.au
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation [+ + +]
Author: Willem de Bruijn <willemb@google.com>
Date:   Wed Oct 11 10:01:14 2023 -0400

    net: more strict VIRTIO_NET_HDR_GSO_UDP_L4 validation
    
    commit fc8b2a619469378717e7270d2a4e1ef93c585f7a upstream.
    
    Syzbot reported two new paths to hit an internal WARNING using the
    new virtio gso type VIRTIO_NET_HDR_GSO_UDP_L4.
    
        RIP: 0010:skb_checksum_help+0x4a2/0x600 net/core/dev.c:3260
        skb len=64521 gso_size=344
    and
    
        RIP: 0010:skb_warn_bad_offload+0x118/0x240 net/core/dev.c:3262
    
    Older virtio types have historically had loose restrictions, leading
    to many entirely impractical fuzzer generated packets causing
    problems deep in the kernel stack. Ideally, we would have had strict
    validation for all types from the start.
    
    New virtio types can have tighter validation. Limit UDP GSO packets
    inserted via virtio to the same limits imposed by the UDP_SEGMENT
    socket interface:
    
    1. must use checksum offload
    2. checksum offload matches UDP header
    3. no more segments than UDP_MAX_SEGMENTS
    4. UDP GSO does not take modifier flags, notably SKB_GSO_TCP_ECN
    
    Fixes: 860b7f27b8f7 ("linux/virtio_net.h: Support USO offload in vnet header.")
    Reported-by: syzbot+01cdbc31e9c0ae9b33ac@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/0000000000005039270605eb0b7f@google.com/
    Reported-by: syzbot+c99d835ff081ca30f986@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/0000000000005426680605eb0b9f@google.com/
    Signed-off-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mscc: ocelot: fix QoS class for injected packets with "ocelot-8021q" [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Aug 15 03:07:03 2024 +0300

    net: mscc: ocelot: fix QoS class for injected packets with "ocelot-8021q"
    
    [ Upstream commit e1b9e80236c540fa85d76e2d510d1b38e1968c5d ]
    
    There are 2 distinct code paths (listed below) in the source code which
    set up an injection header for Ocelot(-like) switches. Code path (2)
    lacks the QoS class and source port being set correctly. Especially the
    improper QoS classification is a problem for the "ocelot-8021q"
    alternative DSA tagging protocol, because we support tc-taprio and each
    packet needs to be scheduled precisely through its time slot. This
    includes PTP, which is normally assigned to a traffic class other than
    0, but would be sent through TC 0 nonetheless.
    
    The code paths are:
    
    (1) ocelot_xmit_common() from net/dsa/tag_ocelot.c - called only by the
        standard "ocelot" DSA tagging protocol which uses NPI-based
        injection - sets up bit fields in the tag manually to account for
        a small difference (destination port offset) between Ocelot and
        Seville. Namely, ocelot_ifh_set_dest() is omitted out of
        ocelot_xmit_common(), because there's also seville_ifh_set_dest().
    
    (2) ocelot_ifh_set_basic(), called by:
        - ocelot_fdma_prepare_skb() for FDMA transmission of the ocelot
          switchdev driver
        - ocelot_port_xmit() -> ocelot_port_inject_frame() for
          register-based transmission of the ocelot switchdev driver
        - felix_port_deferred_xmit() -> ocelot_port_inject_frame() for the
          DSA tagger ocelot-8021q when it must transmit PTP frames (also
          through register-based injection).
        sets the bit fields according to its own logic.
    
    The problem is that (2) doesn't call ocelot_ifh_set_qos_class().
    Copying that logic from ocelot_xmit_common() fixes that.
    
    Unfortunately, although desirable, it is not easily possible to
    de-duplicate code paths (1) and (2), and make net/dsa/tag_ocelot.c
    directly call ocelot_ifh_set_basic()), because of the ocelot/seville
    difference. This is the "minimal" fix with some logic duplicated (but
    at least more consolidated).
    
    Fixes: 0a6f17c6ae21 ("net: dsa: tag_ocelot_8021q: add support for PTP timestamping")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mscc: ocelot: serialize access to the injection/extraction groups [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Aug 15 03:07:04 2024 +0300

    net: mscc: ocelot: serialize access to the injection/extraction groups
    
    [ Upstream commit c5e12ac3beb0dd3a718296b2d8af5528e9ab728e ]
    
    As explained by Horatiu Vultur in commit 603ead96582d ("net: sparx5: Add
    spinlock for frame transmission from CPU") which is for a similar
    hardware design, multiple CPUs can simultaneously perform injection
    or extraction. There are only 2 register groups for injection and 2
    for extraction, and the driver only uses one of each. So we'd better
    serialize access using spin locks, otherwise frame corruption is
    possible.
    
    Note that unlike in sparx5, FDMA in ocelot does not have this issue
    because struct ocelot_fdma_tx_ring already contains an xmit_lock.
    
    I guess this is mostly a problem for NXP LS1028A, as that is dual core.
    I don't think VSC7514 is. So I'm blaming the commit where LS1028A (aka
    the felix DSA driver) started using register-based packet injection and
    extraction.
    
    Fixes: 0a6f17c6ae21 ("net: dsa: tag_ocelot_8021q: add support for PTP timestamping")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: mscc: ocelot: use ocelot_xmit_get_vlan_info() also for FDMA and register injection [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Thu Aug 15 03:07:02 2024 +0300

    net: mscc: ocelot: use ocelot_xmit_get_vlan_info() also for FDMA and register injection
    
    [ Upstream commit 67c3ca2c5cfe6a50772514e3349b5e7b3b0fac03 ]
    
    Problem description
    -------------------
    
    On an NXP LS1028A (felix DSA driver) with the following configuration:
    
    - ocelot-8021q tagging protocol
    - VLAN-aware bridge (with STP) spanning at least swp0 and swp1
    - 8021q VLAN upper interfaces on swp0 and swp1: swp0.700, swp1.700
    - ptp4l on swp0.700 and swp1.700
    
    we see that the ptp4l instances do not see each other's traffic,
    and they all go to the grand master state due to the
    ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES condition.
    
    Jumping to the conclusion for the impatient
    -------------------------------------------
    
    There is a zero-day bug in the ocelot switchdev driver in the way it
    handles VLAN-tagged packet injection. The correct logic already exists in
    the source code, in function ocelot_xmit_get_vlan_info() added by commit
    5ca721c54d86 ("net: dsa: tag_ocelot: set the classified VLAN during xmit").
    But it is used only for normal NPI-based injection with the DSA "ocelot"
    tagging protocol. The other injection code paths (register-based and
    FDMA-based) roll their own wrong logic. This affects and was noticed on
    the DSA "ocelot-8021q" protocol because it uses register-based injection.
    
    By moving ocelot_xmit_get_vlan_info() to a place that's common for both
    the DSA tagger and the ocelot switch library, it can also be called from
    ocelot_port_inject_frame() in ocelot.c.
    
    We need to touch the lines with ocelot_ifh_port_set()'s prototype
    anyway, so let's rename it to something clearer regarding what it does,
    and add a kernel-doc. ocelot_ifh_set_basic() should do.
    
    Investigation notes
    -------------------
    
    Debugging reveals that PTP event (aka those carrying timestamps, like
    Sync) frames injected into swp0.700 (but also swp1.700) hit the wire
    with two VLAN tags:
    
    00000000: 01 1b 19 00 00 00 00 01 02 03 04 05 81 00 02 bc
                                                  ~~~~~~~~~~~
    00000010: 81 00 02 bc 88 f7 00 12 00 2c 00 00 02 00 00 00
              ~~~~~~~~~~~
    00000020: 00 00 00 00 00 00 00 00 00 00 00 01 02 ff fe 03
    00000030: 04 05 00 01 00 04 00 00 00 00 00 00 00 00 00 00
    00000040: 00 00
    
    The second (unexpected) VLAN tag makes felix_check_xtr_pkt() ->
    ptp_classify_raw() fail to see these as PTP packets at the link
    partner's receiving end, and return PTP_CLASS_NONE (because the BPF
    classifier is not written to expect 2 VLAN tags).
    
    The reason why packets have 2 VLAN tags is because the transmission
    code treats VLAN incorrectly.
    
    Neither ocelot switchdev, nor felix DSA, declare the NETIF_F_HW_VLAN_CTAG_TX
    feature. Therefore, at xmit time, all VLANs should be in the skb head,
    and none should be in the hwaccel area. This is done by:
    
    static struct sk_buff *validate_xmit_vlan(struct sk_buff *skb,
                                              netdev_features_t features)
    {
            if (skb_vlan_tag_present(skb) &&
                !vlan_hw_offload_capable(features, skb->vlan_proto))
                    skb = __vlan_hwaccel_push_inside(skb);
            return skb;
    }
    
    But ocelot_port_inject_frame() handles things incorrectly:
    
            ocelot_ifh_port_set(ifh, port, rew_op, skb_vlan_tag_get(skb));
    
    void ocelot_ifh_port_set(struct sk_buff *skb, void *ifh, int port, u32 rew_op)
    {
            (...)
            if (vlan_tag)
                    ocelot_ifh_set_vlan_tci(ifh, vlan_tag);
            (...)
    }
    
    The way __vlan_hwaccel_push_inside() pushes the tag inside the skb head
    is by calling:
    
    static inline void __vlan_hwaccel_clear_tag(struct sk_buff *skb)
    {
            skb->vlan_present = 0;
    }
    
    which does _not_ zero out skb->vlan_tci as seen by skb_vlan_tag_get().
    This means that ocelot, when it calls skb_vlan_tag_get(), sees
    (and uses) a residual skb->vlan_tci, while the same VLAN tag is
    _already_ in the skb head.
    
    The trivial fix for double VLAN headers is to replace the content of
    ocelot_ifh_port_set() with:
    
            if (skb_vlan_tag_present(skb))
                    ocelot_ifh_set_vlan_tci(ifh, skb_vlan_tag_get(skb));
    
    but this would not be correct either, because, as mentioned,
    vlan_hw_offload_capable() is false for us, so we'd be inserting dead
    code and we'd always transmit packets with VID=0 in the injection frame
    header.
    
    I can't actually test the ocelot switchdev driver and rely exclusively
    on code inspection, but I don't think traffic from 8021q uppers has ever
    been injected properly, and not double-tagged. Thus I'm blaming the
    introduction of VLAN fields in the injection header - early driver code.
    
    As hinted at in the early conclusion, what we _want_ to happen for
    VLAN transmission was already described once in commit 5ca721c54d86
    ("net: dsa: tag_ocelot: set the classified VLAN during xmit").
    
    ocelot_xmit_get_vlan_info() intends to ensure that if the port through
    which we're transmitting is under a VLAN-aware bridge, the outer VLAN
    tag from the skb head is stripped from there and inserted into the
    injection frame header (so that the packet is processed in hardware
    through that actual VLAN). And in all other cases, the packet is sent
    with VID=0 in the injection frame header, since the port is VLAN-unaware
    and has logic to strip this VID on egress (making it invisible to the
    wire).
    
    Fixes: 08d02364b12f ("net: mscc: fix the injection header")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sched: Print msecs when transmit queue time out [+ + +]
Author: Yajun Deng <yajun.deng@linux.dev>
Date:   Fri Apr 21 16:26:06 2023 +0800

    net: sched: Print msecs when transmit queue time out
    
    [ Upstream commit 2f0f9465ad9fa9c93f30009184c10da0f504f313 ]
    
    The kernel will print several warnings in a short period of time
    when it stalls. Like this:
    
    First warning:
    [ 7100.097547] ------------[ cut here ]------------
    [ 7100.097550] NETDEV WATCHDOG: eno2 (xxx): transmit queue 8 timed out
    [ 7100.097571] WARNING: CPU: 8 PID: 0 at net/sched/sch_generic.c:467
                           dev_watchdog+0x260/0x270
    ...
    
    Second warning:
    [ 7147.756952] rcu: INFO: rcu_preempt self-detected stall on CPU
    [ 7147.756958] rcu:   24-....: (59999 ticks this GP) idle=546/1/0x400000000000000
                          softirq=367      3137/3673146 fqs=13844
    [ 7147.756960]        (t=60001 jiffies g=4322709 q=133381)
    [ 7147.756962] NMI backtrace for cpu 24
    ...
    
    We calculate that the transmit queue start stall should occur before
    7095s according to watchdog_timeo, the rcu start stall at 7087s.
    These two times are close together, it is difficult to confirm which
    happened first.
    
    To let users know the exact time the stall started, print msecs when
    the transmit queue time out.
    
    Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: e316dd1cf135 ("net: don't dump stack on queue timeout")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: sctp: fix skb leak in sctp_inq_free() [+ + +]
Author: Dmitry Antipov <dmantipov@yandex.ru>
Date:   Wed Feb 14 11:22:24 2024 +0300

    net: sctp: fix skb leak in sctp_inq_free()
    
    [ Upstream commit 4e45170d9acc2d5ae8f545bf3f2f67504a361338 ]
    
    In case of GSO, 'chunk->skb' pointer may point to an entry from
    fraglist created in 'sctp_packet_gso_append()'. To avoid freeing
    random fraglist entry (and so undefined behavior and/or memory
    leak), introduce 'sctp_inq_chunk_free()' helper to ensure that
    'chunk->skb' is set to 'chunk->head_skb' (i.e. fraglist head)
    before calling 'sctp_chunk_free()', and use the aforementioned
    helper in 'sctp_inq_pop()' as well.
    
    Reported-by: syzbot+8bb053b5d63595ab47db@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?id=0d8351bbe54fd04a492c2daab0164138db008042
    Fixes: 90017accff61 ("sctp: Add GSO support")
    Suggested-by: Xin Long <lucien.xin@gmail.com>
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://lore.kernel.org/r/20240214082224.10168-1-dmantipov@yandex.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: xilinx: axienet: Always disable promiscuous mode [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Thu Aug 22 11:40:55 2024 -0400

    net: xilinx: axienet: Always disable promiscuous mode
    
    [ Upstream commit 4ae738dfef2c0323752ab81786e2d298c9939321 ]
    
    If promiscuous mode is disabled when there are fewer than four multicast
    addresses, then it will not be reflected in the hardware. Fix this by
    always clearing the promiscuous mode flag even when we program multicast
    addresses.
    
    Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240822154059.1066595-2-sean.anderson@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: xilinx: axienet: Fix dangling multicast addresses [+ + +]
Author: Sean Anderson <sean.anderson@linux.dev>
Date:   Thu Aug 22 11:40:56 2024 -0400

    net: xilinx: axienet: Fix dangling multicast addresses
    
    [ Upstream commit 797a68c9de0f5a5447baf4bd3bb9c10a3993435b ]
    
    If a multicast address is removed but there are still some multicast
    addresses, that address would remain programmed into the frame filter.
    Fix this by explicitly setting the enable bit for each filter.
    
    Fixes: 8a3b7a252dca ("drivers/net/ethernet/xilinx: added Xilinx AXI Ethernet driver")
    Signed-off-by: Sean Anderson <sean.anderson@linux.dev>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240822154059.1066595-3-sean.anderson@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Linux: net:rds: Fix possible deadlock in rds_message_put [+ + +]
Author: Allison Henderson <allison.henderson@oracle.com>
Date:   Thu Feb 8 19:28:54 2024 -0700

    net:rds: Fix possible deadlock in rds_message_put
    
    [ Upstream commit f1acf1ac84d2ae97b7889b87223c1064df850069 ]
    
    Functions rds_still_queued and rds_clear_recv_queue lock a given socket
    in order to safely iterate over the incoming rds messages. However
    calling rds_inc_put while under this lock creates a potential deadlock.
    rds_inc_put may eventually call rds_message_purge, which will lock
    m_rs_lock. This is the incorrect locking order since m_rs_lock is
    meant to be locked before the socket. To fix this, we move the message
    item to a local list or variable that wont need rs_recv_lock protection.
    Then we can safely call rds_inc_put on any item stored locally after
    rs_recv_lock is released.
    
    Fixes: bdbe6fbc6a2f ("RDS: recv.c")
    Reported-by: syzbot+f9db6ff27b9bfdcfeca0@syzkaller.appspotmail.com
    Reported-by: syzbot+dcd73ff9291e6d34b3ab@syzkaller.appspotmail.com
    Signed-off-by: Allison Henderson <allison.henderson@oracle.com>
    Link: https://lore.kernel.org/r/20240209022854.200292-1-allison.henderson@oracle.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netem: fix return value if duplicate enqueue fails [+ + +]
Author: Stephen Hemminger <stephen@networkplumber.org>
Date:   Mon Aug 19 10:56:45 2024 -0700

    netem: fix return value if duplicate enqueue fails
    
    [ Upstream commit c07ff8592d57ed258afee5a5e04991a48dbaf382 ]
    
    There is a bug in netem_enqueue() introduced by
    commit 5845f706388a ("net: netem: fix skb length BUG_ON in __skb_to_sgvec")
    that can lead to a use-after-free.
    
    This commit made netem_enqueue() always return NET_XMIT_SUCCESS
    when a packet is duplicated, which can cause the parent qdisc's q.qlen
    to be mistakenly incremented. When this happens qlen_notify() may be
    skipped on the parent during destruction, leaving a dangling pointer
    for some classful qdiscs like DRR.
    
    There are two ways for the bug happen:
    
    - If the duplicated packet is dropped by rootq->enqueue() and then
      the original packet is also dropped.
    - If rootq->enqueue() sends the duplicated packet to a different qdisc
      and the original packet is dropped.
    
    In both cases NET_XMIT_SUCCESS is returned even though no packets
    are enqueued at the netem qdisc.
    
    The fix is to defer the enqueue of the duplicate packet until after
    the original packet has been guaranteed to return NET_XMIT_SUCCESS.
    
    Fixes: 5845f706388a ("net: netem: fix skb length BUG_ON in __skb_to_sgvec")
    Reported-by: Budimir Markovic <markovicbudimir@gmail.com>
    Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240819175753.5151-1-stephen@networkplumber.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: allow ipv6 fragments to arrive on different devices [+ + +]
Author: Tom Hughes <tom@compton.nu>
Date:   Tue Aug 6 12:40:52 2024 +0100

    netfilter: allow ipv6 fragments to arrive on different devices
    
    [ Upstream commit 3cd740b985963f874a1a094f1969e998b9d05554 ]
    
    Commit 264640fc2c5f4 ("ipv6: distinguish frag queues by device
    for multicast and link-local packets") modified the ipv6 fragment
    reassembly logic to distinguish frag queues by device for multicast
    and link-local packets but in fact only the main reassembly code
    limits the use of the device to those address types and the netfilter
    reassembly code uses the device for all packets.
    
    This means that if fragments of a packet arrive on different interfaces
    then netfilter will fail to reassemble them and the fragments will be
    expired without going any further through the filters.
    
    Fixes: 648700f76b03 ("inet: frags: use rhashtables for reassembly units")
    Signed-off-by: Tom Hughes <tom@compton.nu>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: flowtable: initialise extack before use [+ + +]
Author: Donald Hunter <donald.hunter@gmail.com>
Date:   Tue Aug 6 17:16:37 2024 +0100

    netfilter: flowtable: initialise extack before use
    
    [ Upstream commit e9767137308daf906496613fd879808a07f006a2 ]
    
    Fix missing initialisation of extack in flow offload.
    
    Fixes: c29f74e0df7a ("netfilter: nf_flow_table: hardware offload support")
    Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: flowtable: validate vlan header [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Aug 13 12:39:46 2024 +0200

    netfilter: flowtable: validate vlan header
    
    [ Upstream commit 6ea14ccb60c8ab829349979b22b58a941ec4a3ee ]
    
    Ensure there is sufficient room to access the protocol field of the
    VLAN header, validate it once before the flowtable lookup.
    
    =====================================================
    BUG: KMSAN: uninit-value in nf_flow_offload_inet_hook+0x45a/0x5f0 net/netfilter/nf_flow_table_inet.c:32
     nf_flow_offload_inet_hook+0x45a/0x5f0 net/netfilter/nf_flow_table_inet.c:32
     nf_hook_entry_hookfn include/linux/netfilter.h:154 [inline]
     nf_hook_slow+0xf4/0x400 net/netfilter/core.c:626
     nf_hook_ingress include/linux/netfilter_netdev.h:34 [inline]
     nf_ingress net/core/dev.c:5440 [inline]
    
    Fixes: 4cd91f7c290f ("netfilter: flowtable: add vlan support")
    Reported-by: syzbot+8407d9bb88cd4c6bf61a@syzkaller.appspotmail.com
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_queue: drop packets with cloned unconfirmed conntracks [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Wed Aug 7 21:28:41 2024 +0200

    netfilter: nf_queue: drop packets with cloned unconfirmed conntracks
    
    [ Upstream commit 7d8dc1c7be8d3509e8f5164dd5df64c8e34d7eeb ]
    
    Conntrack assumes an unconfirmed entry (not yet committed to global hash
    table) has a refcount of 1 and is not visible to other cores.
    
    With multicast forwarding this assumption breaks down because such
    skbs get cloned after being picked up, i.e.  ct->use refcount is > 1.
    
    Likewise, bridge netfilter will clone broad/mutlicast frames and
    all frames in case they need to be flood-forwarded during learning
    phase.
    
    For ip multicast forwarding or plain bridge flood-forward this will
    "work" because packets don't leave softirq and are implicitly
    serialized.
    
    With nfqueue this no longer holds true, the packets get queued
    and can be reinjected in arbitrary ways.
    
    Disable this feature, I see no other solution.
    
    After this patch, nfqueue cannot queue packets except the last
    multicast/broadcast packet.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    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>

netfilter: nf_tables: A better name for nft_obj_filter [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Oct 20 19:34:30 2023 +0200

    netfilter: nf_tables: A better name for nft_obj_filter
    
    [ Upstream commit ecf49cad807061d880bea27a5da8e0114ddc7690 ]
    
    Name it for what it is supposed to become, a real nft_obj_dump_ctx. No
    functional change intended.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Aug 9 15:07:32 2024 +0200

    netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests
    
    [ Upstream commit bd662c4218f9648e888bebde9468146965f3f8a0 ]
    
    Objects' dump callbacks are not concurrency-safe per-se with reset bit
    set. If two CPUs perform a reset at the same time, at least counter and
    quota objects suffer from value underrun.
    
    Prevent this by introducing dedicated locking callbacks for nfnetlink
    and the asynchronous dump handling to serialize access.
    
    Fixes: 43da04a593d8 ("netfilter: nf_tables: atomic dump and reset for stateful objects")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Audit log dump reset after the fact [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Aug 9 15:07:30 2024 +0200

    netfilter: nf_tables: Audit log dump reset after the fact
    
    [ Upstream commit e0b6648b0446e59522819c75ba1dcb09e68d3e94 ]
    
    In theory, dumpreset may fail and invalidate the preceeding log message.
    Fix this and use the occasion to prepare for object reset locking, which
    benefits from a few unrelated changes:
    
    * Add an early call to nfnetlink_unicast if not resetting which
      effectively skips the audit logging but also unindents it.
    * Extract the table's name from the netlink attribute (which is verified
      via earlier table lookup) to not rely upon validity of the looked up
      table pointer.
    * Do not use local variable family, it will vanish.
    
    Fixes: 8e6cf365e1d5 ("audit: log nftables configuration change events")
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Carry reset boolean in nft_obj_dump_ctx [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Oct 20 19:34:33 2023 +0200

    netfilter: nf_tables: Carry reset boolean in nft_obj_dump_ctx
    
    [ Upstream commit a552339063d37b3b1133d9dfc31f851edafb27bb ]
    
    Relieve the dump callback from having to inspect nlmsg_type upon each
    call, just do it once at start of the dump.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Carry s_idx in nft_obj_dump_ctx [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Oct 20 19:34:31 2023 +0200

    netfilter: nf_tables: Carry s_idx in nft_obj_dump_ctx
    
    [ Upstream commit 2eda95cfa2fc43bcb21a801dc1d16a0b7cc73860 ]
    
    Prep work for moving the context into struct netlink_callback scratch
    area.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Drop pointless memset in nf_tables_dump_obj [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Oct 20 19:34:28 2023 +0200

    netfilter: nf_tables: Drop pointless memset in nf_tables_dump_obj
    
    [ Upstream commit ff16111cc10c82ee065ffbd9fa8d6210394ff8c6 ]
    
    The code does not make use of cb->args fields past the first one, no
    need to zero them.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Introduce nf_tables_getobj_single [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Aug 9 15:07:31 2024 +0200

    netfilter: nf_tables: Introduce nf_tables_getobj_single
    
    [ Upstream commit 69fc3e9e90f1afc11f4015e6b75d18ab9acee348 ]
    
    Outsource the reply skb preparation for non-dump getrule requests into a
    distinct function. Prep work for object reset locking.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: nft_obj_filter fits into cb->ctx [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Oct 20 19:34:32 2023 +0200

    netfilter: nf_tables: nft_obj_filter fits into cb->ctx
    
    [ Upstream commit 5a893b9cdf6fa5758f43d323a1d7fa6d1bf489ff ]
    
    No need to allocate it if one may just use struct netlink_callback's
    scratch area for it.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_tables: Unconditionally allocate nft_obj_filter [+ + +]
Author: Phil Sutter <phil@nwl.cc>
Date:   Fri Oct 20 19:34:29 2023 +0200

    netfilter: nf_tables: Unconditionally allocate nft_obj_filter
    
    [ Upstream commit 4279cc60b354d2d2b970655a70a151cbfa1d958b ]
    
    Prep work for moving the filter into struct netlink_callback's scratch
    area.
    
    Signed-off-by: Phil Sutter <phil@nwl.cc>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_counter: Disable BH in nft_counter_offload_stats(). [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Tue Aug 20 09:54:30 2024 +0200

    netfilter: nft_counter: Disable BH in nft_counter_offload_stats().
    
    [ Upstream commit 1eacdd71b3436b54d5fc8218c4bb0187d92a6892 ]
    
    The sequence counter nft_counter_seq is a per-CPU counter. There is no
    lock associated with it. nft_counter_do_eval() is using the same counter
    and disables BH which suggest that it can be invoked from a softirq.
    This in turn means that nft_counter_offload_stats(), which disables only
    preemption, can be interrupted by nft_counter_do_eval() leading to two
    writer for one seqcount_t.
    This can lead to loosing stats or reading statistics while they are
    updated.
    
    Disable BH during stats update in nft_counter_offload_stats() to ensure
    one writer at a time.
    
    Fixes: b72920f6e4a9d ("netfilter: nftables: counter hardware offload support")
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Reviewed-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_counter: Synchronize nft_counter_reset() against reader. [+ + +]
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Tue Aug 20 09:54:31 2024 +0200

    netfilter: nft_counter: Synchronize nft_counter_reset() against reader.
    
    [ Upstream commit a0b39e2dc7017ac667b70bdeee5293e410fab2fb ]
    
    nft_counter_reset() resets the counter by subtracting the previously
    retrieved value from the counter. This is a write operation on the
    counter and as such it requires to be performed with a write sequence of
    nft_counter_seq to serialize against its possible reader.
    
    Update the packets/ bytes within write-sequence of nft_counter_seq.
    
    Fixes: d84701ecbcd6a ("netfilter: nft_counter: rework atomic dump and reset")
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netlink: hold nlk->cb_mutex longer in __netlink_dump_start() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Feb 22 10:50:13 2024 +0000

    netlink: hold nlk->cb_mutex longer in __netlink_dump_start()
    
    [ Upstream commit b5590270068c4324dac4a2b5a4a156e02e21339f ]
    
    __netlink_dump_start() releases nlk->cb_mutex right before
    calling netlink_dump() which grabs it again.
    
    This seems dangerous, even if KASAN did not bother yet.
    
    Add a @lock_taken parameter to netlink_dump() to let it
    grab the mutex if called from netlink_recvmsg() only.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Jiri Pirko <jiri@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
NFS: avoid infinite loop in pnfs_update_layout. [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Wed Feb 28 11:24:53 2024 +1100

    NFS: avoid infinite loop in pnfs_update_layout.
    
    [ Upstream commit 2fdbc20036acda9e5694db74a032d3c605323005 ]
    
    If pnfsd_update_layout() is called on a file for which recovery has
    failed it will enter a tight infinite loop.
    
    NFS_LAYOUT_INVALID_STID will be set, nfs4_select_rw_stateid() will
    return -EIO, and nfs4_schedule_stateid_recovery() will do nothing, so
    nfs4_client_recover_expired_lease() will not wait.  So the code will
    loop indefinitely.
    
    Break the loop by testing the validity of the open stateid at the top of
    the loop.
    
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nfsd: call nfsd_last_thread() before final nfsd_put() [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Mon Aug 26 11:07:00 2024 -0400

    nfsd: call nfsd_last_thread() before final nfsd_put()
    
    [ Upstream commit 2a501f55cd641eb4d3c16a2eab0d678693fac663 ]
    
    If write_ports_addfd or write_ports_addxprt fail, they call nfsd_put()
    without calling nfsd_last_thread().  This leaves nn->nfsd_serv pointing
    to a structure that has been freed.
    
    So remove 'static' from nfsd_last_thread() and call it when the
    nfsd_serv is about to be destroyed.
    
    Fixes: ec52361df99b ("SUNRPC: stop using ->sv_nrthreads as a refcount")
    Signed-off-by: NeilBrown <neilb@suse.de>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfsd: don't call locks_release_private() twice concurrently [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Mon Aug 26 11:07:02 2024 -0400

    nfsd: don't call locks_release_private() twice concurrently
    
    [ Upstream commit 05eda6e75773592760285e10ac86c56d683be17f ]
    
    It is possible for free_blocked_lock() to be called twice concurrently,
    once from nfsd4_lock() and once from nfsd4_release_lockowner() calling
    remove_blocked_locks().  This is why a kref was added.
    
    It is perfectly safe for locks_delete_block() and kref_put() to be
    called in parallel as they use locking or atomicity respectively as
    protection.  However locks_release_private() has no locking.  It is
    safe for it to be called twice sequentially, but not concurrently.
    
    This patch moves that call from free_blocked_lock() where it could race
    with itself, to free_nbl() where it cannot.  This will slightly delay
    the freeing of private info or release of the owner - but not by much.
    It is arguably more natural for this freeing to happen in free_nbl()
    where the structure itself is freed.
    
    This bug was found by code inspection - it has not been seen in practice.
    
    Fixes: 47446d74f170 ("nfsd4: add refcount for nfsd4_blocked_lock")
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfsd: drop the nfsd_put helper [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Mon Aug 26 11:07:01 2024 -0400

    nfsd: drop the nfsd_put helper
    
    [ Upstream commit 64e6304169f1e1f078e7f0798033f80a7fb0ea46 ]
    
    It's not safe to call nfsd_put once nfsd_last_thread has been called, as
    that function will zero out the nn->nfsd_serv pointer.
    
    Drop the nfsd_put helper altogether and open-code the svc_put in its
    callers instead. That allows us to not be reliant on the value of that
    pointer when handling an error.
    
    Fixes: 2a501f55cd64 ("nfsd: call nfsd_last_thread() before final nfsd_put()")
    Reported-by: Zhi Li <yieli@redhat.com>
    Cc: NeilBrown <neilb@suse.de>
    Signed-off-by: Jeffrey Layton <jlayton@redhat.com>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfsd: Fix a regression in nfsd_setattr() [+ + +]
Author: Trond Myklebust <trond.myklebust@hammerspace.com>
Date:   Mon Aug 26 11:07:03 2024 -0400

    nfsd: Fix a regression in nfsd_setattr()
    
    [ Upstream commit 6412e44c40aaf8f1d7320b2099c5bdd6cb9126ac ]
    
    Commit bb4d53d66e4b ("NFSD: use (un)lock_inode instead of
    fh_(un)lock for file operations") broke the NFSv3 pre/post op
    attributes behaviour when doing a SETATTR rpc call by stripping out
    the calls to fh_fill_pre_attrs() and fh_fill_post_attrs().
    
    Fixes: bb4d53d66e4b ("NFSD: use (un)lock_inode instead of fh_(un)lock for file operations")
    Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Reviewed-by: NeilBrown <neilb@suse.de>
    Message-ID: <20240216012451.22725-1-trondmy@kernel.org>
    [ cel: adjusted to apply to v6.1.y ]
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfsd: separate nfsd_last_thread() from nfsd_put() [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Mon Aug 26 11:06:58 2024 -0400

    nfsd: separate nfsd_last_thread() from nfsd_put()
    
    [ Upstream commit 9f28a971ee9fdf1bf8ce8c88b103f483be610277 ]
    
    Now that the last nfsd thread is stopped by an explicit act of calling
    svc_set_num_threads() with a count of zero, we only have a limited
    number of places that can happen, and don't need to call
    nfsd_last_thread() in nfsd_put()
    
    So separate that out and call it at the two places where the number of
    threads is set to zero.
    
    Move the clearing of ->nfsd_serv and the call to svc_xprt_destroy_all()
    into nfsd_last_thread(), as they are really part of the same action.
    
    nfsd_put() is now a thin wrapper around svc_put(), so make it a static
    inline.
    
    nfsd_put() cannot be called after nfsd_last_thread(), so in a couple of
    places we have to use svc_put() instead.
    
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

nfsd: Simplify code around svc_exit_thread() call in nfsd() [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Mon Aug 26 11:06:57 2024 -0400

    nfsd: Simplify code around svc_exit_thread() call in nfsd()
    
    [ Upstream commit 18e4cf915543257eae2925671934937163f5639b ]
    
    Previously a thread could exit asynchronously (due to a signal) so some
    care was needed to hold nfsd_mutex over the last svc_put() call.  Now a
    thread can only exit when svc_set_num_threads() is called, and this is
    always called under nfsd_mutex.  So no care is needed.
    
    Not only is the mutex held when a thread exits now, but the svc refcount
    is elevated, so the svc_put() in svc_exit_thread() will never be a final
    put, so the mutex isn't even needed at this point in the code.
    
    Signed-off-by: NeilBrown <neilb@suse.de>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
NFSD: simplify error paths in nfsd_svc() [+ + +]
Author: NeilBrown <neilb@suse.de>
Date:   Mon Aug 26 11:06:59 2024 -0400

    NFSD: simplify error paths in nfsd_svc()
    
    [ Upstream commit bf32075256e9dd9c6b736859e2c5813981339908 ]
    
    The error paths in nfsd_svc() are needlessly complex and can result in a
    final call to svc_put() without nfsd_last_thread() being called.  This
    results in the listening sockets not being closed properly.
    
    The per-netns setup provided by nfsd_startup_new() and removed by
    nfsd_shutdown_net() is needed precisely when there are running threads.
    So we don't need nfsd_up_before.  We don't need to know if it *was* up.
    We only need to know if any threads are left.  If none are, then we must
    call nfsd_shutdown_net().  But we don't need to do that explicitly as
    nfsd_last_thread() does that for us.
    
    So simply call nfsd_last_thread() before the last svc_put() if there are
    no running threads.  That will always do the right thing.
    
    Also discard:
     pr_info("nfsd: last server has exited, flushing export cache\n");
    It may not be true if an attempt to start the first server failed, and
    it isn't particularly helpful and it simply reports normal behaviour.
    
    Signed-off-by: NeilBrown <neilb@suse.de>
    Reviewed-by: Jeff Layton <jlayton@kernel.org>
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nilfs2: initialize "struct nilfs_binfo_dat"->bi_pad field [+ + +]
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Mon Mar 27 00:21:46 2023 +0900

    nilfs2: initialize "struct nilfs_binfo_dat"->bi_pad field
    
    [ Upstream commit 7397031622e05ca206e2d674ec199d6bb66fc9ba ]
    
    nilfs_btree_assign_p() and nilfs_direct_assign_p() are not initializing
    "struct nilfs_binfo_dat"->bi_pad field, causing uninit-value reports when
    being passed to CRC function.
    
    Link: https://lkml.kernel.org/r/20230326152146.15872-1-konishi.ryusuke@gmail.com
    Reported-by: syzbot <syzbot+048585f3f4227bb2b49b@syzkaller.appspotmail.com>
      Link: https://syzkaller.appspot.com/bug?extid=048585f3f4227bb2b49b
    Reported-by: Dipanjan Das <mail.dipanjan.das@gmail.com>
      Link: https://lkml.kernel.org/r/CANX2M5bVbzRi6zH3PTcNE_31TzerstOXUa9Bay4E6y6dX23_pg@mail.gmail.com
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Cc: Alexander Potapenko <glider@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

nilfs2: prevent WARNING in nilfs_dat_commit_end() [+ + +]
Author: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Date:   Fri Jan 27 22:22:02 2023 +0900

    nilfs2: prevent WARNING in nilfs_dat_commit_end()
    
    [ Upstream commit 602ce7b8e1343b19c0cf93a3dd1926838ac5a1cc ]
    
    If nilfs2 reads a corrupted disk image and its DAT metadata file contains
    invalid lifetime data for a virtual block number, a kernel warning can be
    generated by the WARN_ON check in nilfs_dat_commit_end() and can panic if
    the kernel is booted with panic_on_warn.
    
    This patch avoids the issue with a sanity check that treats it as an
    error.
    
    Since error return is not allowed in the execution phase of
    nilfs_dat_commit_end(), this inserts that sanity check in
    nilfs_dat_prepare_end(), which prepares for nilfs_dat_commit_end().
    
    As the error code, -EINVAL is returned to notify bmap layer of the
    metadata corruption.  When the bmap layer sees this code, it handles the
    abnormal situation and replaces the return code with -EIO as it should.
    
    Link: https://lkml.kernel.org/r/000000000000154d2c05e9ec7df6@google.com
    Link: https://lkml.kernel.org/r/20230127132202.6083-1-konishi.ryusuke@gmail.com
    Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: <syzbot+cbff7a52b6f99059e67f@syzkaller.appspotmail.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme: clear caller pointer on identify failure [+ + +]
Author: Keith Busch <kbusch@kernel.org>
Date:   Wed Mar 6 06:20:30 2024 -0800

    nvme: clear caller pointer on identify failure
    
    [ Upstream commit 7e80eb792bd7377a20f204943ac31c77d859be89 ]
    
    The memory allocated for the identification is freed on failure. Set
    it to NULL so the caller doesn't have a pointer to that freed address.
    
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmet-rdma: fix possible bad dereference when freeing rsps [+ + +]
Author: Sagi Grimberg <sagi@grimberg.me>
Date:   Wed May 8 10:53:06 2024 +0300

    nvmet-rdma: fix possible bad dereference when freeing rsps
    
    [ Upstream commit 73964c1d07c054376f1b32a62548571795159148 ]
    
    It is possible that the host connected and saw a cm established
    event and started sending nvme capsules on the qp, however the
    ctrl did not yet see an established event. This is why the
    rsp_wait_list exists (for async handling of these cmds, we move
    them to a pending list).
    
    Furthermore, it is possible that the ctrl cm times out, resulting
    in a connect-error cm event. in this case we hit a bad deref [1]
    because in nvmet_rdma_free_rsps we assume that all the responses
    are in the free list.
    
    We are freeing the cmds array anyways, so don't even bother to
    remove the rsp from the free_list. It is also guaranteed that we
    are not racing anything when we are releasing the queue so no
    other context accessing this array should be running.
    
    [1]:
    --
    Workqueue: nvmet-free-wq nvmet_rdma_free_queue_work [nvmet_rdma]
    [...]
    pc : nvmet_rdma_free_rsps+0x78/0xb8 [nvmet_rdma]
    lr : nvmet_rdma_free_queue_work+0x88/0x120 [nvmet_rdma]
     Call trace:
     nvmet_rdma_free_rsps+0x78/0xb8 [nvmet_rdma]
     nvmet_rdma_free_queue_work+0x88/0x120 [nvmet_rdma]
     process_one_work+0x1ec/0x4a0
     worker_thread+0x48/0x490
     kthread+0x158/0x160
     ret_from_fork+0x10/0x18
    --
    
    Signed-off-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmet-tcp: do not continue for invalid icreq [+ + +]
Author: Hannes Reinecke <hare@suse.de>
Date:   Fri Mar 8 08:11:05 2024 +0100

    nvmet-tcp: do not continue for invalid icreq
    
    [ Upstream commit 0889d13b9e1cbef49e802ae09f3b516911ad82a1 ]
    
    When the length check for an icreq sqe fails we should not
    continue processing but rather return immediately as all
    other contents of that sqe cannot be relied on.
    
    Signed-off-by: Hannes Reinecke <hare@suse.de>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmet-trace: avoid dereferencing pointer too early [+ + +]
Author: Daniel Wagner <dwagner@suse.de>
Date:   Mon Dec 18 16:30:51 2023 +0100

    nvmet-trace: avoid dereferencing pointer too early
    
    [ Upstream commit 0e716cec6fb11a14c220ee17c404b67962e902f7 ]
    
    The first command issued from the host to the target is the fabrics
    connect command. At this point, neither the target queue nor the
    controller have been allocated. But we already try to trace this command
    in nvmet_req_init.
    
    Reported by KASAN.
    
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    Signed-off-by: Daniel Wagner <dwagner@suse.de>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
octeontx2-af: Fix CPT AF register offset calculation [+ + +]
Author: Bharat Bhushan <bbhushan2@marvell.com>
Date:   Wed Aug 21 12:35:58 2024 +0530

    octeontx2-af: Fix CPT AF register offset calculation
    
    [ Upstream commit af688a99eb1fc7ef69774665d61e6be51cea627a ]
    
    Some CPT AF registers are per LF and others are global. Translation
    of PF/VF local LF slot number to actual LF slot number is required
    only for accessing perf LF registers. CPT AF global registers access
    do not require any LF slot number. Also, there is no reason CPT
    PF/VF to know actual lf's register offset.
    
    Without this fix microcode loading will fail, VFs cannot be created
    and hardware is not usable.
    
    Fixes: bc35e28af789 ("octeontx2-af: replace cpt slot with lf id on reg write")
    Signed-off-by: Bharat Bhushan <bbhushan2@marvell.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20240821070558.1020101-1-bbhushan2@marvell.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
openrisc: Call setup_memory() earlier in the init sequence [+ + +]
Author: Oreoluwa Babatunde <quic_obabatun@quicinc.com>
Date:   Fri Feb 9 16:29:30 2024 -0800

    openrisc: Call setup_memory() earlier in the init sequence
    
    [ Upstream commit 7b432bf376c9c198a7ff48f1ed14a14c0ffbe1fe ]
    
    The unflatten_and_copy_device_tree() function contains a call to
    memblock_alloc(). This means that memblock is allocating memory before
    any of the reserved memory regions are set aside in the setup_memory()
    function which calls early_init_fdt_scan_reserved_mem(). Therefore,
    there is a possibility for memblock to allocate from any of the
    reserved memory regions.
    
    Hence, move the call to setup_memory() to be earlier in the init
    sequence so that the reserved memory regions are set aside before any
    allocations are done using memblock.
    
    Signed-off-by: Oreoluwa Babatunde <quic_obabatun@quicinc.com>
    Signed-off-by: Stafford Horne <shorne@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
parisc: Use irq_enter_rcu() to fix warning at kernel/context_tracking.c:367 [+ + +]
Author: Helge Deller <deller@gmx.de>
Date:   Tue Nov 28 23:16:00 2023 +0100

    parisc: Use irq_enter_rcu() to fix warning at kernel/context_tracking.c:367
    
    [ Upstream commit 73cb4a2d8d7e0259f94046116727084f21e4599f ]
    
    Use irq*_rcu() functions to fix this kernel warning:
    
     WARNING: CPU: 0 PID: 0 at kernel/context_tracking.c:367 ct_irq_enter+0xa0/0xd0
     Modules linked in:
     CPU: 0 PID: 0 Comm: swapper/0 Not tainted 6.7.0-rc3-64bit+ #1037
     Hardware name: 9000/785/C3700
    
     IASQ: 0000000000000000 0000000000000000 IAOQ: 00000000412cd758 00000000412cd75c
      IIR: 03ffe01f    ISR: 0000000000000000  IOR: 0000000043c20c20
      CPU:        0   CR30: 0000000041caa000 CR31: 0000000000000000
      ORIG_R28: 0000000000000005
      IAOQ[0]: ct_irq_enter+0xa0/0xd0
      IAOQ[1]: ct_irq_enter+0xa4/0xd0
      RP(r2): irq_enter+0x34/0x68
     Backtrace:
      [<000000004034a3ec>] irq_enter+0x34/0x68
      [<000000004030dc48>] do_cpu_irq_mask+0xc0/0x450
      [<0000000040303070>] intr_return+0x0/0xc
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pid: Replace struct pid 1-element array with flex-array [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Fri Jun 30 09:46:17 2023 +0200

    pid: Replace struct pid 1-element array with flex-array
    
    [ Upstream commit b69f0aeb068980af983d399deafc7477cec8bc04 ]
    
    For pid namespaces, struct pid uses a dynamically sized array member,
    "numbers".  This was implemented using the ancient 1-element fake
    flexible array, which has been deprecated for decades.
    
    Replace it with a C99 flexible array, refactor the array size
    calculations to use struct_size(), and address elements via indexes.
    Note that the static initializer (which defines a single element) works
    as-is, and requires no special handling.
    
    Without this, CONFIG_UBSAN_BOUNDS (and potentially
    CONFIG_FORTIFY_SOURCE) will trigger bounds checks:
    
      https://lore.kernel.org/lkml/20230517-bushaltestelle-super-e223978c1ba6@brauner
    
    Cc: Christian Brauner <brauner@kernel.org>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Jeff Xu <jeffxu@google.com>
    Cc: Andreas Gruenbacher <agruenba@redhat.com>
    Cc: Daniel Verkamp <dverkamp@chromium.org>
    Cc: "Paul E. McKenney" <paulmck@kernel.org>
    Cc: Jeff Xu <jeffxu@google.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Boqun Feng <boqun.feng@gmail.com>
    Cc: Luis Chamberlain <mcgrof@kernel.org>
    Cc: Frederic Weisbecker <frederic@kernel.org>
    Reported-by: syzbot+ac3b41786a2d0565b6d5@syzkaller.appspotmail.com
    [brauner: dropped unrelated changes and remove 0 with NULL cast]
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/surface: aggregator: Fix warning when controller is destroyed in probe [+ + +]
Author: Maximilian Luz <luzmaximilian@gmail.com>
Date:   Sun Aug 11 14:46:44 2024 +0200

    platform/surface: aggregator: Fix warning when controller is destroyed in probe
    
    [ Upstream commit bc923d594db21bee0ead128eb4bb78f7e77467a4 ]
    
    There is a small window in ssam_serial_hub_probe() where the controller
    is initialized but has not been started yet. Specifically, between
    ssam_controller_init() and ssam_controller_start(). Any failure in this
    window, for example caused by a failure of serdev_device_open(),
    currently results in an incorrect warning being emitted.
    
    In particular, any failure in this window results in the controller
    being destroyed via ssam_controller_destroy(). This function checks the
    state of the controller and, in an attempt to validate that the
    controller has been cleanly shut down before we try and deallocate any
    resources, emits a warning if that state is not SSAM_CONTROLLER_STOPPED.
    
    However, since we have only just initialized the controller and have not
    yet started it, its state is SSAM_CONTROLLER_INITIALIZED. Note that this
    is the only point at which the controller has this state, as it will
    change after we start the controller with ssam_controller_start() and
    never revert back. Further, at this point no communication has taken
    place and the sender and receiver threads have not been started yet (and
    we may not even have an open serdev device either).
    
    Therefore, it is perfectly safe to call ssam_controller_destroy() with a
    state of SSAM_CONTROLLER_INITIALIZED. This, however, means that the
    warning currently being emitted is incorrect. Fix it by extending the
    check.
    
    Fixes: c167b9c7e3d6 ("platform/surface: Add Surface Aggregator subsystem")
    Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
    Link: https://lore.kernel.org/r/20240811124645.246016-1-luzmaximilian@gmail.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: lg-laptop: fix %s null argument warning [+ + +]
Author: Gergo Koteles <soyer@irl.hu>
Date:   Wed Apr 3 16:34:27 2024 +0200

    platform/x86: lg-laptop: fix %s null argument warning
    
    [ Upstream commit e71c8481692582c70cdfd0996c20cdcc71e425d3 ]
    
    W=1 warns about null argument to kprintf:
    warning: ‘%s’ directive argument is null [-Wformat-overflow=]
    pr_info("product: %s  year: %d\n", product, year);
    
    Use "unknown" instead of NULL.
    
    Signed-off-by: Gergo Koteles <soyer@irl.hu>
    Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
    Link: https://lore.kernel.org/r/33d40e976f08f82b9227d0ecae38c787fcc0c0b2.1712154684.git.soyer@irl.hu
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pmdomain: imx: wait SSAR when i.MX93 power domain on [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Wed Aug 14 20:47:40 2024 +0800

    pmdomain: imx: wait SSAR when i.MX93 power domain on
    
    commit 52dd070c62e4ae2b5e7411b920e3f7a64235ecfb upstream.
    
    With "quiet" set in bootargs, there is power domain failure:
    "imx93_power_domain 44462400.power-domain: pd_off timeout: name:
     44462400.power-domain, stat: 4"
    
    The current power on opertation takes ISO state as power on finished
    flag, but it is wrong. Before powering on operation really finishes,
    powering off comes and powering off will never finish because the last
    powering on still not finishes, so the following powering off actually
    not trigger hardware state machine to run. SSAR is the last step when
    powering on a domain, so need to wait SSAR done when powering on.
    
    Since EdgeLock Enclave(ELE) handshake is involved in the flow, enlarge
    the waiting time to 10ms for both on and off to avoid timeout.
    
    Cc: stable@vger.kernel.org
    Fixes: 0a0f7cc25d4a ("soc: imx: add i.MX93 SRC power domain driver")
    Reviewed-by: Jacky Bai <ping.bai@nxp.com>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Link: https://lore.kernel.org/r/20240814124740.2778952-1-peng.fan@oss.nxp.com
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
posix-timers: Ensure timer ID search-loop limit is valid [+ + +]
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu Jun 1 20:58:47 2023 +0200

    posix-timers: Ensure timer ID search-loop limit is valid
    
    [ Upstream commit 8ce8849dd1e78dadcee0ec9acbd259d239b7069f ]
    
    posix_timer_add() tries to allocate a posix timer ID by starting from the
    cached ID which was stored by the last successful allocation.
    
    This is done in a loop searching the ID space for a free slot one by
    one. The loop has to terminate when the search wrapped around to the
    starting point.
    
    But that's racy vs. establishing the starting point. That is read out
    lockless, which leads to the following problem:
    
    CPU0                               CPU1
    posix_timer_add()
      start = sig->posix_timer_id;
      lock(hash_lock);
      ...                              posix_timer_add()
      if (++sig->posix_timer_id < 0)
                                         start = sig->posix_timer_id;
         sig->posix_timer_id = 0;
    
    So CPU1 can observe a negative start value, i.e. -1, and the loop break
    never happens because the condition can never be true:
    
      if (sig->posix_timer_id == start)
         break;
    
    While this is unlikely to ever turn into an endless loop as the ID space is
    huge (INT_MAX), the racy read of the start value caught the attention of
    KCSAN and Dmitry unearthed that incorrectness.
    
    Rewrite it so that all id operations are under the hash lock.
    
    Reported-by: syzbot+5c54bd3eb218bb595aa9@syzkaller.appspotmail.com
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
    Link: https://lore.kernel.org/r/87bkhzdn6g.ffs@tglx
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/boot: Handle allocation failure in simple_realloc() [+ + +]
Author: Li zeming <zeming@nfschina.com>
Date:   Mon Dec 19 10:18:16 2022 +0800

    powerpc/boot: Handle allocation failure in simple_realloc()
    
    [ Upstream commit 69b0194ccec033c208b071e019032c1919c2822d ]
    
    simple_malloc() will return NULL when there is not enough memory left.
    Check pointer 'new' before using it to copy the old data.
    
    Signed-off-by: Li zeming <zeming@nfschina.com>
    [mpe: Reword subject, use change log from Christophe]
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20221219021816.3012-1-zeming@nfschina.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

powerpc/boot: Only free if realloc() succeeds [+ + +]
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Thu Feb 29 22:51:49 2024 +1100

    powerpc/boot: Only free if realloc() succeeds
    
    [ Upstream commit f2d5bccaca3e8c09c9b9c8485375f7bdbb2631d2 ]
    
    simple_realloc() frees the original buffer (ptr) even if the
    reallocation failed.
    
    Fix it to behave like standard realloc() and only free the original
    buffer if the reallocation succeeded.
    
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20240229115149.749264-1-mpe@ellerman.id.au
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
powerpc/xics: Check return value of kasprintf in icp_native_map_one_cpu [+ + +]
Author: Kunwu Chan <chentao@kylinos.cn>
Date:   Wed Nov 22 11:06:51 2023 +0800

    powerpc/xics: Check return value of kasprintf in icp_native_map_one_cpu
    
    [ Upstream commit 45b1ba7e5d1f6881050d558baf9bc74a2ae13930 ]
    
    kasprintf() returns a pointer to dynamically allocated memory
    which can be NULL upon failure. Ensure the allocation was successful
    by checking the pointer validity.
    
    Signed-off-by: Kunwu Chan <chentao@kylinos.cn>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20231122030651.3818-1-chentao@kylinos.cn
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pppoe: Fix memory leak in pppoe_sendmsg() [+ + +]
Author: Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
Date:   Wed Feb 14 09:01:50 2024 +0000

    pppoe: Fix memory leak in pppoe_sendmsg()
    
    [ Upstream commit dc34ebd5c018b0edf47f39d11083ad8312733034 ]
    
    syzbot reports a memory leak in pppoe_sendmsg [1].
    
    The problem is in the pppoe_recvmsg() function that handles errors
    in the wrong order. For the skb_recv_datagram() function, check
    the pointer to skb for NULL first, and then check the 'error' variable,
    because the skb_recv_datagram() function can set 'error'
    to -EAGAIN in a loop but return a correct pointer to socket buffer
    after a number of attempts, though 'error' remains set to -EAGAIN.
    
    skb_recv_datagram
          __skb_recv_datagram          // Loop. if (err == -EAGAIN) then
                                       // go to the next loop iteration
              __skb_try_recv_datagram  // if (skb != NULL) then return 'skb'
                                       // else if a signal is received then
                                       // return -EAGAIN
    
    Found by InfoTeCS on behalf of Linux Verification Center
    (linuxtesting.org) with Syzkaller.
    
    Link: https://syzkaller.appspot.com/bug?extid=6bdfd184eac7709e5cc9 [1]
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: syzbot+6bdfd184eac7709e5cc9@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=6bdfd184eac7709e5cc9
    Signed-off-by: Gavrilov Ilia <Ilia.Gavrilov@infotecs.ru>
    Reviewed-by: Guillaume Nault <gnault@redhat.com>
    Link: https://lore.kernel.org/r/20240214085814.3894917-1-Ilia.Gavrilov@infotecs.ru
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
quota: Detect loops in quota tree [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Wed Feb 7 19:12:15 2024 +0100

    quota: Detect loops in quota tree
    
    [ Upstream commit a898cb621ac589b0b9e959309689a027e765aa12 ]
    
    Syzbot has found that when it creates corrupted quota files where the
    quota tree contains a loop, we will deadlock when tryling to insert a
    dquot. Add loop detection into functions traversing the quota tree.
    
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

quota: Remove BUG_ON from dqget() [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Fri Oct 20 13:34:08 2023 +0200

    quota: Remove BUG_ON from dqget()
    
    [ Upstream commit 249f374eb9b6b969c64212dd860cc1439674c4a8 ]
    
    dqget() checks whether dquot->dq_sb is set when returning it using
    BUG_ON. Firstly this doesn't work as an invalidation check for quite
    some time (we release dquot with dq_sb set these days), secondly using
    BUG_ON is quite harsh. Use WARN_ON_ONCE and check whether dquot is still
    hashed instead.
    
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rcu: Dump memory object info if callback function is invalid [+ + +]
Author: Zhen Lei <thunder.leizhen@huawei.com>
Date:   Sat Aug 5 11:17:26 2023 +0800

    rcu: Dump memory object info if callback function is invalid
    
    [ Upstream commit 2cbc482d325ee58001472c4359b311958c4efdd1 ]
    
    When a structure containing an RCU callback rhp is (incorrectly) freed
    and reallocated after rhp is passed to call_rcu(), it is not unusual for
    rhp->func to be set to NULL. This defeats the debugging prints used by
    __call_rcu_common() in kernels built with CONFIG_DEBUG_OBJECTS_RCU_HEAD=y,
    which expect to identify the offending code using the identity of this
    function.
    
    And in kernels build without CONFIG_DEBUG_OBJECTS_RCU_HEAD=y, things
    are even worse, as can be seen from this splat:
    
    Unable to handle kernel NULL pointer dereference at virtual address 0
    ... ...
    PC is at 0x0
    LR is at rcu_do_batch+0x1c0/0x3b8
    ... ...
     (rcu_do_batch) from (rcu_core+0x1d4/0x284)
     (rcu_core) from (__do_softirq+0x24c/0x344)
     (__do_softirq) from (__irq_exit_rcu+0x64/0x108)
     (__irq_exit_rcu) from (irq_exit+0x8/0x10)
     (irq_exit) from (__handle_domain_irq+0x74/0x9c)
     (__handle_domain_irq) from (gic_handle_irq+0x8c/0x98)
     (gic_handle_irq) from (__irq_svc+0x5c/0x94)
     (__irq_svc) from (arch_cpu_idle+0x20/0x3c)
     (arch_cpu_idle) from (default_idle_call+0x4c/0x78)
     (default_idle_call) from (do_idle+0xf8/0x150)
     (do_idle) from (cpu_startup_entry+0x18/0x20)
     (cpu_startup_entry) from (0xc01530)
    
    This commit therefore adds calls to mem_dump_obj(rhp) to output some
    information, for example:
    
      slab kmalloc-256 start ffff410c45019900 pointer offset 0 size 256
    
    This provides the rough size of the memory block and the offset of the
    rcu_head structure, which as least provides at least a few clues to help
    locate the problem. If the problem is reproducible, additional slab
    debugging can be enabled, for example, CONFIG_DEBUG_SLAB=y, which can
    provide significantly more information.
    
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rcu: Eliminate rcu_gp_slow_unregister() false positive [+ + +]
Author: Paul E. McKenney <paulmck@kernel.org>
Date:   Fri Aug 18 08:53:58 2023 -0700

    rcu: Eliminate rcu_gp_slow_unregister() false positive
    
    [ Upstream commit 0ae9942f03d0d034fdb0a4f44fc99f62a3107987 ]
    
    When using rcutorture as a module, there are a number of conditions that
    can abort the modprobe operation, for example, when attempting to run
    both RCU CPU stall warning tests and forward-progress tests.  This can
    cause rcu_torture_cleanup() to be invoked on the unwind path out of
    rcu_rcu_torture_init(), which will mean that rcu_gp_slow_unregister()
    is invoked without a matching rcu_gp_slow_register().  This will cause
    a splat because rcu_gp_slow_unregister() is passed rcu_fwd_cb_nodelay,
    which does not match a NULL pointer.
    
    This commit therefore forgives a mismatch involving a NULL pointer, thus
    avoiding this false-positive splat.
    
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RDMA/rtrs: Fix the problem of variable not initialized fully [+ + +]
Author: Zhu Yanjun <yanjun.zhu@linux.dev>
Date:   Tue Sep 19 10:08:06 2023 +0800

    RDMA/rtrs: Fix the problem of variable not initialized fully
    
    [ Upstream commit c5930a1aa08aafe6ffe15b5d28fe875f88f6ac86 ]
    
    No functionality change. The variable which is not initialized fully
    will introduce potential risks.
    
    Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
    Link: https://lore.kernel.org/r/20230919020806.534183-1-yanjun.zhu@intel.com
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
reiserfs: fix uninit-value in comp_keys [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Tue Dec 26 15:16:09 2023 +0800

    reiserfs: fix uninit-value in comp_keys
    
    [ Upstream commit dd8f87f21dc3da2eaf46e7401173f935b90b13a8 ]
    
    The cpu_key was not initialized in reiserfs_delete_solid_item(), which triggered
    this issue.
    
    Reported-and-tested-by:  <syzbot+b3b14fb9f8a14c5d0267@syzkaller.appspotmail.com>
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Link: https://lore.kernel.org/r/tencent_9EA7E746DE92DBC66049A62EDF6ED64CA706@qq.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "drm/amd/display: Validate hw_points_num before using it" [+ + +]
Author: Alex Hung <alex.hung@amd.com>
Date:   Wed Oct 11 13:18:38 2023 -0600

    Revert "drm/amd/display: Validate hw_points_num before using it"
    
    commit 8f4bdbc8e99db6ec9cb0520748e49a2f2d7d1727 upstream.
    
    This reverts commit 58c3b3341cea4f75dc8c003b89f8a6dd8ec55e50.
    
    [WHY & HOW]
    The writeback series cause a regression in thunderbolt display.
    
    Signed-off-by: Alex Hung <alex.hung@amd.com>
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "jfs: fix shift-out-of-bounds in dbJoin" [+ + +]
Author: Dave Kleikamp <dave.kleikamp@oracle.com>
Date:   Mon Jan 29 08:40:23 2024 -0600

    Revert "jfs: fix shift-out-of-bounds in dbJoin"
    
    commit e42e29cc442395d62f1a8963ec2dfb700ba6a5d7 upstream.
    
    This reverts commit cca974daeb6c43ea971f8ceff5a7080d7d49ee30.
    
    The added sanity check is incorrect. BUDMIN is not the wrong value and
    is too small.
    
    Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "s390/dasd: Establish DMA alignment" [+ + +]
Author: Jan Höppner <hoeppner@linux.ibm.com>
Date:   Tue Aug 20 16:13:07 2024 +0200

    Revert "s390/dasd: Establish DMA alignment"
    
    This reverts commit bc792884b76f ("s390/dasd: Establish DMA alignment").
    
    Quoting the original commit:
        linux-next commit bf8d08532bc1 ("iomap: add support for dma aligned
        direct-io") changes the alignment requirement to come from the block
        device rather than the block size, and the default alignment
        requirement is 512-byte boundaries. Since DASD I/O has page
        alignments for IDAW/TIDAW requests, let's override this value to
        restore the expected behavior.
    
    I mentioned TIDAW, but that was wrong. TIDAWs have no distinct alignment
    requirement (per p. 15-70 of POPS SA22-7832-13):
    
       Unless otherwise specified, TIDAWs may designate
       a block of main storage on any boundary and length
       up to 4K bytes, provided the specified block does not
       cross a 4 K-byte boundary.
    
    IDAWs do, but the original commit neglected that while ECKD DASD are
    typically formatted in 4096-byte blocks, they don't HAVE to be. Formatting
    an ECKD volume with smaller blocks is permitted (dasdfmt -b xxx), and the
    problematic commit enforces alignment properties to such a device that
    will result in errors, such as:
    
       [test@host ~]# lsdasd -l a367 | grep blksz
         blksz:                             512
       [test@host ~]# mkfs.xfs -f /dev/disk/by-path/ccw-0.0.a367-part1
       meta-data=/dev/dasdc1            isize=512    agcount=4, agsize=230075 blks
                =                       sectsz=512   attr=2, projid32bit=1
                =                       crc=1        finobt=1, sparse=1, rmapbt=1
                =                       reflink=1    bigtime=1 inobtcount=1 nrext64=1
       data     =                       bsize=4096   blocks=920299, imaxpct=25
                =                       sunit=0      swidth=0 blks
       naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
       log      =internal log           bsize=4096   blocks=16384, version=2
                =                       sectsz=512   sunit=0 blks, lazy-count=1
       realtime =none                   extsz=4096   blocks=0, rtextents=0
       error reading existing superblock: Invalid argument
       mkfs.xfs: pwrite failed: Invalid argument
       libxfs_bwrite: write failed on (unknown) bno 0x70565c/0x100, err=22
       mkfs.xfs: Releasing dirty buffer to free list!
       found dirty buffer (bulk) on free list!
       mkfs.xfs: pwrite failed: Invalid argument
       ...snipped...
    
    The original commit omitted the FBA discipline for just this reason,
    but the formatted block size of the other disciplines was overlooked.
    The solution to all of this is to revert to the original behavior,
    such that the block size can be respected.
    
    But what of the original problem? That was manifested with a direct-io
    QEMU guest, where QEMU itself was changed a month or two later with
    commit 25474d90aa ("block: use the request length for iov alignment")
    such that the blamed kernel commit is unnecessary.
    
    Note: This is an adapted version of the original upstream commit
    2a07bb64d801 ("s390/dasd: Remove DMA alignment").
    
    Cc: stable@vger.kernel.org # 6.0+
    Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "usb: gadget: uvc: cleanup request when not in correct state" [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Oct 5 10:51:04 2023 +0200

    Revert "usb: gadget: uvc: cleanup request when not in correct state"
    
    commit dddc00f255415b826190cfbaa5d6dbc87cd9ded1 upstream.
    
    This reverts commit 52a39f2cf62bb5430ad1f54cd522dbfdab1d71ba.
    
    Based on review comments, it was applied too soon and needs more work.
    
    Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Link: https://lore.kernel.org/r/20231005081716.GA13853@pendragon.ideasonboard.com
    Cc: Michael Grzeschik <m.grzeschik@pengutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
riscv: change XIP's kernel_map.size to be size of the entire kernel [+ + +]
Author: Nam Cao <namcao@linutronix.de>
Date:   Wed May 8 21:19:17 2024 +0200

    riscv: change XIP's kernel_map.size to be size of the entire kernel
    
    commit 57d76bc51fd80824bcc0c84a5b5ec944f1b51edd upstream.
    
    With XIP kernel, kernel_map.size is set to be only the size of data part of
    the kernel. This is inconsistent with "normal" kernel, who sets it to be
    the size of the entire kernel.
    
    More importantly, XIP kernel fails to boot if CONFIG_DEBUG_VIRTUAL is
    enabled, because there are checks on virtual addresses with the assumption
    that kernel_map.size is the size of the entire kernel (these checks are in
    arch/riscv/mm/physaddr.c).
    
    Change XIP's kernel_map.size to be the size of the entire kernel.
    
    Signed-off-by: Nam Cao <namcao@linutronix.de>
    Cc: <stable@vger.kernel.org> # v6.1+
    Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/20240508191917.2892064-1-namcao@linutronix.de
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rtc: nct3018y: fix possible NULL dereference [+ + +]
Author: Alexandre Belloni <alexandre.belloni@bootlin.com>
Date:   Thu Feb 29 23:21:27 2024 +0100

    rtc: nct3018y: fix possible NULL dereference
    
    [ Upstream commit babfeb9cbe7ebc657bd5b3e4f9fde79f560b6acc ]
    
    alarm_enable and alarm_flag are allowed to be NULL but will be dereferenced
    later by the dev_dbg call.
    
    Reported-by: kernel test robot <lkp@intel.com>
    Reported-by: Dan Carpenter <error27@gmail.com>
    Closes: https://lore.kernel.org/r/202305180042.DEzW1pSd-lkp@intel.com/
    Link: https://lore.kernel.org/r/20240229222127.1878176-1-alexandre.belloni@bootlin.com
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rtla/osnoise: Prevent NULL dereference in error handling [+ + +]
Author: Dan Carpenter <dan.carpenter@linaro.org>
Date:   Fri Aug 9 15:34:30 2024 +0300

    rtla/osnoise: Prevent NULL dereference in error handling
    
    commit 90574d2a675947858b47008df8d07f75ea50d0d0 upstream.
    
    If the "tool->data" allocation fails then there is no need to call
    osnoise_free_top() and, in fact, doing so will lead to a NULL dereference.
    
    Cc: stable@vger.kernel.org
    Cc: John Kacur <jkacur@redhat.com>
    Cc: "Luis Claudio R. Goncalves" <lgoncalv@redhat.com>
    Cc: Clark Williams <williams@redhat.com>
    Fixes: 1eceb2fc2ca5 ("rtla/osnoise: Add osnoise top mode")
    Link: https://lore.kernel.org/f964ed1f-64d2-4fde-ad3e-708331f8f358@stanley.mountain
    Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rust: fix the default format for CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sat Jul 27 23:03:00 2024 +0900

    rust: fix the default format for CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT
    
    [ Upstream commit aacf93e87f0d808ef46e621aa56caea336b4433c ]
    
    Another oddity in these config entries is their default value can fall
    back to 'n', which is a value for bool or tristate symbols.
    
    The '|| echo n' is an incorrect workaround to avoid the syntax error.
    This is not a big deal, as the entry is hidden by 'depends on RUST' in
    situations where '$(RUSTC) --version' or '$(BINDGEN) --version' fails.
    Anyway, it looks odd.
    
    The default of a string type symbol should be a double-quoted string
    literal. Turn it into an empty string when the version command fails.
    
    Fixes: 2f7ab1267dc9 ("Kbuild: add Rust support")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Link: https://lore.kernel.org/r/20240727140302.1806011-2-masahiroy@kernel.org
    [ Rebased on top of v6.11-rc1. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rust: suppress error messages from CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT [+ + +]
Author: Masahiro Yamada <masahiroy@kernel.org>
Date:   Sat Jul 27 23:02:59 2024 +0900

    rust: suppress error messages from CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT
    
    [ Upstream commit 5ce86c6c861352c9346ebb5c96ed70cb67414aa3 ]
    
    While this is a somewhat unusual case, I encountered odd error messages
    when I ran Kconfig in a foreign architecture chroot.
    
      $ make allmodconfig
      sh: 1: rustc: not found
      sh: 1: bindgen: not found
      #
      # configuration written to .config
      #
    
    The successful execution of 'command -v rustc' does not necessarily mean
    that 'rustc --version' will succeed.
    
      $ sh -c 'command -v rustc'
      /home/masahiro/.cargo/bin/rustc
      $ sh -c 'rustc --version'
      sh: 1: rustc: not found
    
    Here, 'rustc' is built for x86, and I ran it in an arm64 system.
    
    The current code:
    
      command -v $(RUSTC) >/dev/null 2>&1 && $(RUSTC) --version || echo n
    
    can be turned into:
    
      command -v $(RUSTC) >/dev/null 2>&1 && $(RUSTC) --version 2>/dev/null || echo n
    
    However, I did not understand the necessity of 'command -v $(RUSTC)'.
    
    I simplified it to:
    
      $(RUSTC) --version 2>/dev/null || echo n
    
    Fixes: 2f7ab1267dc9 ("Kbuild: add Rust support")
    Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
    Link: https://lore.kernel.org/r/20240727140302.1806011-1-masahiroy@kernel.org
    [ Rebased on top of v6.11-rc1. - Miguel ]
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

rust: work around `bindgen` 0.69.0 issue [+ + +]
Author: Miguel Ojeda <ojeda@kernel.org>
Date:   Tue Jul 9 18:06:03 2024 +0200

    rust: work around `bindgen` 0.69.0 issue
    
    [ Upstream commit 9e98db17837093cb0f4dcfcc3524739d93249c45 ]
    
    `bindgen` 0.69.0 contains a bug: `--version` does not work without
    providing a header [1]:
    
        error: the following required arguments were not provided:
          <HEADER>
    
        Usage: bindgen <FLAGS> <OPTIONS> <HEADER> -- <CLANG_ARGS>...
    
    Thus, in preparation for supporting several `bindgen` versions, work
    around the issue by passing a dummy argument.
    
    Include a comment so that we can remove the workaround in the future.
    
    Link: https://github.com/rust-lang/rust-bindgen/pull/2678 [1]
    Reviewed-by: Finn Behrens <me@kloenk.dev>
    Tested-by: Benno Lossin <benno.lossin@proton.me>
    Tested-by: Andreas Hindborg <a.hindborg@samsung.com>
    Link: https://lore.kernel.org/r/20240709160615.998336-9-ojeda@kernel.org
    Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
    Stable-dep-of: 5ce86c6c8613 ("rust: suppress error messages from CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/cio: rename bitmap_size() -> idset_bitmap_size() [+ + +]
Author: Alexander Lobakin <aleksander.lobakin@intel.com>
Date:   Wed Mar 27 16:23:45 2024 +0100

    s390/cio: rename bitmap_size() -> idset_bitmap_size()
    
    commit c1023f5634b9bfcbfff0dc200245309e3cde9b54 upstream.
    
    bitmap_size() is a pretty generic name and one may want to use it for
    a generic bitmap API function. At the same time, its logic is not
    "generic", i.e. it's not just `nbits -> size of bitmap in bytes`
    converter as it would be expected from its name.
    Add the prefix 'idset_' used throughout the file where the function
    resides.
    
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Acked-by: Peter Oberparleiter <oberpar@linux.ibm.com>
    Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/dasd: fix error recovery leading to data corruption on ESE devices [+ + +]
Author: Stefan Haberland <sth@linux.ibm.com>
Date:   Mon Aug 12 14:57:33 2024 +0200

    s390/dasd: fix error recovery leading to data corruption on ESE devices
    
    commit 7db4042336580dfd75cb5faa82c12cd51098c90b upstream.
    
    Extent Space Efficient (ESE) or thin provisioned volumes need to be
    formatted on demand during usual IO processing.
    
    The dasd_ese_needs_format function checks for error codes that signal
    the non existence of a proper track format.
    
    The check for incorrect length is to imprecise since other error cases
    leading to transport of insufficient data also have this flag set.
    This might lead to data corruption in certain error cases for example
    during a storage server warmstart.
    
    Fix by removing the check for incorrect length and replacing by
    explicitly checking for invalid track format in transport mode.
    
    Also remove the check for file protected since this is not a valid
    ESE handling case.
    
    Cc: stable@vger.kernel.org # 5.3+
    Fixes: 5e2b17e712cf ("s390/dasd: Add dynamic formatting support for ESE volumes")
    Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
    Signed-off-by: Stefan Haberland <sth@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240812125733.126431-3-sth@linux.ibm.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/iucv: fix receive buffer virtual vs physical address confusion [+ + +]
Author: Alexander Gordeev <agordeev@linux.ibm.com>
Date:   Fri Feb 16 13:13:26 2024 +0100

    s390/iucv: fix receive buffer virtual vs physical address confusion
    
    [ Upstream commit 4e8477aeb46dfe74e829c06ea588dd00ba20c8cc ]
    
    Fix IUCV_IPBUFLST-type buffers virtual vs physical address confusion.
    This does not fix a bug since virtual and physical address spaces are
    currently the same.
    
    Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/smp,mcck: fix early IPI handling [+ + +]
Author: Heiko Carstens <hca@linux.ibm.com>
Date:   Tue Sep 5 15:49:37 2023 +0200

    s390/smp,mcck: fix early IPI handling
    
    [ Upstream commit 4a1725281fc5b0009944b1c0e1d2c1dc311a09ec ]
    
    Both the external call as well as the emergency signal submask bits in
    control register 0 are set before any interrupt handler is registered.
    
    Change the order and first register the interrupt handler and only then
    enable the interrupts by setting the corresponding bits in control
    register 0.
    
    This prevents that the second part of the machine check handler for
    early machine check handling is not executed: the machine check handler
    sends an IPI to the CPU it runs on. If the corresponding interrupts are
    enabled, but no interrupt handler is present, the interrupt is ignored.
    
    Reviewed-by: Sven Schnelle <svens@linux.ibm.com>
    Acked-by: Alexander Gordeev <agordeev@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
s390/uv: Panic for set and remove shared access UVC errors [+ + +]
Author: Claudio Imbrenda <imbrenda@linux.ibm.com>
Date:   Thu Aug 1 13:25:48 2024 +0200

    s390/uv: Panic for set and remove shared access UVC errors
    
    [ Upstream commit cff59d8631e1409ffdd22d9d717e15810181b32c ]
    
    The return value uv_set_shared() and uv_remove_shared() (which are
    wrappers around the share() function) is not always checked. The system
    integrity of a protected guest depends on the Share and Unshare UVCs
    being successful. This means that any caller that fails to check the
    return value will compromise the security of the protected guest.
    
    No code path that would lead to such violation of the security
    guarantees is currently exercised, since all the areas that are shared
    never get unshared during the lifetime of the system. This might
    change and become an issue in the future.
    
    The Share and Unshare UVCs can only fail in case of hypervisor
    misbehaviour (either a bug or malicious behaviour). In such cases there
    is no reasonable way forward, and the system needs to panic.
    
    This patch replaces the return at the end of the share() function with
    a panic, to guarantee system integrity.
    
    Fixes: 5abb9351dfd9 ("s390/uv: introduce guest side ultravisor code")
    Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
    Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
    Reviewed-by: Janosch Frank <frankja@linux.ibm.com>
    Link: https://lore.kernel.org/r/20240801112548.85303-1-imbrenda@linux.ibm.com
    Message-ID: <20240801112548.85303-1-imbrenda@linux.ibm.com>
    [frankja@linux.ibm.com: Fixed up patch subject]
    Signed-off-by: Janosch Frank <frankja@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
scsi: core: Fix the return value of scsi_logical_block_count() [+ + +]
Author: Chaotian Jing <chaotian.jing@mediatek.com>
Date:   Tue Aug 13 13:34:10 2024 +0800

    scsi: core: Fix the return value of scsi_logical_block_count()
    
    commit f03e94f23b04c2b71c0044c1534921b3975ef10c upstream.
    
    scsi_logical_block_count() should return the block count of a given SCSI
    command. The original implementation ended up shifting twice, leading to an
    incorrect count being returned. Fix the conversion between bytes and
    logical blocks.
    
    Cc: stable@vger.kernel.org
    Fixes: 6a20e21ae1e2 ("scsi: core: Add helper to return number of logical blocks in a request")
    Signed-off-by: Chaotian Jing <chaotian.jing@mediatek.com>
    Link: https://lore.kernel.org/r/20240813053534.7720-1-chaotian.jing@mediatek.com
    Reviewed-by: Bart Van Assche <bvanassche@acm.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

scsi: lpfc: Initialize status local variable in lpfc_sli4_repost_sgl_list() [+ + +]
Author: Justin Tee <justin.tee@broadcom.com>
Date:   Wed Jan 31 10:50:56 2024 -0800

    scsi: lpfc: Initialize status local variable in lpfc_sli4_repost_sgl_list()
    
    [ Upstream commit 3d0f9342ae200aa1ddc4d6e7a573c6f8f068d994 ]
    
    A static code analyzer tool indicates that the local variable called status
    in the lpfc_sli4_repost_sgl_list() routine could be used to print garbage
    uninitialized values in the routine's log message.
    
    Fix by initializing to zero.
    
    Signed-off-by: Justin Tee <justin.tee@broadcom.com>
    Link: https://lore.kernel.org/r/20240131185112.149731-2-justintee8345@gmail.com
    Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: spi: Fix sshdr use [+ + +]
Author: Mike Christie <michael.christie@oracle.com>
Date:   Wed Oct 4 16:00:07 2023 -0500

    scsi: spi: Fix sshdr use
    
    [ Upstream commit 0b149cee836aa53989ea089af1cb9d90d7c6ac9e ]
    
    If scsi_execute_cmd returns < 0, it doesn't initialize the sshdr, so we
    shouldn't access the sshdr. If it returns 0, then the cmd executed
    successfully, so there is no need to check the sshdr. This has us access
    the sshdr when we get a return value > 0.
    
    Signed-off-by: Mike Christie <michael.christie@oracle.com>
    Link: https://lore.kernel.org/r/20231004210013.5601-7-michael.christie@oracle.com
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: John Garry <john.g.garry@oracle.com>
    Reviewed-by: Martin Wilck <mwilck@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests/net: synchronize udpgro tests' tx and rx connection [+ + +]
Author: Lucas Karpinski <lkarpins@redhat.com>
Date:   Tue Nov 14 10:11:31 2023 -0500

    selftests/net: synchronize udpgro tests' tx and rx connection
    
    [ Upstream commit 3bdd9fd29cb0f136b307559a19c107210ad5c314 ]
    
    The sockets used by udpgso_bench_tx aren't always ready when
    udpgso_bench_tx transmits packets. This issue is more prevalent in -rt
    kernels, but can occur in both. Replace the hacky sleep calls with a
    function that checks whether the ports in the namespace are ready for
    use.
    
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Lucas Karpinski <lkarpins@redhat.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 7167395a4be7 ("selftests: udpgro: report error when receive failed")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selftests: net: more strict check in net_helper [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Feb 12 11:19:23 2024 +0100

    selftests: net: more strict check in net_helper
    
    commit a71d0908e32f3dd41e355d83eeadd44d94811fd6 upstream.
    
    The helper waiting for a listener port can match any socket whose
    hexadecimal representation of source or destination addresses
    matches that of the given port.
    
    Additionally, any socket state is accepted.
    
    All the above can let the helper return successfully before the
    relevant listener is actually ready, with unexpected results.
    
    So far I could not find any related failure in the netdev CI, but
    the next patch is going to make the critical event more easily
    reproducible.
    
    Address the issue matching the port hex only vs the relevant socket
    field and additionally checking the socket state for TCP sockets.
    
    Fixes: 3bdd9fd29cb0 ("selftests/net: synchronize udpgro tests' tx and rx connection")
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Link: https://lore.kernel.org/r/192b3dbc443d953be32991d1b0ca432bd4c65008.1707731086.git.pabeni@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selftests: udpgro: report error when receive failed [+ + +]
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Thu Aug 15 15:59:50 2024 +0800

    selftests: udpgro: report error when receive failed
    
    [ Upstream commit 7167395a4be7930ecac6a33b4e54d7e3dd9ee209 ]
    
    Currently, we only check the latest senders's exit code. If the receiver
    report failed, it is not recoreded. Fix it by checking the exit code
    of all the involved processes.
    
    Before:
      bad GRO lookup       ok
      multiple GRO socks   ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520
    
     ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520
    
     failed
     $ echo $?
     0
    
    After:
      bad GRO lookup       ok
      multiple GRO socks   ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520
    
     ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520
    
     failed
     $ echo $?
     1
    
    Fixes: 3327a9c46352 ("selftests: add functionals test for UDP GRO")
    Suggested-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
selinux: fix potential counting error in avc_add_xperms_decision() [+ + +]
Author: Zhen Lei <thunder.leizhen@huawei.com>
Date:   Tue Aug 6 14:51:13 2024 +0800

    selinux: fix potential counting error in avc_add_xperms_decision()
    
    commit 379d9af3f3da2da1bbfa67baf1820c72a080d1f1 upstream.
    
    The count increases only when a node is successfully added to
    the linked list.
    
    Cc: stable@vger.kernel.org
    Fixes: fa1aa143ac4a ("selinux: extended permissions for ioctls")
    Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com>
    Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Squashfs: fix variable overflow triggered by sysbot [+ + +]
Author: Phillip Lougher <phillip@squashfs.org.uk>
Date:   Mon Nov 13 16:09:01 2023 +0000

    Squashfs: fix variable overflow triggered by sysbot
    
    [ Upstream commit 12427de9439d68b8e96ba6f50b601ef15f437612 ]
    
    Sysbot reports a slab out of bounds write in squashfs_readahead().
    
    This is ultimately caused by a file reporting an (infeasibly) large file
    size (1407374883553280 bytes) with the minimum block size of 4K.
    
    This causes variable overflow.
    
    Link: https://lkml.kernel.org/r/20231113160901.6444-1-phillip@squashfs.org.uk
    Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
    Reported-by: syzbot+604424eb051c2f696163@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/000000000000b1fda20609ede0d1@google.com/
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
squashfs: squashfs_read_data need to check if the length is 0 [+ + +]
Author: Lizhi Xu <lizhi.xu@windriver.com>
Date:   Thu Nov 16 11:13:52 2023 +0800

    squashfs: squashfs_read_data need to check if the length is 0
    
    [ Upstream commit eb66b8abae98f869c224f7c852b685ae02144564 ]
    
    When the length passed in is 0, the pagemap_scan_test_walk() caller should
    bail.  This error causes at least a WARN_ON().
    
    Link: https://lkml.kernel.org/r/20231116031352.40853-1-lizhi.xu@windriver.com
    Reported-by: syzbot+32d3767580a1ea339a81@syzkaller.appspotmail.com
    Closes: https://lkml.kernel.org/r/0000000000000526f2060a30a085@google.com
    Signed-off-by: Lizhi Xu <lizhi.xu@windriver.com>
    Reviewed-by: Phillip Lougher <phillip@squashfs.org.uk>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ssb: Fix division by zero issue in ssb_calc_clock_rate [+ + +]
Author: Rand Deeb <rand.sec96@gmail.com>
Date:   Tue Sep 5 02:23:46 2023 +0300

    ssb: Fix division by zero issue in ssb_calc_clock_rate
    
    [ Upstream commit e0b5127fa134fe0284d58877b6b3133939c8b3ce ]
    
    In ssb_calc_clock_rate(), there is a potential issue where the value of
    m1 could be zero due to initialization using clkfactor_f6_resolv(). This
    situation raised concerns about the possibility of a division by zero
    error.
    
    We fixed it by following the suggestions provided by Larry Finger
    <Larry.Finger@lwfinger.net> and Michael Büsch <m@bues.ch>. The fix
    involves returning a value of 1 instead of 0 in clkfactor_f6_resolv().
    This modification ensures the proper functioning of the code and
    eliminates the risk of division by zero errors.
    
    Signed-off-by: Rand Deeb <rand.sec96@gmail.com>
    Acked-by: Larry Finger <Larry.Finger@lwfinger.net>
    Acked-by: Michael Büsch <m@bues.ch>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20230904232346.34991-1-rand.sec96@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
staging: iio: resolver: ad2s1210: fix use before initialization [+ + +]
Author: David Lechner <dlechner@baylibre.com>
Date:   Fri Sep 29 12:23:07 2023 -0500

    staging: iio: resolver: ad2s1210: fix use before initialization
    
    [ Upstream commit 7fe2d05cee46b1c4d9f1efaeab08cc31a0dfff60 ]
    
    This fixes a use before initialization in ad2s1210_probe(). The
    ad2s1210_setup_gpios() function uses st->sdev but it was being called
    before this field was initialized.
    
    Signed-off-by: David Lechner <dlechner@baylibre.com>
    Link: https://lore.kernel.org/r/20230929-ad2s1210-mainline-v3-2-fa4364281745@baylibre.com
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

staging: ks7010: disable bh on tx_dev_lock [+ + +]
Author: Chengfeng Ye <dg573847474@gmail.com>
Date:   Tue Sep 26 16:13:23 2023 +0000

    staging: ks7010: disable bh on tx_dev_lock
    
    [ Upstream commit 058cbee52ccd7be77e373d31a4f14670cfd32018 ]
    
    As &priv->tx_dev.tx_dev_lock is also acquired by xmit callback which
    could be call from timer under softirq context, use spin_lock_bh()
    on it to prevent potential deadlock.
    
    hostif_sme_work()
    --> hostif_sme_set_pmksa()
    --> hostif_mib_set_request()
    --> ks_wlan_hw_tx()
    --> spin_lock(&priv->tx_dev.tx_dev_lock)
    
    ks_wlan_start_xmit()
    --> hostif_data_request()
    --> ks_wlan_hw_tx()
    --> spin_lock(&priv->tx_dev.tx_dev_lock)
    
    Signed-off-by: Chengfeng Ye <dg573847474@gmail.com>
    Link: https://lore.kernel.org/r/20230926161323.41928-1-dg573847474@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tc-testing: don't access non-existent variable on exception [+ + +]
Author: Simon Horman <horms@kernel.org>
Date:   Thu Aug 15 16:37:13 2024 +0100

    tc-testing: don't access non-existent variable on exception
    
    [ Upstream commit a0c9fe5eecc97680323ee83780ea3eaf440ba1b7 ]
    
    Since commit 255c1c7279ab ("tc-testing: Allow test cases to be skipped")
    the variable test_ordinal doesn't exist in call_pre_case().
    So it should not be accessed when an exception occurs.
    
    This resolves the following splat:
    
      ...
      During handling of the above exception, another exception occurred:
    
      Traceback (most recent call last):
        File ".../tdc.py", line 1028, in <module>
          main()
        File ".../tdc.py", line 1022, in main
          set_operation_mode(pm, parser, args, remaining)
        File ".../tdc.py", line 966, in set_operation_mode
          catresults = test_runner_serial(pm, args, alltests)
        File ".../tdc.py", line 642, in test_runner_serial
          (index, tsr) = test_runner(pm, args, alltests)
        File ".../tdc.py", line 536, in test_runner
          res = run_one_test(pm, args, index, tidx)
        File ".../tdc.py", line 419, in run_one_test
          pm.call_pre_case(tidx)
        File ".../tdc.py", line 146, in call_pre_case
          print('test_ordinal is {}'.format(test_ordinal))
      NameError: name 'test_ordinal' is not defined
    
    Fixes: 255c1c7279ab ("tc-testing: Allow test cases to be skipped")
    Signed-off-by: Simon Horman <horms@kernel.org>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/20240815-tdc-test-ordinal-v1-1-0255c122a427@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp/dccp: bypass empty buckets in inet_twsk_purge() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Mar 27 19:12:06 2024 +0000

    tcp/dccp: bypass empty buckets in inet_twsk_purge()
    
    [ Upstream commit 50e2907ef8bb52cf80ecde9eec5c4dac07177146 ]
    
    TCP ehash table is often sparsely populated.
    
    inet_twsk_purge() spends too much time calling cond_resched().
    
    This patch can reduce time spent in inet_twsk_purge() by 20x.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20240327191206.508114-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 565d121b6998 ("tcp: prevent concurrent execution of tcp_sk_exit_batch")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

tcp/dccp: do not care about families in inet_twsk_purge() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Mar 29 15:32:03 2024 +0000

    tcp/dccp: do not care about families in inet_twsk_purge()
    
    [ Upstream commit 1eeb5043573981f3a1278876515851b7f6b1df1b ]
    
    We lost ability to unload ipv6 module a long time ago.
    
    Instead of calling expensive inet_twsk_purge() twice,
    we can handle all families in one round.
    
    Also remove an extra line added in my prior patch,
    per Kuniyuki Iwashima feedback.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://lore.kernel.org/netdev/20240327192934.6843-1-kuniyu@amazon.com/
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Link: https://lore.kernel.org/r/20240329153203.345203-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 565d121b6998 ("tcp: prevent concurrent execution of tcp_sk_exit_batch")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tcp: do not export tcp_twsk_purge() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Apr 19 07:19:42 2024 +0000

    tcp: do not export tcp_twsk_purge()
    
    commit c51db4ac10d57c366f9a92121e3889bfc6c324cd upstream.
    
    After commit 1eeb50435739 ("tcp/dccp: do not care about
    families in inet_twsk_purge()") tcp_twsk_purge() is
    no longer potentially called from a module.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

tcp: prevent concurrent execution of tcp_sk_exit_batch [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Tue Aug 13 00:28:25 2024 +0200

    tcp: prevent concurrent execution of tcp_sk_exit_batch
    
    [ Upstream commit 565d121b69980637f040eb4d84289869cdaabedf ]
    
    Its possible that two threads call tcp_sk_exit_batch() concurrently,
    once from the cleanup_net workqueue, once from a task that failed to clone
    a new netns.  In the latter case, error unwinding calls the exit handlers
    in reverse order for the 'failed' netns.
    
    tcp_sk_exit_batch() calls tcp_twsk_purge().
    Problem is that since commit b099ce2602d8 ("net: Batch inet_twsk_purge"),
    this function picks up twsk in any dying netns, not just the one passed
    in via exit_batch list.
    
    This means that the error unwind of setup_net() can "steal" and destroy
    timewait sockets belonging to the exiting netns.
    
    This allows the netns exit worker to proceed to call
    
    WARN_ON_ONCE(!refcount_dec_and_test(&net->ipv4.tcp_death_row.tw_refcount));
    
    without the expected 1 -> 0 transition, which then splats.
    
    At same time, error unwind path that is also running inet_twsk_purge()
    will splat as well:
    
    WARNING: .. at lib/refcount.c:31 refcount_warn_saturate+0x1ed/0x210
    ...
     refcount_dec include/linux/refcount.h:351 [inline]
     inet_twsk_kill+0x758/0x9c0 net/ipv4/inet_timewait_sock.c:70
     inet_twsk_deschedule_put net/ipv4/inet_timewait_sock.c:221
     inet_twsk_purge+0x725/0x890 net/ipv4/inet_timewait_sock.c:304
     tcp_sk_exit_batch+0x1c/0x170 net/ipv4/tcp_ipv4.c:3522
     ops_exit_list+0x128/0x180 net/core/net_namespace.c:178
     setup_net+0x714/0xb40 net/core/net_namespace.c:375
     copy_net_ns+0x2f0/0x670 net/core/net_namespace.c:508
     create_new_namespaces+0x3ea/0xb10 kernel/nsproxy.c:110
    
    ... because refcount_dec() of tw_refcount unexpectedly dropped to 0.
    
    This doesn't seem like an actual bug (no tw sockets got lost and I don't
    see a use-after-free) but as erroneous trigger of debug check.
    
    Add a mutex to force strict ordering: the task that calls tcp_twsk_purge()
    blocks other task from doing final _dec_and_test before mutex-owner has
    removed all tw sockets of dying netns.
    
    Fixes: e9bd0cca09d1 ("tcp: Don't allocate tcp_death_row outside of struct netns_ipv4.")
    Reported-by: syzbot+8ea26396ff85d23a8929@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/0000000000003a5292061f5e4e19@google.com/
    Link: https://lore.kernel.org/netdev/20240812140104.GA21559@breakpoint.cc/
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@amazon.com>
    Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20240812222857.29837-1-fw@strlen.de
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
thunderbolt: Mark XDomain as unplugged when router is removed [+ + +]
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Thu Jun 13 15:05:03 2024 +0300

    thunderbolt: Mark XDomain as unplugged when router is removed
    
    commit e2006140ad2e01a02ed0aff49cc2ae3ceeb11f8d upstream.
    
    I noticed that when we do discrete host router NVM upgrade and it gets
    hot-removed from the PCIe side as a result of NVM firmware authentication,
    if there is another host connected with enabled paths we hang in tearing
    them down. This is due to fact that the Thunderbolt networking driver
    also tries to cleanup the paths and ends up blocking in
    tb_disconnect_xdomain_paths() waiting for the domain lock.
    
    However, at this point we already cleaned the paths in tb_stop() so
    there is really no need for tb_disconnect_xdomain_paths() to do that
    anymore. Furthermore it already checks if the XDomain is unplugged and
    bails out early so take advantage of that and mark the XDomain as
    unplugged when we remove the parent router.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tools: move alignment-related macros to new [+ + +]
Author: Alexander Lobakin <aleksander.lobakin@intel.com>
Date:   Wed Mar 27 16:23:48 2024 +0100

    tools: move alignment-related macros to new <linux/align.h>
    
    commit 10a04ff09bcc39e0044190ffe9f00f998f13647c upstream.
    
    Currently, tools have *ALIGN*() macros scattered across the unrelated
    headers, as there are only 3 of them and they were added separately
    each time on an as-needed basis.
    Anyway, let's make it more consistent with the kernel headers and allow
    using those macros outside of the mentioned headers. Create
    <linux/align.h> inside the tools/ folder and include it where needed.
    
    Signed-off-by: Yury Norov <yury.norov@gmail.com>
    Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tty: atmel_serial: use the correct RTS flag. [+ + +]
Author: Mathieu Othacehe <m.othacehe@gmail.com>
Date:   Thu Aug 8 08:06:37 2024 +0200

    tty: atmel_serial: use the correct RTS flag.
    
    commit c9f6613b16123989f2c3bd04b1d9b2365d6914e7 upstream.
    
    In RS485 mode, the RTS pin is driven high by hardware when the transmitter
    is operating. This behaviour cannot be changed. This means that the driver
    should claim that it supports SER_RS485_RTS_ON_SEND and not
    SER_RS485_RTS_AFTER_SEND.
    
    Otherwise, when configuring the port with the SER_RS485_RTS_ON_SEND, one
    get the following warning:
    
    kern.warning kernel: atmel_usart_serial atmel_usart_serial.2.auto:
    ttyS1 (1): invalid RTS setting, using RTS_AFTER_SEND instead
    
    which is contradictory with what's really happening.
    
    Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
    Cc: stable <stable@kernel.org>
    Tested-by: Alexander Dahl <ada@thorsis.com>
    Fixes: af47c491e3c7 ("serial: atmel: Fill in rs485_supported")
    Link: https://lore.kernel.org/r/20240808060637.19886-1-othacehe@gnu.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
udf: Fix bogus checksum computation in udf_rename() [+ + +]
Author: Jan Kara <jack@suse.cz>
Date:   Mon Jun 17 17:41:51 2024 +0200

    udf: Fix bogus checksum computation in udf_rename()
    
    [ Upstream commit 27ab33854873e6fb958cb074681a0107cc2ecc4c ]
    
    Syzbot reports uninitialized memory access in udf_rename() when updating
    checksum of '..' directory entry of a moved directory. This is indeed
    true as we pass on-stack diriter.fi to the udf_update_tag() and because
    that has only struct fileIdentDesc included in it and not the impUse or
    name fields, the checksumming function is going to checksum random stack
    contents beyond the end of the structure. This is actually harmless
    because the following udf_fiiter_write_fi() will recompute the checksum
    from on-disk buffers where everything is properly included. So all that
    is needed is just removing the bogus calculation.
    
    Fixes: e9109a92d2a9 ("udf: Convert udf_rename() to new directory iteration code")
    Link: https://lore.kernel.org/all/000000000000cf405f060d8f75a9@google.com/T/
    Link: https://patch.msgid.link/20240617154201.29512-1-jack@suse.cz
    Reported-by: syzbot+d31185aa54170f7fc1f5@syzkaller.appspotmail.com
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
udp: allow header check for dodgy GSO_UDP_L4 packets. [+ + +]
Author: Andrew Melnychenko <andrew@daynix.com>
Date:   Wed Dec 7 13:35:53 2022 +0200

    udp: allow header check for dodgy GSO_UDP_L4 packets.
    
    commit 1fd54773c26787b9aea80e2f62c7d0780ea444d0 upstream.
    
    Allow UDP_L4 for robust packets.
    
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Andrew Melnychenko <andrew@daynix.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

udp: fix receiving fraglist GSO packets [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Aug 19 17:06:21 2024 +0200

    udp: fix receiving fraglist GSO packets
    
    commit b128ed5ab27330deeeaf51ea8bb69f1442a96f7f upstream.
    
    When assembling fraglist GSO packets, udp4_gro_complete does not set
    skb->csum_start, which makes the extra validation in __udp_gso_segment fail.
    
    Fixes: 89add40066f9 ("net: drop bad gso csum_start and offset in virtio_net_hdr")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20240819150621.59833-1-nbd@nbd.name
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: dwc3: core: Skip setting event buffers for host only controllers [+ + +]
Author: Krishna Kurapati <quic_kriskura@quicinc.com>
Date:   Sat Apr 20 10:18:55 2024 +0530

    usb: dwc3: core: Skip setting event buffers for host only controllers
    
    [ Upstream commit 89d7f962994604a3e3d480832788d06179abefc5 ]
    
    On some SoC's like SA8295P where the tertiary controller is host-only
    capable, GEVTADDRHI/LO, GEVTSIZ, GEVTCOUNT registers are not accessible.
    Trying to access them leads to a crash.
    
    For DRD/Peripheral supported controllers, event buffer setup is done
    again in gadget_pullup. Skip setup or cleanup of event buffers if
    controller is host-only capable.
    
    Suggested-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Krishna Kurapati <quic_kriskura@quicinc.com>
    Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
    Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Tested-by: Johan Hovold <johan+linaro@kernel.org>
    Link: https://lore.kernel.org/r/20240420044901.884098-4-quic_kriskura@quicinc.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: fsl: Increase size of name buffer for endpoints [+ + +]
Author: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Date:   Fri Feb 23 18:33:16 2024 +0100

    usb: gadget: fsl: Increase size of name buffer for endpoints
    
    [ Upstream commit 87850f6cc20911e35eafcbc1d56b0d649ae9162d ]
    
    This fixes a W=1 warning about sprintf writing up to 16 bytes into a
    buffer of size 14. There is no practical relevance because there are not
    more than 32 endpoints.
    
    Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
    Link: https://lore.kernel.org/r/6754df25c56aae04f8110594fad2cd2452b1862a.1708709120.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

usb: gadget: uvc: cleanup request when not in correct state [+ + +]
Author: Michael Grzeschik <m.grzeschik@pengutronix.de>
Date:   Mon Sep 11 16:05:29 2023 +0200

    usb: gadget: uvc: cleanup request when not in correct state
    
    [ Upstream commit 52a39f2cf62bb5430ad1f54cd522dbfdab1d71ba ]
    
    The uvc_video_enable function of the uvc-gadget driver is dequeing and
    immediately deallocs all requests on its disable codepath. This is not
    save since the dequeue function is async and does not ensure that the
    requests are left unlinked in the controller driver.
    
    By adding the ep_free_request into the completion path of the requests
    we ensure that the request will be properly deallocated.
    
    Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
    Link: https://lore.kernel.org/r/20230911140530.2995138-3-m.grzeschik@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
vfs: Don't evict inode under the inode lru traversing context [+ + +]
Author: Zhihao Cheng <chengzhihao1@huawei.com>
Date:   Fri Aug 9 11:16:28 2024 +0800

    vfs: Don't evict inode under the inode lru traversing context
    
    commit 2a0629834cd82f05d424bbc193374f9a43d1f87d upstream.
    
    The inode reclaiming process(See function prune_icache_sb) collects all
    reclaimable inodes and mark them with I_FREEING flag at first, at that
    time, other processes will be stuck if they try getting these inodes
    (See function find_inode_fast), then the reclaiming process destroy the
    inodes by function dispose_list(). Some filesystems(eg. ext4 with
    ea_inode feature, ubifs with xattr) may do inode lookup in the inode
    evicting callback function, if the inode lookup is operated under the
    inode lru traversing context, deadlock problems may happen.
    
    Case 1: In function ext4_evict_inode(), the ea inode lookup could happen
            if ea_inode feature is enabled, the lookup process will be stuck
            under the evicting context like this:
    
     1. File A has inode i_reg and an ea inode i_ea
     2. getfattr(A, xattr_buf) // i_ea is added into lru // lru->i_ea
     3. Then, following three processes running like this:
    
        PA                              PB
     echo 2 > /proc/sys/vm/drop_caches
      shrink_slab
       prune_dcache_sb
       // i_reg is added into lru, lru->i_ea->i_reg
       prune_icache_sb
        list_lru_walk_one
         inode_lru_isolate
          i_ea->i_state |= I_FREEING // set inode state
         inode_lru_isolate
          __iget(i_reg)
          spin_unlock(&i_reg->i_lock)
          spin_unlock(lru_lock)
                                         rm file A
                                          i_reg->nlink = 0
          iput(i_reg) // i_reg->nlink is 0, do evict
           ext4_evict_inode
            ext4_xattr_delete_inode
             ext4_xattr_inode_dec_ref_all
              ext4_xattr_inode_iget
               ext4_iget(i_ea->i_ino)
                iget_locked
                 find_inode_fast
                  __wait_on_freeing_inode(i_ea) ----→ AA deadlock
        dispose_list // cannot be executed by prune_icache_sb
         wake_up_bit(&i_ea->i_state)
    
    Case 2: In deleted inode writing function ubifs_jnl_write_inode(), file
            deleting process holds BASEHD's wbuf->io_mutex while getting the
            xattr inode, which could race with inode reclaiming process(The
            reclaiming process could try locking BASEHD's wbuf->io_mutex in
            inode evicting function), then an ABBA deadlock problem would
            happen as following:
    
     1. File A has inode ia and a xattr(with inode ixa), regular file B has
        inode ib and a xattr.
     2. getfattr(A, xattr_buf) // ixa is added into lru // lru->ixa
     3. Then, following three processes running like this:
    
            PA                PB                        PC
                    echo 2 > /proc/sys/vm/drop_caches
                     shrink_slab
                      prune_dcache_sb
                      // ib and ia are added into lru, lru->ixa->ib->ia
                      prune_icache_sb
                       list_lru_walk_one
                        inode_lru_isolate
                         ixa->i_state |= I_FREEING // set inode state
                        inode_lru_isolate
                         __iget(ib)
                         spin_unlock(&ib->i_lock)
                         spin_unlock(lru_lock)
                                                       rm file B
                                                        ib->nlink = 0
     rm file A
      iput(ia)
       ubifs_evict_inode(ia)
        ubifs_jnl_delete_inode(ia)
         ubifs_jnl_write_inode(ia)
          make_reservation(BASEHD) // Lock wbuf->io_mutex
          ubifs_iget(ixa->i_ino)
           iget_locked
            find_inode_fast
             __wait_on_freeing_inode(ixa)
              |          iput(ib) // ib->nlink is 0, do evict
              |           ubifs_evict_inode
              |            ubifs_jnl_delete_inode(ib)
              ↓             ubifs_jnl_write_inode
         ABBA deadlock ←-----make_reservation(BASEHD)
                       dispose_list // cannot be executed by prune_icache_sb
                        wake_up_bit(&ixa->i_state)
    
    Fix the possible deadlock by using new inode state flag I_LRU_ISOLATING
    to pin the inode in memory while inode_lru_isolate() reclaims its pages
    instead of using ordinary inode reference. This way inode deletion
    cannot be triggered from inode_lru_isolate() thus avoiding the deadlock.
    evict() is made to wait for I_LRU_ISOLATING to be cleared before
    proceeding with inode cleanup.
    
    Link: https://lore.kernel.org/all/37c29c42-7685-d1f0-067d-63582ffac405@huaweicloud.com/
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=219022
    Fixes: e50e5129f384 ("ext4: xattr-in-inode support")
    Fixes: 7959cf3a7506 ("ubifs: journal: Handle xattrs like files")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com>
    Link: https://lore.kernel.org/r/20240809031628.1069873-1-chengzhihao@huaweicloud.com
    Reviewed-by: Jan Kara <jack@suse.cz>
    Suggested-by: Jan Kara <jack@suse.cz>
    Suggested-by: Mateusz Guzik <mjguzik@gmail.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
virtiofs: forbid newlines in tags [+ + +]
Author: Stefan Hajnoczi <stefanha@redhat.com>
Date:   Mon Feb 12 19:11:47 2024 -0500

    virtiofs: forbid newlines in tags
    
    [ Upstream commit 40488cc16f7ea0d193a4e248f0d809c25cc377db ]
    
    Newlines in virtiofs tags are awkward for users and potential vectors
    for string injection attacks.
    
    Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
wifi: cfg80211: check A-MSDU format more carefully [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Mon Feb 26 20:34:06 2024 +0100

    wifi: cfg80211: check A-MSDU format more carefully
    
    [ Upstream commit 9ad7974856926129f190ffbe3beea78460b3b7cc ]
    
    If it looks like there's another subframe in the A-MSDU
    but the header isn't fully there, we can end up reading
    data out of bounds, only to discard later. Make this a
    bit more careful and check if the subframe header can
    even be present.
    
    Reported-by: syzbot+d050d437fe47d479d210@syzkaller.appspotmail.com
    Link: https://msgid.link/20240226203405.a731e2c95e38.I82ce7d8c0cc8970ce29d0a39fdc07f1ffc425be4@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: check wiphy mutex is held for wdev mutex [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Mon Aug 28 13:59:56 2023 +0200

    wifi: cfg80211: check wiphy mutex is held for wdev mutex
    
    [ Upstream commit 1474bc87fe57deac726cc10203f73daa6c3212f7 ]
    
    This might seem pretty pointless rather than changing the locking
    immediately, but it seems safer to run for a while with checks and
    the old locking scheme, and then remove the wdev lock later.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: factor out bridge tunnel / RFC1042 header check [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Feb 13 11:08:52 2023 +0100

    wifi: cfg80211: factor out bridge tunnel / RFC1042 header check
    
    [ Upstream commit 9f718554e7eacea62d3f972cae24d969755bf3b6 ]
    
    The same check is done in multiple places, unify it.
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230213100855.34315-2-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 9ad797485692 ("wifi: cfg80211: check A-MSDU format more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cfg80211: fix receiving mesh packets without RFC1042 header [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Tue Jul 11 13:50:52 2023 +0200

    wifi: cfg80211: fix receiving mesh packets without RFC1042 header
    
    commit fec3ebb5ed299ac3a998f011c380f2ded47f4866 upstream.
    
    Fix ethernet header length field after stripping the mesh header
    
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/CT5GNZSK28AI.2K6M69OXM9RW5@syracuse/
    Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces")
    Reported-and-tested-by: Nicolas Escande <nico.escande@gmail.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230711115052.68430-1-nbd@nbd.name
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: cfg80211: move A-MSDU check in ieee80211_data_to_8023_exthdr [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Feb 13 11:08:51 2023 +0100

    wifi: cfg80211: move A-MSDU check in ieee80211_data_to_8023_exthdr
    
    [ Upstream commit 0f690e6b4dcd7243e2805a76981b252c2d4bdce6 ]
    
    When parsing the outer A-MSDU header, don't check for inner bridge tunnel
    or RFC1042 headers. This is handled by ieee80211_amsdu_to_8023s already.
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230213100855.34315-1-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 9ad797485692 ("wifi: cfg80211: check A-MSDU format more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: cw1200: Avoid processing an invalid TIM IE [+ + +]
Author: Jeff Johnson <quic_jjohnson@quicinc.com>
Date:   Thu Aug 31 11:22:57 2023 -0700

    wifi: cw1200: Avoid processing an invalid TIM IE
    
    [ Upstream commit b7bcea9c27b3d87b54075735c870500123582145 ]
    
    While converting struct ieee80211_tim_ie::virtual_map to be a flexible
    array it was observed that the TIM IE processing in cw1200_rx_cb()
    could potentially process a malformed IE in a manner that could result
    in a buffer over-read. Add logic to verify that the TIM IE length is
    large enough to hold a valid TIM payload before processing it.
    
    Signed-off-by: Jeff Johnson <quic_jjohnson@quicinc.com>
    Signed-off-by: Kalle Valo <kvalo@kernel.org>
    Link: https://lore.kernel.org/r/20230831-ieee80211_tim_ie-v3-1-e10ff584ab5d@quicinc.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: abort scan when rfkill on but device enabled [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Wed Oct 4 12:36:28 2023 +0300

    wifi: iwlwifi: abort scan when rfkill on but device enabled
    
    [ Upstream commit 3c6a0b1f0add72e7f522bc9145222b86d0a7712a ]
    
    In RFKILL we first set the RFKILL bit, then we abort scan
    (if one exists) by waiting for the notification from FW
    and notifying mac80211. And then we stop the device.
    But in case we have a scan ongoing in the period of time between
    rfkill on and before the device is stopped - we will not wait for the
    FW notification because of the iwl_mvm_is_radio_killed() condition,
    and then the scan_status and uid_status are misconfigured,
    (scan_status is cleared but uid_status not)
    and when the notification suddenly arrives (before stopping the device)
    we will get into the assert about scan_status and uid_status mismatch.
    Fix this by waiting for FW notif when rfkill is on but the device isn't
    disabled yet.
    
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
    Link: https://lore.kernel.org/r/20231004123422.c43b69aa2c77.Icc7b5efb47974d6f499156ff7510b786e177993b@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: iwlwifi: fw: Fix debugfs command sending [+ + +]
Author: Mukesh Sisodiya <mukesh.sisodiya@intel.com>
Date:   Wed Oct 4 12:36:32 2023 +0300

    wifi: iwlwifi: fw: Fix debugfs command sending
    
    [ Upstream commit 048449fc666d736a1a17d950fde0b5c5c8fd10cc ]
    
    During debugfs command handling transport function is used directly,
    this bypasses the locking used by runtime operation function
    and leads to a kernel warning when two commands are
    sent in parallel.
    
    Fix it by using runtime operations function when sending
    debugfs command.
    
    Signed-off-by: Mukesh Sisodiya <mukesh.sisodiya@intel.com>
    Signed-off-by: Gregory Greenman <gregory.greenman@intel.com>
    Link: https://lore.kernel.org/r/20231004123422.4f80ac90658a.Ia1dfa1195c919f3002fe08db3eefbd2bfa921bbf@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: add a workaround for receiving non-standard mesh A-MSDU [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Feb 13 11:08:55 2023 +0100

    wifi: mac80211: add a workaround for receiving non-standard mesh A-MSDU
    
    [ Upstream commit 6e4c0d0460bd32ca9244dff3ba2d2da27235de11 ]
    
    At least ath10k and ath11k supported hardware (maybe more) does not implement
    mesh A-MSDU aggregation in a standard compliant way.
    802.11-2020 9.3.2.2.2 declares that the Mesh Control field is part of the
    A-MSDU header (and little-endian).
    As such, its length must not be included in the subframe length field.
    Hardware affected by this bug treats the mesh control field as part of the
    MSDU data and sets the length accordingly.
    In order to avoid packet loss, keep track of which stations are affected
    by this and take it into account when converting A-MSDU to 802.3 + mesh control
    packets.
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230213100855.34315-5-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 9ad797485692 ("wifi: cfg80211: check A-MSDU format more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: add documentation for amsdu_mesh_control [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Wed Feb 15 18:30:26 2023 +0100

    wifi: mac80211: add documentation for amsdu_mesh_control
    
    commit 3caf31e7b18a90b74a2709d761a0dfa423f2c2e4 upstream.
    
    This documentation wasn't added in the original patch,
    add it now.
    
    Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    Fixes: 6e4c0d0460bd ("wifi: mac80211: add a workaround for receiving non-standard mesh A-MSDU")
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: drop bogus static keywords in A-MSDU rx [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Thu Mar 30 11:00:00 2023 +0200

    wifi: mac80211: drop bogus static keywords in A-MSDU rx
    
    commit 4d78e032fee5d532e189cdb2c3c76112094e9751 upstream.
    
    These were unintentional copy&paste mistakes.
    
    Cc: stable@vger.kernel.org
    Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230330090001.60750-1-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: fix and simplify unencrypted drop check for mesh [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Thu Dec 1 14:57:30 2022 +0100

    wifi: mac80211: fix and simplify unencrypted drop check for mesh
    
    [ Upstream commit 94b9b9de05b62ac54d8766caa9865fb4d82cc47e ]
    
    ieee80211_drop_unencrypted is called from ieee80211_rx_h_mesh_fwding and
    ieee80211_frame_allowed.
    
    Since ieee80211_rx_h_mesh_fwding can forward packets for other mesh nodes
    and is called earlier, it needs to check the decryptions status and if the
    packet is using the control protocol on its own, instead of deferring to
    the later call from ieee80211_frame_allowed.
    
    Because of that, ieee80211_drop_unencrypted has a mesh specific check
    that skips over the mesh header in order to check the payload protocol.
    This code is invalid when called from ieee80211_frame_allowed, since that
    happens after the 802.11->802.3 conversion.
    
    Fix this by moving the mesh specific check directly into
    ieee80211_rx_h_mesh_fwding.
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20221201135730.19723-1-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 9ad797485692 ("wifi: cfg80211: check A-MSDU format more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: fix BA session teardown race [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue Aug 29 20:16:11 2023 +0200

    wifi: mac80211: fix BA session teardown race
    
    [ Upstream commit 05f136220d17839eb7c155f015ace9152f603225 ]
    
    As previously reported by Alexander, whose commit 69403bad97aa
    ("wifi: mac80211: sdata can be NULL during AMPDU start") I'm
    reverting as part of this commit, there's a race between station
    destruction and aggregation setup, where the aggregation setup
    can happen while the station is being removed and queue the work
    after ieee80211_sta_tear_down_BA_sessions() has already run in
    __sta_info_destroy_part1(), and thus the worker will run with a
    now freed station. In his case, this manifested in a NULL sdata
    pointer, but really there's no guarantee whatsoever.
    
    The real issue seems to be that it's possible at all to have a
    situation where this occurs - we want to stop the BA sessions
    when doing _part1, but we cannot be sure, and WLAN_STA_BLOCK_BA
    isn't necessarily effective since we don't know that the setup
    isn't concurrently running and already got past the check.
    
    Simply call ieee80211_sta_tear_down_BA_sessions() again in the
    second part of station destruction, since at that point really
    nothing else can hold a reference to the station any more.
    
    Also revert the sdata checks since those are just misleading at
    this point.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: fix change_address deadlock during unregister [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Thu Oct 12 12:34:47 2023 +0200

    wifi: mac80211: fix change_address deadlock during unregister
    
    [ Upstream commit 74a7c93f45abba538914a65dd2ef2ea7cf7150e2 ]
    
    When using e.g. bonding, and doing a sequence such as
    
     # iw wlan0 set type __ap
     # ip link add name bond1 type bond
     # ip link set wlan0 master bond1
     # iw wlan0 interface del
    
    we deadlock, since the wlan0 interface removal will cause
    bonding to reset the MAC address of wlan0.
    
    The locking would be somewhat difficult to fix, but since
    this only happens during removal, we can simply ignore the
    MAC address change at this time.
    
    Reported-by: syzbot+25b3a0b24216651bc2af@syzkaller.appspotmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Link: https://lore.kernel.org/r/20231012123447.9f9d7fd1f237.Ic3a5ef4391b670941a69cec5592aefc79d9c2890@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: fix flow dissection for forwarded packets [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Fri Mar 24 13:09:23 2023 +0100

    wifi: mac80211: fix flow dissection for forwarded packets
    
    commit 899c2c11810cfe38cb01c847d0df98e181ea5728 upstream.
    
    Adjust the network header to point at the correct payload offset
    
    Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230324120924.38412-2-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: fix mesh forwarding [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Fri Mar 24 13:09:22 2023 +0100

    wifi: mac80211: fix mesh forwarding
    
    commit 8f0149a8ac59c12cd47271ac625c27dac5621d3a upstream.
    
    Linearize packets (needed for forwarding A-MSDU subframes).
    
    Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230324120924.38412-1-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: fix mesh path discovery based on unicast packets [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Tue Mar 14 10:59:52 2023 +0100

    wifi: mac80211: fix mesh path discovery based on unicast packets
    
    commit f355f70145744518ca1d9799b42f4a8da9aa0d36 upstream.
    
    If a packet has reached its intended destination, it was bumped to the code
    that accepts it, without first checking if a mesh_path needs to be created
    based on the discovered source.
    Fix this by moving the destination address check further down.
    
    Cc: stable@vger.kernel.org
    Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230314095956.62085-3-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: fix potential null pointer dereference [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Thu Mar 30 11:00:01 2023 +0200

    wifi: mac80211: fix potential null pointer dereference
    
    commit a16fc38315f2c69c520ee769976ecb9c706b8560 upstream.
    
    rx->sta->amsdu_mesh_control is being passed to ieee80211_amsdu_to_8023s
    without checking rx->sta. Since it doesn't make sense to accept A-MSDU
    packets without a sta, simply add a check earlier.
    
    Fixes: 6e4c0d0460bd ("wifi: mac80211: add a workaround for receiving non-standard mesh A-MSDU")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230330090001.60750-2-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Feb 13 11:08:54 2023 +0100

    wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces
    
    [ Upstream commit 986e43b19ae9176093da35e0a844e65c8bf9ede7 ]
    
    The current mac80211 mesh A-MSDU receive path fails to parse A-MSDU packets
    on mesh interfaces, because it assumes that the Mesh Control field is always
    directly after the 802.11 header.
    802.11-2020 9.3.2.2.2 Figure 9-70 shows that the Mesh Control field is
    actually part of the A-MSDU subframe header.
    This makes more sense, since it allows packets for multiple different
    destinations to be included in the same A-MSDU, as long as RA and TID are
    still the same.
    Another issue is the fact that the A-MSDU subframe length field was apparently
    accidentally defined as little-endian in the standard.
    
    In order to fix this, the mesh forwarding path needs happen at a different
    point in the receive path.
    
    ieee80211_data_to_8023_exthdr is changed to ignore the mesh control field
    and leave it in after the ethernet header. This also affects the source/dest
    MAC address fields, which now in the case of mesh point to the mesh SA/DA.
    
    ieee80211_amsdu_to_8023s is changed to deal with the endian difference and
    to add the Mesh Control length to the subframe length, since it's not covered
    by the MSDU length field.
    
    With these changes, the mac80211 will get the same packet structure for
    converted regular data packets and unpacked A-MSDU subframes.
    
    The mesh forwarding checks are now only performed after the A-MSDU decap.
    For locally received packets, the Mesh Control header is stripped away.
    For forwarded packets, a new 802.11 header gets added.
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230213100855.34315-4-nbd@nbd.name
    [fix fortify build error]
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 9ad797485692 ("wifi: cfg80211: check A-MSDU format more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: fix receiving mesh packets in forwarding=0 networks [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Sun Mar 26 17:17:09 2023 +0200

    wifi: mac80211: fix receiving mesh packets in forwarding=0 networks
    
    commit e26c0946a5c1aa4d27f8dfe78f2a72b4550df91f upstream.
    
    When forwarding is set to 0, frames are typically sent with ttl=1.
    Move the ttl decrement check below the check for local receive in order to
    fix packet drops.
    
    Reported-by: Thomas Hühn <thomas.huehn@hs-nordhausen.de>
    Reported-by: Nick Hainke <vincent@systemli.org>
    Fixes: 986e43b19ae9 ("wifi: mac80211: fix receiving A-MSDU frames on mesh interfaces")
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230326151709.17743-1-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: mac80211: remove mesh forwarding congestion check [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Mon Feb 13 11:08:53 2023 +0100

    wifi: mac80211: remove mesh forwarding congestion check
    
    [ Upstream commit 5c1e269aa5ebafeec69b68ff560522faa5bcb6c1 ]
    
    Now that all drivers use iTXQ, it does not make sense to check to drop
    tx forwarding packets when the driver has stopped the queues.
    fq_codel will take care of dropping packets when the queues fill up
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Link: https://lore.kernel.org/r/20230213100855.34315-3-nbd@nbd.name
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 9ad797485692 ("wifi: cfg80211: check A-MSDU format more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: take wiphy lock for MAC addr change [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Mon Aug 28 14:00:00 2023 +0200

    wifi: mac80211: take wiphy lock for MAC addr change
    
    [ Upstream commit a26787aa13974fb0b3fb42bfeb4256c1b686e305 ]
    
    We want to ensure everything holds the wiphy lock,
    so also extend that to the MAC change callback.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 74a7c93f45ab ("wifi: mac80211: fix change_address deadlock during unregister")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86: Increase brk randomness entropy for 64-bit systems [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Fri Feb 16 22:25:43 2024 -0800

    x86: Increase brk randomness entropy for 64-bit systems
    
    [ Upstream commit 44c76825d6eefee9eb7ce06c38e1a6632ac7eb7d ]
    
    In commit c1d171a00294 ("x86: randomize brk"), arch_randomize_brk() was
    defined to use a 32MB range (13 bits of entropy), but was never increased
    when moving to 64-bit. The default arch_randomize_brk() uses 32MB for
    32-bit tasks, and 1GB (18 bits of entropy) for 64-bit tasks.
    
    Update x86_64 to match the entropy used by arm64 and other 64-bit
    architectures.
    
    Reported-by: y0un9n132@gmail.com
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Jiri Kosina <jkosina@suse.com>
    Closes: https://lore.kernel.org/linux-hardening/CA+2EKTVLvc8hDZc+2Yhwmus=dzOUG5E4gV7ayCbu0MPJTZzWkw@mail.gmail.com/
    Link: https://lore.kernel.org/r/20240217062545.1631668-1-keescook@chromium.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
xhci: Fix Panther point NULL pointer deref at full-speed re-enumeration [+ + +]
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Thu Aug 15 17:11:17 2024 +0300

    xhci: Fix Panther point NULL pointer deref at full-speed re-enumeration
    
    commit af8e119f52e9c13e556be9e03f27957554a84656 upstream.
    
    re-enumerating full-speed devices after a failed address device command
    can trigger a NULL pointer dereference.
    
    Full-speed devices may need to reconfigure the endpoint 0 Max Packet Size
    value during enumeration. Usb core calls usb_ep0_reinit() in this case,
    which ends up calling xhci_configure_endpoint().
    
    On Panther point xHC the xhci_configure_endpoint() function will
    additionally check and reserve bandwidth in software. Other hosts do
    this in hardware
    
    If xHC address device command fails then a new xhci_virt_device structure
    is allocated as part of re-enabling the slot, but the bandwidth table
    pointers are not set up properly here.
    This triggers the NULL pointer dereference the next time usb_ep0_reinit()
    is called and xhci_configure_endpoint() tries to check and reserve
    bandwidth
    
    [46710.713538] usb 3-1: new full-speed USB device number 5 using xhci_hcd
    [46710.713699] usb 3-1: Device not responding to setup address.
    [46710.917684] usb 3-1: Device not responding to setup address.
    [46711.125536] usb 3-1: device not accepting address 5, error -71
    [46711.125594] BUG: kernel NULL pointer dereference, address: 0000000000000008
    [46711.125600] #PF: supervisor read access in kernel mode
    [46711.125603] #PF: error_code(0x0000) - not-present page
    [46711.125606] PGD 0 P4D 0
    [46711.125610] Oops: Oops: 0000 [#1] PREEMPT SMP PTI
    [46711.125615] CPU: 1 PID: 25760 Comm: kworker/1:2 Not tainted 6.10.3_2 #1
    [46711.125620] Hardware name: Gigabyte Technology Co., Ltd.
    [46711.125623] Workqueue: usb_hub_wq hub_event [usbcore]
    [46711.125668] RIP: 0010:xhci_reserve_bandwidth (drivers/usb/host/xhci.c
    
    Fix this by making sure bandwidth table pointers are set up correctly
    after a failed address device command, and additionally by avoiding
    checking for bandwidth in cases like this where no actual endpoints are
    added or removed, i.e. only context for default control endpoint 0 is
    evaluated.
    
    Reported-by: Karel Balej <balejk@matfyz.cz>
    Closes: https://lore.kernel.org/linux-usb/D3CKQQAETH47.1MUO22RTCH2O3@matfyz.cz/
    Cc: stable@vger.kernel.org
    Fixes: 651aaf36a7d7 ("usb: xhci: Handle USB transaction error on address command")
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Link: https://lore.kernel.org/r/20240815141117.2702314-2-mathias.nyman@linux.intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>