Changelog in Linux kernel 6.6.48

 
accel/habanalabs/gaudi2: unsecure tpc count registers [+ + +]
Author: Ofir Bitton <[email protected]>
Date:   Wed Jun 28 14:40:46 2023 +0300

    accel/habanalabs/gaudi2: unsecure tpc count registers
    
    [ Upstream commit 1e3a78270b4ec1c8c177eb310c08128d52137a69 ]
    
    As TPC kernels now must use those registers we unsecure them.
    
    Signed-off-by: Ofir Bitton <[email protected]>
    Reviewed-by: Oded Gabbay <[email protected]>
    Signed-off-by: Oded Gabbay <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
accel/habanalabs: export dma-buf only if size/offset multiples of PAGE_SIZE [+ + +]
Author: Tomer Tayar <[email protected]>
Date:   Wed Aug 9 16:14:49 2023 +0300

    accel/habanalabs: export dma-buf only if size/offset multiples of PAGE_SIZE
    
    [ Upstream commit 0b75cb5b240fddf181c284d415ee77ef61b418d6 ]
    
    It is currently allowed for a user to export dma-buf with size and
    offset that are not multiples of PAGE_SIZE.
    The exported memory is mapped for the importer device, and there it will
    be rounded to PAGE_SIZE, leading to actually exporting more than the
    user intended to.
    To make the user be aware of it, accept only size and offset which are
    multiple of PAGE_SIZE.
    
    Signed-off-by: Tomer Tayar <[email protected]>
    Reviewed-by: Oded Gabbay <[email protected]>
    Signed-off-by: Oded Gabbay <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

accel/habanalabs: fix bug in timestamp interrupt handling [+ + +]
Author: farah kassabri <[email protected]>
Date:   Thu Aug 24 15:45:21 2023 +0300

    accel/habanalabs: fix bug in timestamp interrupt handling
    
    [ Upstream commit 0165994c215f321e2d055368f89b424756e340eb ]
    
    There is a potential race between user thread seeking to re-use
    a timestamp record with new interrupt id, while this record is still
    in the middle of interrupt handling and it is about to be freed.
    Imagine the driver set the record in_use to 0 and only then fill the
    free_node information. This might lead to unpleasant scenario where
    the new registration thread detects the record as free to use, and
    change the cq buff address. That will cause the free_node to get
    the wrong buffer address to put refcount to.
    
    Signed-off-by: farah kassabri <[email protected]>
    Reviewed-by: Oded Gabbay <[email protected]>
    Signed-off-by: Oded Gabbay <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

accel/habanalabs: fix debugfs files permissions [+ + +]
Author: Avri Kehat <[email protected]>
Date:   Tue Jan 16 17:54:36 2024 +0200

    accel/habanalabs: fix debugfs files permissions
    
    [ Upstream commit 0b105a2a7225f2736bd07aca0538cd67f09bfa20 ]
    
    debugfs files are created with permissions that don't align
    with the access requirements.
    
    Signed-off-by: Avri Kehat <[email protected]>
    Reviewed-by: Oded Gabbay <[email protected]>
    Reviewed-by: Carl Vanderlip <[email protected]>
    Signed-off-by: Oded Gabbay <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ACPI: EC: Evaluate _REG outside the EC scope more carefully [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Aug 12 15:16:21 2024 +0200

    ACPI: EC: Evaluate _REG outside the EC scope more carefully
    
    commit 71bf41b8e913ec9fc91f0d39ab8fb320229ec604 upstream.
    
    Commit 60fa6ae6e6d0 ("ACPI: EC: Install address space handler at the
    namespace root") caused _REG methods for EC operation regions outside
    the EC device scope to be evaluated which on some systems leads to the
    evaluation of _REG methods in the scopes of device objects representing
    devices that are not present and not functional according to the _STA
    return values. Some of those device objects represent EC "alternatives"
    and if _REG is evaluated for their operation regions, the platform
    firmware may be confused and the platform may start to behave
    incorrectly.
    
    To avoid this problem, only evaluate _REG for EC operation regions
    located in the scopes of device objects representing known-to-be-present
    devices.
    
    For this purpose, partially revert commit 60fa6ae6e6d0 and trigger the
    evaluation of _REG for EC operation regions from acpi_bus_attach() for
    the known-valid devices.
    
    Fixes: 60fa6ae6e6d0 ("ACPI: EC: Install address space handler at the namespace root")
    Link: https://lore.kernel.org/linux-acpi/[email protected]
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=2298938
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=2302253
    Reported-by: Hans de Goede <[email protected]>
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Cc: All applicable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ACPICA: Add a depth argument to acpi_execute_reg_methods() [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Aug 12 15:11:42 2024 +0200

    ACPICA: Add a depth argument to acpi_execute_reg_methods()
    
    commit cdf65d73e001fde600b18d7e45afadf559425ce5 upstream.
    
    A subsequent change will need to pass a depth argument to
    acpi_execute_reg_methods(), so prepare that function for it.
    
    No intentional functional changes.
    
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Cc: All applicable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
afs: fix __afs_break_callback() / afs_drop_open_mmap() race [+ + +]
Author: Al Viro <[email protected]>
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 <[email protected]>
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ALSA: hda/realtek: Fix noise from speakers on Lenovo IdeaPad 3 15IAU7 [+ + +]
Author: Parsa Poorshikhian <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/tas2781: fix wrong calibrated data order [+ + +]
Author: Baojun Xu <[email protected]>
Date:   Tue Aug 13 12:37:48 2024 +0800

    ALSA: hda/tas2781: fix wrong calibrated data order
    
    commit 3beddef84d90590270465a907de1cfe2539ac70d upstream.
    
    Wrong calibration data order cause sound too low in some device.
    Fix wrong calibrated data order, add calibration data converssion
    by get_unaligned_be32() after reading from UEFI.
    
    Fixes: 5be27f1e3ec9 ("ALSA: hda/tas2781: Add tas2781 HDA driver")
    Cc: <[email protected]>
    Signed-off-by: Baojun Xu <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: hda/tas2781: Use correct endian conversion [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Wed Aug 14 12:04:59 2024 +0200

    ALSA: hda/tas2781: Use correct endian conversion
    
    [ Upstream commit 829e2a23121fb36ee30ea5145c2a85199f68e2c8 ]
    
    The data conversion is done rather by a wrong function.  We convert to
    BE32, not from BE32.  Although the end result must be same, this was
    complained by the compiler.
    
    Fix the code again and align with another similar function
    tas2563_apply_calib() that does already right.
    
    Fixes: 3beddef84d90 ("ALSA: hda/tas2781: fix wrong calibrated data order")
    Reported-by: kernel test robot <[email protected]>
    Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: timer: Relax start tick time check for slave timer elements [+ + +]
Author: Takashi Iwai <[email protected]>
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: <[email protected]>
    Link: https://github.com/raspberrypi/linux/issues/6294
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Add delay quirk for VIVO USB-C-XE710 HEADSET [+ + +]
Author: Lianqin Hu <[email protected]>
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 <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/TYUPR06MB6217FF67076AF3E49E12C877D2842@TYUPR06MB6217.apcprd06.prod.outlook.com
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Support Yamaha P-125 quirk entry [+ + +]
Author: Juan José Arboleda <[email protected]>
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 <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
arm64: ACPI: NUMA: initialize all values of acpi_early_node_map to NUMA_NO_NODE [+ + +]
Author: Haibo Xu <[email protected]>
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: <[email protected]> # 4.19.x
    Reported-by: Andrew Jones <[email protected]>
    Suggested-by: Andrew Jones <[email protected]>
    Signed-off-by: Haibo Xu <[email protected]>
    Reviewed-by: Anshuman Khandual <[email protected]>
    Reviewed-by: Sunil V L <[email protected]>
    Reviewed-by: Andrew Jones <[email protected]>
    Acked-by: Catalin Marinas <[email protected]>
    Acked-by: Lorenzo Pieralisi <[email protected]>
    Reviewed-by: Hanjun Guo <[email protected]>
    Link: https://lore.kernel.org/r/853d7f74aa243f6f5999e203246f0d1ae92d2b61.1722828421.git.haibo1.xu@intel.com
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

arm64: Fix KASAN random tag seed initialization [+ + +]
Author: Samuel Holland <[email protected]>
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 <[email protected]>
    Reviewed-by: Andrey Konovalov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Catalin Marinas <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: cs35l45: Checks index of cs35l45_irqs[] [+ + +]
Author: Ricardo Rivera-Matos <[email protected]>
Date:   Thu Aug 31 11:20:39 2023 -0500

    ASoC: cs35l45: Checks index of cs35l45_irqs[]
    
    [ Upstream commit 44f37b6ce041c838cb2f49f08998c41f1ab3b08c ]
    
    Checks the index computed by the virq offset before printing the
    error condition in cs35l45_spk_safe_err() handler.
    
    Signed-off-by: Ricardo Rivera-Matos <[email protected]>
    Signed-off-by: Vlad Karpovich <[email protected]>
    Acked-by: Ricardo Rivera-Matos <[email protected]>
    Acked-by: Charles Keepax <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: Intel: hda-dsp: Make sure that no irq handler is pending before suspend [+ + +]
Author: Peter Ujfalusi <[email protected]>
Date:   Thu Oct 12 15:18:48 2023 -0400

    ASoC: SOF: Intel: hda-dsp: Make sure that no irq handler is pending before suspend
    
    [ Upstream commit 576a0b71b5b479008dacb3047a346625040f5ac6 ]
    
    In the existing IPC support, the reply to each IPC message is handled in
    an IRQ thread. The assumption is that the IRQ thread is scheduled without
    significant delays.
    
    On an experimental (iow, buggy) kernel, the IRQ thread dealing with the
    reply to the last IPC message before powering-down the DSP can be delayed
    by several seconds. The IRQ thread will proceed with register accesses
    after the DSP is powered-down which results in a kernel crash.
    
    While the bug which causes the delay is not in the audio stack, we must
    handle such cases with defensive programming to avoid such crashes.
    
    Call synchronize_irq() before proceeding to power down the DSP to make
    sure that no irq thread is pending execution.
    
    Closes: https://github.com/thesofproject/linux/issues/4608
    Reviewed-by: Guennadi Liakhovetski <[email protected]>
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Signed-off-by: Pierre-Louis Bossart <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: SOF: ipc4: check return value of snd_sof_ipc_msg_data [+ + +]
Author: Bard Liao <[email protected]>
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 <[email protected]>
    Reviewed-by: Péter Ujfalusi <[email protected]>
    Reviewed-by: Pierre-Louis Bossart <[email protected]>
    Signed-off-by: Peter Ujfalusi <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
atm: idt77252: prevent use after free in dequeue_rx() [+ + +]
Author: Dan Carpenter <[email protected]>
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 <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
binfmt_misc: cleanup on filesystem umount [+ + +]
Author: Christian Brauner <[email protected]>
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/[email protected]
    [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/[email protected] (v1)
    Cc: Sargun Dhillon <[email protected]>
    Cc: Serge Hallyn <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Henning Schild <[email protected]>
    Cc: Andrei Vagin <[email protected]>
    Cc: Al Viro <[email protected]>
    Cc: Laurent Vivier <[email protected]>
    Cc: [email protected]
    Acked-by: Serge Hallyn <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bitmap: introduce generic optimized bitmap_size() [+ + +]
Author: Alexander Lobakin <[email protected]>
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 <[email protected]>
    Acked-by: Yury Norov <[email protected]>
    Signed-off-by: Alexander Lobakin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
block: Fix lockdep warning in blk_mq_mark_tag_wait [+ + +]
Author: Li Lingfeng <[email protected]>
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 <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Reviewed-by: Yu Kuai <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: bnep: Fix out-of-bound access [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: hci_conn: Check non NULL function before calling for HFP offload [+ + +]
Author: Zijun Hu <[email protected]>
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 <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: hci_core: Fix LE quote calculation [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

Bluetooth: MGMT: Add error handling to pair_device() [+ + +]
Author: Griffin Kroah-Hartman <[email protected]>
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 <[email protected]>
    Fixes: 5157b8a503fa ("Bluetooth: Fix initializing conn_params in scan phase")
    Signed-off-by: Griffin Kroah-Hartman <[email protected]>
    Reported-by: Yiwei Zhang <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Bluetooth: SMP: Fix assumption of Central always being Initiator [+ + +]
Author: Luiz Augusto von Dentz <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bnxt_en: Fix double DMA unmapping for XDP_REDIRECT [+ + +]
Author: Somnath Kotur <[email protected]>
Date:   Tue Aug 20 13:34:15 2024 -0700

    bnxt_en: Fix double DMA unmapping for XDP_REDIRECT
    
    [ Upstream commit 8baeef7616d5194045c5a6b97fd1246b87c55b13 ]
    
    Remove the dma_unmap_page_attrs() call in the driver's XDP_REDIRECT
    code path.  This should have been removed when we let the page pool
    handle the DMA mapping.  This bug causes the warning:
    
    WARNING: CPU: 7 PID: 59 at drivers/iommu/dma-iommu.c:1198 iommu_dma_unmap_page+0xd5/0x100
    CPU: 7 PID: 59 Comm: ksoftirqd/7 Tainted: G        W          6.8.0-1010-gcp #11-Ubuntu
    Hardware name: Dell Inc. PowerEdge R7525/0PYVT1, BIOS 2.15.2 04/02/2024
    RIP: 0010:iommu_dma_unmap_page+0xd5/0x100
    Code: 89 ee 48 89 df e8 cb f2 69 ff 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d 31 c0 31 d2 31 c9 31 f6 31 ff 45 31 c0 e9 ab 17 71 00 <0f> 0b 48 83 c4 08 5b 41 5c 41 5d 41 5e 41 5f 5d 31 c0 31 d2 31 c9
    RSP: 0018:ffffab1fc0597a48 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffff99ff838280c8 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
    RBP: ffffab1fc0597a78 R08: 0000000000000002 R09: ffffab1fc0597c1c
    R10: ffffab1fc0597cd3 R11: ffff99ffe375acd8 R12: 00000000e65b9000
    R13: 0000000000000050 R14: 0000000000001000 R15: 0000000000000002
    FS:  0000000000000000(0000) GS:ffff9a06efb80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000565c34c37210 CR3: 00000005c7e3e000 CR4: 0000000000350ef0
    ? show_regs+0x6d/0x80
    ? __warn+0x89/0x150
    ? iommu_dma_unmap_page+0xd5/0x100
    ? report_bug+0x16a/0x190
    ? handle_bug+0x51/0xa0
    ? exc_invalid_op+0x18/0x80
    ? iommu_dma_unmap_page+0xd5/0x100
    ? iommu_dma_unmap_page+0x35/0x100
    dma_unmap_page_attrs+0x55/0x220
    ? bpf_prog_4d7e87c0d30db711_xdp_dispatcher+0x64/0x9f
    bnxt_rx_xdp+0x237/0x520 [bnxt_en]
    bnxt_rx_pkt+0x640/0xdd0 [bnxt_en]
    __bnxt_poll_work+0x1a1/0x3d0 [bnxt_en]
    bnxt_poll+0xaa/0x1e0 [bnxt_en]
    __napi_poll+0x33/0x1e0
    net_rx_action+0x18a/0x2f0
    
    Fixes: 578fcfd26e2a ("bnxt_en: Let the page pool manage the DMA mapping")
    Reviewed-by: Andy Gospodarek <[email protected]>
    Reviewed-by: Kalesh AP <[email protected]>
    Signed-off-by: Somnath Kotur <[email protected]>
    Signed-off-by: Michael Chan <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bonding: fix bond_ipsec_offload_ok return type [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
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 <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bonding: fix null pointer deref in bond_ipsec_offload_ok [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
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 <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bonding: fix xfrm real_dev null pointer dereference [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
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 <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

bonding: fix xfrm state handling when clearing active slave [+ + +]
Author: Nikolay Aleksandrov <[email protected]>
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 <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bpf: Fix a kernel verifier crash in stacksafe() [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Mon Aug 12 14:48:47 2024 -0700

    bpf: Fix a kernel verifier crash in stacksafe()
    
    commit bed2eb964c70b780fb55925892a74f26cb590b25 upstream.
    
    Daniel Hodges reported a kernel verifier crash when playing with sched-ext.
    Further investigation shows that the crash is due to invalid memory access
    in stacksafe(). More specifically, it is the following code:
    
        if (exact != NOT_EXACT &&
            old->stack[spi].slot_type[i % BPF_REG_SIZE] !=
            cur->stack[spi].slot_type[i % BPF_REG_SIZE])
                return false;
    
    The 'i' iterates old->allocated_stack.
    If cur->allocated_stack < old->allocated_stack the out-of-bound
    access will happen.
    
    To fix the issue add 'i >= cur->allocated_stack' check such that if
    the condition is true, stacksafe() should fail. Otherwise,
    cur->stack[spi].slot_type[i % BPF_REG_SIZE] memory access is legal.
    
    Fixes: 2793a8b015f7 ("bpf: exact states comparison for iterator convergence checks")
    Cc: Eduard Zingerman <[email protected]>
    Reported-by: Daniel Hodges <[email protected]>
    Acked-by: Eduard Zingerman <[email protected]>
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    [ shung-hsi.yu: "exact" variable is bool instead enum because commit
      4f81c16f50ba ("bpf: Recognize that two registers are safe when their
      ranges match") is not present. ]
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bpf: Fix updating attached freplace prog in prog_array map [+ + +]
Author: Leon Hwang <[email protected]>
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 <[email protected]>
    Cc: Martin KaFai Lau <[email protected]>
    Acked-by: Yonghong Song <[email protected]>
    Signed-off-by: Leon Hwang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
btrfs: change BUG_ON to assertion in tree_move_down() [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: change BUG_ON to assertion when checking for delayed_node root [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Reviewed-by: Anand Jain <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: defrag: change BUG_ON to assertion in btrfs_defrag_leaves() [+ + +]
Author: David Sterba <[email protected]>
Date:   Fri Jan 19 20:15:41 2024 +0100

    btrfs: defrag: change BUG_ON to assertion in btrfs_defrag_leaves()
    
    [ Upstream commit 51d4be540054be32d7ce28b63ea9b84ac6ff1db2 ]
    
    The BUG_ON verifies a condition that should be guaranteed by the correct
    use of the path search (with keep_locks and lowest_level set), an
    assertion is the suitable check.
    
    Reviewed-by: Josef Bacik <[email protected]>
    Reviewed-by: Anand Jain <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: delayed-inode: drop pointless BUG_ON in __btrfs_remove_delayed_item() [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Reviewed-by: Anand Jain <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: delete pointless BUG_ON check on quota root in btrfs_qgroup_account_extent() [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: handle invalid root reference found in may_destroy_subvol() [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: push errors up from add_async_extent() [+ + +]
Author: David Sterba <[email protected]>
Date:   Wed Jan 24 17:26:25 2024 +0100

    btrfs: push errors up from add_async_extent()
    
    [ Upstream commit dbe6cda68f0e1be269e6509c8bf3d8d89089c1c4 ]
    
    The memory allocation error in add_async_extent() is not handled
    properly, return an error and push the BUG_ON to the caller. Handling it
    there is not trivial so at least make it visible.
    
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: rename bitmap_set_bits() -> btrfs_bitmap_set_bits() [+ + +]
Author: Alexander Lobakin <[email protected]>
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 <[email protected]>
    Acked-by: David Sterba <[email protected]>
    Reviewed-by: Yury Norov <[email protected]>
    Signed-off-by: Alexander Lobakin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: replace sb::s_blocksize by fs_info::sectorsize [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Reviewed-by: Anand Jain <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Stable-dep-of: 46a6e10a1ab1 ("btrfs: send: allow cloning non-aligned extent if it ends at i_size")
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: send: allow cloning non-aligned extent if it ends at i_size [+ + +]
Author: Filipe Manana <[email protected]>
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: [email protected] # 5.10+
    Reviewed-by: Qu Wenruo <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: send: handle unexpected data in header buffer in begin_cmd() [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: send: handle unexpected inode in header process_recorded_refs() [+ + +]
Author: David Sterba <[email protected]>
Date:   Tue Feb 6 22:47:13 2024 +0100

    btrfs: send: handle unexpected inode in header process_recorded_refs()
    
    [ Upstream commit 5d2288711ccc483feca73151c46ee835bda17839 ]
    
    Change BUG_ON to proper error handling when an unexpected inode number
    is encountered. As the comment says this should never happen.
    
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: tests: allocate dummy fs_info and root in test_find_delalloc() [+ + +]
Author: David Sterba <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: tree-checker: add dev extent item checks [+ + +]
Author: Qu Wenruo <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/CA+W5K0rSO3koYTo=nzxxTm1-Pdu1HYgVxEpgJ=aGc7d=E8mGEg@mail.gmail.com/
    CC: [email protected] # 5.10+
    Reviewed-by: Anand Jain <[email protected]>
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: tree-checker: reject BTRFS_FT_UNKNOWN dir type [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Mon Aug 12 08:52:44 2024 +0930

    btrfs: tree-checker: reject BTRFS_FT_UNKNOWN dir type
    
    commit 31723c9542dba1681cc3720571fdf12ffe0eddd9 upstream.
    
    [REPORT]
    There is a bug report that kernel is rejecting a mismatching inode mode
    and its dir item:
    
      [ 1881.553937] BTRFS critical (device dm-0): inode mode mismatch with
      dir: inode mode=040700 btrfs type=2 dir type=0
    
    [CAUSE]
    It looks like the inode mode is correct, while the dir item type
    0 is BTRFS_FT_UNKNOWN, which should not be generated by btrfs at all.
    
    This may be caused by a memory bit flip.
    
    [ENHANCEMENT]
    Although tree-checker is not able to do any cross-leaf verification, for
    this particular case we can at least reject any dir type with
    BTRFS_FT_UNKNOWN.
    
    So here we enhance the dir type check from [0, BTRFS_FT_MAX), to
    (0, BTRFS_FT_MAX).
    Although the existing corruption can not be fixed just by such enhanced
    checking, it should prevent the same 0x2->0x0 bitflip for dir type to
    reach disk in the future.
    
    Reported-by: Kota <[email protected]>
    Link: https://lore.kernel.org/linux-btrfs/CACsxjPYnQF9ZF-0OhH16dAx50=BXXOcP74MxBc3BG+xae4vTTw@mail.gmail.com/
    CC: [email protected] # 5.4+
    Signed-off-by: Qu Wenruo <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

btrfs: zlib: fix and simplify the inline extent decompression [+ + +]
Author: Qu Wenruo <[email protected]>
Date:   Mon Jan 8 19:38:44 2024 +1030

    btrfs: zlib: fix and simplify the inline extent decompression
    
    [ Upstream commit 2c25716dcc25a0420c4ad49d6e6bf61e60a21434 ]
    
    [BUG]
    
    If we have a filesystem with 4k sectorsize, and an inlined compressed
    extent created like this:
    
            item 4 key (257 INODE_ITEM 0) itemoff 15863 itemsize 160
                    generation 8 transid 8 size 4096 nbytes 4096
                    block group 0 mode 100600 links 1 uid 0 gid 0 rdev 0
                    sequence 1 flags 0x0(none)
            item 5 key (257 INODE_REF 256) itemoff 15839 itemsize 24
                    index 2 namelen 14 name: source_inlined
            item 6 key (257 EXTENT_DATA 0) itemoff 15770 itemsize 69
                    generation 8 type 0 (inline)
                    inline extent data size 48 ram_bytes 4096 compression 1 (zlib)
    
    Which has an inline compressed extent at file offset 0, and its
    decompressed size is 4K, allowing us to reflink that 4K range to another
    location (which will not be compressed).
    
    If we do such reflink on a subpage system, it would fail like this:
    
      # xfs_io -f -c "reflink $mnt/source_inlined 0 60k 4k" $mnt/dest
      XFS_IOC_CLONE_RANGE: Input/output error
    
    [CAUSE]
    In zlib_decompress(), we didn't treat @start_byte as just a page offset,
    but also use it as an indicator on whether we should switch our output
    buffer.
    
    In reality, for subpage cases, although @start_byte can be non-zero,
    we should never switch input/output buffer, since the whole input/output
    buffer should never exceed one sector.
    
    Note: The above assumption is only not true if we're going to support
    multi-page sectorsize.
    
    Thus the current code using @start_byte as a condition to switch
    input/output buffer or finish the decompression is completely incorrect.
    
    [FIX]
    The fix involves several modifications:
    
    - Rename @start_byte to @dest_pgoff to properly express its meaning
    
    - Add an extra ASSERT() inside btrfs_decompress() to make sure the
      input/output size never exceeds one sector.
    
    - Use Z_FINISH flag to make sure the decompression happens in one go
    
    - Remove the loop needed to switch input/output buffers
    
    - Use correct destination offset inside the destination page
    
    - Consider early end as an error
    
    After the fix, even on 64K page sized aarch64, above reflink now
    works as expected:
    
      # xfs_io -f -c "reflink $mnt/source_inlined 0 60k 4k" $mnt/dest
      linked 4096/4096 bytes at offset 61440
    
    And resulted a correct file layout:
    
            item 9 key (258 INODE_ITEM 0) itemoff 15542 itemsize 160
                    generation 10 transid 10 size 65536 nbytes 4096
                    block group 0 mode 100600 links 1 uid 0 gid 0 rdev 0
                    sequence 1 flags 0x0(none)
            item 10 key (258 INODE_REF 256) itemoff 15528 itemsize 14
                    index 3 namelen 4 name: dest
            item 11 key (258 XATTR_ITEM 3817753667) itemoff 15445 itemsize 83
                    location key (0 UNKNOWN.0 0) type XATTR
                    transid 10 data_len 37 name_len 16
                    name: security.selinux
                    data unconfined_u:object_r:unlabeled_t:s0
            item 12 key (258 EXTENT_DATA 61440) itemoff 15392 itemsize 53
                    generation 10 type 1 (regular)
                    extent data disk byte 13631488 nr 4096
                    extent data offset 0 nr 4096 ram 4096
                    extent compression 0 (none)
    
    Signed-off-by: Qu Wenruo <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

btrfs: zoned: properly take lock to read/update block group's zoned variables [+ + +]
Author: Naohiro Aota <[email protected]>
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: [email protected] # 5.15+
    Reviewed-by: Johannes Thumshirn <[email protected]>
    Signed-off-by: Naohiro Aota <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
cgroup: Avoid extra dereference in css_populate_dir() [+ + +]
Author: Kamalesh Babulal <[email protected]>
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 <[email protected]>
    Signed-off-by: Tejun Heo <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: change alloc_pages name in dma_map_ops to avoid name conflicts [+ + +]
Author: Suren Baghdasaryan <[email protected]>
Date:   Thu Mar 21 09:36:39 2024 -0700

    change alloc_pages name in dma_map_ops to avoid name conflicts
    
    [ Upstream commit 8a2f11878771da65b8ac135c73b47dae13afbd62 ]
    
    After redefining alloc_pages, all uses of that name are being replaced.
    Change the conflicting names to prevent preprocessor from replacing them
    when it's not intended.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Suren Baghdasaryan <[email protected]>
    Tested-by: Kees Cook <[email protected]>
    Cc: Alexander Viro <[email protected]>
    Cc: Alex Gaynor <[email protected]>
    Cc: Alice Ryhl <[email protected]>
    Cc: Andreas Hindborg <[email protected]>
    Cc: Benno Lossin <[email protected]>
    Cc: "Björn Roy Baron" <[email protected]>
    Cc: Boqun Feng <[email protected]>
    Cc: Christoph Lameter <[email protected]>
    Cc: Dennis Zhou <[email protected]>
    Cc: Gary Guo <[email protected]>
    Cc: Kent Overstreet <[email protected]>
    Cc: Miguel Ojeda <[email protected]>
    Cc: Pasha Tatashin <[email protected]>
    Cc: Peter Zijlstra <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Wedson Almeida Filho <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 61ebe5a747da ("mm/vmalloc: fix page mapping if vm_area_alloc_pages() with high order fallback to order 0")
    Signed-off-by: Sasha Levin <[email protected]>

 
char: xillybus: Check USB endpoints when probing device [+ + +]
Author: Eli Billauer <[email protected]>
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: [email protected]
    Cc: stable <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/T/
    Fixes: a53d1202aef1 ("char: xillybus: Add driver for XillyUSB (Xillybus variant for USB)").
    Signed-off-by: Eli Billauer <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

char: xillybus: Don't destroy workqueue from work item running on it [+ + +]
Author: Eli Billauer <[email protected]>
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: [email protected]
    Cc: stable <[email protected]>
    Closes: https://lore.kernel.org/lkml/[email protected]/
    Signed-off-by: Eli Billauer <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

char: xillybus: Refine workqueue handling [+ + +]
Author: Eli Billauer <[email protected]>
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 <[email protected]>
    Signed-off-by: Eli Billauer <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
clk: visconti: Add bounds-checking coverage for struct visconti_pll_provider [+ + +]
Author: Gustavo A. R. Silva <[email protected]>
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 <[email protected]>
    Acked-by: Nobuhiro Iwamatsu <[email protected]>
    Signed-off-by: Gustavo A. R. Silva <[email protected]>
    Link: https://lore.kernel.org/r/e3189f3e40e8723b6d794fb2260e2e9ab6b960bd.1697492890.git.gustavoars@kernel.org
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
clocksource/drivers/arm_global_timer: Guard against division by zero [+ + +]
Author: Martin Blumenstingl <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Lezcano <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
clocksource: Make watchdog and suspend-timing multiplication overflow safe [+ + +]
Author: Adrian Hunter <[email protected]>
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 <[email protected]>
    Signed-off-by: Adrian Hunter <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
cpu/SMT: Enable SMT only if a core is online [+ + +]
Author: Nysal Jan K.A <[email protected]>
Date:   Wed Jul 31 08:31:12 2024 +0530

    cpu/SMT: Enable SMT only if a core is online
    
    [ Upstream commit 6c17ea1f3eaa330d445ac14a9428402ce4e3055e ]
    
    If a core is offline then enabling SMT should not online CPUs of
    this core. By enabling SMT, what is intended is either changing the SMT
    value from "off" to "on" or setting the SMT level (threads per core) from a
    lower to higher value.
    
    On PowerPC the ppc64_cpu utility can be used, among other things, to
    perform the following functions:
    
    ppc64_cpu --cores-on                # Get the number of online cores
    ppc64_cpu --cores-on=X              # Put exactly X cores online
    ppc64_cpu --offline-cores=X[,Y,...] # Put specified cores offline
    ppc64_cpu --smt={on|off|value}      # Enable, disable or change SMT level
    
    If the user has decided to offline certain cores, enabling SMT should
    not online CPUs in those cores. This patch fixes the issue and changes
    the behaviour as described, by introducing an arch specific function
    topology_is_core_online(). It is currently implemented only for PowerPC.
    
    Fixes: 73c58e7e1412 ("powerpc: Add HOTPLUG_SMT support")
    Reported-by: Tyrel Datwyler <[email protected]>
    Closes: https://groups.google.com/g/powerpc-utils-devel/c/wrwVzAAnRlI/m/5KJSoqP4BAAJ
    Signed-off-by: Nysal Jan K.A <[email protected]>
    Reviewed-by: Shrikanth Hegde <[email protected]>
    Reviewed-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
cxgb4: add forgotten u64 ivlan cast before shift [+ + +]
Author: Nikolay Kuratov <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Fixes: 12b276fbf6e0 ("cxgb4: add support to create hash filters")
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm persistent data: fix memory allocation failure [+ + +]
Author: Mikulas Patocka <[email protected]>
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 <[email protected]>
    Reported-by: Zdenek Kabelac <[email protected]>
    Reviewed-by: Mike Snitzer <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm resume: don't return EINVAL when signalled [+ + +]
Author: Khazhismel Kumykov <[email protected]>
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 <[email protected]>
    Signed-off-by: Khazhismel Kumykov <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
dm suspend: return -ERESTARTSYS instead of -EINTR [+ + +]
Author: Mikulas Patocka <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
dpaa2-switch: Fix error checking in dpaa2_switch_seed_bp() [+ + +]
Author: Dan Carpenter <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Ioana Ciornei <[email protected]>
    Tested-by: Ioana Ciornei <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/amdgpu/imu_v11_0: Increase buffer size to ensure all possible values can be stored [+ + +]
Author: Lee Jones <[email protected]>
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 <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/amdgpu: command submission parser for JPEG [+ + +]
Author: David (Ming Qiang) Wu <[email protected]>
Date:   Thu Aug 8 12:19:50 2024 -0400

    drm/amd/amdgpu: command submission parser for JPEG
    
    [ Upstream commit 470516c2925493594a690bc4d05b1f4471d9f996 ]
    
    Add JPEG IB command parser to ensure registers
    in the command are within the JPEG IP block.
    
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: David (Ming Qiang) Wu <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit a7f670d5d8e77b092404ca8a35bb0f8f89ed3117)
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/display: Adjust cursor position [+ + +]
Author: Rodrigo Siqueira <[email protected]>
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 <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Acked-by: Wayne Lin <[email protected]>
    Signed-off-by: Rodrigo Siqueira <[email protected]>
    Signed-off-by: Tom Chung <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 8f9b23abbae5ffcd64856facd26a86b67195bc2f)
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Enable otg synchronization logic for DCN321 [+ + +]
Author: Loan Chen <[email protected]>
Date:   Fri Aug 2 13:57:40 2024 +0800

    drm/amd/display: Enable otg synchronization logic for DCN321
    
    [ Upstream commit 0dbb81d44108a2a1004e5b485ef3fca5bc078424 ]
    
    [Why]
    Tiled display cannot synchronize properly after S3.
    The fix for commit 5f0c74915815 ("drm/amd/display: Fix for otg
    synchronization logic") is not enable in DCN321, which causes
    the otg is excluded from synchronization.
    
    [How]
    Enable otg synchronization logic in dcn321.
    
    Fixes: 5f0c74915815 ("drm/amd/display: Fix for otg synchronization logic")
    Cc: Mario Limonciello <[email protected]>
    Cc: Alex Deucher <[email protected]>
    Reviewed-by: Alvin Lee <[email protected]>
    Signed-off-by: Loan Chen <[email protected]>
    Signed-off-by: Tom Chung <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit d6ed53712f583423db61fbb802606759e023bf7b)
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: fix cursor offset on rotation 180 [+ + +]
Author: Melissa Wen <[email protected]>
Date:   Tue Jan 31 15:05:46 2023 -0100

    drm/amd/display: fix cursor offset on rotation 180
    
    [ Upstream commit 737222cebecbdbcdde2b69475c52bcb9ecfeb830 ]
    
    [why & how]
    Cursor gets clipped off in the middle of the screen with hw
    rotation 180. Fix a miscalculation of cursor offset when it's
    placed near the edges in the pipe split case.
    
    Cursor bugs with hw rotation were reported on AMD issue
    tracker:
    https://gitlab.freedesktop.org/drm/amd/-/issues/2247
    
    The issues on rotation 270 was fixed by:
    https://lore.kernel.org/amd-gfx/[email protected]/
    that partially addressed the rotation 180 too. So, this patch is the
    final bits for rotation 180.
    
    Reported-by: Xaver Hugl <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2247
    Reviewed-by: Harry Wentland <[email protected]>
    Fixes: 9d84c7ef8a87 ("drm/amd/display: Correct cursor position on horizontal mirror")
    Signed-off-by: Melissa Wen <[email protected]>
    Signed-off-by: Hamza Mahfooz <[email protected]>
    Signed-off-by: Tom Chung <[email protected]>
    Tested-by: Daniel Wheeler <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 1fd2cf090096af8a25bf85564341cfc21cec659d)
    Cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: Validate hw_points_num before using it [+ + +]
Author: Alex Hung <[email protected]>
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 <[email protected]>
    Signed-off-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amd/pm: fix error flow in sensor fetching [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Fri Aug 18 12:21:32 2023 -0400

    drm/amd/pm: fix error flow in sensor fetching
    
    [ Upstream commit a5600853167aeba5cade81f184a382a0d1b14641 ]
    
    Sensor fetching functions should return an signed int to
    handle errors properly.
    
    Reviewed-by: Srinivasan Shanmugam <[email protected]>
    Reported-by: Jiapeng Chong <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdgpu/jpeg2: properly set atomics vmid field [+ + +]
Author: Alex Deucher <[email protected]>
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 <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 35c628774e50b3784c59e8ca7973f03bcb067132)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/jpeg4: properly set atomics vmid field [+ + +]
Author: Alex Deucher <[email protected]>
Date:   Fri Jul 12 10:06:05 2024 -0400

    drm/amdgpu/jpeg4: properly set atomics vmid field
    
    commit e6c6bd6253e792cee6c5c065e106e87b9f0d9ae9 upstream.
    
    This needs to be set as well if the IB uses atomics.
    
    Reviewed-by: Leo Liu <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit c6c2e8b6a427d4fecc7c36cffccb908185afcab2)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu/vcn: identify unified queue in sw init [+ + +]
Author: Boyuan Zhang <[email protected]>
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 <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Reviewed-by: Ruijing Dong <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu/vcn: not pause dpg for unified queue [+ + +]
Author: Boyuan Zhang <[email protected]>
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 <[email protected]>
    Acked-by: Alex Deucher <[email protected]>
    Reviewed-by: Ruijing Dong <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Mario Limonciello <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdgpu: access RLC_SPM_MC_CNTL through MMIO in SRIOV runtime [+ + +]
Author: ZhenGuo Yin <[email protected]>
Date:   Mon Aug 28 14:18:52 2023 +0800

    drm/amdgpu: access RLC_SPM_MC_CNTL through MMIO in SRIOV runtime
    
    [ Upstream commit 9f05cfc78c6880e06940ea78fbc43f6392710f17 ]
    
    Register RLC_SPM_MC_CNTL is not blocked by L1 policy, VF can
    directly access it through MMIO during SRIOV runtime.
    
    v2: use SOC15 interface to access registers
    
    Acked-by: Alex Deucher <[email protected]>
    Signed-off-by: ZhenGuo Yin <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu: Actually check flags for all context ops. [+ + +]
Author: Bas Nieuwenhuizen <[email protected]>
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 <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit c6b86421f1f9ddf9d706f2453159813ee39d0cf9)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/amdgpu: fix dereference null return value for the function amdgpu_vm_pt_parent [+ + +]
Author: Jesse Zhang <[email protected]>
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 <[email protected]>
    Suggested-by: Christian König <[email protected]>
    Reviewed-by: Christian König <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdgpu: Validate TA binary size [+ + +]
Author: Candice Li <[email protected]>
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 <[email protected]>
    Reviewed-by: Hawking Zhang <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit c0a04e3570d72aaf090962156ad085e37c62e442)
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdkfd: Move dma unmapping after TLB flush [+ + +]
Author: Philip Yang <[email protected]>
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 <[email protected]>
    Reviewed-by: Felix Kuehling <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/amdkfd: reserve the BO before validating it [+ + +]
Author: Lang Yu <[email protected]>
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 <[email protected]>
    Reviewed-by: Felix Kuehling <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/bridge: tc358768: Attempt to fix DSI horizontal timings [+ + +]
Author: Tomi Valkeinen <[email protected]>
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 <[email protected]>
    Tested-by: Marcel Ziswiler <[email protected]>
    Tested-by: Maxim Schwalm <[email protected]> # Asus TF700T
    Signed-off-by: Tomi Valkeinen <[email protected]>
    Signed-off-by: Robert Foss <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/lima: set gp bus_stop bit before hard reset [+ + +]
Author: Erico Nunes <[email protected]>
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 <[email protected]>
    Signed-off-by: Qiang Yu <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dp: fix the max supported bpp logic [+ + +]
Author: Abhinav Kumar <[email protected]>
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 <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/43
    Tested-by: Dmitry Baryshkov <[email protected]> # SM8350-HDK
    Reviewed-by: Stephen Boyd <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/607073/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Stephen Boyd <[email protected]>
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dp: reset the link phy params before link training [+ + +]
Author: Abhinav Kumar <[email protected]>
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 <[email protected]>
    Tested-by: Dmitry Baryshkov <[email protected]> # SM8350-HDK
    Reviewed-by: Stephen Boyd <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/605946/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/dpu: capture snapshot on the first commit_done timeout [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Mon Feb 26 04:28:01 2024 +0200

    drm/msm/dpu: capture snapshot on the first commit_done timeout
    
    [ Upstream commit 4be445f5b6b6810baf397b2d159bd07c3573fd75 ]
    
    In order to debug commit_done timeouts, capture the devcoredump state
    when the first timeout occurs after the encoder has been enabled.
    
    Reviewed-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/579850/
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: aedf02e46eb5 ("drm/msm/dpu: move dpu_encoder's connector assignment to atomic_enable()")
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: cleanup FB if dpu_format_populate_layout fails [+ + +]
Author: Dmitry Baryshkov <[email protected]>
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 <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/600714/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: don't play tricks with debug macros [+ + +]
Author: Dmitry Baryshkov <[email protected]>
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 <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/606932/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: drop MSM_ENC_VBLANK support [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Wed Oct 4 06:19:03 2023 +0300

    drm/msm/dpu: drop MSM_ENC_VBLANK support
    
    [ Upstream commit a08935fc859b22884dcb6b5126d3a986467101ce ]
    
    There are no in-kernel users of MSM_ENC_VBLANK wait type. Drop it
    together with the corresponding wait_for_vblank callback.
    
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/560701/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Stable-dep-of: aedf02e46eb5 ("drm/msm/dpu: move dpu_encoder's connector assignment to atomic_enable()")
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: move dpu_encoder's connector assignment to atomic_enable() [+ + +]
Author: Abhinav Kumar <[email protected]>
Date:   Wed Jul 31 12:17:22 2024 -0700

    drm/msm/dpu: move dpu_encoder's connector assignment to atomic_enable()
    
    [ Upstream commit aedf02e46eb549dac8db4821a6b9f0c6bf6e3990 ]
    
    For cases where the crtc's connectors_changed was set without enable/active
    getting toggled , there is an atomic_enable() call followed by an
    atomic_disable() but without an atomic_mode_set().
    
    This results in a NULL ptr access for the dpu_encoder_get_drm_fmt() call in
    the atomic_enable() as the dpu_encoder's connector was cleared in the
    atomic_disable() but not re-assigned as there was no atomic_mode_set() call.
    
    Fix the NULL ptr access by moving the assignment for atomic_enable() and also
    use drm_atomic_get_new_connector_for_encoder() to get the connector from
    the atomic_state.
    
    Fixes: 25fdd5933e4c ("drm/msm: Add SDM845 DPU support")
    Reported-by: Dmitry Baryshkov <[email protected]>
    Closes: https://gitlab.freedesktop.org/drm/msm/-/issues/59
    Suggested-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Tested-by: Dmitry Baryshkov <[email protected]> # SM8350-HDK
    Patchwork: https://patchwork.freedesktop.org/patch/606729/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: split dpu_encoder_wait_for_event into two functions [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Mon Feb 26 04:28:00 2024 +0200

    drm/msm/dpu: split dpu_encoder_wait_for_event into two functions
    
    [ Upstream commit d72a3d35b7ef5a3c0260462f130fa3dd7576aa2f ]
    
    Stop multiplexing several events via the dpu_encoder_wait_for_event()
    function. Split it into two distinct functions two allow separate
    handling of those events.
    
    Reviewed-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/579848/
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: aedf02e46eb5 ("drm/msm/dpu: move dpu_encoder's connector assignment to atomic_enable()")
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: take plane rotation into account for wide planes [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Thu Jun 27 00:45:57 2024 +0300

    drm/msm/dpu: take plane rotation into account for wide planes
    
    [ Upstream commit d3a785e4f983f523380e023d8a05fb6d04402957 ]
    
    Take into account the plane rotation and flipping when calculating src
    positions for the wide plane parts.
    
    This is not an issue yet, because rotation is only supported for the
    UBWC planes and wide UBWC planes are rejected anyway because in parallel
    multirect case only the half of the usual width is supported for tiled
    formats. However it's better to fix this now rather than stumbling upon
    it later.
    
    Fixes: 80e8ae3b38ab ("drm/msm/dpu: add support for wide planes")
    Reviewed-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/601059/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: try multirect based on mdp clock limits [+ + +]
Author: Abhinav Kumar <[email protected]>
Date:   Mon Sep 11 15:16:27 2023 -0700

    drm/msm/dpu: try multirect based on mdp clock limits
    
    [ Upstream commit e6c0de5f445091d250b75dabc4c60dd2643b8c98 ]
    
    It's certainly possible that for large resolutions a single DPU SSPP
    cannot process the image without exceeding the MDP clock limits but
    it can still process it in multirect mode because the source rectangles
    will get divided and can fall within the MDP clock limits.
    
    If the SSPP cannot process the image even in multirect mode, then it
    will be rejected in dpu_plane_atomic_check_pipe().
    
    Hence try using multirect for resolutions which cannot be processed
    by a single SSPP without exceeding the MDP clock limits.
    
    changes in v2:
            - use crtc_state's adjusted_mode instead of mode
            - fix the UBWC condition to check maxlinewidth
    
    Signed-off-by: Abhinav Kumar <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Tested-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/556817/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Stable-dep-of: d3a785e4f983 ("drm/msm/dpu: take plane rotation into account for wide planes")
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/dpu: use drmm-managed allocation for dpu_encoder_phys [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Sat Dec 2 00:18:43 2023 +0300

    drm/msm/dpu: use drmm-managed allocation for dpu_encoder_phys
    
    [ Upstream commit 73169b45e1ed296b4357a694f5fa586ac0643ac1 ]
    
    Change struct allocation of encoder's phys backend data to use
    drmm_kzalloc(). This removes the need to perform any actions on encoder
    destruction.
    
    Reviewed-by: Jessica Zhang <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/570051/
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: aedf02e46eb5 ("drm/msm/dpu: move dpu_encoder's connector assignment to atomic_enable()")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm/mdss: Handle the reg bus ICC path [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Sun Dec 3 01:42:47 2023 +0300

    drm/msm/mdss: Handle the reg bus ICC path
    
    [ Upstream commit a55c8ff252d374acb6f78b979cadc38073ce95e8 ]
    
    Apart from the already handled data bus (MAS_MDP_Pn<->DDR), there's
    another path that needs to be handled to ensure MDSS functions properly,
    namely the "reg bus", a.k.a the CPU-MDSS interconnect.
    
    Gating that path may have a variety of effects, from none to otherwise
    inexplicable DSI timeouts.
    
    Provide a way for MDSS driver to vote on this bus.
    
    A note regarding vote values. Newer platforms have corresponding
    bandwidth values in the vendor DT files. For the older platforms there
    was a static vote in the mdss_mdp and rotator drivers. I choose to be
    conservative here and choose this value as a default.
    
    Co-developed-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Konrad Dybcio <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/570164/
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 3e30296b374a ("drm/msm: fix the highest_bank_bit for sc7180")
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/mdss: Rename path references to mdp_path [+ + +]
Author: Konrad Dybcio <[email protected]>
Date:   Sun Dec 3 01:42:45 2023 +0300

    drm/msm/mdss: Rename path references to mdp_path
    
    [ Upstream commit fabaf176322d687b91a4acf1630c0d0a7d097faa ]
    
    The DPU1 driver needs to handle all MDPn<->DDR paths, as well as
    CPU<->SLAVE_DISPLAY_CFG. The former ones share how their values are
    calculated, but the latter one has static predefines spanning all SoCs.
    
    In preparation for supporting the CPU<->SLAVE_DISPLAY_CFG path, rename
    the path-related struct members to include "mdp_".
    
    Signed-off-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/570163/
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 3e30296b374a ("drm/msm: fix the highest_bank_bit for sc7180")
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm/mdss: specify cfg bandwidth for SDM670 [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Fri Dec 15 03:32:22 2023 +0200

    drm/msm/mdss: specify cfg bandwidth for SDM670
    
    commit 8d35217149daa33358c284aca6a56d5ab92cfc6c upstream.
    
    Lower the requested CFG bus bandwidth for the SDM670 platform. The
    default value is 153600 kBps, which is twice as big as required by the
    platform according to the vendor kernel.
    
    Fixes: a55c8ff252d3 ("drm/msm/mdss: Handle the reg bus ICC path")
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Tested-by: Richard Acayan <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/572182/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/msm/mdss: switch mdss to use devm_of_icc_get() [+ + +]
Author: Dmitry Baryshkov <[email protected]>
Date:   Sun Dec 3 01:42:44 2023 +0300

    drm/msm/mdss: switch mdss to use devm_of_icc_get()
    
    [ Upstream commit ded61d7dc5a0f8cfe7390aba33187c862d09b177 ]
    
    Stop using hand-written reset function for ICC release, use
    devm_of_icc_get() instead.
    
    Signed-off-by: Dmitry Baryshkov <[email protected]>
    Reviewed-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Abhinav Kumar <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/570161/
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 3e30296b374a ("drm/msm: fix the highest_bank_bit for sc7180")
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/msm: fix the highest_bank_bit for sc7180 [+ + +]
Author: Abhinav Kumar <[email protected]>
Date:   Thu Aug 8 16:52:27 2024 -0700

    drm/msm: fix the highest_bank_bit for sc7180
    
    [ Upstream commit 3e30296b374af33cb4c12ff93df0b1e5b2d0f80b ]
    
    sc7180 programs the ubwc settings as 0x1e as that would mean a
    highest bank bit of 14 which matches what the GPU sets as well.
    
    However, the highest_bank_bit field of the msm_mdss_data which is
    being used to program the SSPP's fetch configuration is programmed
    to a highest bank bit of 16 as 0x3 translates to 16 and not 14.
    
    Fix the highest bank bit field used for the SSPP to match the mdss
    and gpu settings.
    
    Fixes: 6f410b246209 ("drm/msm/mdss: populate missing data")
    Reviewed-by: Rob Clark <[email protected]>
    Tested-by: Stephen Boyd <[email protected]> # Trogdor.Lazor
    Patchwork: https://patchwork.freedesktop.org/patch/607625/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Abhinav Kumar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

drm/msm: Reduce fallout of fence signaling vs reclaim hangs [+ + +]
Author: Rob Clark <[email protected]>
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 <[email protected]>
    Patchwork: https://patchwork.freedesktop.org/patch/568031/
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/panel: nt36523: Set 120Hz fps for xiaomi,elish panels [+ + +]
Author: Jianhua Lu <[email protected]>
Date:   Fri Jan 12 22:00:47 2024 +0800

    drm/panel: nt36523: Set 120Hz fps for xiaomi,elish panels
    
    commit de8ac5696ebc3a2d89c88b70aa3996ee112e76ef upstream.
    
    After commit e6c0de5f4450 ("drm/msm/dpu: try multirect based on mdp clock limits")
    merged, 120Hz is working on xiaomi,elish panels, so feature it.
    
    Signed-off-by: Jianhua Lu <[email protected]>
    Reviewed-by: Jessica Zhang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/rockchip: vop2: clear afbc en and transform bit for cluster window at linear mode [+ + +]
Author: Andy Yan <[email protected]>
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 <[email protected]>
    Reviewed-by: Sascha Hauer <[email protected]>
    Signed-off-by: Heiko Stuebner <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/tegra: Zero-initialize iosys_map [+ + +]
Author: Mikko Perttunen <[email protected]>
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 <[email protected]>
    Signed-off-by: Mikko Perttunen <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
EDAC/skx_common: Allow decoding of SGX addresses [+ + +]
Author: Qiuxu Zhuo <[email protected]>
Date:   Mon Apr 8 20:04:19 2024 +0800

    EDAC/skx_common: Allow decoding of SGX addresses
    
    [ Upstream commit e0d335077831196bffe6a634ffe385fc684192ca ]
    
    There are no "struct page" associations with SGX pages, causing the check
    pfn_to_online_page() to fail. This results in the inability to decode the
    SGX addresses and warning messages like:
    
      Invalid address 0x34cc9a98840 in IA32_MC17_ADDR
    
    Add an additional check to allow the decoding of the error address and to
    skip the warning message, if the error address is an SGX address.
    
    Fixes: 1e92af09fab1 ("EDAC/skx_common: Filter out the invalid address")
    Signed-off-by: Qiuxu Zhuo <[email protected]>
    Signed-off-by: Tony Luck <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

EDAC/skx_common: Filter out the invalid address [+ + +]
Author: Qiuxu Zhuo <[email protected]>
Date:   Thu Dec 7 09:45:12 2023 +0800

    EDAC/skx_common: Filter out the invalid address
    
    [ Upstream commit 1e92af09fab1b5589f3a7ae68109e3c6a5ca6c6e ]
    
    Decoding an invalid address with certain firmware decoders could
    cause a #PF (Page Fault) in the EFI runtime context, which could
    subsequently hang the system. To make {i10nm,skx}_edac more robust
    against such bogus firmware decoders, filter out invalid addresses
    before allowing the firmware decoder to process them.
    
    Suggested-by: Tony Luck <[email protected]>
    Signed-off-by: Qiuxu Zhuo <[email protected]>
    Signed-off-by: Tony Luck <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
evm: don't copy up 'security.evm' xattr [+ + +]
Author: Mimi Zohar <[email protected]>
Date:   Tue Dec 12 06:12:43 2023 -0500

    evm: don't copy up 'security.evm' xattr
    
    [ Upstream commit 40ca4ee3136d2d09977d1cab8c0c0e1582c3359d ]
    
    The security.evm HMAC and the original file signatures contain
    filesystem specific data.  As a result, the HMAC and signature
    are not the same on the stacked and backing filesystems.
    
    Don't copy up 'security.evm'.
    
    Reviewed-by: Amir Goldstein <[email protected]>
    Reviewed-by: Christian Brauner <[email protected]>
    Signed-off-by: Mimi Zohar <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ext4: do not trim the group with corrupted block bitmap [+ + +]
Author: Baokun Li <[email protected]>
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 <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ext4: set the type of max_zeroout to unsigned int to avoid overflow [+ + +]
Author: Baokun Li <[email protected]>
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 <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
f2fs: fix to do sanity check in update_sit_entry [+ + +]
Author: Zhiguo Niu <[email protected]>
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 <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

f2fs: stop checkpoint when get a out-of-bounds segment [+ + +]
Author: Zhiguo Niu <[email protected]>
Date:   Tue Feb 20 14:11:24 2024 +0800

    f2fs: stop checkpoint when get a out-of-bounds segment
    
    [ Upstream commit f9e28904e6442019043a8e94ec6747a064d06003 ]
    
    There is low probability that an out-of-bounds segment will be got
    on a small-capacity device. In order to prevent subsequent write requests
    allocating block address from this invalid segment, which may cause
    unexpected issue, stop checkpoint should be performed.
    
    Also introduce a new stop cp reason: STOP_CP_REASON_NO_SEGMENT.
    
    Note, f2fs_stop_checkpoint(, false) is complex and it may sleep, so we should
    move it outside segmap_lock spinlock coverage in get_new_segment().
    
    Signed-off-by: Zhiguo Niu <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
firmware: cirrus: cs_dsp: Initialize debugfs_root to invalid [+ + +]
Author: Richard Fitzgerald <[email protected]>
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 <[email protected]>
    Link: https://msgid.link/r/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Linux: fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE [+ + +]
Author: Al Viro <[email protected]>
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: [email protected]
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/netfs/fscache_cookie: add missing "n_accesses" check [+ + +]
Author: Max Kellermann <[email protected]>
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 <[email protected]>
    Signed-off-by: David Howells <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    cc: Jeff Layton <[email protected]>
    cc: [email protected]
    cc: [email protected]
    cc: [email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs/ntfs3: add prefix to bitmap_size() and use BITS_TO_U64() [+ + +]
Author: Alexander Lobakin <[email protected]>
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 <[email protected]> # BITS_TO_U64()
    Reviewed-by: Przemek Kitszel <[email protected]>
    Reviewed-by: Yury Norov <[email protected]>
    Signed-off-by: Alexander Lobakin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fs: binfmt_elf_efpic: don't use missing interpreter's properties [+ + +]
Author: Max Filippov <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
fuse: fix UAF in rcu pathwalks [+ + +]
Author: Al Viro <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

fuse: Initialize beyond-EOF page contents before setting uptodate [+ + +]
Author: Jann Horn <[email protected]>
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: [email protected]
    Fixes: a1d75f258230 ("fuse: add store request")
    Signed-off-by: Jann Horn <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gfs2: Refcounting fix in gfs2_thaw_super [+ + +]
Author: Andreas Gruenbacher <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gfs2: setattr_chown: Add missing initialization [+ + +]
Author: Andreas Gruenbacher <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpio: mlxbf3: Support shutdown() function [+ + +]
Author: Asmaa Mnebhi <[email protected]>
Date:   Tue Jun 11 13:15:09 2024 -0400

    gpio: mlxbf3: Support shutdown() function
    
    [ Upstream commit aad41832326723627ad8ac9ee8a543b6dca4454d ]
    
    During Linux graceful reboot, the GPIO interrupts are not disabled.
    Since the drivers are not removed during graceful reboot,
    the logic to call mlxbf3_gpio_irq_disable() is not triggered.
    Interrupts that remain enabled can cause issues on subsequent boots.
    
    For example, the mlxbf-gige driver contains PHY logic to bring up the link.
    If the gpio-mlxbf3 driver loads first, the mlxbf-gige driver
    will use a GPIO interrupt to bring up the link.
    Otherwise, it will use polling.
    The next time Linux boots and loads the drivers in this order, we encounter the issue:
    - mlxbf-gige loads first and uses polling while the GPIO10
      interrupt is still enabled from the previous boot. So if
      the interrupt triggers, there is nothing to clear it.
    - gpio-mlxbf3 loads.
    - i2c-mlxbf loads. The interrupt doesn't trigger for I2C
      because it is shared with the GPIO interrupt line which
      was not cleared.
    
    The solution is to add a shutdown function to the GPIO driver to clear and disable
    all interrupts. Also clear the interrupt after disabling it in mlxbf3_gpio_irq_disable().
    
    Fixes: 38a700efc510 ("gpio: mlxbf3: Add gpio driver support")
    Signed-off-by: Asmaa Mnebhi <[email protected]>
    Reviewed-by: David Thompson <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

gpio: sysfs: extend the critical section for unregistering sysfs devices [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Wed Jan 24 14:08:45 2024 +0100

    gpio: sysfs: extend the critical section for unregistering sysfs devices
    
    [ Upstream commit 59cba4a0e6ca1058fbf88fec22530a4e2841802a ]
    
    Checking the gdev->mockdev pointer for NULL must be part of the critical
    section.
    
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Acked-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gtp: pull network headers in gtp_dev_xmit() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Cc: Harald Welte <[email protected]>
    Reviewed-by: Pablo Neira Ayuso <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
HID: wacom: Defer calculation of resolution until resolution_code is known [+ + +]
Author: Jason Gerecke <[email protected]>
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 <[email protected]>
    Fixes: 08a46b4190d3 ("HID: wacom: Set a default resolution for older tablets")
    Cc: [email protected]
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
hrtimer: Prevent queuing of hrtimer without a function callback [+ + +]
Author: Phil Chang <[email protected]>
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 <[email protected]>
    Signed-off-by: Anna-Maria Behnsen <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Anna-Maria Behnsen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hrtimer: Select housekeeping CPU during migration [+ + +]
Author: Costa Shulyupin <[email protected]>
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 <[email protected]>
    Signed-off-by: Costa Shulyupin <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Waiman Long <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
hwmon: (ltc2992) Avoid division by zero [+ + +]
Author: Antoniu Miclaus <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

hwmon: (ltc2992) Fix memory leak in ltc2992_parse_dt() [+ + +]
Author: Javier Carrasco <[email protected]>
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: [email protected]
    Fixes: 10b029020487 ("hwmon: (ltc2992) Avoid division by zero")
    Signed-off-by: Javier Carrasco <[email protected]>
    Link: https://lore.kernel.org/r/20240523-fwnode_for_each_available_child_node_scoped-v2-1-701f3a03f2fb@gmail.com
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

hwmon: (pc87360) Bounds check data->innr usage [+ + +]
Author: Kees Cook <[email protected]>
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 <[email protected]>
    Cc: Jean Delvare <[email protected]>
    Cc: Guenter Roeck <[email protected]>
    Cc: [email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Reviewed-by: Gustavo A. R. Silva <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [groeck: Added comment into code clarifying context]
    Signed-off-by: Guenter Roeck <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
i2c: qcom-geni: Add missing geni_icc_disable in geni_i2c_runtime_resume [+ + +]
Author: Andi Shyti <[email protected]>
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 <[email protected]>
    Cc: [email protected] # v5.9+
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

i2c: riic: avoid potential division by zero [+ + +]
Author: Wolfram Sang <[email protected]>
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 <[email protected]>
    Reviewed-by: Geert Uytterhoeven <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i2c: stm32f7: Add atomic_xfer method to driver [+ + +]
Author: Sean Nyekjaer <[email protected]>
Date:   Wed Aug 16 10:05:52 2023 +0200

    i2c: stm32f7: Add atomic_xfer method to driver
    
    commit 470a662688563d8f5e0fb164930d6f5507a883e4 upstream.
    
    Add an atomic_xfer method to the driver so that it behaves correctly
    when controlling a PMIC that is responsible for device shutdown.
    
    The atomic_xfer method added is similar to the one from the i2c-mv64xxx
    driver. When running an atomic_xfer a bool flag in the driver data is
    set, the interrupt is not unmasked on transfer start, and the IRQ
    handler is manually invoked while waiting for pending transfers to
    complete.
    
    Signed-off-by: Sean Nyekjaer <[email protected]>
    Acked-by: Andi Shyti <[email protected]>
    Signed-off-by: Wolfram Sang <[email protected]>
    Cc: Christoph Niedermaier <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

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

    i2c: tegra: Do not mark ACPI devices as irq safe
    
    commit 14d069d92951a3e150c0a81f2ca3b93e54da913b upstream.
    
    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: <[email protected]> # v5.17+
    Co-developed-by: Michael van der Westhuizen <[email protected]>
    Signed-off-by: Michael van der Westhuizen <[email protected]>
    Signed-off-by: Breno Leitao <[email protected]>
    Reviewed-by: Dmitry Osipenko <[email protected]>
    Reviewed-by: Andy Shevchenko <[email protected]>
    Signed-off-by: Andi Shyti <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
i3c: mipi-i3c-hci: Do not unmap region not mapped for transfer [+ + +]
Author: Jarkko Nikula <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

i3c: mipi-i3c-hci: Remove BUG() when Ring Abort request times out [+ + +]
Author: Jarkko Nikula <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
IB/hfi1: Fix potential deadlock on &irq_src_lock and &dd->uctxt_lock [+ + +]
Author: Chengfeng Ye <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Acked-by: Dennis Dalessandro <[email protected]>
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ice: fix ICE_LAST_OFFSET formula [+ + +]
Author: Maciej Fijalkowski <[email protected]>
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 <[email protected]>
    Signed-off-by: Maciej Fijalkowski <[email protected]>
    Tested-by: Chandan Kumar Rout <[email protected]> (A Contingent Worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ice: fix page reuse when PAGE_SIZE is over 8k [+ + +]
Author: Maciej Fijalkowski <[email protected]>
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 <[email protected]>
    Tested-by: Chandan Kumar Rout <[email protected]> (A Contingent Worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ice: fix truesize operations for PAGE_SIZE >= 8192 [+ + +]
Author: Maciej Fijalkowski <[email protected]>
Date:   Wed Aug 7 12:53:26 2024 +0200

    ice: fix truesize operations for PAGE_SIZE >= 8192
    
    [ Upstream commit d53d4dcce69be5773e2d0878c9899ebfbf58c393 ]
    
    When working on multi-buffer packet on arch that has PAGE_SIZE >= 8192,
    truesize is calculated and stored in xdp_buff::frame_sz per each
    processed Rx buffer. This means that frame_sz will contain the truesize
    based on last received buffer, but commit 1dc1a7e7f410 ("ice:
    Centrallize Rx buffer recycling") assumed this value will be constant
    for each buffer, which breaks the page recycling scheme and mess up the
    way we update the page::page_offset.
    
    To fix this, let us work on constant truesize when PAGE_SIZE >= 8192
    instead of basing this on size of a packet read from Rx descriptor. This
    way we can simplify the code and avoid calculating truesize per each
    received frame and on top of that when using
    xdp_update_skb_shared_info(), current formula for truesize update will
    be valid.
    
    This means ice_rx_frame_truesize() can be removed altogether.
    Furthermore, first call to it within ice_clean_rx_irq() for 4k PAGE_SIZE
    was redundant as xdp_buff::frame_sz is initialized via xdp_init_buff()
    in ice_vsi_cfg_rxq(). This should have been removed at the point where
    xdp_buff struct started to be a member of ice_rx_ring and it was no
    longer a stack based variable.
    
    There are two fixes tags as my understanding is that the first one
    exposed us to broken truesize and page_offset handling and then second
    introduced broken skb_shared_info update in ice_{construct,build}_skb().
    
    Reported-and-tested-by: Luiz Capitulino <[email protected]>
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Fixes: 1dc1a7e7f410 ("ice: Centrallize Rx buffer recycling")
    Fixes: 2fba7dc5157b ("ice: Add support for XDP multi-buffer on Rx side")
    Signed-off-by: Maciej Fijalkowski <[email protected]>
    Tested-by: Chandan Kumar Rout <[email protected]> (A Contingent Worker at Intel)
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
igb: cope with large MAX_SKB_FRAGS [+ + +]
Author: Paolo Abeni <[email protected]>
Date:   Fri Aug 16 17:20:34 2024 +0200

    igb: cope with large MAX_SKB_FRAGS
    
    [ Upstream commit 8aba27c4a5020abdf60149239198297f88338a8d ]
    
    Sabrina reports that the igb driver does not cope well with large
    MAX_SKB_FRAG values: setting MAX_SKB_FRAG to 45 causes payload
    corruption on TX.
    
    An easy reproducer is to run ssh to connect to the machine.  With
    MAX_SKB_FRAGS=17 it works, with MAX_SKB_FRAGS=45 it fails.  This has
    been reported originally in
    https://bugzilla.redhat.com/show_bug.cgi?id=2265320
    
    The root cause of the issue is that the driver does not take into
    account properly the (possibly large) shared info size when selecting
    the ring layout, and will try to fit two packets inside the same 4K
    page even when the 1st fraglist will trump over the 2nd head.
    
    Address the issue by checking if 2K buffers are insufficient.
    
    Fixes: 3948b05950fd ("net: introduce a config option to tweak MAX_SKB_FRAGS")
    Reported-by: Jan Tluka <[email protected]>
    Reported-by: Jirka Hladky <[email protected]>
    Reported-by: Sabrina Dubroca <[email protected]>
    Tested-by: Sabrina Dubroca <[email protected]>
    Tested-by: Corinna Vinschen <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Corinna Vinschen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
igc: Fix packet still tx after gate close by reducing i226 MAC retry buffer [+ + +]
Author: Faizal Rahim <[email protected]>
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 <[email protected]>
    Acked-by: Vinicius Costa Gomes <[email protected]>
    Tested-by: Mor Bar-Gabay <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

igc: Fix qbv tx latency by setting gtxoffset [+ + +]
Author: Faizal Rahim <[email protected]>
Date:   Sun Jul 7 08:53:18 2024 -0400

    igc: Fix qbv tx latency by setting gtxoffset
    
    commit 6c3fc0b1c3d073bd6fc3bf43dbd0e64240537464 upstream.
    
    A large tx latency issue was discovered during testing when only QBV was
    enabled. The issue occurs because gtxoffset was not set when QBV is
    active, it was only set when launch time is active.
    
    The patch "igc: Correct the launchtime offset" only sets gtxoffset when
    the launchtime_enable field is set by the user. Enabling launchtime_enable
    ultimately sets the register IGC_TXQCTL_QUEUE_MODE_LAUNCHT (referred to as
    LaunchT in the SW user manual).
    
    Section 7.5.2.6 of the IGC i225/6 SW User Manual Rev 1.2.4 states:
    "The latency between transmission scheduling (launch time) and the
    time the packet is transmitted to the network is listed in Table 7-61."
    
    However, the patch misinterprets the phrase "launch time" in that section
    by assuming it specifically refers to the LaunchT register, whereas it
    actually denotes the generic term for when a packet is released from the
    internal buffer to the MAC transmit logic.
    
    This launch time, as per that section, also implicitly refers to the QBV
    gate open time, where a packet waits in the buffer for the QBV gate to
    open. Therefore, latency applies whenever QBV is in use. TSN features such
    as QBU and QAV reuse QBV, making the latency universal to TSN features.
    
    Discussed with i226 HW owner (Shalev, Avi) and we were in agreement that
    the term "launch time" used in Section 7.5.2.6 is not clear and can be
    easily misinterpreted. Avi will update this section to:
    "When TQAVCTRL.TRANSMIT_MODE = TSN, the latency between transmission
    scheduling and the time the packet is transmitted to the network is listed
    in Table 7-61."
    
    Fix this issue by using igc_tsn_is_tx_mode_in_tsn() as a condition to
    write to gtxoffset, aligning with the newly updated SW User Manual.
    
    Tested:
    1. Enrol taprio on talker board
       base-time 0
       cycle-time 1000000
       flags 0x2
       index 0 cmd S gatemask 0x1 interval1
       index 0 cmd S gatemask 0x1 interval2
    
       Note:
       interval1 = interval for a 64 bytes packet to go through
       interval2 = cycle-time - interval1
    
    2. Take tcpdump on listener board
    
    3. Use udp tai app on talker to send packets to listener
    
    4. Check the timestamp on listener via wireshark
    
    Test Result:
    100 Mbps: 113 ~193 ns
    1000 Mbps: 52 ~ 84 ns
    2500 Mbps: 95 ~ 223 ns
    
    Note that the test result is similar to the patch "igc: Correct the
    launchtime offset".
    
    Fixes: 790835fcc0cb ("igc: Correct the launchtime offset")
    Signed-off-by: Faizal Rahim <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Acked-by: Vinicius Costa Gomes <[email protected]>
    Tested-by: Mor Bar-Gabay <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

igc: Fix qbv_config_change_errors logics [+ + +]
Author: Faizal Rahim <[email protected]>
Date:   Sun Jul 7 08:53:16 2024 -0400

    igc: Fix qbv_config_change_errors logics
    
    [ Upstream commit f8d6acaee9d35cbff3c3cfad94641666c596f8da ]
    
    When user issues these cmds:
    1. Either a) or b)
       a) mqprio with hardware offload disabled
       b) taprio with txtime-assist feature enabled
    2. etf
    3. tc qdisc delete
    4. taprio with base time in the past
    
    At step 4, qbv_config_change_errors wrongly increased by 1.
    
    Excerpt from IEEE 802.1Q-2018 8.6.9.3.1:
    "If AdminBaseTime specifies a time in the past, and the current schedule
    is running, then: Increment ConfigChangeError counter"
    
    qbv_config_change_errors should only increase if base time is in the past
    and no taprio is active. In user perspective, taprio was not active when
    first triggered at step 4. However, i225/6 reuses qbv for etf, so qbv is
    enabled with a dummy schedule at step 2 where it enters
    igc_tsn_enable_offload() and qbv_count got incremented to 1. At step 4, it
    enters igc_tsn_enable_offload() again, qbv_count is incremented to 2.
    Because taprio is running, tc_setup_type is TC_SETUP_QDISC_ETF and
    qbv_count > 1, qbv_config_change_errors value got incremented.
    
    This issue happens due to reliance on qbv_count field where a non-zero
    value indicates that taprio is running. But qbv_count increases
    regardless if taprio is triggered by user or by other tsn feature. It does
    not align with qbv_config_change_errors expectation where it is only
    concerned with taprio triggered by user.
    
    Fixing this by relocating the qbv_config_change_errors logic to
    igc_save_qbv_schedule(), eliminating reliance on qbv_count and its
    inaccuracies from i225/6's multiple uses of qbv feature for other TSN
    features.
    
    The new function created: igc_tsn_is_taprio_activated_by_user() uses
    taprio_offload_enable field to indicate that the current running taprio
    was triggered by user, instead of triggered by non-qbv feature like etf.
    
    Fixes: ae4fe4698300 ("igc: Add qbv_config_change_errors counter")
    Signed-off-by: Faizal Rahim <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Acked-by: Vinicius Costa Gomes <[email protected]>
    Tested-by: Mor Bar-Gabay <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

igc: Fix reset adapter logics when tx mode change [+ + +]
Author: Faizal Rahim <[email protected]>
Date:   Sun Jul 7 08:53:17 2024 -0400

    igc: Fix reset adapter logics when tx mode change
    
    [ Upstream commit 0afeaeb5dae86aceded0d5f0c3a54d27858c0c6f ]
    
    Following the "igc: Fix TX Hang issue when QBV Gate is close" changes,
    remaining issues with the reset adapter logic in igc_tsn_offload_apply()
    have been observed:
    
    1. The reset adapter logics for i225 and i226 differ, although they should
       be the same according to the guidelines in I225/6 HW Design Section
       7.5.2.1 on software initialization during tx mode changes.
    2. The i225 resets adapter every time, even though tx mode doesn't change.
       This occurs solely based on the condition  igc_is_device_id_i225() when
       calling schedule_work().
    3. i226 doesn't reset adapter for tsn->legacy tx mode changes. It only
       resets adapter for legacy->tsn tx mode transitions.
    4. qbv_count introduced in the patch is actually not needed; in this
       context, a non-zero value of qbv_count is used to indicate if tx mode
       was unconditionally set to tsn in igc_tsn_enable_offload(). This could
       be replaced by checking the existing register
       IGC_TQAVCTRL_TRANSMIT_MODE_TSN bit.
    
    This patch resolves all issues and enters schedule_work() to reset the
    adapter only when changing tx mode. It also removes reliance on qbv_count.
    
    qbv_count field will be removed in a future patch.
    
    Test ran:
    
    1. Verify reset adapter behaviour in i225/6:
       a) Enrol a new GCL
          Reset adapter observed (tx mode change legacy->tsn)
       b) Enrol a new GCL without deleting qdisc
          No reset adapter observed (tx mode remain tsn->tsn)
       c) Delete qdisc
          Reset adapter observed (tx mode change tsn->legacy)
    
    2. Tested scenario from "igc: Fix TX Hang issue when QBV Gate is closed"
       to confirm it remains resolved.
    
    Fixes: 175c241288c0 ("igc: Fix TX Hang issue when QBV Gate is closed")
    Signed-off-by: Faizal Rahim <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Acked-by: Vinicius Costa Gomes <[email protected]>
    Tested-by: Mor Bar-Gabay <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Input: i8042 - add forcenorestore quirk to leave controller untouched even on s3 [+ + +]
Author: Werner Sembach <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: i8042 - use new forcenorestore quirk to replace old buggy quirk combination [+ + +]
Author: Werner Sembach <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Reviewed-by: Hans de Goede <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: MT - limit max slots [+ + +]
Author: Tetsuo Handa <[email protected]>
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 <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=0122fa359a69694395d5
    Suggested-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Tetsuo Handa <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Cc: George Kennedy <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
iommu/arm-smmu-qcom: Add SDM670 MDSS compatible [+ + +]
Author: Richard Acayan <[email protected]>
Date:   Mon Sep 25 19:42:48 2023 -0400

    iommu/arm-smmu-qcom: Add SDM670 MDSS compatible
    
    [ Upstream commit 270a1470408e44619a55be1079254bf2ba0567fb ]
    
    Add the compatible for the MDSS client on the Snapdragon 670 so it can
    be properly configured by the IOMMU driver.
    
    Otherwise, there is an unhandled context fault.
    
    Signed-off-by: Richard Acayan <[email protected]>
    Reviewed-by: Dmitry Baryshkov <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Will Deacon <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ionic: check cmd_regs before copying in or out [+ + +]
Author: Shannon Nelson <[email protected]>
Date:   Fri Feb 23 14:27:41 2024 -0800

    ionic: check cmd_regs before copying in or out
    
    [ Upstream commit 7662fad348ac54120e9e6443cb0bbe4f3b582219 ]
    
    Since we now have potential cases of NULL cmd_regs and info_regs
    during a reset recovery, and left NULL if a reset recovery has
    failed, we need to check that they exist before we use them.
    Most of the cases were covered in the original patch where we
    verify before doing the ioreadb() for health or cmd status.
    However, we need to protect a few uses of io mem that could
    be hit in error recovery or asynchronous threads calls as well
    (e.g. ethtool or devlink handlers).
    
    Fixes: 219e183272b4 ("ionic: no fw read when PCI reset failed")
    Reviewed-by: Brett Creeley <[email protected]>
    Signed-off-by: Shannon Nelson <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ionic: no fw read when PCI reset failed [+ + +]
Author: Shannon Nelson <[email protected]>
Date:   Mon Dec 11 10:58:01 2023 -0800

    ionic: no fw read when PCI reset failed
    
    [ Upstream commit 219e183272b4a566650a37264aff90a8c613d9b5 ]
    
    If there was a failed attempt to reset the PCI connection,
    don't later try to read from PCI as the space is unmapped
    and will cause a paging request crash.  When clearing the PCI
    setup we can clear the dev_info register pointer, and check
    it before using it in the fw_running test.
    
    Signed-off-by: Shannon Nelson <[email protected]>
    Reviewed-by: Brett Creeley <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ionic: prevent pci disable of already disabled device [+ + +]
Author: Shannon Nelson <[email protected]>
Date:   Mon Dec 11 10:58:00 2023 -0800

    ionic: prevent pci disable of already disabled device
    
    [ Upstream commit 13943d6c82730a2a4e40e05d6deaca26a8de0a4d ]
    
    If a reset fails, the PCI device is left in a disabled
    state, so don't try to disable it again on driver remove.
    This prevents a scary looking WARN trace in the kernel log.
    
        ionic 0000:2b:00.0: disabling already-disabled device
    
    Signed-off-by: Shannon Nelson <[email protected]>
    Reviewed-by: Brett Creeley <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ionic: use pci_is_enabled not open code [+ + +]
Author: Shannon Nelson <[email protected]>
Date:   Fri Feb 16 14:52:59 2024 -0800

    ionic: use pci_is_enabled not open code
    
    [ Upstream commit 121e4dcba3700b30e63f25203d09ddfccbab4a09 ]
    
    Since there is a utility available for this, use
    the API rather than open code.
    
    Fixes: 13943d6c8273 ("ionic: prevent pci disable of already disabled device")
    Reviewed-by: Brett Creeley <[email protected]>
    Signed-off-by: Shannon Nelson <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ip6_tunnel: Fix broken GRO [+ + +]
Author: Thomas Bogendoerfer <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: fix possible UAF in ip6_finish_output2() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Cc: Vasily Averin <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: prevent possible UAF in ip6_xmit() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Cc: Vasily Averin <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ipv6: prevent UAF in ip6_send_skb() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Reported-by: syzbot <[email protected]>
    Reviewed-by: David Ahern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/gic-v3-its: Remove BUG_ON in its_vpe_irq_domain_alloc [+ + +]
Author: Guanrui Huang <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Zenghui Yu <[email protected]>
    Acked-by: Marc Zyngier <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/renesas-rzg2l: Do not set TIEN and TINT source at the same time [+ + +]
Author: Biju Das <[email protected]>
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 <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jfs: define xtree root and page independently [+ + +]
Author: Dave Kleikamp <[email protected]>
Date:   Thu Oct 5 09:16:14 2023 -0500

    jfs: define xtree root and page independently
    
    commit a779ed754e52d582b8c0e17959df063108bd0656 upstream.
    
    In order to make array bounds checking sane, provide a separate
    definition of the in-inode xtree root and the external xtree page.
    
    Signed-off-by: Dave Kleikamp <[email protected]>
    Tested-by: Manas Ghandat <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
kcm: Serialise kcm_sendmsg() for the same socket. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=b72d86aa5df17ce74c60
    Tested-by: [email protected]
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
kernfs: fix false-positive WARN(nr_mmapped) in kernfs_drain_open_files [+ + +]
Author: Neel Natu <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ksmbd: fix race condition between destroy_previous_session() and smb2 operations() [+ + +]
Author: Namjae Jeon <[email protected]>
Date:   Tue Aug 27 09:27:56 2024 +0900

    ksmbd: fix race condition between destroy_previous_session() and smb2 operations()
    
    [ Upstream commit 76e98a158b207771a6c9a0de0a60522a446a3447 ]
    
    If there is ->PreviousSessionId field in the session setup request,
    The session of the previous connection should be destroyed.
    During this, if the smb2 operation requests in the previous session are
    being processed, a racy issue could happen with ksmbd_destroy_file_table().
    This patch sets conn->status to KSMBD_SESS_NEED_RECONNECT to block
    incoming  operations and waits until on-going operations are complete
    (i.e. idle) before desctorying the previous session.
    
    Fixes: c8efcc786146 ("ksmbd: add support for durable handles v1/v2")
    Cc: [email protected] # v6.6+
    Reported-by: [email protected] # ZDI-CAN-25040
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ksmbd: the buffer of smb2 query dir response has at least 1 byte [+ + +]
Author: Namjae Jeon <[email protected]>
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: [email protected] # v6.1+
    Signed-off-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: arm64: Make ICC_*SGI*_EL1 undef in the absence of a vGICv3 [+ + +]
Author: Marc Zyngier <[email protected]>
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 <[email protected]>
    Signed-off-by: Marc Zyngier <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Oliver Upton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

KVM: s390: fix validity interception issue when gisa is switched off [+ + +]
Author: Michael Mueller <[email protected]>
Date:   Thu Aug 1 14:31:09 2024 +0200

    KVM: s390: fix validity interception issue when gisa is switched off
    
    commit 5a44bb061d04b0306f2aa8add761d86d152b9377 upstream.
    
    We might run into a SIE validity if gisa has been disabled either via using
    kernel parameter "kvm.use_gisa=0" or by setting the related sysfs
    attribute to N (echo N >/sys/module/kvm/parameters/use_gisa).
    
    The validity is caused by an invalid value in the SIE control block's
    gisa designation. That happens because we pass the uninitialized gisa
    origin to virt_to_phys() before writing it to the gisa designation.
    
    To fix this we return 0 in kvm_s390_get_gisa_desc() if the origin is 0.
    kvm_s390_get_gisa_desc() is used to determine which gisa designation to
    set in the SIE control block. A value of 0 in the gisa designation disables
    gisa usage.
    
    The issue surfaces in the host kernel with the following kernel message as
    soon a new kvm guest start is attemted.
    
    kvm: unhandled validity intercept 0x1011
    WARNING: CPU: 0 PID: 781237 at arch/s390/kvm/intercept.c:101 kvm_handle_sie_intercept+0x42e/0x4d0 [kvm]
    Modules linked in: vhost_net tap tun xt_CHECKSUM xt_MASQUERADE xt_conntrack ipt_REJECT xt_tcpudp nft_compat x_tables nf_nat_tftp nf_conntrack_tftp vfio_pci_core irqbypass vhost_vsock vmw_vsock_virtio_transport_common vsock vhost vhost_iotlb kvm nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables sunrpc mlx5_ib ib_uverbs ib_core mlx5_core uvdevice s390_trng eadm_sch vfio_ccw zcrypt_cex4 mdev vfio_iommu_type1 vfio sch_fq_codel drm i2c_core loop drm_panel_orientation_quirks configfs nfnetlink lcs ctcm fsm dm_service_time ghash_s390 prng chacha_s390 libchacha aes_s390 des_s390 libdes sha3_512_s390 sha3_256_s390 sha512_s390 sha256_s390 sha1_s390 sha_common dm_mirror dm_region_hash dm_log zfcp scsi_transport_fc scsi_dh_rdac scsi_dh_emc scsi_dh_alua pkey zcrypt dm_multipath rng_core autofs4 [last unloaded: vfio_pci]
    CPU: 0 PID: 781237 Comm: CPU 0/KVM Not tainted 6.10.0-08682-gcad9f11498ea #6
    Hardware name: IBM 3931 A01 701 (LPAR)
    Krnl PSW : 0704c00180000000 000003d93deb0122 (kvm_handle_sie_intercept+0x432/0x4d0 [kvm])
               R:0 T:1 IO:1 EX:1 Key:0 M:1 W:0 P:0 AS:3 CC:0 PM:0 RI:0 EA:3
    Krnl GPRS: 000003d900000027 000003d900000023 0000000000000028 000002cd00000000
               000002d063a00900 00000359c6daf708 00000000000bebb5 0000000000001eff
               000002cfd82e9000 000002cfd80bc000 0000000000001011 000003d93deda412
               000003ff8962df98 000003d93de77ce0 000003d93deb011e 00000359c6daf960
    Krnl Code: 000003d93deb0112: c020fffe7259       larl    %r2,000003d93de7e5c4
               000003d93deb0118: c0e53fa8beac       brasl   %r14,000003d9bd3c7e70
              #000003d93deb011e: af000000           mc      0,0
              >000003d93deb0122: a728ffea           lhi     %r2,-22
               000003d93deb0126: a7f4fe24           brc     15,000003d93deafd6e
               000003d93deb012a: 9101f0b0           tm      176(%r15),1
               000003d93deb012e: a774fe48           brc     7,000003d93deafdbe
               000003d93deb0132: 40a0f0ae           sth     %r10,174(%r15)
    Call Trace:
     [<000003d93deb0122>] kvm_handle_sie_intercept+0x432/0x4d0 [kvm]
    ([<000003d93deb011e>] kvm_handle_sie_intercept+0x42e/0x4d0 [kvm])
     [<000003d93deacc10>] vcpu_post_run+0x1d0/0x3b0 [kvm]
     [<000003d93deaceda>] __vcpu_run+0xea/0x2d0 [kvm]
     [<000003d93dead9da>] kvm_arch_vcpu_ioctl_run+0x16a/0x430 [kvm]
     [<000003d93de93ee0>] kvm_vcpu_ioctl+0x190/0x7c0 [kvm]
     [<000003d9bd728b4e>] vfs_ioctl+0x2e/0x70
     [<000003d9bd72a092>] __s390x_sys_ioctl+0xc2/0xd0
     [<000003d9be0e9222>] __do_syscall+0x1f2/0x2e0
     [<000003d9be0f9a90>] system_call+0x70/0x98
    Last Breaking-Event-Address:
     [<000003d9bd3c7f58>] __warn_printk+0xe8/0xf0
    
    Cc: [email protected]
    Reported-by: Christian Borntraeger <[email protected]>
    Fixes: fe0ef0030463 ("KVM: s390: sort out physical vs virtual pointers usage")
    Signed-off-by: Michael Mueller <[email protected]>
    Tested-by: Christian Borntraeger <[email protected]>
    Reviewed-by: Janosch Frank <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Message-ID: <[email protected]>
    Signed-off-by: Janosch Frank <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.6.48 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Aug 29 17:33:59 2024 +0200

    Linux 6.6.48
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: SeongJae Park <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Takeshi Ogasawara <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: kernelci.org bot <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
md/raid5-cache: use READ_ONCE/WRITE_ONCE for 'conf->log' [+ + +]
Author: Yu Kuai <[email protected]>
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 <[email protected]>
    Signed-off-by: Song Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
md: clean up invalid BUG_ON in md_ioctl [+ + +]
Author: Li Nan <[email protected]>
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 <[email protected]>
    Reviewed-by: Yu Kuai <[email protected]>
    Signed-off-by: Song Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
media: drivers/media/dvb-core: copy user arrays safely [+ + +]
Author: Philipp Stanner <[email protected]>
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/[email protected]
    Suggested-by: Dave Airlie <[email protected]>
    Signed-off-by: Philipp Stanner <[email protected]>
    Signed-off-by: Mauro Carvalho Chehab <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: pci: cx23885: check cx23885_vdev_init() return [+ + +]
Author: Hans Verkuil <[email protected]>
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 <[email protected]>
    Reported-by: Sicong Huang <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: qcom: venus: fix incorrect return value [+ + +]
Author: Hans Verkuil <[email protected]>
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 <[email protected]>
    Reviewed-by: Bryan O'Donoghue <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: radio-isa: use dev_name to fill in bus_info [+ + +]
Author: Hans Verkuil <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

media: s5p-mfc: Fix potential deadlock on condlock [+ + +]
Author: Chengfeng Ye <[email protected]>
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 <[email protected]>
    Acked-by: Marek Szyprowski <[email protected]>
    Signed-off-by: Hans Verkuil <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
memcg_write_event_control(): fix a user-triggerable oops [+ + +]
Author: Al Viro <[email protected]>
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: [email protected]
    Cc: Andrew Morton <[email protected]>
    Acked-by: Michal Hocko <[email protected]>
    Signed-off-by: Al Viro <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
memory: stm32-fmc2-ebi: check regmap_read return value [+ + +]
Author: Christophe Kerello <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

memory: tegra: Skip SID programming if SID registers aren't set [+ + +]
Author: Ashish Mhetre <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
MIPS: Loongson64: Set timer mode in cpu-probe [+ + +]
Author: Jiaxun Yang <[email protected]>
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: [email protected]
    Signed-off-by: Jiaxun Yang <[email protected]>
    Signed-off-by: Thomas Bogendoerfer <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mlxbf_gige: disable RX filters until RX path initialized [+ + +]
Author: David Thompson <[email protected]>
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 <[email protected]>
    Signed-off-by: David Thompson <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/memory-failure: use raw_spinlock_t in struct memory_failure_cpu [+ + +]
Author: Waiman Long <[email protected]>
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.
    
    [[email protected]: don't hold percpu ref across pr_err(), per Miaohe]
      Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 0f383b6dc96e ("locking/spinlock: Provide RT variant")
    Signed-off-by: Waiman Long <[email protected]>
    Acked-by: Miaohe Lin <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Juri Lelli <[email protected]>
    Cc: Len Brown <[email protected]>
    Cc: Naoya Horiguchi <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/numa: no task_numa_fault() call if PMD is changed [+ + +]
Author: Zi Yan <[email protected]>
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/[email protected]
    Fixes: c5b5a3dd2c1f ("mm: thp: refactor NUMA fault handling")
    Reported-by: "Huang, Ying" <[email protected]>
    Closes: https://lore.kernel.org/linux-mm/[email protected]/
    Signed-off-by: Zi Yan <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Cc: Baolin Wang <[email protected]>
    Cc: "Huang, Ying" <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: Yang Shi <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mm/numa: no task_numa_fault() call if PTE is changed [+ + +]
Author: Zi Yan <[email protected]>
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/[email protected]
    Fixes: b99a342d4f11 ("NUMA balancing: reduce TLB flush via delaying mapping on hint page fault")
    Signed-off-by: Zi Yan <[email protected]>
    Reported-by: "Huang, Ying" <[email protected]>
    Closes: https://lore.kernel.org/linux-mm/[email protected]/
    Acked-by: David Hildenbrand <[email protected]>
    Cc: Baolin Wang <[email protected]>
    Cc: Kefeng Wang <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: Yang Shi <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/vmalloc: fix page mapping if vm_area_alloc_pages() with high order fallback to order 0 [+ + +]
Author: Hailong Liu <[email protected]>
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
    
    [ Upstream commit 61ebe5a747da649057c37be1c37eb934b4af79ca ]
    
    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/[email protected]
    Fixes: e9c3cda4d86e ("mm, vmalloc: fix high order __GFP_NOFAIL allocations")
    Signed-off-by: Hailong Liu <[email protected]>
    Reported-by: Tangquan Zheng <[email protected]>
    Reviewed-by: Baoquan He <[email protected]>
    Reviewed-by: Uladzislau Rezki (Sony) <[email protected]>
    Acked-by: Barry Song <[email protected]>
    Acked-by: Michal Hocko <[email protected]>
    Cc: Matthew Wilcox <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm: fix endless reclaim on machines with unaccepted memory [+ + +]
Author: Kirill A. Shutemov <[email protected]>
Date:   Fri Aug 9 14:48:47 2024 +0300

    mm: fix endless reclaim on machines with unaccepted memory
    
    [ Upstream commit 807174a93d24c456503692dc3f5af322ee0b640a ]
    
    Unaccepted memory is considered unusable free memory, which is not counted
    as free on the zone watermark check.  This causes get_page_from_freelist()
    to accept more memory to hit the high watermark, but it creates problems
    in the reclaim path.
    
    The reclaim path encounters a failed zone watermark check and attempts to
    reclaim memory.  This is usually successful, but if there is little or no
    reclaimable memory, it can result in endless reclaim with little to no
    progress.  This can occur early in the boot process, just after start of
    the init process when the only reclaimable memory is the page cache of the
    init executable and its libraries.
    
    Make unaccepted memory free from watermark check point of view.  This way
    unaccepted memory will never be the trigger of memory reclaim.  Accept
    more memory in the get_page_from_freelist() if needed.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: dcdfdd40fa82 ("mm: Add support for unaccepted memory")
    Signed-off-by: Kirill A. Shutemov <[email protected]>
    Reported-by: Jianxiong Gao <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Tested-by: Jianxiong Gao <[email protected]>
    Cc: Borislav Petkov <[email protected]>
    Cc: Johannes Weiner <[email protected]>
    Cc: Kirill A. Shutemov <[email protected]>
    Cc: Matthew Wilcox <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Cc: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Tom Lendacky <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: <[email protected]>    [6.5+]
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mm: Remove kmem_valid_obj() [+ + +]
Author: Zhen Lei <[email protected]>
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 <[email protected]>
    Signed-off-by: Zhen Lei <[email protected]>
    Reviewed-by: Matthew Wilcox (Oracle) <[email protected]>
    Acked-by: Vlastimil Babka <[email protected]>
    Signed-off-by: Paul E. McKenney <[email protected]>
    Signed-off-by: Frederic Weisbecker <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: dw_mmc: allow biu and ciu clocks to defer [+ + +]
Author: Ben Whitten <[email protected]>
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 <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mmc: mmc_test: Fix NULL dereference on allocation failure [+ + +]
Author: Dan Carpenter <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mmc: mtk-sd: receive cmd8 data when hs400 tuning fail [+ + +]
Author: Mengqi Zhang <[email protected]>
Date:   Tue Jul 16 09:37:04 2024 +0800

    mmc: mtk-sd: receive cmd8 data when hs400 tuning fail
    
    commit 9374ae912dbb1eed8139ed75fd2c0f1b30ca454d upstream.
    
    When we use cmd8 as the tuning command in hs400 mode, the command
    response sent back by some eMMC devices cannot be correctly sampled
    by MTK eMMC controller at some weak sample timing. In this case,
    command timeout error may occur. So we must receive the following
    data to make sure the next cmd8 send correctly.
    
    Signed-off-by: Mengqi Zhang <[email protected]>
    Fixes: c4ac38c6539b ("mmc: mtk-sd: Add HS400 online tuning support")
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mptcp: correct MPTCP_SUBFLOW_ATTR_SSN_OFFSET reserved size [+ + +]
Author: Eugene Syromiatnikov <[email protected]>
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 <[email protected]>
    Reviewed-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

mptcp: pm: avoid possible UaF when selecting endp [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:32 2024 +0200

    mptcp: pm: avoid possible UaF when selecting endp
    
    commit 48e50dcbcbaaf713d82bf2da5c16aeced94ad07d upstream.
    
    select_local_address() and select_signal_address() both select an
    endpoint entry from the list inside an RCU protected section, but return
    a reference to it, to be read later on. If the entry is dereferenced
    after the RCU unlock, reading info could cause a Use-after-Free.
    
    A simple solution is to copy the required info while inside the RCU
    protected section to avoid any risk of UaF later. The address ID might
    need to be modified later to handle the ID0 case later, so a copy seems
    OK to deal with.
    
    Reported-by: Paolo Abeni <[email protected]>
    Closes: https://lore.kernel.org/[email protected]
    Fixes: 01cacb00b35c ("mptcp: add netlink-based PM")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: check add_addr_accept_max before accepting new ADD_ADDR [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:28 2024 +0200

    mptcp: pm: check add_addr_accept_max before accepting new ADD_ADDR
    
    commit 0137a3c7c2ea3f9df8ebfc65d78b4ba712a187bb upstream.
    
    The limits might have changed in between, it is best to check them
    before accepting new ADD_ADDR.
    
    Fixes: d0876b2284cf ("mptcp: add the incoming RM_ADDR support")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: fullmesh: select the right ID later [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:30 2024 +0200

    mptcp: pm: fullmesh: select the right ID later
    
    commit 09355f7abb9fbfc1a240be029837921ea417bf4f upstream.
    
    When reacting upon the reception of an ADD_ADDR, the in-kernel PM first
    looks for fullmesh endpoints. If there are some, it will pick them,
    using their entry ID.
    
    It should set the ID 0 when using the endpoint corresponding to the
    initial subflow, it is a special case imposed by the MPTCP specs.
    
    Note that msk->mpc_endpoint_id might not be set when receiving the first
    ADD_ADDR from the server. So better to compare the addresses.
    
    Fixes: 1a0d6136c5f0 ("mptcp: local addresses fullmesh")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: only decrement add_addr_accepted for MPJ req [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
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: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: only in-kernel cannot have entries with ID 0 [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:29 2024 +0200

    mptcp: pm: only in-kernel cannot have entries with ID 0
    
    commit ca6e55a703ca2894611bb5c5bca8bfd2290fd91e upstream.
    
    The ID 0 is specific per MPTCP connections. The per netns entries cannot
    have this special ID 0 then.
    
    But that's different for the userspace PM where the entries are per
    connection, they can then use this special ID 0.
    
    Fixes: f40be0db0b76 ("mptcp: unify pm get_flags_and_ifindex_by_id")
    Cc: [email protected]
    Acked-by: Geliang Tang <[email protected]>
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: only mark 'subflow' endp as available [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:26 2024 +0200

    mptcp: pm: only mark 'subflow' endp as available
    
    commit 322ea3778965da72862cca2a0c50253aacf65fe6 upstream.
    
    Adding the following warning ...
    
      WARN_ON_ONCE(msk->pm.local_addr_used == 0)
    
    ... before decrementing the local_addr_used counter helped to find a bug
    when running the "remove single address" subtest from the mptcp_join.sh
    selftests.
    
    Removing a 'signal' endpoint will trigger the removal of all subflows
    linked to this endpoint via mptcp_pm_nl_rm_addr_or_subflow() with
    rm_type == MPTCP_MIB_RMSUBFLOW. This will decrement the local_addr_used
    counter, which is wrong in this case because this counter is linked to
    'subflow' endpoints, and here it is a 'signal' endpoint that is being
    removed.
    
    Now, the counter is decremented, only if the ID is being used outside
    of mptcp_pm_nl_rm_addr_or_subflow(), only for 'subflow' endpoints, and
    if the ID is not 0 -- local_addr_used is not taking into account these
    ones. This marking of the ID as being available, and the decrement is
    done no matter if a subflow using this ID is currently available,
    because the subflow could have been closed before.
    
    Fixes: 06faa2271034 ("mptcp: remove multi addresses and subflows in PM")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: re-using ID of unused flushed subflows [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
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: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: re-using ID of unused removed ADD_ADDR [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
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: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: re-using ID of unused removed subflows [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
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: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

mptcp: pm: remove mptcp_pm_remove_subflow() [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:25 2024 +0200

    mptcp: pm: remove mptcp_pm_remove_subflow()
    
    commit f448451aa62d54be16acb0034223c17e0d12bc69 upstream.
    
    This helper is confusing. It is in pm.c, but it is specific to the
    in-kernel PM and it cannot be used by the userspace one. Also, it simply
    calls one in-kernel specific function with the PM lock, while the
    similar mptcp_pm_remove_addr() helper requires the PM lock.
    
    What's left is the pr_debug(), which is not that useful, because a
    similar one is present in the only function called by this helper:
    
      mptcp_pm_nl_rm_subflow_received()
    
    After these modifications, this helper can be marked as 'static', and
    the lock can be taken only once in mptcp_pm_flush_addrs_and_subflows().
    
    Note that it is not a bug fix, but it will help backporting the
    following commits.
    
    Fixes: 0ee4261a3681 ("mptcp: implement mptcp_pm_remove_subflow")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5e: Correctly report errors for ethtool rx flows [+ + +]
Author: Cosmin Ratiu <[email protected]>
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 <[email protected]>
    Reviewed-by: Saeed Mahameed <[email protected]>
    Reviewed-by: Dragos Tatulea <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Take state lock during tx timeout reporter [+ + +]
Author: Dragos Tatulea <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/T/
    Reviewed-by: Breno Leitao <[email protected]>
    Reviewed-by: Moshe Shemesh <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sun3_82586: Avoid reading past buffer in debug output [+ + +]
Author: Kees Cook <[email protected]>
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 <[email protected]>
    Signed-off-by: Kees Cook <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Tested-by: Simon Horman <[email protected]> # build-tested
    Reviewed-by: Gustavo A. R. Silva <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: axienet: Fix register defines comment description [+ + +]
Author: Radhey Shyam Pandey <[email protected]>
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 <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: microchip: fix PTP config failure when using multiple ports [+ + +]
Author: Martin Whitaker <[email protected]>
Date:   Sat Aug 17 10:41:41 2024 +0100

    net: dsa: microchip: fix PTP config failure when using multiple ports
    
    commit 6efea5135417ae8194485d1d05ea79a21cf1a11c upstream.
    
    When performing the port_hwtstamp_set operation, ptp_schedule_worker()
    will be called if hardware timestamoing is enabled on any of the ports.
    When using multiple ports for PTP, port_hwtstamp_set is executed for
    each port. When called for the first time ptp_schedule_worker() returns
    0. On subsequent calls it returns 1, indicating the worker is already
    scheduled. Currently the ksz driver treats 1 as an error and fails to
    complete the port_hwtstamp_set operation, thus leaving the timestamping
    configuration for those ports unchanged.
    
    This patch fixes this by ignoring the ptp_schedule_worker() return
    value.
    
    Cc: [email protected]
    Link: https://lore.kernel.org/[email protected]
    Fixes: bb01ad30570b0 ("net: dsa: microchip: ptp: manipulating absolute time using ptp hw clock")
    Signed-off-by: Martin Whitaker <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Acked-by: Arun Ramadoss <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: dsa: mv88e6xxx: Fix out-of-bound access [+ + +]
Author: Joseph Huang <[email protected]>
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 <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: vsc73xx: check busy flag in MDIO operations [+ + +]
Author: Pawel Dembicki <[email protected]>
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 <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Pawel Dembicki <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: vsc73xx: pass value in phy_write operation [+ + +]
Author: Pawel Dembicki <[email protected]>
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 <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Pawel Dembicki <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: dsa: vsc73xx: use read_poll_timeout instead delay loop [+ + +]
Author: Pawel Dembicki <[email protected]>
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 <[email protected]>
    Reviewed-by: Andrew Lunn <[email protected]>
    Reviewed-by: Linus Walleij <[email protected]>
    Reviewed-by: Florian Fainelli <[email protected]>
    Signed-off-by: Pawel Dembicki <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: fa63c6434b6f ("net: dsa: vsc73xx: check busy flag in MDIO operations")
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: mtk_wed: check update_wo_rx_stats in mtk_wed_update_rx_stats() [+ + +]
Author: Lorenzo Bianconi <[email protected]>
Date:   Tue Sep 12 10:28:00 2023 +0200

    net: ethernet: mtk_wed: check update_wo_rx_stats in mtk_wed_update_rx_stats()
    
    [ Upstream commit 486e6ca6b48d68d7fefc99e15cc1865e2210d893 ]
    
    Check if update_wo_rx_stats function pointer is properly set in
    mtk_wed_update_rx_stats routine before accessing it.
    
    Signed-off-by: Lorenzo Bianconi <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://lore.kernel.org/r/b0d233386e059bccb59f18f69afb79a7806e5ded.1694507226.git.lorenzo@kernel.org
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ethernet: mtk_wed: fix use-after-free panic in mtk_wed_setup_tc_block_cb() [+ + +]
Author: Zheng Zhang <[email protected]>
Date:   Sat Aug 10 13:26:51 2024 +0800

    net: ethernet: mtk_wed: fix use-after-free panic in mtk_wed_setup_tc_block_cb()
    
    [ Upstream commit db1b4bedb9b97c6d34b03d03815147c04fffe8b4 ]
    
    When there are multiple ap interfaces on one band and with WED on,
    turning the interface down will cause a kernel panic on MT798X.
    
    Previously, cb_priv was freed in mtk_wed_setup_tc_block() without
    marking NULL,and mtk_wed_setup_tc_block_cb() didn't check the value, too.
    
    Assign NULL after free cb_priv in mtk_wed_setup_tc_block() and check NULL
    in mtk_wed_setup_tc_block_cb().
    
    ----------
    Unable to handle kernel paging request at virtual address 0072460bca32b4f5
    Call trace:
     mtk_wed_setup_tc_block_cb+0x4/0x38
     0xffffffc0794084bc
     tcf_block_playback_offloads+0x70/0x1e8
     tcf_block_unbind+0x6c/0xc8
    ...
    ---------
    
    Fixes: 799684448e3e ("net: ethernet: mtk_wed: introduce wed wo support")
    Signed-off-by: Zheng Zhang <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: add checking for vf id of mailbox [+ + +]
Author: Jian Shen <[email protected]>
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 <[email protected]>
    Signed-off-by: Jijie Shao <[email protected]>
    Reviewed-by: Sunil Goutham <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: fix a deadlock problem when config TC during resetting [+ + +]
Author: Jie Wang <[email protected]>
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 <[email protected]>
    Signed-off-by: Jijie Shao <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: fix wrong use of semaphore up [+ + +]
Author: Jie Wang <[email protected]>
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 <[email protected]>
    Signed-off-by: Jijie Shao <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: use the user's cfg after reset [+ + +]
Author: Peiyang Wang <[email protected]>
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 <[email protected]>
    Signed-off-by: Jijie Shao <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

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

    net: mana: Fix doorbell out of order violation and avoid unnecessary doorbell rings
    
    commit 58a63729c957621f1990c3494c702711188ca347 upstream.
    
    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: [email protected]
    Fixes: e1b5683ff62e ("net: mana: Move NAPI from EQ to CQ")
    Reviewed-by: Haiyang Zhang <[email protected]>
    Signed-off-by: Long Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: mana: Fix RX buf alloc_size alignment and atomic op panic [+ + +]
Author: Haiyang Zhang <[email protected]>
Date:   Fri Aug 9 14:01:24 2024 -0700

    net: mana: Fix RX buf alloc_size alignment and atomic op panic
    
    commit 32316f676b4ee87c0404d333d248ccf777f739bc upstream.
    
    The MANA driver's RX buffer alloc_size is passed into napi_build_skb() to
    create SKB. skb_shinfo(skb) is located at the end of skb, and its alignment
    is affected by the alloc_size passed into napi_build_skb(). The size needs
    to be aligned properly for better performance and atomic operations.
    Otherwise, on ARM64 CPU, for certain MTU settings like 4000, atomic
    operations may panic on the skb_shinfo(skb)->dataref due to alignment fault.
    
    To fix this bug, add proper alignment to the alloc_size calculation.
    
    Sample panic info:
    [  253.298819] Unable to handle kernel paging request at virtual address ffff000129ba5cce
    [  253.300900] Mem abort info:
    [  253.301760]   ESR = 0x0000000096000021
    [  253.302825]   EC = 0x25: DABT (current EL), IL = 32 bits
    [  253.304268]   SET = 0, FnV = 0
    [  253.305172]   EA = 0, S1PTW = 0
    [  253.306103]   FSC = 0x21: alignment fault
    Call trace:
     __skb_clone+0xfc/0x198
     skb_clone+0x78/0xe0
     raw6_local_deliver+0xfc/0x228
     ip6_protocol_deliver_rcu+0x80/0x500
     ip6_input_finish+0x48/0x80
     ip6_input+0x48/0xc0
     ip6_sublist_rcv_finish+0x50/0x78
     ip6_sublist_rcv+0x1cc/0x2b8
     ipv6_list_rcv+0x100/0x150
     __netif_receive_skb_list_core+0x180/0x220
     netif_receive_skb_list_internal+0x198/0x2a8
     __napi_poll+0x138/0x250
     net_rx_action+0x148/0x330
     handle_softirqs+0x12c/0x3a0
    
    Cc: [email protected]
    Fixes: 80f6215b450e ("net: mana: Add support for jumbo frame")
    Signed-off-by: Haiyang Zhang <[email protected]>
    Reviewed-by: Long Li <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: mctp: test: Use correct skb for route input check [+ + +]
Author: Jeremy Kerr <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/kernel-janitors/[email protected]/
    Signed-off-by: Jeremy Kerr <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/20240816-mctp-kunit-skb-fix-v1-1-3c367ac89c27@codeconstruct.com.au
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mscc: ocelot: fix QoS class for injected packets with "ocelot-8021q" [+ + +]
Author: Vladimir Oltean <[email protected]>
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 <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mscc: ocelot: serialize access to the injection/extraction groups [+ + +]
Author: Vladimir Oltean <[email protected]>
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 <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mscc: ocelot: use ocelot_xmit_get_vlan_info() also for FDMA and register injection [+ + +]
Author: Vladimir Oltean <[email protected]>
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 <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: ngbe: Fix phy mode set to external phy [+ + +]
Author: Mengyuan Lou <[email protected]>
Date:   Tue Aug 20 11:04:25 2024 +0800

    net: ngbe: Fix phy mode set to external phy
    
    commit f2916c83d746eb99f50f42c15cf4c47c2ea5f3b3 upstream.
    
    The MAC only has add the TX delay and it can not be modified.
    MAC and PHY are both set the TX delay cause transmission problems.
    So just disable TX delay in PHY, when use rgmii to attach to
    external phy, set PHY_INTERFACE_MODE_RGMII_RXID to phy drivers.
    And it is does not matter to internal phy.
    
    Fixes: bc2426d74aa3 ("net: ngbe: convert phylib to phylink")
    Signed-off-by: Mengyuan Lou <[email protected]>
    Cc: [email protected] # 6.3+
    Reviewed-by: Jacob Keller <[email protected]>
    Link: https://patch.msgid.link/E6759CF1387CF84C+20240820030425.93003-1-mengyuanlou@net-swift.com
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: mengyuanlou <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: ovs: fix ovs_drop_reasons error [+ + +]
Author: Menglong Dong <[email protected]>
Date:   Wed Aug 21 20:32:52 2024 +0800

    net: ovs: fix ovs_drop_reasons error
    
    [ Upstream commit 57fb67783c4011581882f32e656d738da1f82042 ]
    
    There is something wrong with ovs_drop_reasons. ovs_drop_reasons[0] is
    "OVS_DROP_LAST_ACTION", but OVS_DROP_LAST_ACTION == __OVS_DROP_REASON + 1,
    which means that ovs_drop_reasons[1] should be "OVS_DROP_LAST_ACTION".
    
    And as Adrian tested, without the patch, adding flow to drop packets
    results in:
    
    drop at: do_execute_actions+0x197/0xb20 [openvsw (0xffffffffc0db6f97)
    origin: software
    input port ifindex: 8
    timestamp: Tue Aug 20 10:19:17 2024 859853461 nsec
    protocol: 0x800
    length: 98
    original length: 98
    drop reason: OVS_DROP_ACTION_ERROR
    
    With the patch, the same results in:
    
    drop at: do_execute_actions+0x197/0xb20 [openvsw (0xffffffffc0db6f97)
    origin: software
    input port ifindex: 8
    timestamp: Tue Aug 20 10:16:13 2024 475856608 nsec
    protocol: 0x800
    length: 98
    original length: 98
    drop reason: OVS_DROP_LAST_ACTION
    
    Fix this by initializing ovs_drop_reasons with index.
    
    Fixes: 9d802da40b7c ("net: openvswitch: add last-action drop reason")
    Signed-off-by: Menglong Dong <[email protected]>
    Tested-by: Adrian Moreno <[email protected]>
    Reviewed-by: Adrian Moreno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: xilinx: axienet: Always disable promiscuous mode [+ + +]
Author: Sean Anderson <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: xilinx: axienet: Fix dangling multicast addresses [+ + +]
Author: Sean Anderson <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netem: fix return value if duplicate enqueue fails [+ + +]
Author: Stephen Hemminger <[email protected]>
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 <[email protected]>
    Signed-off-by: Stephen Hemminger <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: allow ipv6 fragments to arrive on different devices [+ + +]
Author: Tom Hughes <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: flowtable: initialise extack before use [+ + +]
Author: Donald Hunter <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: flowtable: validate vlan header [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
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: [email protected]
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_queue: drop packets with cloned unconfirmed conntracks [+ + +]
Author: Florian Westphal <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: A better name for nft_obj_filter [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: Audit log dump reset after the fact [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: Carry reset boolean in nft_obj_dump_ctx [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: Carry s_idx in nft_obj_dump_ctx [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: Drop pointless memset in nf_tables_dump_obj [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: Introduce nf_tables_getobj_single [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: nft_obj_filter fits into cb->ctx [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nf_tables: Unconditionally allocate nft_obj_filter [+ + +]
Author: Phil Sutter <[email protected]>
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 <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Stable-dep-of: bd662c4218f9 ("netfilter: nf_tables: Add locking for NFT_MSG_GETOBJ_RESET requests")
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_counter: Disable BH in nft_counter_offload_stats(). [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
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 <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

netfilter: nft_counter: Synchronize nft_counter_reset() against reader. [+ + +]
Author: Sebastian Andrzej Siewior <[email protected]>
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 <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netlink: hold nlk->cb_mutex longer in __netlink_dump_start() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Reviewed-by: Jiri Pirko <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFS: avoid infinite loop in pnfs_update_layout. [+ + +]
Author: NeilBrown <[email protected]>
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 <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
NFSD: simplify error paths in nfsd_svc() [+ + +]
Author: NeilBrown <[email protected]>
Date:   Mon Sep 25 12:06:44 2023 +1000

    NFSD: simplify error paths in nfsd_svc()
    
    commit bf32075256e9dd9c6b736859e2c5813981339908 upstream.
    
    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 <[email protected]>
    Reviewed-by: Jeff Layton <[email protected]>
    Signed-off-by: Chuck Lever <[email protected]>
    Reported-by: Li Lingfeng <[email protected]>
    Suggested-by: Li Lingfeng <[email protected]>
    Tested-by: Li Lingfeng <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nouveau/firmware: use dma non-coherent allocator [+ + +]
Author: Dave Airlie <[email protected]>
Date:   Fri Aug 16 06:19:23 2024 +1000

    nouveau/firmware: use dma non-coherent allocator
    
    commit 9b340aeb26d50e9a9ec99599e2a39b035fac978e upstream.
    
    Currently, enabling SG_DEBUG in the kernel will cause nouveau to hit a
    BUG() on startup, when the iommu is enabled:
    
    kernel BUG at include/linux/scatterlist.h:187!
    invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
    CPU: 7 PID: 930 Comm: (udev-worker) Not tainted 6.9.0-rc3Lyude-Test+ #30
    Hardware name: MSI MS-7A39/A320M GAMING PRO (MS-7A39), BIOS 1.I0 01/22/2019
    RIP: 0010:sg_init_one+0x85/0xa0
    Code: 69 88 32 01 83 e1 03 f6 c3 03 75 20 a8 01 75 1e 48 09 cb 41 89 54
    24 08 49 89 1c 24 41 89 6c 24 0c 5b 5d 41 5c e9 7b b9 88 00 <0f> 0b 0f 0b
    0f 0b 48 8b 05 5e 46 9a 01 eb b2 66 66 2e 0f 1f 84 00
    RSP: 0018:ffffa776017bf6a0 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: ffffa77600d87000 RCX: 000000000000002b
    RDX: 0000000000000001 RSI: 0000000000000000 RDI: ffffa77680d87000
    RBP: 000000000000e000 R08: 0000000000000000 R09: 0000000000000000
    R10: ffff98f4c46aa508 R11: 0000000000000000 R12: ffff98f4c46aa508
    R13: ffff98f4c46aa008 R14: ffffa77600d4a000 R15: ffffa77600d4a018
    FS:  00007feeb5aae980(0000) GS:ffff98f5c4dc0000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f22cb9a4520 CR3: 00000001043ba000 CR4: 00000000003506f0
    Call Trace:
     <TASK>
     ? die+0x36/0x90
     ? do_trap+0xdd/0x100
     ? sg_init_one+0x85/0xa0
     ? do_error_trap+0x65/0x80
     ? sg_init_one+0x85/0xa0
     ? exc_invalid_op+0x50/0x70
     ? sg_init_one+0x85/0xa0
     ? asm_exc_invalid_op+0x1a/0x20
     ? sg_init_one+0x85/0xa0
     nvkm_firmware_ctor+0x14a/0x250 [nouveau]
     nvkm_falcon_fw_ctor+0x42/0x70 [nouveau]
     ga102_gsp_booter_ctor+0xb4/0x1a0 [nouveau]
     r535_gsp_oneinit+0xb3/0x15f0 [nouveau]
     ? srso_return_thunk+0x5/0x5f
     ? srso_return_thunk+0x5/0x5f
     ? nvkm_udevice_new+0x95/0x140 [nouveau]
     ? srso_return_thunk+0x5/0x5f
     ? srso_return_thunk+0x5/0x5f
     ? ktime_get+0x47/0xb0
    
    Fix this by using the non-coherent allocator instead, I think there
    might be a better answer to this, but it involve ripping up some of
    APIs using sg lists.
    
    Cc: [email protected]
    Fixes: 2541626cfb79 ("drm/nouveau/acr: use common falcon HS FW code for ACR FWs")
    Signed-off-by: Dave Airlie <[email protected]>
    Signed-off-by: Danilo Krummrich <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme: clear caller pointer on identify failure [+ + +]
Author: Keith Busch <[email protected]>
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 <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nvme: fix namespace removal list [+ + +]
Author: Keith Busch <[email protected]>
Date:   Thu Jun 13 09:36:50 2024 -0700

    nvme: fix namespace removal list
    
    [ Upstream commit ff0ffe5b7c3c12c6e0cca16652905963ae817b44 ]
    
    This function wants to move a subset of a list from one element to the
    tail into another list. It also needs to use the srcu synchronize
    instead of the regular rcu version. Do this one element at a time
    because that's the only to do it.
    
    Fixes: be647e2c76b27f4 ("nvme: use srcu for iterating namespace list")
    Reported-by: Venkat Rao Bagalkote <[email protected]>
    Tested-by: Venkat Rao Bagalkote <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nvme: use srcu for iterating namespace list [+ + +]
Author: Keith Busch <[email protected]>
Date:   Tue May 21 06:41:45 2024 -0700

    nvme: use srcu for iterating namespace list
    
    [ Upstream commit be647e2c76b27f409cdd520f66c95be888b553a3 ]
    
    The nvme pci driver synchronizes with all the namespace queues during a
    reset to ensure that there's no pending timeout work.
    
    Meanwhile the timeout work potentially iterates those same namespaces to
    freeze their queues.
    
    Each of those namespace iterations use the same read lock. If a write
    lock should somehow get between the synchronize and freeze steps, then
    forward progress is deadlocked.
    
    We had been relying on the nvme controller state machine to ensure the
    reset work wouldn't conflict with timeout work. That guarantee may be a
    bit fragile to rely on, so iterate the namespace lists without taking
    potentially circular locks, as reported by lockdep.
    
    Link: https://lore.kernel.org/all/20220930001943.zdbvolc3gkekfmcv@shindev/
    Reported-by: Shinichiro Kawasaki <[email protected]>
    Tested-by: Shinichiro Kawasaki <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmet-rdma: fix possible bad dereference when freeing rsps [+ + +]
Author: Sagi Grimberg <[email protected]>
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 <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmet-tcp: do not continue for invalid icreq [+ + +]
Author: Hannes Reinecke <[email protected]>
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 <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvmet-trace: avoid dereferencing pointer too early [+ + +]
Author: Daniel Wagner <[email protected]>
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 <[email protected]>
    Signed-off-by: Daniel Wagner <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
octeontx2-af: Fix CPT AF register offset calculation [+ + +]
Author: Bharat Bhushan <[email protected]>
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 <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
openrisc: Call setup_memory() earlier in the init sequence [+ + +]
Author: Oreoluwa Babatunde <[email protected]>
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 <[email protected]>
    Signed-off-by: Stafford Horne <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
parisc: Use irq_enter_rcu() to fix warning at kernel/context_tracking.c:367 [+ + +]
Author: Helge Deller <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/surface: aggregator: Fix warning when controller is destroyed in probe [+ + +]
Author: Maximilian Luz <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86/intel/ifs: Call release_firmware() when handling errors. [+ + +]
Author: Jithu Joseph <[email protected]>
Date:   Thu Jan 25 00:22:50 2024 -0800

    platform/x86/intel/ifs: Call release_firmware() when handling errors.
    
    commit 8c898ec07a2fc1d4694e81097a48e94a3816308d upstream.
    
    Missing release_firmware() due to error handling blocked any future image
    loading.
    
    Fix the return code and release_fiwmare() to release the bad image.
    
    Fixes: 25a76dbb36dd ("platform/x86/intel/ifs: Validate image size")
    Reported-by: Pengfei Xu <[email protected]>
    Signed-off-by: Jithu Joseph <[email protected]>
    Signed-off-by: Ashok Raj <[email protected]>
    Tested-by: Pengfei Xu <[email protected]>
    Reviewed-by: Tony Luck <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Hans de Goede <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

platform/x86/intel/ifs: Validate image size [+ + +]
Author: Jithu Joseph <[email protected]>
Date:   Thu Oct 5 12:51:33 2023 -0700

    platform/x86/intel/ifs: Validate image size
    
    [ Upstream commit 25a76dbb36dd58ad4df7f6a4dc43061a10b0d817 ]
    
    Perform additional validation prior to loading IFS image.
    
    Error out if the size of the file being loaded doesn't match the size
    specified in the header.
    
    Signed-off-by: Jithu Joseph <[email protected]>
    Reviewed-by: Tony Luck <[email protected]>
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Tested-by: Pengfei Xu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86: lg-laptop: fix %s null argument warning [+ + +]
Author: Gergo Koteles <[email protected]>
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 <[email protected]>
    Reviewed-by: Kuppuswamy Sathyanarayanan <[email protected]>
    Link: https://lore.kernel.org/r/33d40e976f08f82b9227d0ecae38c787fcc0c0b2.1712154684.git.soyer@irl.hu
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pmdomain: imx: scu-pd: Remove duplicated clocks [+ + +]
Author: Alexander Stein <[email protected]>
Date:   Wed Jul 17 10:03:33 2024 +0200

    pmdomain: imx: scu-pd: Remove duplicated clocks
    
    commit 50359c9c3cb3e55e840e3485f5ee37da5b2b16b6 upstream.
    
    These clocks are already added to the list. Remove the duplicates ones.
    
    Fixes: a67d780720ff ("genpd: imx: scu-pd: add more PDs")
    Signed-off-by: Alexander Stein <[email protected]>
    Cc: [email protected]
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

pmdomain: imx: wait SSAR when i.MX93 power domain on [+ + +]
Author: Peng Fan <[email protected]>
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: [email protected]
    Fixes: 0a0f7cc25d4a ("soc: imx: add i.MX93 SRC power domain driver")
    Reviewed-by: Jacky Bai <[email protected]>
    Signed-off-by: Peng Fan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
powerpc/boot: Handle allocation failure in simple_realloc() [+ + +]
Author: Li zeming <[email protected]>
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 <[email protected]>
    [mpe: Reword subject, use change log from Christophe]
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

powerpc/boot: Only free if realloc() succeeds [+ + +]
Author: Michael Ellerman <[email protected]>
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 <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/pseries/papr-sysparm: Validate buffer object lengths [+ + +]
Author: Nathan Lynch <[email protected]>
Date:   Tue Dec 12 11:01:57 2023 -0600

    powerpc/pseries/papr-sysparm: Validate buffer object lengths
    
    [ Upstream commit 35aae182bd7b422be3cefc08c12207bf2b973364 ]
    
    The ability to get and set system parameters will be exposed to user
    space, so let's get a little more strict about malformed
    papr_sysparm_buf objects.
    
    * Create accessors for the length field of struct papr_sysparm_buf.
      The length is always stored in MSB order and this is better than
      spreading the necessary conversions all over.
    
    * Reject attempts to submit invalid buffers to RTAS.
    
    * Warn if RTAS returns a buffer with an invalid length, clamping the
      returned length to a safe value that won't overrun the buffer.
    
    These are meant as precautionary measures to mitigate both firmware
    and kernel bugs in this area, should they arise, but I am not aware of
    any.
    
    Signed-off-by: Nathan Lynch <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://msgid.link/20231212-papr-sys_rtas-vs-lockdown-v6-10-e9eafd0c8c6c@linux.ibm.com
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/topology: Check if a core is online [+ + +]
Author: Nysal Jan K.A <[email protected]>
Date:   Wed Jul 31 08:31:13 2024 +0530

    powerpc/topology: Check if a core is online
    
    [ Upstream commit 227bbaabe64b6f9cd98aa051454c1d4a194a8c6a ]
    
    topology_is_core_online() checks if the core a CPU belongs to
    is online. The core is online if at least one of the sibling
    CPUs is online. The first CPU of an online core is also online
    in the common case, so this should be fairly quick.
    
    Fixes: 73c58e7e1412 ("powerpc: Add HOTPLUG_SMT support")
    Signed-off-by: Nysal Jan K.A <[email protected]>
    Reviewed-by: Shrikanth Hegde <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
powerpc/xics: Check return value of kasprintf in icp_native_map_one_cpu [+ + +]
Author: Kunwu Chan <[email protected]>
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 <[email protected]>
    Signed-off-by: Michael Ellerman <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
quota: Remove BUG_ON from dqget() [+ + +]
Author: Jan Kara <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rcu: Dump memory object info if callback function is invalid [+ + +]
Author: Zhen Lei <[email protected]>
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 <[email protected]>
    Signed-off-by: Paul E. McKenney <[email protected]>
    Signed-off-by: Frederic Weisbecker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rcu: Eliminate rcu_gp_slow_unregister() false positive [+ + +]
Author: Paul E. McKenney <[email protected]>
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 <[email protected]>
    Signed-off-by: Frederic Weisbecker <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
RDMA/rtrs: Fix the problem of variable not initialized fully [+ + +]
Author: Zhu Yanjun <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Leon Romanovsky <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "ACPI: EC: Evaluate orphan _REG under EC device" [+ + +]
Author: Rafael J. Wysocki <[email protected]>
Date:   Mon Aug 12 15:08:04 2024 +0200

    Revert "ACPI: EC: Evaluate orphan _REG under EC device"
    
    commit 779bac9994452f6a894524f70c00cfb0cd4b6364 upstream.
    
    This reverts commit 0e6b6dedf168 ("Revert "ACPI: EC: Evaluate orphan
    _REG under EC device") because the problem addressed by it will be
    addressed differently in what follows.
    
    Signed-off-by: Rafael J. Wysocki <[email protected]>
    Reviewed-by: Hans de Goede <[email protected]>
    Cc: All applicable <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "bpf, sockmap: Prevent lock inversion deadlock in map delete elem" [+ + +]
Author: Jakub Sitnicki <[email protected]>
Date:   Mon May 27 13:20:08 2024 +0200

    Revert "bpf, sockmap: Prevent lock inversion deadlock in map delete elem"
    
    [ Upstream commit 3b9ce0491a43e9af7f108b2f1bced7cd35931660 ]
    
    This reverts commit ff91059932401894e6c86341915615c5eb0eca48.
    
    This check is no longer needed. BPF programs attached to tracepoints are
    now rejected by the verifier when they attempt to delete from a
    sockmap/sockhash maps.
    
    Signed-off-by: Jakub Sitnicki <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Acked-by: John Fastabend <[email protected]>
    Link: https://lore.kernel.org/bpf/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "drm/amd/display: Validate hw_points_num before using it" [+ + +]
Author: Alex Hung <[email protected]>
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 <[email protected]>
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "misc: fastrpc: Restrict untrusted app to attach to privileged PD" [+ + +]
Author: Griffin Kroah-Hartman <[email protected]>
Date:   Thu Aug 15 11:49:20 2024 +0200

    Revert "misc: fastrpc: Restrict untrusted app to attach to privileged PD"
    
    commit 9bb5e74b2bf88fbb024bb15ded3b011e02c673be upstream.
    
    This reverts commit bab2f5e8fd5d2f759db26b78d9db57412888f187.
    
    Joel reported that this commit breaks userspace and stops sensors in
    SDM845 from working. Also breaks other qcom SoC devices running postmarketOS.
    
    Cc: stable <[email protected]>
    Cc: Ekansh Gupta <[email protected]>
    Cc: Dmitry Baryshkov <[email protected]>
    Reported-by: Joel Selvaraj <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Griffin Kroah-Hartman <[email protected]>
    Acked-by: Srinivas Kandagatla <[email protected]>
    Fixes: bab2f5e8fd5d ("misc: fastrpc: Restrict untrusted app to attach to privileged PD")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "s390/dasd: Establish DMA alignment" [+ + +]
Author: Jan Höppner <[email protected]>
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: [email protected] # 6.0+
    Signed-off-by: Jan Höppner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Revert "usb: gadget: uvc: cleanup request when not in correct state" [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Cc: Michael Grzeschik <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Revert "usb: typec: tcpm: clear pd_event queue in PORT_RESET" [+ + +]
Author: Xu Yang <[email protected]>
Date:   Fri Aug 9 19:29:01 2024 +0800

    Revert "usb: typec: tcpm: clear pd_event queue in PORT_RESET"
    
    commit 21ea1ce37fc267dc45fe27517bbde926211683df upstream.
    
    This reverts commit bf20c69cf3cf9c6445c4925dd9a8a6ca1b78bfdf.
    
    During tcpm_init() stage, if the VBUS is still present after
    tcpm_reset_port(), then we assume that VBUS will off and goto safe0v
    after a specific discharge time. Following a TCPM_VBUS_EVENT event if
    VBUS reach to off state. TCPM_VBUS_EVENT event may be set during
    PORT_RESET handling stage. If pd_events reset to 0 after TCPM_VBUS_EVENT
    set, we will lost this VBUS event. Then the port state machine may stuck
    at one state.
    
    Before:
    
    [    2.570172] pending state change PORT_RESET -> PORT_RESET_WAIT_OFF @ 100 ms [rev1 NONE_AMS]
    [    2.570179] state change PORT_RESET -> PORT_RESET_WAIT_OFF [delayed 100 ms]
    [    2.570182] pending state change PORT_RESET_WAIT_OFF -> SNK_UNATTACHED @ 920 ms [rev1 NONE_AMS]
    [    3.490213] state change PORT_RESET_WAIT_OFF -> SNK_UNATTACHED [delayed 920 ms]
    [    3.490220] Start toggling
    [    3.546050] CC1: 0 -> 0, CC2: 0 -> 2 [state TOGGLING, polarity 0, connected]
    [    3.546057] state change TOGGLING -> SRC_ATTACH_WAIT [rev1 NONE_AMS]
    
    After revert this patch, we can see VBUS off event and the port will goto
    expected state.
    
    [    2.441992] pending state change PORT_RESET -> PORT_RESET_WAIT_OFF @ 100 ms [rev1 NONE_AMS]
    [    2.441999] state change PORT_RESET -> PORT_RESET_WAIT_OFF [delayed 100 ms]
    [    2.442002] pending state change PORT_RESET_WAIT_OFF -> SNK_UNATTACHED @ 920 ms [rev1 NONE_AMS]
    [    2.442122] VBUS off
    [    2.442125] state change PORT_RESET_WAIT_OFF -> SNK_UNATTACHED [rev1 NONE_AMS]
    [    2.442127] VBUS VSAFE0V
    [    2.442351] CC1: 0 -> 0, CC2: 0 -> 0 [state SNK_UNATTACHED, polarity 0, disconnected]
    [    2.442357] Start toggling
    [    2.491850] CC1: 0 -> 0, CC2: 0 -> 2 [state TOGGLING, polarity 0, connected]
    [    2.491858] state change TOGGLING -> SRC_ATTACH_WAIT [rev1 NONE_AMS]
    [    2.491863] pending state change SRC_ATTACH_WAIT -> SNK_TRY @ 200 ms [rev1 NONE_AMS]
    [    2.691905] state change SRC_ATTACH_WAIT -> SNK_TRY [delayed 200 ms]
    
    Fixes: bf20c69cf3cf ("usb: typec: tcpm: clear pd_event queue in PORT_RESET")
    Cc: [email protected]
    Signed-off-by: Xu Yang <[email protected]>
    Acked-by: Heikki Krogerus <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
riscv: blacklist assembly symbols for kprobe [+ + +]
Author: Clément Léger <[email protected]>
Date:   Wed Oct 4 15:10:09 2023 +0200

    riscv: blacklist assembly symbols for kprobe
    
    [ Upstream commit 5014396af9bbac0f28d9afee7eae405206d01ee7 ]
    
    Adding kprobes on some assembly functions (mainly exception handling)
    will result in crashes (either recursive trap or panic). To avoid such
    errors, add ASM_NOKPROBE() macro which allow adding specific symbols
    into the __kprobe_blacklist section and use to blacklist the following
    symbols that showed to be problematic:
    - handle_exception()
    - ret_from_exception()
    - handle_kernel_stack_overflow()
    
    Signed-off-by: Clément Léger <[email protected]>
    Reviewed-by: Charlie Jenkins <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Palmer Dabbelt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

riscv: change XIP's kernel_map.size to be size of the entire kernel [+ + +]
Author: Nam Cao <[email protected]>
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 <[email protected]>
    Cc: <[email protected]> # v6.1+
    Reviewed-by: Alexandre Ghiti <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Palmer Dabbelt <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

riscv: entry: always initialize regs->a0 to -ENOSYS [+ + +]
Author: Celeste Liu <[email protected]>
Date:   Thu Jun 27 22:23:39 2024 +0800

    riscv: entry: always initialize regs->a0 to -ENOSYS
    
    [ Upstream commit 61119394631f219e23ce98bcc3eb993a64a8ea64 ]
    
    Otherwise when the tracer changes syscall number to -1, the kernel fails
    to initialize a0 with -ENOSYS and subsequently fails to return the error
    code of the failed syscall to userspace. For example, it will break
    strace syscall tampering.
    
    Fixes: 52449c17bdd1 ("riscv: entry: set a0 = -ENOSYS only when syscall != -1")
    Reported-by: "Dmitry V. Levin" <[email protected]>
    Reviewed-by: Björn Töpel <[email protected]>
    Cc: [email protected]
    Signed-off-by: Celeste Liu <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Palmer Dabbelt <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rtc: nct3018y: fix possible NULL dereference [+ + +]
Author: Alexandre Belloni <[email protected]>
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 <[email protected]>
    Reported-by: Dan Carpenter <[email protected]>
    Closes: https://lore.kernel.org/r/[email protected]/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexandre Belloni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rtla/osnoise: Prevent NULL dereference in error handling [+ + +]
Author: Dan Carpenter <[email protected]>
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: [email protected]
    Cc: John Kacur <[email protected]>
    Cc: "Luis Claudio R. Goncalves" <[email protected]>
    Cc: Clark Williams <[email protected]>
    Fixes: 1eceb2fc2ca5 ("rtla/osnoise: Add osnoise top mode")
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Dan Carpenter <[email protected]>
    Signed-off-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rust: fix the default format for CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT [+ + +]
Author: Masahiro Yamada <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ Rebased on top of v6.11-rc1. - Miguel ]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rust: suppress error messages from CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT [+ + +]
Author: Masahiro Yamada <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [ Rebased on top of v6.11-rc1. - Miguel ]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

rust: work around `bindgen` 0.69.0 issue [+ + +]
Author: Miguel Ojeda <[email protected]>
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 <[email protected]>
    Tested-by: Benno Lossin <[email protected]>
    Tested-by: Andreas Hindborg <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Miguel Ojeda <[email protected]>
    Stable-dep-of: 5ce86c6c8613 ("rust: suppress error messages from CONFIG_{RUSTC,BINDGEN}_VERSION_TEXT")
    Signed-off-by: Sasha Levin <[email protected]>

 
rxrpc: Don't pick values out of the wire header when setting up security [+ + +]
Author: David Howells <[email protected]>
Date:   Tue Jan 30 08:24:58 2024 +0000

    rxrpc: Don't pick values out of the wire header when setting up security
    
    [ Upstream commit a1c9af4d4467354132417c2d8db10d6e928a7f77 ]
    
    Don't pick values out of the wire header in rxkad when setting up DATA
    packet security, but rather use other sources.  This makes it easier to get
    rid of txb->wire.
    
    Signed-off-by: David Howells <[email protected]>
    cc: Marc Dionne <[email protected]>
    cc: "David S. Miller" <[email protected]>
    cc: Eric Dumazet <[email protected]>
    cc: Jakub Kicinski <[email protected]>
    cc: Paolo Abeni <[email protected]>
    cc: [email protected]
    cc: [email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/cio: rename bitmap_size() -> idset_bitmap_size() [+ + +]
Author: Alexander Lobakin <[email protected]>
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 <[email protected]>
    Acked-by: Peter Oberparleiter <[email protected]>
    Signed-off-by: Alexander Lobakin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/dasd: fix error recovery leading to data corruption on ESE devices [+ + +]
Author: Stefan Haberland <[email protected]>
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: [email protected] # 5.3+
    Fixes: 5e2b17e712cf ("s390/dasd: Add dynamic formatting support for ESE volumes")
    Reviewed-by: Jan Hoeppner <[email protected]>
    Signed-off-by: Stefan Haberland <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
s390/iucv: fix receive buffer virtual vs physical address confusion [+ + +]
Author: Alexander Gordeev <[email protected]>
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 <[email protected]>
    Reviewed-by: Alexandra Winter <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/smp,mcck: fix early IPI handling [+ + +]
Author: Heiko Carstens <[email protected]>
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 <[email protected]>
    Acked-by: Alexander Gordeev <[email protected]>
    Signed-off-by: Heiko Carstens <[email protected]>
    Signed-off-by: Vasily Gorbik <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
s390/uv: Panic for set and remove shared access UVC errors [+ + +]
Author: Claudio Imbrenda <[email protected]>
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 <[email protected]>
    Reviewed-by: Christian Borntraeger <[email protected]>
    Reviewed-by: Steffen Eiden <[email protected]>
    Reviewed-by: Janosch Frank <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Message-ID: <[email protected]>
    [[email protected]: Fixed up patch subject]
    Signed-off-by: Janosch Frank <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
sched/topology: Handle NUMA_NO_NODE in sched_numa_find_nth_cpu() [+ + +]
Author: Yury Norov <[email protected]>
Date:   Sat Aug 19 07:12:37 2023 -0700

    sched/topology: Handle NUMA_NO_NODE in sched_numa_find_nth_cpu()
    
    [ Upstream commit 9ecea9ae4d3127a09fb5dfcea87f248937a39ff5 ]
    
    sched_numa_find_nth_cpu() doesn't handle NUMA_NO_NODE properly, and
    may crash kernel if passed with it. On the other hand, the only user
    of sched_numa_find_nth_cpu() has to check NUMA_NO_NODE case explicitly.
    
    It would be easier for users if this logic will get moved into
    sched_numa_find_nth_cpu().
    
    Signed-off-by: Yury Norov <[email protected]>
    Signed-off-by: Ingo Molnar <[email protected]>
    Cc: Mel Gorman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: core: Fix the return value of scsi_logical_block_count() [+ + +]
Author: Chaotian Jing <[email protected]>
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: [email protected]
    Fixes: 6a20e21ae1e2 ("scsi: core: Add helper to return number of logical blocks in a request")
    Signed-off-by: Chaotian Jing <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Bart Van Assche <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: lpfc: Initialize status local variable in lpfc_sli4_repost_sgl_list() [+ + +]
Author: Justin Tee <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Himanshu Madhani <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: spi: Fix sshdr use [+ + +]
Author: Mike Christie <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: John Garry <[email protected]>
    Reviewed-by: Martin Wilck <[email protected]>
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/bpf: Add a test to verify previous stacksafe() fix [+ + +]
Author: Yonghong Song <[email protected]>
Date:   Mon Aug 12 14:48:52 2024 -0700

    selftests/bpf: Add a test to verify previous stacksafe() fix
    
    commit 662c3e2db00f92e50c26e9dc4fe47c52223d9982 upstream.
    
    A selftest is added such that without the previous patch,
    a crash can happen. With the previous patch, the test can
    run successfully. The new test is written in a way which
    mimics original crash case:
      main_prog
        static_prog_1
          static_prog_2
    where static_prog_1 has different paths to static_prog_2
    and some path has stack allocated and some other path
    does not. A stacksafe() checking in static_prog_2()
    triggered the crash.
    
    Signed-off-by: Yonghong Song <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests/bpf: Fix a few tests for GCC related warnings. [+ + +]
Author: Cupertino Miranda <[email protected]>
Date:   Fri May 10 19:38:50 2024 +0100

    selftests/bpf: Fix a few tests for GCC related warnings.
    
    [ Upstream commit 5ddafcc377f98778acc08f660dee6400aece6a62 ]
    
    This patch corrects a few warnings to allow selftests to compile for
    GCC.
    
    -- progs/cpumask_failure.c --
    
    progs/bpf_misc.h:136:22: error: ‘cpumask’ is used uninitialized
    [-Werror=uninitialized]
      136 | #define __sink(expr) asm volatile("" : "+g"(expr))
          |                      ^~~
    progs/cpumask_failure.c:68:9: note: in expansion of macro ‘__sink’
       68 |         __sink(cpumask);
    
    The macro __sink(cpumask) with the '+' contraint modifier forces the
    the compiler to expect a read and write from cpumask. GCC detects
    that cpumask is never initialized and reports an error.
    This patch removes the spurious non required definitions of cpumask.
    
    -- progs/dynptr_fail.c --
    
    progs/dynptr_fail.c:1444:9: error: ‘ptr1’ may be used uninitialized
    [-Werror=maybe-uninitialized]
     1444 |         bpf_dynptr_clone(&ptr1, &ptr2);
    
    Many of the tests in the file are related to the detection of
    uninitialized pointers by the verifier. GCC is able to detect possible
    uninitialized values, and reports this as an error.
    The patch initializes all of the previous uninitialized structs.
    
    -- progs/test_tunnel_kern.c --
    
    progs/test_tunnel_kern.c:590:9: error: array subscript 1 is outside
    array bounds of ‘struct geneve_opt[1]’ [-Werror=array-bounds=]
      590 |         *(int *) &gopt.opt_data = bpf_htonl(0xdeadbeef);
          |         ^~~~~~~~~~~~~~~~~~~~~~~
    progs/test_tunnel_kern.c:575:27: note: at offset 4 into object ‘gopt’ of
    size 4
      575 |         struct geneve_opt gopt;
    
    This tests accesses beyond the defined data for the struct geneve_opt
    which contains as last field "u8 opt_data[0]" which clearly does not get
    reserved space (in stack) in the function header. This pattern is
    repeated in ip6geneve_set_tunnel and geneve_set_tunnel functions.
    GCC is able to see this and emits a warning.
    The patch introduces a local struct that allocates enough space to
    safely allow the write to opt_data field.
    
    -- progs/jeq_infer_not_null_fail.c --
    
    progs/jeq_infer_not_null_fail.c:21:40: error: array subscript ‘struct
    bpf_map[0]’ is partly outside array bounds of ‘struct <anonymous>[1]’
    [-Werror=array-bounds=]
       21 |         struct bpf_map *inner_map = map->inner_map_meta;
          |                                        ^~
    progs/jeq_infer_not_null_fail.c:14:3: note: object ‘m_hash’ of size 32
       14 | } m_hash SEC(".maps");
    
    This example defines m_hash in the context of the compilation unit and
    casts it to struct bpf_map which is much smaller than the size of struct
    bpf_map. It errors out in GCC when it attempts to access an element that
    would be defined in struct bpf_map outsize of the defined limits for
    m_hash.
    This patch disables the warning through a GCC pragma.
    
    This changes were tested in bpf-next master selftests without any
    regressions.
    
    Signed-off-by: Cupertino Miranda <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Cc: Yonghong Song <[email protected]>
    Cc: Eduard Zingerman <[email protected]>
    Cc: Andrii Nakryiko <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests/mm: log run_vmtests.sh results in TAP format [+ + +]
Author: Ryan Roberts <[email protected]>
Date:   Thu Dec 14 16:24:34 2023 +0000

    selftests/mm: log run_vmtests.sh results in TAP format
    
    [ Upstream commit a3c5cc5129ef55ac6c69f468e5ee6e4b0cd8179c ]
    
    When running tests on a CI system (e.g.  LAVA) it is useful to output test
    results in TAP (Test Anything Protocol) format so that the CI can parse
    the fine-grained results to show regressions.  Many of the mm selftest
    binaries already output using the TAP format.  And the kselftests runner
    (run_kselftest.sh) also uses the format.  CI systems such as LAVA can
    already handle nested TAP reports.  However, with the mm selftests we have
    3 levels of nesting (run_kselftest.sh -> run_vmtests.sh -> individual test
    binaries) and the middle level did not previously support TAP, which
    breaks the parser.
    
    Let's fix that by teaching run_vmtests.sh to output using the TAP format.
    Ideally this would be opt-in via a command line argument to avoid the
    possibility of breaking anyone's existing scripts that might scrape the
    output.  However, it is not possible to pass arguments to tests invoked
    via run_kselftest.sh.  So I've implemented an opt-out option (-n), which
    will revert to the existing output format.
    
    Future changes to this file should be aware of 2 new conventions:
    
     - output that is part of the TAP reporting is piped through tap_output
     - general output is piped through tap_prefix
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Ryan Roberts <[email protected]>
    Reviewed-by: Mark Brown <[email protected]>
    Tested-by: John Hubbard <[email protected]>
    Cc: Aishwarya TCV <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 7c5e8d212d7d ("selftests: memfd_secret: don't build memfd_secret test on unsupported arches")
    Signed-off-by: Sasha Levin <[email protected]>

 
selftests: memfd_secret: don't build memfd_secret test on unsupported arches [+ + +]
Author: Muhammad Usama Anjum <[email protected]>
Date:   Fri Aug 9 12:56:42 2024 +0500

    selftests: memfd_secret: don't build memfd_secret test on unsupported arches
    
    [ Upstream commit 7c5e8d212d7d81991a580e7de3904ea213d9a852 ]
    
    [1] mentions that memfd_secret is only supported on arm64, riscv, x86 and
    x86_64 for now.  It doesn't support other architectures.  I found the
    build error on arm and decided to send the fix as it was creating noise on
    KernelCI:
    
    memfd_secret.c: In function 'memfd_secret':
    memfd_secret.c:42:24: error: '__NR_memfd_secret' undeclared (first use in this function);
    did you mean 'memfd_secret'?
       42 |         return syscall(__NR_memfd_secret, flags);
          |                        ^~~~~~~~~~~~~~~~~
          |                        memfd_secret
    
    Hence I'm adding condition that memfd_secret should only be compiled on
    supported architectures.
    
    Also check in run_vmtests script if memfd_secret binary is present before
    executing it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/all/[email protected]/ [1]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 76fe17ef588a ("secretmem: test: add basic selftest for memfd_secret(2)")
    Signed-off-by: Muhammad Usama Anjum <[email protected]>
    Reviewed-by: Shuah Khan <[email protected]>
    Acked-by: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Albert Ou <[email protected]>
    Cc: James Bottomley <[email protected]>
    Cc: Mike Rapoport (Microsoft) <[email protected]>
    Cc: Palmer Dabbelt <[email protected]>
    Cc: Paul Walmsley <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests: mptcp: join: check re-using ID of closed subflow [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:22 2024 +0200

    selftests: mptcp: join: check re-using ID of closed subflow
    
    commit 65fb58afa341ad68e71e5c4d816b407e6a683a66 upstream.
    
    This test extends "delete and re-add" to validate the previous commit. A
    new 'subflow' endpoint is added, but the subflow request will be
    rejected. The result is that no subflow will be established from this
    address.
    
    Later, the endpoint is removed and re-added after having cleared the
    firewall rule. Before the previous commit, the client would not have
    been able to create this new subflow.
    
    While at it, extra checks have been added to validate the expected
    numbers of MPJ and RM_ADDR.
    
    The 'Fixes' tag here below is the same as the one from the previous
    commit: this patch here is not fixing anything wrong in the selftests,
    but it validates the previous fix for an issue introduced by this commit
    ID.
    
    Fixes: b6c08380860b ("mptcp: remove addr and subflow in PM netlink")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: mptcp: join: validate fullmesh endp on 1st sf [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Mon Aug 19 21:45:31 2024 +0200

    selftests: mptcp: join: validate fullmesh endp on 1st sf
    
    commit 4878f9f8421f4587bee7b232c1c8a9d3a7d4d782 upstream.
    
    This case was not covered, and the wrong ID was set before the previous
    commit.
    
    The rest is not modified, it is just that it will increase the code
    coverage.
    
    The right address ID can be verified by looking at the packet traces. We
    could automate that using Netfilter with some cBPF code for example, but
    that's always a bit cryptic. Packetdrill seems better fitted for that.
    
    Fixes: 4f49d63352da ("selftests: mptcp: add fullmesh testcases")
    Cc: [email protected]
    Reviewed-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selftests: net: lib: ignore possible errors [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Fri Jun 7 18:31:02 2024 +0200

    selftests: net: lib: ignore possible errors
    
    [ Upstream commit 7e0620bc6a5ec6b340a0be40054f294ca26c010f ]
    
    No need to disable errexit temporary, simply ignore the only possible
    and not handled error.
    
    Reviewed-by: Geliang Tang <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Link: https://lore.kernel.org/r/20240607-upstream-net-next-20240607-selftests-mptcp-net-lib-v1-1-e36986faac94@kernel.org
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 7965a7f32a53 ("selftests: net: lib: kill PIDs before del netns")
    Signed-off-by: Sasha Levin <[email protected]>

selftests: net: lib: kill PIDs before del netns [+ + +]
Author: Matthieu Baerts (NGI0) <[email protected]>
Date:   Tue Aug 13 15:39:34 2024 +0200

    selftests: net: lib: kill PIDs before del netns
    
    [ Upstream commit 7965a7f32a53d9ad807ce2c53bdda69ba104974f ]
    
    When deleting netns, it is possible to still have some tasks running,
    e.g. background tasks like tcpdump running in the background, not
    stopped because the test has been interrupted.
    
    Before deleting the netns, it is then safer to kill all attached PIDs,
    if any. That should reduce some noises after the end of some tests, and
    help with the debugging of some issues. That's why this modification is
    seen as a "fix".
    
    Fixes: 25ae948b4478 ("selftests/net: add lib.sh")
    Acked-by: Mat Martineau <[email protected]>
    Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
    Acked-by: Florian Westphal <[email protected]>
    Reviewed-by: Hangbin Liu <[email protected]>
    Link: https://patch.msgid.link/20240813-upstream-net-20240813-selftests-net-lib-kill-v1-1-27b689b248b8@kernel.org
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

selftests: udpgro: report error when receive failed [+ + +]
Author: Hangbin Liu <[email protected]>
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 <[email protected]>
    Signed-off-by: Hangbin Liu <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
selinux: add the processing of the failure of avc_add_xperms_decision() [+ + +]
Author: Zhen Lei <[email protected]>
Date:   Wed Aug 7 17:00:56 2024 +0800

    selinux: add the processing of the failure of avc_add_xperms_decision()
    
    commit 6dd1e4c045afa6a4ba5d46f044c83bd357c593c2 upstream.
    
    When avc_add_xperms_decision() fails, the information recorded by the new
    avc node is incomplete. In this case, the new avc node should be released
    instead of replacing the old avc node.
    
    Cc: [email protected]
    Fixes: fa1aa143ac4a ("selinux: extended permissions for ioctls")
    Suggested-by: Stephen Smalley <[email protected]>
    Signed-off-by: Zhen Lei <[email protected]>
    Acked-by: Stephen Smalley <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selinux: fix potential counting error in avc_add_xperms_decision() [+ + +]
Author: Zhen Lei <[email protected]>
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: [email protected]
    Fixes: fa1aa143ac4a ("selinux: extended permissions for ioctls")
    Signed-off-by: Zhen Lei <[email protected]>
    Acked-by: Stephen Smalley <[email protected]>
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

selinux: revert our use of vma_is_initial_heap() [+ + +]
Author: Paul Moore <[email protected]>
Date:   Thu Aug 8 11:57:38 2024 -0400

    selinux: revert our use of vma_is_initial_heap()
    
    commit 05a3d6e9307250a5911d75308e4363466794ab21 upstream.
    
    Unfortunately it appears that vma_is_initial_heap() is currently broken
    for applications that do not currently have any heap allocated, e.g.
    brk == start_brk.  The breakage is such that it will cause SELinux to
    check for the process/execheap permission on memory regions that cross
    brk/start_brk even when there is no heap.
    
    The proper fix would be to correct vma_is_initial_heap(), but as there
    are multiple callers I am hesitant to unilaterally modify the helper
    out of concern that I would end up breaking some other subsystem.  The
    mm developers have been made aware of the situation and hopefully they
    will have a fix at some point in the future, but we need a fix soon so
    we are simply going to revert our use of vma_is_initial_heap() in favor
    of our old logic/code which works as expected, even in the face of a
    zero size heap.  We can return to using vma_is_initial_heap() at some
    point in the future when it is fixed.
    
    Cc: [email protected]
    Reported-by: Marc Reisner <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]
    Fixes: 68df1baf158f ("selinux: use vma_is_initial_stack() and vma_is_initial_heap()")
    Signed-off-by: Paul Moore <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: client: ignore unhandled reparse tags [+ + +]
Author: Paulo Alcantara <[email protected]>
Date:   Wed Aug 21 00:45:03 2024 -0300

    smb: client: ignore unhandled reparse tags
    
    [ Upstream commit ec686804117a0421cf31d54427768aaf93aa0069 ]
    
    Just ignore reparse points that the client can't parse rather than
    bailing out and not opening the file or directory.
    
    Reported-by: Marc <[email protected]>
    Closes: https://lore.kernel.org/r/CAMHwNVv-B+Q6wa0FEXrAuzdchzcJRsPKDDRrNaYZJd6X-+iJzw@mail.gmail.com
    Fixes: 539aad7f14da ("smb: client: introduce ->parse_reparse_point()")
    Tested-by: Anthony Nandaa (Microsoft) <[email protected]>
    Signed-off-by: Paulo Alcantara (Red Hat) <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ssb: Fix division by zero issue in ssb_calc_clock_rate [+ + +]
Author: Rand Deeb <[email protected]>
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
    <[email protected]> and Michael Büsch <[email protected]>. 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 <[email protected]>
    Acked-by: Larry Finger <[email protected]>
    Acked-by: Michael Büsch <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
staging: iio: resolver: ad2s1210: fix use before initialization [+ + +]
Author: David Lechner <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

staging: ks7010: disable bh on tx_dev_lock [+ + +]
Author: Chengfeng Ye <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tc-testing: don't access non-existent variable on exception [+ + +]
Author: Simon Horman <[email protected]>
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 <[email protected]>
    Acked-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
tcp/dccp: bypass empty buckets in inet_twsk_purge() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 565d121b6998 ("tcp: prevent concurrent execution of tcp_sk_exit_batch")
    Signed-off-by: Sasha Levin <[email protected]>

tcp/dccp: do not care about families in inet_twsk_purge() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/netdev/[email protected]/
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 565d121b6998 ("tcp: prevent concurrent execution of tcp_sk_exit_batch")
    Signed-off-by: Sasha Levin <[email protected]>

 
tcp: do not export tcp_twsk_purge() [+ + +]
Author: Eric Dumazet <[email protected]>
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 <[email protected]>
    Cc: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tcp: prevent concurrent execution of tcp_sk_exit_batch [+ + +]
Author: Florian Westphal <[email protected]>
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: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Link: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Florian Westphal <[email protected]>
    Reviewed-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Jason Xing <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

tcp: Update window clamping condition [+ + +]
Author: Subash Abhinov Kasiviswanathan <[email protected]>
Date:   Thu Aug 8 16:06:40 2024 -0700

    tcp: Update window clamping condition
    
    [ Upstream commit a2cbb1603943281a604f5adc48079a148db5cb0d ]
    
    This patch is based on the discussions between Neal Cardwell and
    Eric Dumazet in the link
    https://lore.kernel.org/netdev/[email protected]/
    
    It was correctly pointed out that tp->window_clamp would not be
    updated in cases where net.ipv4.tcp_moderate_rcvbuf=0 or if
    (copied <= tp->rcvq_space.space). While it is expected for most
    setups to leave the sysctl enabled, the latter condition may
    not end up hitting depending on the TCP receive queue size and
    the pattern of arriving data.
    
    The updated check should be hit only on initial MSS update from
    TCP_MIN_MSS to measured MSS value and subsequently if there was
    an update to a larger value.
    
    Fixes: 05f76b2d634e ("tcp: Adjust clamping window for applications specifying SO_RCVBUF")
    Signed-off-by: Sean Tranchetti <[email protected]>
    Signed-off-by: Subash Abhinov Kasiviswanathan <[email protected]>
    Acked-by: Neal Cardwell <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
thunderbolt: Mark XDomain as unplugged when router is removed [+ + +]
Author: Mika Westerberg <[email protected]>
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: [email protected]
    Signed-off-by: Mika Westerberg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tick: Move got_idle_tick away from common flags [+ + +]
Author: Frederic Weisbecker <[email protected]>
Date:   Sun Feb 25 23:55:03 2024 +0100

    tick: Move got_idle_tick away from common flags
    
    [ Upstream commit 3ce74f1a8566dbbc9774f85fb0ce781fe290fd32 ]
    
    tick_nohz_idle_got_tick() is called by cpuidle_reflect() within the idle
    loop with interrupts enabled. This function modifies the struct
    tick_sched's bitfield "got_idle_tick". However this bitfield is stored
    within the same mask as other bitfields that can be modified from
    interrupts.
    
    Fortunately so far it looks like the only race that can happen is while
    writing ->got_idle_tick to 0, an interrupt fires and writes the
    ->idle_active field to 0. It's then possible that the interrupted write
    to ->got_idle_tick writes back the old value of ->idle_active back to 1.
    
    However if that happens, the worst possible outcome is that the time
    spent between that interrupt and the upcoming call to
    tick_nohz_idle_exit() is accounted as idle, which is negligible quantity.
    
    Still all the bitfield writes within this struct tick_sched's shadow
    mask should be IRQ-safe. Therefore move this bitfield out to its own
    storage to avoid further suprises.
    
    Signed-off-by: Frederic Weisbecker <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Thomas Gleixner <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
tools/testing/selftests/mm/run_vmtests.sh: lower the ptrace permissions [+ + +]
Author: Itaru Kitayama <[email protected]>
Date:   Mon Oct 30 17:54:45 2023 +0900

    tools/testing/selftests/mm/run_vmtests.sh: lower the ptrace permissions
    
    [ Upstream commit 2ffc27b15b11c9584ac46335c2ed2248d2aa4137 ]
    
    On Ubuntu and probably other distros, ptrace permissions are tightend a
    bit by default; i.e., /proc/sys/kernel/yama/ptrace_score is set to 1.
    This cases memfd_secret's ptrace attach test fails with a permission
    error.  Set it to 0 piror to running the program.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Itaru Kitayama <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: 7c5e8d212d7d ("selftests: memfd_secret: don't build memfd_secret test on unsupported arches")
    Signed-off-by: Sasha Levin <[email protected]>

 
tools: move alignment-related macros to new [+ + +]
Author: Alexander Lobakin <[email protected]>
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 <[email protected]>
    Signed-off-by: Alexander Lobakin <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
tty: atmel_serial: use the correct RTS flag. [+ + +]
Author: Mathieu Othacehe <[email protected]>
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 <[email protected]>
    Cc: stable <[email protected]>
    Tested-by: Alexander Dahl <[email protected]>
    Fixes: af47c491e3c7 ("serial: atmel: Fill in rs485_supported")
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

tty: serial: fsl_lpuart: mark last busy before uart_add_one_port [+ + +]
Author: Peng Fan <[email protected]>
Date:   Thu Aug 8 22:03:25 2024 +0800

    tty: serial: fsl_lpuart: mark last busy before uart_add_one_port
    
    commit dc98d76a15bc29a9a4e76f2f65f39f3e590fb15c upstream.
    
    With "earlycon initcall_debug=1 loglevel=8" in bootargs, kernel
    sometimes boot hang. It is because normal console still is not ready,
    but runtime suspend is called, so early console putchar will hang
    in waiting TRDE set in UARTSTAT.
    
    The lpuart driver has auto suspend delay set to 3000ms, but during
    uart_add_one_port, a child device serial ctrl will added and probed with
    its pm runtime enabled(see serial_ctrl.c).
    The runtime suspend call path is:
    device_add
         |-> bus_probe_device
               |->device_initial_probe
                       |->__device_attach
                             |-> pm_runtime_get_sync(dev->parent);
                             |-> pm_request_idle(dev);
                             |-> pm_runtime_put(dev->parent);
    
    So in the end, before normal console ready, the lpuart get runtime
    suspended. And earlycon putchar will hang.
    
    To address the issue, mark last busy just after pm_runtime_enable,
    three seconds is long enough to switch from bootconsole to normal
    console.
    
    Fixes: 43543e6f539b ("tty: serial: fsl_lpuart: Add runtime pm support")
    Cc: stable <[email protected]>
    Signed-off-by: Peng Fan <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
udp: fix receiving fraglist GSO packets [+ + +]
Author: Felix Fietkau <[email protected]>
Date:   Mon Aug 19 17:06:21 2024 +0200

    udp: fix receiving fraglist GSO packets
    
    [ Upstream commit b128ed5ab27330deeeaf51ea8bb69f1442a96f7f ]
    
    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 <[email protected]>
    Reviewed-by: Willem de Bruijn <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
usb: dwc3: core: Skip setting event buffers for host only controllers [+ + +]
Author: Krishna Kurapati <[email protected]>
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 <[email protected]>
    Signed-off-by: Krishna Kurapati <[email protected]>
    Acked-by: Thinh Nguyen <[email protected]>
    Reviewed-by: Johan Hovold <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Tested-by: Johan Hovold <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: gadget: fsl: Increase size of name buffer for endpoints [+ + +]
Author: Uwe Kleine-König <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/6754df25c56aae04f8110594fad2cd2452b1862a.1708709120.git.u.kleine-koenig@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

usb: gadget: uvc: cleanup request when not in correct state [+ + +]
Author: Michael Grzeschik <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vfs: Don't evict inode under the inode lru traversing context [+ + +]
Author: Zhihao Cheng <[email protected]>
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/[email protected]/
    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: [email protected]
    Signed-off-by: Zhihao Cheng <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Reviewed-by: Jan Kara <[email protected]>
    Suggested-by: Jan Kara <[email protected]>
    Suggested-by: Mateusz Guzik <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
virtiofs: forbid newlines in tags [+ + +]
Author: Stefan Hajnoczi <[email protected]>
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 <[email protected]>
    Reviewed-by: Vivek Goyal <[email protected]>
    Signed-off-by: Miklos Szeredi <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vsock: fix recursive ->recvmsg calls [+ + +]
Author: Cong Wang <[email protected]>
Date:   Sun Aug 11 19:21:53 2024 -0700

    vsock: fix recursive ->recvmsg calls
    
    [ Upstream commit 69139d2919dd4aa9a553c8245e7c63e82613e3fc ]
    
    After a vsock socket has been added to a BPF sockmap, its prot->recvmsg
    has been replaced with vsock_bpf_recvmsg(). Thus the following
    recursiion could happen:
    
    vsock_bpf_recvmsg()
     -> __vsock_recvmsg()
      -> vsock_connectible_recvmsg()
       -> prot->recvmsg()
        -> vsock_bpf_recvmsg() again
    
    We need to fix it by calling the original ->recvmsg() without any BPF
    sockmap logic in __vsock_recvmsg().
    
    Fixes: 634f1a7110b4 ("vsock: support sockmap")
    Reported-by: [email protected]
    Tested-by: [email protected]
    Cc: Bobby Eshleman <[email protected]>
    Cc: Michael S. Tsirkin <[email protected]>
    Cc: Stefano Garzarella <[email protected]>
    Signed-off-by: Cong Wang <[email protected]>
    Acked-by: Michael S. Tsirkin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Paolo Abeni <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
wifi: ath11k: fix ath11k_mac_op_remain_on_channel() stack usage [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Tue Sep 26 07:29:04 2023 +0300

    wifi: ath11k: fix ath11k_mac_op_remain_on_channel() stack usage
    
    [ Upstream commit 4fd15bb705d3faa7e6adab2daba2e3af80d9b6bd ]
    
    When compiling with clang 16.0.6, I've noticed the following:
    
    drivers/net/wireless/ath/ath11k/mac.c:8903:12: warning: stack frame
    size (1032) exceeds limit (1024) in 'ath11k_mac_op_remain_on_channel'
    [-Wframe-larger-than]
    static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
               ^
    68/1032 (6.59%) spills, 964/1032 (93.41%) variables
    
    So switch to kzalloc()'ed instance of 'struct scan_req_params' like
    it's done in 'ath11k_mac_op_hw_scan()'. Compile tested only.
    
    Signed-off-by: Dmitry Antipov <[email protected]>
    Acked-by: Jeff Johnson <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath12k: Add missing qmi_txn_cancel() calls [+ + +]
Author: Jeff Johnson <[email protected]>
Date:   Thu Jan 11 10:05:31 2024 -0800

    wifi: ath12k: Add missing qmi_txn_cancel() calls
    
    [ Upstream commit 2e82b5f09a97f1b98b885470c81c1248bec103af ]
    
    Per the QMI documentation "A client calling qmi_txn_init() must call
    either qmi_txn_wait() or qmi_txn_cancel() to free up the allocated
    resources."
    
    Unfortunately, in most of the ath12k messaging functions, when
    qmi_send_request() fails, the function returns without performing the
    necessary cleanup. So update those functions to call qmi_txn_cancel()
    when qmi_send_request() fails.
    
    No functional changes, compile tested only.
    
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: ath12k: fix WARN_ON during ath12k_mac_update_vif_chan [+ + +]
Author: Manish Dharanenthiran <[email protected]>
Date:   Tue Sep 5 16:29:41 2023 +0300

    wifi: ath12k: fix WARN_ON during ath12k_mac_update_vif_chan
    
    [ Upstream commit 8b8b990fe495e9be057249e1651b59b5ebacf2ef ]
    
    Fix WARN_ON() from ath12k_mac_update_vif_chan() if vdev is not up.
    Since change_chanctx can be called even before vdev_up.
    
    Do vdev stop followed by a vdev start in case of vdev is down.
    
    Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0-02903-QCAHKSWPL_SILICONZ-1
    
    Signed-off-by: Manish Dharanenthiran <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: brcmfmac: cfg80211: Handle SSID based pmksa deletion [+ + +]
Author: Janne Grunau <[email protected]>
Date:   Sat Aug 3 21:52:55 2024 +0200

    wifi: brcmfmac: cfg80211: Handle SSID based pmksa deletion
    
    commit 2ad4e1ada8eebafa2d75a4b75eeeca882de6ada1 upstream.
    
    wpa_supplicant 2.11 sends since 1efdba5fdc2c ("Handle PMKSA flush in the
    driver for SAE/OWE offload cases") SSID based PMKSA del commands.
    brcmfmac is not prepared and tries to dereference the NULL bssid and
    pmkid pointers in cfg80211_pmksa. PMKID_V3 operations support SSID based
    updates so copy the SSID.
    
    Fixes: a96202acaea4 ("wifi: brcmfmac: cfg80211: Add support for PMKID_V3 operations")
    Cc: [email protected] # 6.4.x
    Signed-off-by: Janne Grunau <[email protected]>
    Reviewed-by: Neal Gompa <[email protected]>
    Acked-by: Arend van Spriel <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: cfg80211: check wiphy mutex is held for wdev mutex [+ + +]
Author: Johannes Berg <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: cw1200: Avoid processing an invalid TIM IE [+ + +]
Author: Jeff Johnson <[email protected]>
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 <[email protected]>
    Signed-off-by: Kalle Valo <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: abort scan when rfkill on but device enabled [+ + +]
Author: Miri Korenblit <[email protected]>
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 <[email protected]>
    Signed-off-by: Gregory Greenman <[email protected]>
    Link: https://lore.kernel.org/r/20231004123422.c43b69aa2c77.Icc7b5efb47974d6f499156ff7510b786e177993b@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: check for kmemdup() return value in iwl_parse_tlv_firmware() [+ + +]
Author: Dmitry Antipov <[email protected]>
Date:   Mon Oct 9 20:04:49 2023 +0300

    wifi: iwlwifi: check for kmemdup() return value in iwl_parse_tlv_firmware()
    
    [ Upstream commit 3c8aaaa7557b1e33e6ef95a27a5d8a139dcd0874 ]
    
    In 'iwl_parse_tlv_firmware()', check for 'kmemdup()' return value
    when handling IWL_UCODE_TLV_CURRENT_PC and set the number of parsed
    entries only if an allocation was successful (just like it does with
    handling IWL_UCODE_TLV_CMD_VERSIONS above). Compile tested only.
    
    Signed-off-by: Dmitry Antipov <[email protected]>
    Acked-by: Gregory Greenman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: fw: Fix debugfs command sending [+ + +]
Author: Mukesh Sisodiya <[email protected]>
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 <[email protected]>
    Signed-off-by: Gregory Greenman <[email protected]>
    Link: https://lore.kernel.org/r/20231004123422.4f80ac90658a.Ia1dfa1195c919f3002fe08db3eefbd2bfa921bbf@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: mvm: avoid garbage iPN [+ + +]
Author: Shaul Triebitz <[email protected]>
Date:   Mon Feb 5 21:21:13 2024 +0200

    wifi: iwlwifi: mvm: avoid garbage iPN
    
    [ Upstream commit 0c1c91604f3e3fc41f4d77dcfc3753860a9a32c9 ]
    
    After waking from D3, we set the iPN given by the firmware.
    For some reason, CIPHER_SUITE_AES_CMAC was missed.
    That caused copying garbage to the iPN - causing false replays.
    
    (since 'seq' is on the stack, and the iPN from the firmware
    was not copied into it, it contains garbage which later is
    copied to the iPN key).
    
    Signed-off-by: Shaul Triebitz <[email protected]>
    Signed-off-by: Miri Korenblit <[email protected]>
    Link: https://msgid.link/20240205211151.2be5b35be30f.I99db8700d01092d22a6d76f1fc1bd5916c9df784@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: iwlwifi: mvm: fix recovery flow in CSA [+ + +]
Author: Emmanuel Grumbach <[email protected]>
Date:   Wed Sep 13 14:56:46 2023 +0300

    wifi: iwlwifi: mvm: fix recovery flow in CSA
    
    [ Upstream commit 828c79d9feb000acbd9c15bd1ed7e0914473b363 ]
    
    If the firmware crashes in the de-activation / re-activation
    of the link during CSA, we will not have a valid phy_ctxt
    pointer in mvmvif. This is a legit case, but when mac80211
    removes the station to cleanup our state during the
    re-configuration, we need to make sure we clear ap_sta
    otherwise we won't re-add the station after the firmware has
    been restarted. Later on, we'd activate the link, try to send
    a TLC command crash again on ASSERT 3508.
    
    Fix this by properly cleaning up our state.
    
    Signed-off-by: Emmanuel Grumbach <[email protected]>
    Signed-off-by: Gregory Greenman <[email protected]>
    Link: https://lore.kernel.org/r/20230913145231.2651e6f6a55a.I4cd50e88ee5c23c1c8dd5b157a800e4b4c96f236@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: fix BA session teardown race [+ + +]
Author: Johannes Berg <[email protected]>
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 <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: flush STA queues on unauthorization [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Thu Sep 28 17:35:39 2023 +0300

    wifi: mac80211: flush STA queues on unauthorization
    
    [ Upstream commit 06d6af4e1223339bb597b02fa8ad3f979ddb5511 ]
    
    When the station is marked as no longer authorized, we shouldn't
    transmit to it any longer, but in particular we shouldn't be able
    to transmit to it after removing keys, which might lead to frames
    being sent out unencrypted depending on the exact hardware offload
    mechanism. Thus, instead of flushing only on station destruction,
    which covers only some cases, always flush on unauthorization.
    
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Gregory Greenman <[email protected]>
    Link: https://lore.kernel.org/r/20230928172905.d47f528829e7.I96903652c7ee0c5c66891f8b2364383da8e45a1f@changeid
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mac80211: lock wiphy in IP address notifier [+ + +]
Author: Johannes Berg <[email protected]>
Date:   Mon Aug 28 13:59:41 2023 +0200

    wifi: mac80211: lock wiphy in IP address notifier
    
    [ Upstream commit 730538edc8e0eb14b02708f65100a0deaf43e6cd ]
    
    Lock the wiphy in the IP address notifier as another
    place that should have it locked before calling into
    the driver. This needs a bit of attention since the
    notifier can be called while the wiphy is already
    locked, when we remove an interface. Handle this by
    not running the notifier in this case, and instead
    calling out to the driver directly.
    
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

wifi: mt76: fix race condition related to checking tx queue fill status [+ + +]
Author: Felix Fietkau <[email protected]>
Date:   Tue Aug 29 10:39:53 2023 +0200

    wifi: mt76: fix race condition related to checking tx queue fill status
    
    [ Upstream commit 0335c034e7265d36d956e806f33202c94a8a9860 ]
    
    When drv_tx calls race against local tx scheduling, the queue fill status checks
    can potentially race, leading to dma queue entries being overwritten.
    Fix this by deferring packets from drv_tx calls to the tx worker, in order to
    ensure that all regular queue tx comes from the same context.
    
    Reported-by: Ryder Lee <[email protected]>
    Signed-off-by: Felix Fietkau <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
x86: Increase brk randomness entropy for 64-bit systems [+ + +]
Author: Kees Cook <[email protected]>
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: [email protected]
    Signed-off-by: Kees Cook <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Acked-by: Jiri Kosina <[email protected]>
    Closes: https://lore.kernel.org/linux-hardening/CA+2EKTVLvc8hDZc+2Yhwmus=dzOUG5E4gV7ayCbu0MPJTZzWkw@mail.gmail.com/
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
xhci: Fix Panther point NULL pointer deref at full-speed re-enumeration [+ + +]
Author: Mathias Nyman <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/linux-usb/[email protected]/
    Cc: [email protected]
    Fixes: 651aaf36a7d7 ("usb: xhci: Handle USB transaction error on address command")
    Signed-off-by: Mathias Nyman <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>