Changelog in Linux kernel 6.6.124

 
ALSA: hda/realtek: add HP Laptop 15s-eq1xxx mute LED quirk [+ + +]
Author: Ruslan Krupitsa <krupitsarus@outlook.com>
Date:   Fri Jan 2 02:53:36 2026 +0300

    ALSA: hda/realtek: add HP Laptop 15s-eq1xxx mute LED quirk
    
    [ Upstream commit 9ed7a28225af02b74f61e7880d460db49db83758 ]
    
    HP Laptop 15s-eq1xxx with ALC236 codec does not enable the
    mute LED automatically. This patch adds a quirk entry for
    subsystem ID 0x8706 using the ALC236_FIXUP_HP_MUTE_LED_COEFBIT2
    fixup, enabling correct mute LED behavior.
    
    Signed-off-by: Ruslan Krupitsa <krupitsarus@outlook.com>
    Link: https://patch.msgid.link/AS8P194MB112895B8EC2D87D53A876085BBBAA@AS8P194MB1128.EURP194.PROD.OUTLOOK.COM
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU [+ + +]
Author: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
Date:   Mon Jan 19 16:15:55 2026 +0100

    ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU
    
    [ Upstream commit b48fe9af1e60360baf09ca6b7a3cd6541f16e611 ]
    
    Add a PCI quirk to enable microphone detection on the headphone jack of
    TongFang X6AR55xU devices.
    
    Signed-off-by: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Link: https://patch.msgid.link/20260119151626.35481-1-wse@tuxedocomputers.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Really fix headset mic for TongFang X6AR55xU. [+ + +]
Author: Werner Sembach <wse@tuxedocomputers.com>
Date:   Fri Jan 23 23:12:24 2026 +0100

    ALSA: hda/realtek: Really fix headset mic for TongFang X6AR55xU.
    
    commit 1aaedafb21f38cb872d44f7608b4828a1e14e795 upstream.
    
    Add a PCI quirk to enable microphone detection on the headphone jack of
    TongFang X6AR55xU devices.
    
    The former quirk entry did not acomplish this and is removed.
    
    Fixes: b48fe9af1e60 ("ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU")
    Signed-off-by: Tim Guttzeit <t.guttzeit@tuxedocomputers.com>
    Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
    Link: https://patch.msgid.link/20260123221233.28273-1-wse@tuxedocomputers.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ARM: 9468/1: fix memset64() on big-endian [+ + +]
Author: Thomas Weissschuh <thomas.weissschuh@linutronix.de>
Date:   Wed Jan 7 11:01:49 2026 +0100

    ARM: 9468/1: fix memset64() on big-endian
    
    commit 23ea2a4c72323feb6e3e025e8a6f18336513d5ad upstream.
    
    On big-endian systems the 32-bit low and high halves need to be swapped
    for the underlying assembly implementation to work correctly.
    
    Fixes: fd1d362600e2 ("ARM: implement memset32 & memset64")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
    Reviewed-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    Reviewed-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: amd: fix memory leak in acp3x pdm dma ops [+ + +]
Author: Chris Bainbridge <chris.bainbridge@gmail.com>
Date:   Mon Feb 2 20:50:33 2026 +0000

    ASoC: amd: fix memory leak in acp3x pdm dma ops
    
    [ Upstream commit 7f67ba5413f98d93116a756e7f17cd2c1d6c2bd6 ]
    
    Fixes: 4a767b1d039a8 ("ASoC: amd: add acp3x pdm driver dma ops")
    Signed-off-by: Chris Bainbridge <chris.bainbridge@gmail.com>
    Link: https://patch.msgid.link/20260202205034.7697-1-chris.bainbridge@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: amd: yc: Fix microphone on ASUS M6500RE [+ + +]
Author: Radhi Bajahaw <bajahawradhi@gmail.com>
Date:   Mon Jan 12 21:38:14 2026 +0100

    ASoC: amd: yc: Fix microphone on ASUS M6500RE
    
    [ Upstream commit 8e29db1b08808f709231e6fd4c79dcdee5b17a17 ]
    
    Add DMI match for ASUSTeK COMPUTER INC. M6500RE to enable the
    internal microphone.
    
    Signed-off-by: Radhi Bajahaw <bajahawradhi@gmail.com>
    Link: https://patch.msgid.link/20260112203814.155-1-bajahawradhi@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: davinci-evm: Fix reference leak in davinci_evm_probe [+ + +]
Author: Kery Qi <qikeyu2017@gmail.com>
Date:   Wed Jan 7 23:48:37 2026 +0800

    ASoC: davinci-evm: Fix reference leak in davinci_evm_probe
    
    [ Upstream commit 5b577d214fcc109707bcb77b4ae72a31cfd86798 ]
    
    The davinci_evm_probe() function calls of_parse_phandle() to acquire
    device nodes for "ti,audio-codec" and "ti,mcasp-controller". These
    functions return device nodes with incremented reference counts.
    
    However, in several error paths (e.g., when the second of_parse_phandle(),
    snd_soc_of_parse_card_name(), or devm_snd_soc_register_card() fails),
    the function returns directly without releasing the acquired nodes,
    leading to reference leaks.
    
    This patch adds an error handling path 'err_put' to properly release
    the device nodes using of_node_put() and clean up the pointers when
    an error occurs.
    
    Signed-off-by: Kery Qi <qikeyu2017@gmail.com>
    Link: https://patch.msgid.link/20260107154836.1521-2-qikeyu2017@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: tlv320adcx140: Propagate error codes during probe [+ + +]
Author: Dimitrios Katsaros <patcherwork@gmail.com>
Date:   Tue Jan 13 11:58:46 2026 +0100

    ASoC: tlv320adcx140: Propagate error codes during probe
    
    [ Upstream commit d89aad92cfd15edbd704746f44c98fe687f9366f ]
    
    When scanning for the reset pin, we could get an -EPROBE_DEFER.
    The driver would assume that no reset pin had been defined,
    which would mean that the chip would never be powered.
    
    Now we both respect any error we get from devm_gpiod_get_optional.
    We also now properly report the missing GPIO definition when
    'gpio_reset' is NULL.
    
    Signed-off-by: Dimitrios Katsaros <patcherwork@gmail.com>
    Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
    Link: https://patch.msgid.link/20260113-sound-soc-codecs-tvl320adcx140-v4-3-8f7ecec525c8@pengutronix.de
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
binder: fix BR_FROZEN_REPLY error log [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Fri Jan 23 17:57:02 2026 +0000

    binder: fix BR_FROZEN_REPLY error log
    
    commit 1769f90e5ba2a6d24bb46b85da33fe861c68f005 upstream.
    
    The error logging for failed transactions is misleading as it always
    reports "dead process or thread" even when the target is actually
    frozen. Additionally, the pid and tid are reversed which can further
    confuse debugging efforts. Fix both issues.
    
    Cc: stable@kernel.org
    Cc: Steven Moreland <smoreland@google.com>
    Fixes: a15dac8b2286 ("binder: additional transaction error logs")
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Reviewed-by: Alice Ryhl <aliceryhl@google.com>
    Link: https://patch.msgid.link/20260123175702.2154348-1-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binderfs: fix ida_alloc_max() upper bound [+ + +]
Author: Carlos Llamas <cmllamas@google.com>
Date:   Tue Jan 27 23:55:11 2026 +0000

    binderfs: fix ida_alloc_max() upper bound
    
    commit ec4ddc90d201d09ef4e4bef8a2c6d9624525ad68 upstream.
    
    The 'max' argument of ida_alloc_max() takes the maximum valid ID and not
    the "count". Using an ID of BINDERFS_MAX_MINOR (1 << 20) for dev->minor
    would exceed the limits of minor numbers (20-bits). Fix this off-by-one
    error by subtracting 1 from the 'max'.
    
    Cc: stable@vger.kernel.org
    Fixes: 3ad20fe393b3 ("binder: implement binderfs")
    Signed-off-by: Carlos Llamas <cmllamas@google.com>
    Link: https://patch.msgid.link/20260127235545.2307876-2-cmllamas@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block,bfq: fix aux stat accumulation destination [+ + +]
Author: shechenglong <shechenglong@xfusion.com>
Date:   Sun Dec 28 21:04:26 2025 +0800

    block,bfq: fix aux stat accumulation destination
    
    [ Upstream commit 04bdb1a04d8a2a89df504c1e34250cd3c6e31a1c ]
    
    Route bfqg_stats_add_aux() time accumulation into the destination
    stats object instead of the source, aligning with other stat fields.
    
    Reviewed-by: Yu Kuai <yukuai@fnnas.com>
    Signed-off-by: shechenglong <shechenglong@xfusion.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
btrfs: fix racy bitfield write in btrfs_clear_space_info_full() [+ + +]
Author: Boris Burkov <boris@bur.io>
Date:   Wed Oct 1 17:20:22 2025 -0700

    btrfs: fix racy bitfield write in btrfs_clear_space_info_full()
    
    commit 38e818718c5e04961eea0fa8feff3f100ce40408 upstream.
    
    From the memory-barriers.txt document regarding memory barrier ordering
    guarantees:
    
     (*) These guarantees do not apply to bitfields, because compilers often
         generate code to modify these using non-atomic read-modify-write
         sequences.  Do not attempt to use bitfields to synchronize parallel
         algorithms.
    
     (*) Even in cases where bitfields are protected by locks, all fields
         in a given bitfield must be protected by one lock.  If two fields
         in a given bitfield are protected by different locks, the compiler's
         non-atomic read-modify-write sequences can cause an update to one
         field to corrupt the value of an adjacent field.
    
    btrfs_space_info has a bitfield sharing an underlying word consisting of
    the fields full, chunk_alloc, and flush:
    
    struct btrfs_space_info {
            struct btrfs_fs_info *     fs_info;              /*     0     8 */
            struct btrfs_space_info *  parent;               /*     8     8 */
            ...
            int                        clamp;                /*   172     4 */
            unsigned int               full:1;               /*   176: 0  4 */
            unsigned int               chunk_alloc:1;        /*   176: 1  4 */
            unsigned int               flush:1;              /*   176: 2  4 */
            ...
    
    Therefore, to be safe from parallel read-modify-writes losing a write to
    one of the bitfield members protected by a lock, all writes to all the
    bitfields must use the lock. They almost universally do, except for
    btrfs_clear_space_info_full() which iterates over the space_infos and
    writes out found->full = 0 without a lock.
    
    Imagine that we have one thread completing a transaction in which we
    finished deleting a block_group and are thus calling
    btrfs_clear_space_info_full() while simultaneously the data reclaim
    ticket infrastructure is running do_async_reclaim_data_space():
    
              T1                                             T2
    btrfs_commit_transaction
      btrfs_clear_space_info_full
      data_sinfo->full = 0
      READ: full:0, chunk_alloc:0, flush:1
                                                  do_async_reclaim_data_space(data_sinfo)
                                                  spin_lock(&space_info->lock);
                                                  if(list_empty(tickets))
                                                    space_info->flush = 0;
                                                    READ: full: 0, chunk_alloc:0, flush:1
                                                    MOD/WRITE: full: 0, chunk_alloc:0, flush:0
                                                    spin_unlock(&space_info->lock);
                                                    return;
      MOD/WRITE: full:0, chunk_alloc:0, flush:1
    
    and now data_sinfo->flush is 1 but the reclaim worker has exited. This
    breaks the invariant that flush is 0 iff there is no work queued or
    running. Once this invariant is violated, future allocations that go
    into __reserve_bytes() will add tickets to space_info->tickets but will
    see space_info->flush is set to 1 and not queue the work. After this,
    they will block forever on the resulting ticket, as it is now impossible
    to kick the worker again.
    
    I also confirmed by looking at the assembly of the affected kernel that
    it is doing RMW operations. For example, to set the flush (3rd) bit to 0,
    the assembly is:
      andb    $0xfb,0x60(%rbx)
    and similarly for setting the full (1st) bit to 0:
      andb    $0xfe,-0x20(%rax)
    
    So I think this is really a bug on practical systems.  I have observed
    a number of systems in this exact state, but am currently unable to
    reproduce it.
    
    Rather than leaving this footgun lying around for the future, take
    advantage of the fact that there is room in the struct anyway, and that
    it is already quite large and simply change the three bitfield members to
    bools. This avoids writes to space_info->full having any effect on
    writes to space_info->flush, regardless of locking.
    
    Fixes: 957780eb2788 ("Btrfs: introduce ticketed enospc infrastructure")
    Reviewed-by: Qu Wenruo <wqu@suse.com>
    Signed-off-by: Boris Burkov <boris@bur.io>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    [ The context change is due to the commit cc0517fe779f
      ("btrfs: tweak extent/chunk allocation for space_info sub-space")
      in v6.16 which is irrelevant to the logic of this patch. ]
    Signed-off-by: Rahul Sharma <black.hawk@163.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

btrfs: fix reservation leak in some error paths when inserting inline extent [+ + +]
Author: Filipe Manana <fdmanana@suse.com>
Date:   Fri Dec 12 17:18:25 2025 +0000

    btrfs: fix reservation leak in some error paths when inserting inline extent
    
    [ Upstream commit c1c050f92d8f6aac4e17f7f2230160794fceef0c ]
    
    If we fail to allocate a path or join a transaction, we return from
    __cow_file_range_inline() without freeing the reserved qgroup data,
    resulting in a leak. Fix this by ensuring we call btrfs_qgroup_free_data()
    in such cases.
    
    Signed-off-by: Filipe Manana <fdmanana@suse.com>
    Reviewed-by: David Sterba <dsterba@suse.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
dpaa2-switch: add bounds check for if_id in IRQ handler [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Thu Jan 29 00:55:13 2026 +0800

    dpaa2-switch: add bounds check for if_id in IRQ handler
    
    [ Upstream commit 31a7a0bbeb006bac2d9c81a2874825025214b6d8 ]
    
    The IRQ handler extracts if_id from the upper 16 bits of the hardware
    status register and uses it to index into ethsw->ports[] without
    validation. Since if_id can be any 16-bit value (0-65535) but the ports
    array is only allocated with sw_attr.num_ifs elements, this can lead to
    an out-of-bounds read potentially.
    
    Add a bounds check before accessing the array, consistent with the
    existing validation in dpaa2_switch_rx().
    
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: 24ab724f8a46 ("dpaa2-switch: use the port index in the IRQ handler")
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://patch.msgid.link/SYBPR01MB7881D420AB43FF1A227B84AFAF91A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Wed Jan 28 16:07:34 2026 +0800

    dpaa2-switch: prevent ZERO_SIZE_PTR dereference when num_ifs is zero
    
    [ Upstream commit ed48a84a72fefb20a82dd90a7caa7807e90c6f66 ]
    
    The driver allocates arrays for ports, FDBs, and filter blocks using
    kcalloc() with ethsw->sw_attr.num_ifs as the element count. When the
    device reports zero interfaces (either due to hardware configuration
    or firmware issues), kcalloc(0, ...) returns ZERO_SIZE_PTR (0x10)
    instead of NULL.
    
    Later in dpaa2_switch_probe(), the NAPI initialization unconditionally
    accesses ethsw->ports[0]->netdev, which attempts to dereference
    ZERO_SIZE_PTR (address 0x10), resulting in a kernel panic.
    
    Add a check to ensure num_ifs is greater than zero after retrieving
    device attributes. This prevents the zero-sized allocations and
    subsequent invalid pointer dereference.
    
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Reported-by: Junrui Luo <moonafterrain@outlook.com>
    Fixes: 0b1b71370458 ("staging: dpaa2-switch: handle Rx path on control interface")
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Reviewed-by: Andrew Lunn <andrew@lunn.ch>
    Link: https://patch.msgid.link/SYBPR01MB7881BEABA8DA896947962470AF91A@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/mgag200: fix mgag200_bmc_stop_scanout() [+ + +]
Author: Jacob Keller <jacob.e.keller@intel.com>
Date:   Mon Feb 2 16:16:39 2026 -0800

    drm/mgag200: fix mgag200_bmc_stop_scanout()
    
    [ Upstream commit 0e0c8f4d16de92520623aa1ea485cadbf64e6929 ]
    
    The mgag200_bmc_stop_scanout() function is called by the .atomic_disable()
    handler for the MGA G200 VGA BMC encoder. This function performs a few
    register writes to inform the BMC of an upcoming mode change, and then
    polls to wait until the BMC actually stops.
    
    The polling is implemented using a busy loop with udelay() and an iteration
    timeout of 300, resulting in the function blocking for 300 milliseconds.
    
    The function gets called ultimately by the output_poll_execute work thread
    for the DRM output change polling thread of the mgag200 driver:
    
    kworker/0:0-mm_    3528 [000]  4555.315364:
            ffffffffaa0e25b3 delay_halt.part.0+0x33
            ffffffffc03f6188 mgag200_bmc_stop_scanout+0x178
            ffffffffc087ae7a disable_outputs+0x12a
            ffffffffc087c12a drm_atomic_helper_commit_tail+0x1a
            ffffffffc03fa7b6 mgag200_mode_config_helper_atomic_commit_tail+0x26
            ffffffffc087c9c1 commit_tail+0x91
            ffffffffc087d51b drm_atomic_helper_commit+0x11b
            ffffffffc0509694 drm_atomic_commit+0xa4
            ffffffffc05105e8 drm_client_modeset_commit_atomic+0x1e8
            ffffffffc0510ce6 drm_client_modeset_commit_locked+0x56
            ffffffffc0510e24 drm_client_modeset_commit+0x24
            ffffffffc088a743 __drm_fb_helper_restore_fbdev_mode_unlocked+0x93
            ffffffffc088a683 drm_fb_helper_hotplug_event+0xe3
            ffffffffc050f8aa drm_client_dev_hotplug+0x9a
            ffffffffc088555a output_poll_execute+0x29a
            ffffffffa9b35924 process_one_work+0x194
            ffffffffa9b364ee worker_thread+0x2fe
            ffffffffa9b3ecad kthread+0xdd
            ffffffffa9a08549 ret_from_fork+0x29
    
    On a server running ptp4l with the mgag200 driver loaded, we found that
    ptp4l would sometimes get blocked from execution because of this busy
    waiting loop.
    
    Every so often, approximately once every 20 minutes -- though with large
    variance -- the output_poll_execute() thread would detect some sort of
    change that required performing a hotplug event which results in attempting
    to stop the BMC scanout, resulting in a 300msec delay on one CPU.
    
    On this system, ptp4l was pinned to a single CPU. When the
    output_poll_execute() thread ran on that CPU, it blocked ptp4l from
    executing for its 300 millisecond duration.
    
    This resulted in PTP service disruptions such as failure to send a SYNC
    message on time, failure to handle ANNOUNCE messages on time, and clock
    check warnings from the application. All of this despite the application
    being configured with FIFO_RT and a higher priority than the background
    workqueue tasks. (However, note that the kernel did not use
    CONFIG_PREEMPT...)
    
    It is unclear if the event is due to a faulty VGA connection, another bug,
    or actual events causing a change in the connection. At least on the system
    under test it is not a one-time event and consistently causes disruption to
    the time sensitive applications.
    
    The function has some helpful comments explaining what steps it is
    attempting to take. In particular, step 3a and 3b are explained as such:
    
      3a - The third step is to verify if there is an active scan. We are
           waiting on a 0 on remhsyncsts (<XSPAREREG<0>.
    
      3b - This step occurs only if the remove is actually scanning. We are
           waiting for the end of the frame which is a 1 on remvsyncsts
           (<XSPAREREG<1>).
    
    The actual steps 3a and 3b are implemented as while loops with a
    non-sleeping udelay(). The first step iterates while the tmp value at
    position 0 is *not* set. That is, it keeps iterating as long as the bit is
    zero. If the bit is already 0 (because there is no active scan), it will
    iterate the entire 300 attempts which wastes 300 milliseconds in total.
    This is opposite of what the description claims.
    
    The step 3b logic only executes if we do not iterate over the entire 300
    attempts in the first loop. If it does trigger, it is trying to check and
    wait for a 1 on the remvsyncsts. However, again the condition is actually
    inverted and it will loop as long as the bit is 1, stopping once it hits
    zero (rather than the explained attempt to wait until we see a 1).
    
    Worse, both loops are implemented using non-sleeping waits which spin
    instead of allowing the scheduler to run other processes. If the kernel is
    not configured to allow arbitrary preemption, it will waste valuable CPU
    time doing nothing.
    
    There does not appear to be any documentation for the BMC register
    interface, beyond what is in the comments here. It seems more probable that
    the comment here is correct and the implementation accidentally got
    inverted from the intended logic.
    
    Reading through other DRM driver implementations, it does not appear that
    the .atomic_enable or .atomic_disable handlers need to delay instead of
    sleep. For example, the ast_astdp_encoder_helper_atomic_disable() function
    calls ast_dp_set_phy_sleep() which uses msleep(). The "atomic" in the name
    is referring to the atomic modesetting support, which is the support to
    enable atomic configuration from userspace, and not to the "atomic context"
    of the kernel. There is no reason to use udelay() here if a sleep would be
    sufficient.
    
    Replace the while loops with a read_poll_timeout() based implementation
    that will sleep between iterations, and which stops polling once the
    condition is met (instead of looping as long as the condition is met). This
    aligns with the commented behavior and avoids blocking on the CPU while
    doing nothing.
    
    Note the RREG_DAC is implemented using a statement expression to allow
    working properly with the read_poll_timeout family of functions. The other
    RREG_<TYPE> macros ought to be cleaned up to have better semantics, and
    several places in the mgag200 driver could make use of RREG_DAC or similar
    RREG_* macros should likely be cleaned up for better semantics as well, but
    that task has been left as a future cleanup for a non-bugfix.
    
    Fixes: 414c45310625 ("mgag200: initial g200se driver (v2)")
    Suggested-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Link: https://patch.msgid.link/20260202-jk-mgag200-fix-bad-udelay-v2-1-ce1e9665987d@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gve: Correct ethtool rx_dropped calculation [+ + +]
Author: Max Yuan <maxyuan@google.com>
Date:   Mon Feb 2 19:39:25 2026 +0000

    gve: Correct ethtool rx_dropped calculation
    
    [ Upstream commit c7db85d579a1dccb624235534508c75fbf2dfe46 ]
    
    The gve driver's "rx_dropped" statistic, exposed via `ethtool -S`,
    incorrectly includes `rx_buf_alloc_fail` counts. These failures
    represent an inability to allocate receive buffers, not true packet
    drops where a received packet is discarded. This misrepresentation can
    lead to inaccurate diagnostics.
    
    This patch rectifies the ethtool "rx_dropped" calculation. It removes
    `rx_buf_alloc_fail` from the total and adds `xdp_tx_errors` and
    `xdp_redirect_errors`, which represent legitimate packet drops within
    the XDP path.
    
    Cc: stable@vger.kernel.org
    Fixes: 433e274b8f7b ("gve: Add stats for gve.")
    Signed-off-by: Max Yuan <maxyuan@google.com>
    Reviewed-by: Jordan Rhee <jordanrhee@google.com>
    Reviewed-by: Joshua Washington <joshwash@google.com>
    Reviewed-by: Matt Olson <maolson@google.com>
    Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20260202193925.3106272-3-hramamurthy@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

gve: Fix stats report corruption on queue count change [+ + +]
Author: Debarghya Kundu <debarghyak@google.com>
Date:   Sat Feb 7 12:13:22 2026 -0500

    gve: Fix stats report corruption on queue count change
    
    [ Upstream commit 7b9ebcce0296e104a0d82a6b09d68564806158ff ]
    
    The driver and the NIC share a region in memory for stats reporting.
    The NIC calculates its offset into this region based on the total size
    of the stats region and the size of the NIC's stats.
    
    When the number of queues is changed, the driver's stats region is
    resized. If the queue count is increased, the NIC can write past
    the end of the allocated stats region, causing memory corruption.
    If the queue count is decreased, there is a gap between the driver
    and NIC stats, leading to incorrect stats reporting.
    
    This change fixes the issue by allocating stats region with maximum
    size, and the offset calculation for NIC stats is changed to match
    with the calculation of the NIC.
    
    Cc: stable@vger.kernel.org
    Fixes: 24aeb56f2d38 ("gve: Add Gvnic stats AQ command and ethtool show/set-priv-flags.")
    Signed-off-by: Debarghya Kundu <debarghyak@google.com>
    Reviewed-by: Joshua Washington <joshwash@google.com>
    Signed-off-by: Harshitha Ramamurthy <hramamurthy@google.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20260202193925.3106272-2-hramamurthy@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ no stopped-queue feature in older trees ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
hfsplus: fix slab-out-of-bounds read in hfsplus_uni2asc() [+ + +]
Author: Kang Chen <k.chen@smail.nju.edu.cn>
Date:   Tue Sep 9 11:13:16 2025 +0800

    hfsplus: fix slab-out-of-bounds read in hfsplus_uni2asc()
    
    commit bea3e1d4467bcf292c8e54f080353d556d355e26 upstream.
    
    BUG: KASAN: slab-out-of-bounds in hfsplus_uni2asc+0xa71/0xb90 fs/hfsplus/unicode.c:186
    Read of size 2 at addr ffff8880289ef218 by task syz.6.248/14290
    
    CPU: 0 UID: 0 PID: 14290 Comm: syz.6.248 Not tainted 6.16.4 #1 PREEMPT(full)
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
    Call Trace:
     <TASK>
     __dump_stack lib/dump_stack.c:94 [inline]
     dump_stack_lvl+0x116/0x1b0 lib/dump_stack.c:120
     print_address_description mm/kasan/report.c:378 [inline]
     print_report+0xca/0x5f0 mm/kasan/report.c:482
     kasan_report+0xca/0x100 mm/kasan/report.c:595
     hfsplus_uni2asc+0xa71/0xb90 fs/hfsplus/unicode.c:186
     hfsplus_listxattr+0x5b6/0xbd0 fs/hfsplus/xattr.c:738
     vfs_listxattr+0xbe/0x140 fs/xattr.c:493
     listxattr+0xee/0x190 fs/xattr.c:924
     filename_listxattr fs/xattr.c:958 [inline]
     path_listxattrat+0x143/0x360 fs/xattr.c:988
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcb/0x4c0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fe0e9fae16d
    Code: 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 f3 0f 1e fa 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:00007fe0eae67f98 EFLAGS: 00000246 ORIG_RAX: 00000000000000c3
    RAX: ffffffffffffffda RBX: 00007fe0ea205fa0 RCX: 00007fe0e9fae16d
    RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000200000000000
    RBP: 00007fe0ea0480f0 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007fe0ea206038 R14: 00007fe0ea205fa0 R15: 00007fe0eae48000
     </TASK>
    
    Allocated by task 14290:
     kasan_save_stack+0x24/0x50 mm/kasan/common.c:47
     kasan_save_track+0x14/0x30 mm/kasan/common.c:68
     poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
     __kasan_kmalloc+0xaa/0xb0 mm/kasan/common.c:394
     kasan_kmalloc include/linux/kasan.h:260 [inline]
     __do_kmalloc_node mm/slub.c:4333 [inline]
     __kmalloc_noprof+0x219/0x540 mm/slub.c:4345
     kmalloc_noprof include/linux/slab.h:909 [inline]
     hfsplus_find_init+0x95/0x1f0 fs/hfsplus/bfind.c:21
     hfsplus_listxattr+0x331/0xbd0 fs/hfsplus/xattr.c:697
     vfs_listxattr+0xbe/0x140 fs/xattr.c:493
     listxattr+0xee/0x190 fs/xattr.c:924
     filename_listxattr fs/xattr.c:958 [inline]
     path_listxattrat+0x143/0x360 fs/xattr.c:988
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcb/0x4c0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    When hfsplus_uni2asc is called from hfsplus_listxattr,
    it actually passes in a struct hfsplus_attr_unistr*.
    The size of the corresponding structure is different from that of hfsplus_unistr,
    so the previous fix (94458781aee6) is insufficient.
    The pointer on the unicode buffer is still going beyond the allocated memory.
    
    This patch introduces two warpper functions hfsplus_uni2asc_xattr_str and
    hfsplus_uni2asc_str to process two unicode buffers,
    struct hfsplus_attr_unistr* and struct hfsplus_unistr* respectively.
    When ustrlen value is bigger than the allocated memory size,
    the ustrlen value is limited to an safe size.
    
    Fixes: 94458781aee6 ("hfsplus: fix slab-out-of-bounds read in hfsplus_uni2asc()")
    Signed-off-by: Kang Chen <k.chen@smail.nju.edu.cn>
    Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Link: https://lore.kernel.org/r/20250909031316.1647094-1-k.chen@smail.nju.edu.cn
    Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Jianqiang kang <jianqkang@sina.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
HID: Apply quirk HID_QUIRK_ALWAYS_POLL to Edifier QR30 (2d99:a101) [+ + +]
Author: Rodrigo Lugathe da Conceição Alves <lugathe2@gmail.com>
Date:   Thu Nov 27 19:03:57 2025 -0300

    HID: Apply quirk HID_QUIRK_ALWAYS_POLL to Edifier QR30 (2d99:a101)
    
    [ Upstream commit 85a866809333cd2bf8ddac93d9a3e3ba8e4f807d ]
    
    The USB speaker has a bug that causes it to reboot when changing the
    brightness using the physical knob.
    
    Add a new vendor and product ID entry in hid-ids.h, and register
    the corresponding device in hid-quirks.c with the required quirk.
    
    Signed-off-by: Rodrigo Lugathe da Conceição Alves <lugathe2@gmail.com>
    Reviewed-by: Terry Junge <linuxhid@cosmicgizmosystems.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report() [+ + +]
Author: Kwok Kin Ming <kenkinming2002@gmail.com>
Date:   Thu Jan 1 02:18:26 2026 +0800

    HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report()
    
    [ Upstream commit 2497ff38c530b1af0df5130ca9f5ab22c5e92f29 ]
    
    `i2c_hid_xfer` is used to read `recv_len + sizeof(__le16)` bytes of data
    into `ihid->rawbuf`.
    
    The former can come from the userspace in the hidraw driver and is only
    bounded by HID_MAX_BUFFER_SIZE(16384) by default (unless we also set
    `max_buffer_size` field of `struct hid_ll_driver` which we do not).
    
    The latter has size determined at runtime by the maximum size of
    different report types you could receive on any particular device and
    can be a much smaller value.
    
    Fix this by truncating `recv_len` to `ihid->bufsize - sizeof(__le16)`.
    
    The impact is low since access to hidraw devices requires root.
    
    Signed-off-by: Kwok Kin Ming <kenkinming2002@gmail.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: intel-ish-hid: Reset enum_devices_done before enumeration [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Fri Dec 12 10:51:50 2025 +0800

    HID: intel-ish-hid: Reset enum_devices_done before enumeration
    
    [ Upstream commit 56e230723e3a818373bd62331bccb1c6d2b3881b ]
    
    Some systems have enabled ISH without any sensors. In this case sending
    HOSTIF_DM_ENUM_DEVICES results in 0 sensors. This triggers ISH hardware
    reset on subsequent enumeration after S3/S4 resume.
    
    The enum_devices_done flag was not reset before sending the
    HOSTIF_DM_ENUM_DEVICES command. On subsequent enumeration calls (such as
    after S3/S4 resume), this flag retains its previous true value, causing the
    wait loop to be skipped and returning prematurely to hid_ishtp_cl_init().
    If 0 HID devices are found, hid_ishtp_cl_init() skips getting HID device
    descriptors and sets init_done to true. When the delayed enumeration
    response arrives with init_done already true, the driver treats it as a bad
    packet and triggers an ISH hardware reset.
    
    Set enum_devices_done to false before sending the enumeration command,
    consistent with similar functions like ishtp_get_hid_descriptor() and
    ishtp_get_report_descriptor() which reset their respective flags.
    
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: intel-ish-hid: Update ishtp bus match to support device ID table [+ + +]
Author: Zhang Lixu <lixu.zhang@intel.com>
Date:   Wed Dec 10 10:53:28 2025 +0800

    HID: intel-ish-hid: Update ishtp bus match to support device ID table
    
    [ Upstream commit daeed86b686855adda79f13729e0c9b0530990be ]
    
    The ishtp_cl_bus_match() function previously only checked the first entry
    in the driver's device ID table. Update it to iterate over the entire
    table, allowing proper matching for drivers with multiple supported
    protocol GUIDs.
    
    Signed-off-by: Zhang Lixu <lixu.zhang@intel.com>
    Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: multitouch: add MT_QUIRK_STICKY_FINGERS to MT_CLS_VTL [+ + +]
Author: DaytonCL <artem749507@gmail.com>
Date:   Sun Dec 14 14:34:36 2025 +0100

    HID: multitouch: add MT_QUIRK_STICKY_FINGERS to MT_CLS_VTL
    
    [ Upstream commit ff3f234ff1dcd6d626a989151db067a1b7f0f215 ]
    
    Some VTL-class touchpads (e.g. TOPS0102:00 35CC:0104) intermittently
    fail to release a finger contact. A previous slot remains logically
    active, accompanied by stale BTN_TOOL_DOUBLETAP state, causing
    gestures to stay latched and resulting in stuck two-finger
    scrolling and false right-clicks.
    
    Apply MT_QUIRK_STICKY_FINGERS to handle the unreleased contact correctly.
    
    Link: https://gitlab.freedesktop.org/libinput/libinput/-/issues/1225
    Suggested-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Tested-by: DaytonCL <artem749507@gmail.com>
    Signed-off-by: DaytonCL <artem749507@gmail.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: playstation: Center initial joystick axes to prevent spurious events [+ + +]
Author: Siarhei Vishniakou <svv@google.com>
Date:   Tue Nov 11 15:45:19 2025 -0800

    HID: playstation: Center initial joystick axes to prevent spurious events
    
    [ Upstream commit e9143268d259d98e111a649affa061acb8e13c5b ]
    
    When a new PlayStation gamepad (DualShock 4 or DualSense) is initialized,
    the input subsystem sets the default value for its absolute axes (e.g.,
    ABS_X, ABS_Y) to 0.
    
    However, the hardware's actual neutral/resting state for these joysticks
    is 128 (0x80). This creates a mismatch.
    
    When the first HID report arrives from the device, the driver sees the
    resting value of 128. The kernel compares this to its initial state of 0
    and incorrectly interprets this as a delta (0 -> 128). Consequently, it
    generates EV_ABS events for this initial, non-existent movement.
    
    This behavior can fail userspace 'sanity check' tests (e.g., in
    Android CTS) that correctly assert no motion events should be generated
    from a device that is already at rest.
    
    This patch fixes the issue by explicitly setting the initial value of the
    main joystick axes (e.g., ABS_X, ABS_Y, ABS_RX, ABS_RY) to 128 (0x80)
    in the common ps_gamepad_create() function.
    
    This aligns the kernel's initial state with the hardware's expected
    neutral state, ensuring that the first report (at 128) produces no
    delta and thus, no spurious event.
    
    Signed-off-by: Siarhei Vishniakou <svv@google.com>
    Reviewed-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

HID: quirks: Add another Chicony HP 5MP Cameras to hid_ignore_list [+ + +]
Author: Chris Chiu <chris.chiu@canonical.com>
Date:   Fri Jan 2 06:56:43 2026 +0000

    HID: quirks: Add another Chicony HP 5MP Cameras to hid_ignore_list
    
    [ Upstream commit c06bc3557542307b9658fbd43cc946a14250347b ]
    
    Another Chicony Electronics HP 5MP Camera with USB ID 04F2:B882
    reports a HID sensor interface that is not actually implemented.
    
    Add the device to the HID ignore list so the bogus sensor is never
    exposed to userspace. Then the system won't hang when runtime PM
    tries to wake the unresponsive device.
    
    Signed-off-by: Chris Chiu <chris.chiu@canonical.com>
    Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
hwmon: (occ) Mark occ_init_attribute() as __printf [+ + +]
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Feb 3 17:34:36 2026 +0100

    hwmon: (occ) Mark occ_init_attribute() as __printf
    
    [ Upstream commit 831a2b27914cc880130ffe8fb8d1e65a5324d07f ]
    
    This is a printf-style function, which gcc -Werror=suggest-attribute=format
    correctly points out:
    
    drivers/hwmon/occ/common.c: In function 'occ_init_attribute':
    drivers/hwmon/occ/common.c:761:9: error: function 'occ_init_attribute' might be a candidate for 'gnu_printf' format attribute [-Werror=suggest-attribute=format]
    
    Add the attribute to avoid this warning and ensure any incorrect
    format strings are detected here.
    
    Fixes: 744c2fe950e9 ("hwmon: (occ) Rework attribute registration for stack usage")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Link: https://lore.kernel.org/r/20260203163440.2674340-1-arnd@kernel.org
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipv6: Fix ECMP sibling count mismatch when clearing RTF_ADDRCONF [+ + +]
Author: Shigeru Yoshida <syoshida@redhat.com>
Date:   Wed Feb 4 18:58:37 2026 +0900

    ipv6: Fix ECMP sibling count mismatch when clearing RTF_ADDRCONF
    
    [ Upstream commit bbf4a17ad9ffc4e3d7ec13d73ecd59dea149ed25 ]
    
    syzbot reported a kernel BUG in fib6_add_rt2node() when adding an IPv6
    route. [0]
    
    Commit f72514b3c569 ("ipv6: clear RA flags when adding a static
    route") introduced logic to clear RTF_ADDRCONF from existing routes
    when a static route with the same nexthop is added. However, this
    causes a problem when the existing route has a gateway.
    
    When RTF_ADDRCONF is cleared from a route that has a gateway, that
    route becomes eligible for ECMP, i.e. rt6_qualify_for_ecmp() returns
    true. The issue is that this route was never added to the
    fib6_siblings list.
    
    This leads to a mismatch between the following counts:
    
    - The sibling count computed by iterating fib6_next chain, which
      includes the newly ECMP-eligible route
    
    - The actual siblings in fib6_siblings list, which does not include
      that route
    
    When a subsequent ECMP route is added, fib6_add_rt2node() hits
    BUG_ON(sibling->fib6_nsiblings != rt->fib6_nsiblings) because the
    counts don't match.
    
    Fix this by only clearing RTF_ADDRCONF when the existing route does
    not have a gateway. Routes without a gateway cannot qualify for ECMP
    anyway (rt6_qualify_for_ecmp() requires fib_nh_gw_family), so clearing
    RTF_ADDRCONF on them is safe and matches the original intent of the
    commit.
    
    [0]:
    kernel BUG at net/ipv6/ip6_fib.c:1217!
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 0 UID: 0 PID: 6010 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    RIP: 0010:fib6_add_rt2node+0x3433/0x3470 net/ipv6/ip6_fib.c:1217
    [...]
    Call Trace:
     <TASK>
     fib6_add+0x8da/0x18a0 net/ipv6/ip6_fib.c:1532
     __ip6_ins_rt net/ipv6/route.c:1351 [inline]
     ip6_route_add+0xde/0x1b0 net/ipv6/route.c:3946
     ipv6_route_ioctl+0x35c/0x480 net/ipv6/route.c:4571
     inet6_ioctl+0x219/0x280 net/ipv6/af_inet6.c:577
     sock_do_ioctl+0xdc/0x300 net/socket.c:1245
     sock_ioctl+0x576/0x790 net/socket.c:1366
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xfa/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: f72514b3c569 ("ipv6: clear RA flags when adding a static route")
    Reported-by: syzbot+cb809def1baaac68ab92@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=cb809def1baaac68ab92
    Tested-by: syzbot+cb809def1baaac68ab92@syzkaller.appspotmail.com
    Signed-off-by: Shigeru Yoshida <syoshida@redhat.com>
    Reviewed-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Link: https://patch.msgid.link/20260204095837.1285552-1-syoshida@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
KVM: Don't clobber irqfd routing type when deassigning irqfd [+ + +]
Author: Sean Christopherson <seanjc@google.com>
Date:   Tue Jan 13 09:46:05 2026 -0800

    KVM: Don't clobber irqfd routing type when deassigning irqfd
    
    commit b4d37cdb77a0015f51fee083598fa227cc07aaf1 upstream.
    
    When deassigning a KVM_IRQFD, don't clobber the irqfd's copy of the IRQ's
    routing entry as doing so breaks kvm_arch_irq_bypass_del_producer() on x86
    and arm64, which explicitly look for KVM_IRQ_ROUTING_MSI.  Instead, to
    handle a concurrent routing update, verify that the irqfd is still active
    before consuming the routing information.  As evidenced by the x86 and
    arm64 bugs, and another bug in kvm_arch_update_irqfd_routing() (see below),
    clobbering the entry type without notifying arch code is surprising and
    error prone.
    
    As a bonus, checking that the irqfd is active provides a convenient
    location for documenting _why_ KVM must not consume the routing entry for
    an irqfd that is in the process of being deassigned: once the irqfd is
    deleted from the list (which happens *before* the eventfd is detached), it
    will no longer receive updates via kvm_irq_routing_update(), and so KVM
    could deliver an event using stale routing information (relative to
    KVM_SET_GSI_ROUTING returning to userspace).
    
    As an even better bonus, explicitly checking for the irqfd being active
    fixes a similar bug to the one the clobbering is trying to prevent: if an
    irqfd is deactivated, and then its routing is changed,
    kvm_irq_routing_update() won't invoke kvm_arch_update_irqfd_routing()
    (because the irqfd isn't in the list).  And so if the irqfd is in bypass
    mode, IRQs will continue to be posted using the old routing information.
    
    As for kvm_arch_irq_bypass_del_producer(), clobbering the routing type
    results in KVM incorrectly keeping the IRQ in bypass mode, which is
    especially problematic on AMD as KVM tracks IRQs that are being posted to
    a vCPU in a list whose lifetime is tied to the irqfd.
    
    Without the help of KASAN to detect use-after-free, the most common
    sympton on AMD is a NULL pointer deref in amd_iommu_update_ga() due to
    the memory for irqfd structure being re-allocated and zeroed, resulting
    in irqfd->irq_bypass_data being NULL when read by
    avic_update_iommu_vcpu_affinity():
    
      BUG: kernel NULL pointer dereference, address: 0000000000000018
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 40cf2b9067 P4D 40cf2b9067 PUD 408362a067 PMD 0
      Oops: Oops: 0000 [#1] SMP
      CPU: 6 UID: 0 PID: 40383 Comm: vfio_irq_test
      Tainted: G     U  W  O        6.19.0-smp--5dddc257e6b2-irqfd #31 NONE
      Tainted: [U]=USER, [W]=WARN, [O]=OOT_MODULE
      Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.78.2-0 09/05/2025
      RIP: 0010:amd_iommu_update_ga+0x19/0xe0
      Call Trace:
       <TASK>
       avic_update_iommu_vcpu_affinity+0x3d/0x90 [kvm_amd]
       __avic_vcpu_load+0xf4/0x130 [kvm_amd]
       kvm_arch_vcpu_load+0x89/0x210 [kvm]
       vcpu_load+0x30/0x40 [kvm]
       kvm_arch_vcpu_ioctl_run+0x45/0x620 [kvm]
       kvm_vcpu_ioctl+0x571/0x6a0 [kvm]
       __se_sys_ioctl+0x6d/0xb0
       do_syscall_64+0x6f/0x9d0
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
      RIP: 0033:0x46893b
        </TASK>
      ---[ end trace 0000000000000000 ]---
    
    If AVIC is inhibited when the irfd is deassigned, the bug will manifest as
    list corruption, e.g. on the next irqfd assignment.
    
      list_add corruption. next->prev should be prev (ffff8d474d5cd588),
                           but was 0000000000000000. (next=ffff8d8658f86530).
      ------------[ cut here ]------------
      kernel BUG at lib/list_debug.c:31!
      Oops: invalid opcode: 0000 [#1] SMP
      CPU: 128 UID: 0 PID: 80818 Comm: vfio_irq_test
      Tainted: G     U  W  O        6.19.0-smp--f19dc4d680ba-irqfd #28 NONE
      Tainted: [U]=USER, [W]=WARN, [O]=OOT_MODULE
      Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 34.78.2-0 09/05/2025
      RIP: 0010:__list_add_valid_or_report+0x97/0xc0
      Call Trace:
       <TASK>
       avic_pi_update_irte+0x28e/0x2b0 [kvm_amd]
       kvm_pi_update_irte+0xbf/0x190 [kvm]
       kvm_arch_irq_bypass_add_producer+0x72/0x90 [kvm]
       irq_bypass_register_consumer+0xcd/0x170 [irqbypass]
       kvm_irqfd+0x4c6/0x540 [kvm]
       kvm_vm_ioctl+0x118/0x5d0 [kvm]
       __se_sys_ioctl+0x6d/0xb0
       do_syscall_64+0x6f/0x9d0
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
       </TASK>
      ---[ end trace 0000000000000000 ]---
    
    On Intel and arm64, the bug is less noisy, as the end result is that the
    device keeps posting IRQs to the vCPU even after it's been deassigned.
    
    Note, the worst of the breakage can be traced back to commit cb210737675e
    ("KVM: Pass new routing entries and irqfd when updating IRTEs"), as before
    that commit KVM would pull the routing information from the per-VM routing
    table.  But as above, similar bugs have existed since support for IRQ
    bypass was added.  E.g. if a routing change finished before irq_shutdown()
    invoked kvm_arch_irq_bypass_del_producer(), VMX and SVM would see stale
    routing information and potentially leave the irqfd in bypass mode.
    
    Alternatively, x86 could be fixed by explicitly checking irq_bypass_vcpu
    instead of irq_entry.type in kvm_arch_irq_bypass_del_producer(), and arm64
    could be modified to utilize irq_bypass_vcpu in a similar manner.  But (a)
    that wouldn't fix the routing updates bug, and (b) fixing core code doesn't
    preclude x86 (or arm64) from adding such code as a sanity check (spoiler
    alert).
    
    Fixes: f70c20aaf141 ("KVM: Add an arch specific hooks in 'struct kvm_kernel_irqfd'")
    Fixes: cb210737675e ("KVM: Pass new routing entries and irqfd when updating IRTEs")
    Fixes: a0d7e2fc61ab ("KVM: arm64: vgic-v4: Only attempt vLPI mapping for actual MSIs")
    Cc: stable@vger.kernel.org
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Oliver Upton <oupton@kernel.org>
    Link: https://patch.msgid.link/20260113174606.104978-2-seanjc@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: selftests: Add -U_FORTIFY_SOURCE to avoid some unpredictable test failures [+ + +]
Author: Zhiquan Li <zhiquan_li@163.com>
Date:   Sat Feb 7 16:07:08 2026 -0500

    KVM: selftests: Add -U_FORTIFY_SOURCE to avoid some unpredictable test failures
    
    [ Upstream commit e396a74222654486d6ab45dca5d0c54c408b8b91 ]
    
    Some distributions (such as Ubuntu) configure GCC so that
    _FORTIFY_SOURCE is automatically enabled at -O1 or above.  This results
    in some fortified version of definitions of standard library functions
    are included.  While linker resolves the symbols, the fortified versions
    might override the definitions in lib/string_override.c and reference to
    those PLT entries in GLIBC.  This is not a problem for the code in host,
    but it is a disaster for the guest code.  E.g., if build and run
    x86/nested_emulation_test on Ubuntu 24.04 will encounter a L1 #PF due to
    memset() reference to __memset_chk@plt.
    
    The option -fno-builtin-memset is not helpful here, because those
    fortified versions are not built-in but some definitions which are
    included by header, they are for different intentions.
    
    In order to eliminate the unpredictable behaviors may vary depending on
    the linker and platform, add the "-U_FORTIFY_SOURCE" into CFLAGS to
    prevent from introducing the fortified definitions.
    
    Signed-off-by: Zhiquan Li <zhiquan_li@163.com>
    Link: https://patch.msgid.link/20260122053551.548229-1-zhiquan_li@163.com
    Fixes: 6b6f71484bf4 ("KVM: selftests: Implement memcmp(), memcpy(), and memset() for guest use")
    Cc: stable@vger.kernel.org
    [sean: tag for stable]
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    [ Makefile.kvm -> Makefile ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.6.124 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Feb 11 13:39:17 2026 +0100

    Linux 6.6.124
    
    Link: https://lore.kernel.org/r/20260209142304.770150175@linuxfoundation.org
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
    Tested-by: Jeffrin Jose T <jeffrin@rajagiritech.edu.in>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: Enable exception fixup for specific ADE subcode [+ + +]
Author: Chenghao Duan <duanchenghao@kylinos.cn>
Date:   Wed Dec 31 15:19:20 2025 +0800

    LoongArch: Enable exception fixup for specific ADE subcode
    
    [ Upstream commit 9bdc1ab5e4ce6f066119018d8f69631a46f9c5a0 ]
    
    This patch allows the LoongArch BPF JIT to handle recoverable memory
    access errors generated by BPF_PROBE_MEM* instructions.
    
    When a BPF program performs memory access operations, the instructions
    it executes may trigger ADEM exceptions. The kernel’s built-in BPF
    exception table mechanism (EX_TYPE_BPF) will generate corresponding
    exception fixup entries in the JIT compilation phase; however, the
    architecture-specific trap handling function needs to proactively call
    the common fixup routine to achieve exception recovery.
    
    do_ade(): fix EX_TYPE_BPF memory access exceptions for BPF programs,
    ensure safe execution.
    
    Relevant test cases: illegal address access tests in module_attach and
    subprogs_extable of selftests/bpf.
    
    Signed-off-by: Chenghao Duan <duanchenghao@kylinos.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

LoongArch: Set correct protection_map[] for VM_NONE/VM_SHARED [+ + +]
Author: Huacai Chen <chenhuacai@kernel.org>
Date:   Wed Dec 31 15:19:10 2025 +0800

    LoongArch: Set correct protection_map[] for VM_NONE/VM_SHARED
    
    [ Upstream commit d5be446948b379f1d1a8e7bc6656d13f44c5c7b1 ]
    
    For 32BIT platform _PAGE_PROTNONE is 0, so set a VMA to be VM_NONE or
    VM_SHARED will make pages non-present, then cause Oops with kernel page
    fault.
    
    Fix it by set correct protection_map[] for VM_NONE/VM_SHARED, replacing
    _PAGE_PROTNONE with _PAGE_PRESENT.
    
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
macvlan: fix error recovery in macvlan_common_newlink() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Jan 29 20:43:59 2026 +0000

    macvlan: fix error recovery in macvlan_common_newlink()
    
    [ Upstream commit f8db6475a83649689c087a8f52486fcc53e627e9 ]
    
    valis provided a nice repro to crash the kernel:
    
    ip link add p1 type veth peer p2
    ip link set address 00:00:00:00:00:20 dev p1
    ip link set up dev p1
    ip link set up dev p2
    
    ip link add mv0 link p2 type macvlan mode source
    ip link add invalid% link p2 type macvlan mode source macaddr add 00:00:00:00:00:20
    
    ping -c1 -I p1 1.2.3.4
    
    He also gave a very detailed analysis:
    
    <quote valis>
    
    The issue is triggered when a new macvlan link is created  with
    MACVLAN_MODE_SOURCE mode and MACVLAN_MACADDR_ADD (or
    MACVLAN_MACADDR_SET) parameter, lower device already has a macvlan
    port and register_netdevice() called from macvlan_common_newlink()
    fails (e.g. because of the invalid link name).
    
    In this case macvlan_hash_add_source is called from
    macvlan_change_sources() / macvlan_common_newlink():
    
    This adds a reference to vlan to the port's vlan_source_hash using
    macvlan_source_entry.
    
    vlan is a pointer to the priv data of the link that is being created.
    
    When register_netdevice() fails, the error is returned from
    macvlan_newlink() to rtnl_newlink_create():
    
            if (ops->newlink)
                    err = ops->newlink(dev, ¶ms, extack);
            else
                    err = register_netdevice(dev);
            if (err < 0) {
                    free_netdev(dev);
                    goto out;
            }
    
    and free_netdev() is called, causing a kvfree() on the struct
    net_device that is still referenced in the source entry attached to
    the lower device's macvlan port.
    
    Now all packets sent on the macvlan port with a matching source mac
    address will trigger a use-after-free in macvlan_forward_source().
    
    </quote valis>
    
    With all that, my fix is to make sure we call macvlan_flush_sources()
    regardless of @create value whenever "goto destroy_macvlan_port;"
    path is taken.
    
    Many thanks to valis for following up on this issue.
    
    Fixes: aa5fd0fb7748 ("driver: macvlan: Destroy new macvlan port if macvlan_common_newlink failed.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: valis <sec@valis.email>
    Reported-by: syzbot+7182fbe91e58602ec1fe@syzkaller.appspotmail.com
    Closes: https: //lore.kernel.org/netdev/695fb1e8.050a0220.1c677c.039f.GAE@google.com/T/#u
    Cc: Boudewijn van der Heide <boudewijn@delta-utec.com>
    Link: https://patch.msgid.link/20260129204359.632556-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/sched: cls_u32: use skb_header_pointer_careful() [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jan 28 14:15:39 2026 +0000

    net/sched: cls_u32: use skb_header_pointer_careful()
    
    [ Upstream commit cabd1a976375780dabab888784e356f574bbaed8 ]
    
    skb_header_pointer() does not fully validate negative @offset values.
    
    Use skb_header_pointer_careful() instead.
    
    GangMin Kim provided a report and a repro fooling u32_classify():
    
    BUG: KASAN: slab-out-of-bounds in u32_classify+0x1180/0x11b0
    net/sched/cls_u32.c:221
    
    Fixes: fbc2e7d9cf49 ("cls_u32: use skb_header_pointer() to dereference data safely")
    Reported-by: GangMin Kim <km.kim1503@gmail.com>
    Closes: https://lore.kernel.org/netdev/CANn89iJkyUZ=mAzLzC4GdcAgLuPnUoivdLaOs6B9rq5_erj76w@mail.gmail.com/T/
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260128141539.3404400-3-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net: add skb_header_pointer_careful() helper [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Jan 28 14:15:38 2026 +0000

    net: add skb_header_pointer_careful() helper
    
    [ Upstream commit 13e00fdc9236bd4d0bff4109d2983171fbcb74c4 ]
    
    This variant of skb_header_pointer() should be used in contexts
    where @offset argument is user-controlled and could be negative.
    
    Negative offsets are supported, as long as the zone starts
    between skb->head and skb->data.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260128141539.3404400-2-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: cabd1a976375 ("net/sched: cls_u32: use skb_header_pointer_careful()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: don't touch dev->stats in BPF redirect paths [+ + +]
Author: Jakub Kicinski <kuba@kernel.org>
Date:   Thu Jan 29 19:38:27 2026 -0800

    net: don't touch dev->stats in BPF redirect paths
    
    [ Upstream commit fdf3f6800be36377e045e2448087f12132b88d2f ]
    
    Gal reports that BPF redirect increments dev->stats.tx_errors
    on failure. This is not correct, most modern drivers completely
    ignore dev->stats so these drops will be invisible to the user.
    Core code should use the dedicated core stats which are folded
    into device stats in dev_get_stats().
    
    Note that we're switching from tx_errors to tx_dropped.
    Core only has tx_dropped, hence presumably users already expect
    that counter to increment for "stack" Tx issues.
    
    Reported-by: Gal Pressman <gal@nvidia.com>
    Link: https://lore.kernel.org/c5df3b60-246a-4030-9c9a-0a35cd1ca924@nvidia.com
    Fixes: b4ab31414970 ("bpf: Add redirect_neigh helper as redirect drop-in")
    Acked-by: Martin KaFai Lau <martin.lau@kernel.org>
    Acked-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260130033827.698841-1-kuba@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: ethernet: adi: adin1110: Check return value of devm_gpiod_get_optional() in adin1110_check_spi() [+ + +]
Author: Chen Ni <nichen@iscas.ac.cn>
Date:   Mon Feb 2 12:02:28 2026 +0800

    net: ethernet: adi: adin1110: Check return value of devm_gpiod_get_optional() in adin1110_check_spi()
    
    [ Upstream commit 78211543d2e44f84093049b4ef5f5bfa535f4645 ]
    
    The devm_gpiod_get_optional() function may return an ERR_PTR in case of
    genuine GPIO acquisition errors, not just NULL which indicates the
    legitimate absence of an optional GPIO.
    
    Add an IS_ERR() check after the call in adin1110_check_spi(). On error,
    return the error code to ensure proper failure handling rather than
    proceeding with invalid pointers.
    
    Fixes: 36934cac7aaf ("net: ethernet: adi: adin1110: add reset GPIO")
    Signed-off-by: Chen Ni <nichen@iscas.ac.cn>
    Reviewed-by: Nuno Sá <nuno.sa@analog.com>
    Link: https://patch.msgid.link/20260202040228.4129097-1-nichen@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: gro: fix outer network offset [+ + +]
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Mon Feb 2 12:43:14 2026 +0100

    net: gro: fix outer network offset
    
    [ Upstream commit 5c2c3c38be396257a6a2e55bd601a12bb9781507 ]
    
    The udp GRO complete stage assumes that all the packets inserted the RX
    have the `encapsulation` flag zeroed. Such assumption is not true, as a
    few H/W NICs can set such flag when H/W offloading the checksum for
    an UDP encapsulated traffic, the tun driver can inject GSO packets with
    UDP encapsulation and the problematic layout can also be created via
    a veth based setup.
    
    Due to the above, in the problematic scenarios, udp4_gro_complete() uses
    the wrong network offset (inner instead of outer) to compute the outer
    UDP header pseudo checksum, leading to csum validation errors later on
    in packet processing.
    
    Address the issue always clearing the encapsulation flag at GRO completion
    time. Such flag will be set again as needed for encapsulated packets by
    udp_gro_complete().
    
    Fixes: 5ef31ea5d053 ("net: gro: fix udp bad offset in socket lookup by adding {inner_}network_offset to napi_gro_cb")
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/562638dbebb3b15424220e26a180274b387e2a88.1770032084.git.pabeni@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: liquidio: Fix off-by-one error in PF setup_nic_devices() cleanup [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Wed Jan 28 15:44:39 2026 +0000

    net: liquidio: Fix off-by-one error in PF setup_nic_devices() cleanup
    
    [ Upstream commit 8558aef4e8a1a83049ab906d21d391093cfa7e7f ]
    
    In setup_nic_devices(), the initialization loop jumps to the label
    setup_nic_dev_free on failure. The current cleanup loop while(i--)
    skip the failing index i, causing a memory leak.
    
    Fix this by changing the loop to iterate from the current index i
    down to 0.
    
    Also, decrement i in the devlink_alloc failure path to point to the
    last successfully allocated index.
    
    Compile tested only. Issue found using code review.
    
    Fixes: f21fb3ed364b ("Add support of Cavium Liquidio ethernet adapters")
    Suggested-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20260128154440.278369-3-zilin@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: liquidio: Fix off-by-one error in VF setup_nic_devices() cleanup [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Wed Jan 28 15:44:40 2026 +0000

    net: liquidio: Fix off-by-one error in VF setup_nic_devices() cleanup
    
    [ Upstream commit 6cbba46934aefdfb5d171e0a95aec06c24f7ca30 ]
    
    In setup_nic_devices(), the initialization loop jumps to the label
    setup_nic_dev_free on failure. The current cleanup loop while(i--)
    skip the failing index i, causing a memory leak.
    
    Fix this by changing the loop to iterate from the current index i
    down to 0.
    
    Compile tested only. Issue found using code review.
    
    Fixes: 846b46873eeb ("liquidio CN23XX: VF offload features")
    Suggested-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20260128154440.278369-4-zilin@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: liquidio: Initialize netdev pointer before queue setup [+ + +]
Author: Zilin Guan <zilin@seu.edu.cn>
Date:   Wed Jan 28 15:44:38 2026 +0000

    net: liquidio: Initialize netdev pointer before queue setup
    
    [ Upstream commit 926ede0c85e1e57c97d64d9612455267d597bb2c ]
    
    In setup_nic_devices(), the netdev is allocated using alloc_etherdev_mq().
    However, the pointer to this structure is stored in oct->props[i].netdev
    only after the calls to netif_set_real_num_rx_queues() and
    netif_set_real_num_tx_queues().
    
    If either of these functions fails, setup_nic_devices() returns an error
    without freeing the allocated netdev. Since oct->props[i].netdev is still
    NULL at this point, the cleanup function liquidio_destroy_nic_device()
    will fail to find and free the netdev, resulting in a memory leak.
    
    Fix this by initializing oct->props[i].netdev before calling the queue
    setup functions. This ensures that the netdev is properly accessible for
    cleanup in case of errors.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: c33c997346c3 ("liquidio: enhanced ethtool --set-channels feature")
    Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
    Reviewed-by: Kory Maincent <kory.maincent@bootlin.com>
    Link: https://patch.msgid.link/20260128154440.278369-2-zilin@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: usb: sr9700: support devices with virtual driver CD [+ + +]
Author: Ethan Nelson-Moore <enelsonmoore@gmail.com>
Date:   Wed Dec 10 22:24:51 2025 -0800

    net: usb: sr9700: support devices with virtual driver CD
    
    [ Upstream commit bf4172bd870c3a34d3065cbb39192c22cbd7b18d ]
    
    Some SR9700 devices have an SPI flash chip containing a virtual driver
    CD, in which case they appear as a device with two interfaces and
    product ID 0x9702. Interface 0 is the driver CD and interface 1 is the
    Ethernet device.
    
    Link: https://github.com/name-kurniawan/usb-lan
    Link: https://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?t=2185
    Signed-off-by: Ethan Nelson-Moore <enelsonmoore@gmail.com>
    Link: https://patch.msgid.link/20251211062451.139036-1-enelsonmoore@gmail.com
    [pabeni@redhat.com: fixes link tags]
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_activate() [+ + +]
Author: Andrew Fasano <andrew.fasano@nist.gov>
Date:   Wed Feb 4 17:46:58 2026 +0100

    netfilter: nf_tables: fix inverted genmask check in nft_map_catchall_activate()
    
    [ Upstream commit f41c5d151078c5348271ffaf8e7410d96f2d82f8 ]
    
    nft_map_catchall_activate() has an inverted element activity check
    compared to its non-catchall counterpart nft_mapelem_activate() and
    compared to what is logically required.
    
    nft_map_catchall_activate() is called from the abort path to re-activate
    catchall map elements that were deactivated during a failed transaction.
    It should skip elements that are already active (they don't need
    re-activation) and process elements that are inactive (they need to be
    restored). Instead, the current code does the opposite: it skips inactive
    elements and processes active ones.
    
    Compare the non-catchall activate callback, which is correct:
    
      nft_mapelem_activate():
        if (nft_set_elem_active(ext, iter->genmask))
            return 0;   /* skip active, process inactive */
    
    With the buggy catchall version:
    
      nft_map_catchall_activate():
        if (!nft_set_elem_active(ext, genmask))
            continue;   /* skip inactive, process active */
    
    The consequence is that when a DELSET operation is aborted,
    nft_setelem_data_activate() is never called for the catchall element.
    For NFT_GOTO verdict elements, this means nft_data_hold() is never
    called to restore the chain->use reference count. Each abort cycle
    permanently decrements chain->use. Once chain->use reaches zero,
    DELCHAIN succeeds and frees the chain while catchall verdict elements
    still reference it, resulting in a use-after-free.
    
    This is exploitable for local privilege escalation from an unprivileged
    user via user namespaces + nftables on distributions that enable
    CONFIG_USER_NS and CONFIG_NF_TABLES.
    
    Fix by removing the negation so the check matches nft_mapelem_activate():
    skip active elements, process inactive ones.
    
    Fixes: 628bd3e49cba ("netfilter: nf_tables: drop map element references from preparation phase")
    Signed-off-by: Andrew Fasano <andrew.fasano@nist.gov>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_set_pipapo: clamp maximum map bucket size to INT_MAX [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Tue Apr 22 21:52:44 2025 +0200

    netfilter: nft_set_pipapo: clamp maximum map bucket size to INT_MAX
    
    commit b85e3367a5716ed3662a4fe266525190d2af76df upstream.
    
    Otherwise, it is possible to hit WARN_ON_ONCE in __kvmalloc_node_noprof()
    when resizing hashtable because __GFP_NOWARN is unset.
    
    Similar to:
    
      b541ba7d1f5a ("netfilter: conntrack: clamp maximum hashtable size to INT_MAX")
    
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    [ Keerthana: Handle freeing new_lt ]
    Signed-off-by: Keerthana K <keerthana.kalyanasundaram@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: replace -EEXIST with -EBUSY [+ + +]
Author: Daniel Gomez <da.gomez@samsung.com>
Date:   Fri Dec 19 06:13:20 2025 +0100

    netfilter: replace -EEXIST with -EBUSY
    
    [ Upstream commit 2bafeb8d2f380c3a81d98bd7b78b854b564f9cd4 ]
    
    The -EEXIST error code is reserved by the module loading infrastructure
    to indicate that a module is already loaded. When a module's init
    function returns -EEXIST, userspace tools like kmod interpret this as
    "module already loaded" and treat the operation as successful, returning
    0 to the user even though the module initialization actually failed.
    
    Replace -EEXIST with -EBUSY to ensure correct error reporting in the module
    initialization path.
    
    Affected modules:
      * ebtable_broute ebtable_filter ebtable_nat arptable_filter
      * ip6table_filter ip6table_mangle ip6table_nat ip6table_raw
      * ip6table_security iptable_filter iptable_mangle iptable_nat
      * iptable_raw iptable_security
    
    Signed-off-by: Daniel Gomez <da.gomez@samsung.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvme-fc: release admin tagset if init fails [+ + +]
Author: Chaitanya Kulkarni <ckulkarnilinux@gmail.com>
Date:   Fri Dec 19 16:18:42 2025 -0800

    nvme-fc: release admin tagset if init fails
    
    [ Upstream commit d1877cc7270302081a315a81a0ee8331f19f95c8 ]
    
    nvme_fabrics creates an NVMe/FC controller in following path:
    
        nvmf_dev_write()
          -> nvmf_create_ctrl()
            -> nvme_fc_create_ctrl()
              -> nvme_fc_init_ctrl()
    
    nvme_fc_init_ctrl() allocates the admin blk-mq resources right after
    nvme_add_ctrl() succeeds.  If any of the subsequent steps fail (changing
    the controller state, scheduling connect work, etc.), we jump to the
    fail_ctrl path, which tears down the controller references but never
    frees the admin queue/tag set.  The leaked blk-mq allocations match the
    kmemleak report seen during blktests nvme/fc.
    
    Check ctrl->ctrl.admin_tagset in the fail_ctrl path and call
    nvme_remove_admin_tag_set() when it is set so that all admin queue
    allocations are reclaimed whenever controller setup aborts.
    
    Reported-by: Yi Zhang <yi.zhang@redhat.com>
    Reviewed-by: Justin Tee <justin.tee@broadcom.com>
    Signed-off-by: Chaitanya Kulkarni <ckulkarnilinux@gmail.com>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec [+ + +]
Author: YunJe Shin <yjshin0438@gmail.com>
Date:   Wed Jan 28 09:41:07 2026 +0900

    nvmet-tcp: add bounds checks in nvmet_tcp_build_pdu_iovec
    
    commit 52a0a98549344ca20ad81a4176d68d28e3c05a5c upstream.
    
    nvmet_tcp_build_pdu_iovec() could walk past cmd->req.sg when a PDU
    length or offset exceeds sg_cnt and then use bogus sg->length/offset
    values, leading to _copy_to_iter() GPF/KASAN. Guard sg_idx, remaining
    entries, and sg->length/offset before building the bvec.
    
    Fixes: 872d26a391da ("nvmet-tcp: add NVMe over TCP target driver")
    Signed-off-by: YunJe Shin <ioerts@kookmin.ac.kr>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Reviewed-by: Joonkyo Jung <joonkyoj@yonsei.ac.kr>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
nvmet-tcp: fixup hang in nvmet_tcp_listen_data_ready() [+ + +]
Author: Hannes Reinecke <hare@kernel.org>
Date:   Mon Aug 18 11:32:45 2025 +0200

    nvmet-tcp: fixup hang in nvmet_tcp_listen_data_ready()
    
    [ Upstream commit 2fa8961d3a6a1c2395d8d560ffed2c782681bade ]
    
    When the socket is closed while in TCP_LISTEN a callback is run to
    flush all outstanding packets, which in turns calls
    nvmet_tcp_listen_data_ready() with the sk_callback_lock held.
    So we need to check if we are in TCP_LISTEN before attempting
    to get the sk_callback_lock() to avoid a deadlock.
    
    Link: https://lore.kernel.org/linux-nvme/CAHj4cs-zu7eVB78yUpFjVe2UqMWFkLk8p+DaS3qj+uiGCXBAoA@mail.gmail.com/
    Tested-by:  Yi Zhang <yi.zhang@redhat.com>
    Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
    Signed-off-by: Hannes Reinecke <hare@kernel.org>
    Signed-off-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: hp-bioscfg: Skip empty attribute names [+ + +]
Author: Mario Limonciello <mario.limonciello@amd.com>
Date:   Wed Jan 28 13:04:45 2026 -0600

    platform/x86: hp-bioscfg: Skip empty attribute names
    
    [ Upstream commit 6222883af286e2feb3c9ff2bf9fd8fdf4220c55a ]
    
    Avoid registering kobjects with empty names when a BIOS attribute
    name decodes to an empty string.
    
    Fixes: a34fc329b1895 ("platform/x86: hp-bioscfg: bioscfg")
    Reported-by: Alain Cousinie <alain.cousinie@laposte.net>
    Closes: https://lore.kernel.org/platform-driver-x86/22ed5f78-c8bf-4ab4-8c38-420cc0201e7e@laposte.net/
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Link: https://patch.msgid.link/20260128190501.2170068-1-mario.limonciello@amd.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: intel_telemetry: Fix PSS event register mask [+ + +]
Author: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
Date:   Wed Dec 24 11:41:44 2025 +0530

    platform/x86: intel_telemetry: Fix PSS event register mask
    
    [ Upstream commit 39e9c376ac42705af4ed4ae39eec028e8bced9b4 ]
    
    The PSS telemetry info parsing incorrectly applies
    TELEM_INFO_SRAMEVTS_MASK when extracting event register
    count from firmware response. This reads bits 15-8 instead
    of the correct bits 7-0, causing misdetection of hardware
    capabilities.
    
    The IOSS path correctly uses TELEM_INFO_NENABLES_MASK for
    register count. Apply the same mask to PSS parsing for
    consistency.
    
    Fixes: 9d16b482b059 ("platform:x86: Add Intel telemetry platform driver")
    Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
    Link: https://patch.msgid.link/20251224061144.3925519-1-kaushlendra.kumar@intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: intel_telemetry: Fix swapped arrays in PSS output [+ + +]
Author: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
Date:   Wed Dec 24 08:50:53 2025 +0530

    platform/x86: intel_telemetry: Fix swapped arrays in PSS output
    
    commit 25e9e322d2ab5c03602eff4fbf4f7c40019d8de2 upstream.
    
    The LTR blocking statistics and wakeup event counters are incorrectly
    cross-referenced during debugfs output rendering. The code populates
    pss_ltr_blkd[] with LTR blocking data and pss_s0ix_wakeup[] with wakeup
    data, but the display loops reference the wrong arrays.
    
    This causes the "LTR Blocking Status" section to print wakeup events
    and the "Wakes Status" section to print LTR blockers, misleading power
    management analysis and S0ix residency debugging.
    
    Fix by aligning array usage with the intended output section labels.
    
    Fixes: 87bee290998d ("platform:x86: Add Intel Telemetry Debugfs interfaces")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
    Link: https://patch.msgid.link/20251224032053.3915900-1-kaushlendra.kumar@intel.com
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

platform/x86: toshiba_haps: Fix memory leaks in add/remove routines [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Mon Jan 26 16:38:45 2026 +0200

    platform/x86: toshiba_haps: Fix memory leaks in add/remove routines
    
    [ Upstream commit 128497456756e1b952bd5a912cd073836465109d ]
    
    toshiba_haps_add() leaks the haps object allocated by it if it returns
    an error after allocating that object successfully.
    
    toshiba_haps_remove() does not free the object pointed to by
    toshiba_haps before clearing that pointer, so it becomes unreachable
    allocated memory.
    
    Address these memory leaks by using devm_kzalloc() for allocating
    the memory in question.
    
    Fixes: 23d0ba0c908a ("platform/x86: Toshiba HDD Active Protection Sensor")
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
pmdomain: imx8m-blk-ctrl: fix out-of-range access of bc->domains [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Fri Jan 30 13:11:07 2026 +0800

    pmdomain: imx8m-blk-ctrl: fix out-of-range access of bc->domains
    
    commit 6bd8b4a92a901fae1a422e6f914801063c345e8d upstream.
    
    Fix out-of-range access of bc->domains in imx8m_blk_ctrl_remove().
    
    Fixes: 2684ac05a8c4 ("soc: imx: add i.MX8M blk-ctrl driver")
    Cc: stable@kernel.org
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: imx8mp-blk-ctrl: Keep gpc power domain on for system wakeup [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Wed Feb 4 19:11:41 2026 +0800

    pmdomain: imx8mp-blk-ctrl: Keep gpc power domain on for system wakeup
    
    commit e9ab2b83893dd03cf04d98faded81190e635233f upstream.
    
    Current design will power off all dependent GPC power domains in
    imx8mp_blk_ctrl_suspend(), even though the user device has enabled
    wakeup capability. The result is that wakeup function never works
    for such device.
    
    An example will be USB wakeup on i.MX8MP. PHY device '382f0040.usb-phy'
    is attached to power domain 'hsioblk-usb-phy2' which is spawned by hsio
    block control. A virtual power domain device 'genpd:3:32f10000.blk-ctrl'
    is created to build connection with 'hsioblk-usb-phy2' and it depends on
    GPC power domain 'usb-otg2'. If device '382f0040.usb-phy' enable wakeup,
    only power domain 'hsioblk-usb-phy2' keeps on during system suspend,
    power domain 'usb-otg2' is off all the time. So the wakeup event can't
    happen.
    
    In order to further establish a connection between the power domains
    related to GPC and block control during system suspend, register a genpd
    power on/off notifier for the power_dev. This allows us to prevent the GPC
    power domain from being powered off, in case the block control power
    domain is kept on to serve system wakeup.
    
    Suggested-by: Ulf Hansson <ulf.hansson@linaro.org>
    Fixes: 556f5cf9568a ("soc: imx: add i.MX8MP HSIO blk-ctrl")
    Cc: stable@vger.kernel.org
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: imx8mp-blk-ctrl: Keep usb phy power domain on for system wakeup [+ + +]
Author: Xu Yang <xu.yang_2@nxp.com>
Date:   Wed Feb 4 19:11:42 2026 +0800

    pmdomain: imx8mp-blk-ctrl: Keep usb phy power domain on for system wakeup
    
    commit e2c4c5b2bbd4f688a0f9f6da26cdf6d723c53478 upstream.
    
    USB system wakeup need its PHY on, so add the GENPD_FLAG_ACTIVE_WAKEUP
    flags to USB PHY genpd configuration.
    
    Signed-off-by: Xu Yang <xu.yang_2@nxp.com>
    Fixes: 556f5cf9568a ("soc: imx: add i.MX8MP HSIO blk-ctrl")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: imx: gpcv2: Fix the imx8mm gpu hang due to wrong adb400 reset [+ + +]
Author: Jacky Bai <ping.bai@nxp.com>
Date:   Fri Jan 23 10:51:26 2026 +0800

    pmdomain: imx: gpcv2: Fix the imx8mm gpu hang due to wrong adb400 reset
    
    commit ae0a24c5a8dcea20bf8e344eadf6593e6d1959c3 upstream.
    
    On i.MX8MM, the GPUMIX, GPU2D, and GPU3D blocks share a common reset
    domain. Due to this hardware limitation, powering off/on GPU2D or GPU3D
    also triggers a reset of the GPUMIX domain, including its ADB400 port.
    However, the ADB400 interface must always be placed into power‑down mode
    before being reset.
    
    Currently the GPUMIX and GPU2D/3D power domains rely on runtime PM to
    handle dependency ordering. In some corner cases, the GPUMIX power off
    sequence is skipped, leaving the ADB400 port active when GPU2D/3D reset.
    This causes the GPUMIX ADB400 port to be reset while still active,
    leading to unpredictable bus behavior and GPU hangs.
    
    To avoid this, refine the power‑domain control logic so that the GPUMIX
    ADB400 port is explicitly powered down and powered up as part of the GPU
    power domain on/off sequence. This ensures proper ordering and prevents
    incorrect ADB400 reset.
    
    Suggested-by: Lucas Stach <l.stach@pengutronix.de>
    Signed-off-by: Jacky Bai <ping.bai@nxp.com>
    Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
    Tested-by: Philipp Zabel <p.zabel@pengutronix.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

pmdomain: qcom: rpmpd: fix off-by-one error in clamping to the highest state [+ + +]
Author: Gabor Juhos <j4g8y7@gmail.com>
Date:   Thu Jan 22 18:20:12 2026 +0100

    pmdomain: qcom: rpmpd: fix off-by-one error in clamping to the highest state
    
    commit 8aa6f7697f5981d336cac7af6ddd182a03c6da01 upstream.
    
    As it is indicated by the comment, the rpmpd_aggregate_corner() function
    tries to clamp the state to the highest corner/level supported by the
    given power domain, however the calculation of the highest state contains
    an off-by-one error.
    
    The 'max_state' member of the 'rpmpd' structure indicates the highest
    corner/level, and as such it does not needs to be decremented.
    
    Change the code to use the 'max_state' value directly to avoid the error.
    
    Fixes: 98c8b3efacae ("soc: qcom: rpmpd: Add sync_state")
    Signed-off-by: Gabor Juhos <j4g8y7@gmail.com>
    Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rbd: check for EOD after exclusive lock is ensured to be held [+ + +]
Author: Ilya Dryomov <idryomov@gmail.com>
Date:   Wed Jan 7 22:37:55 2026 +0100

    rbd: check for EOD after exclusive lock is ensured to be held
    
    commit bd3884a204c3b507e6baa9a4091aa927f9af5404 upstream.
    
    Similar to commit 870611e4877e ("rbd: get snapshot context after
    exclusive lock is ensured to be held"), move the "beyond EOD" check
    into the image request state machine so that it's performed after
    exclusive lock is ensured to be held.  This avoids various race
    conditions which can arise when the image is shrunk under I/O (in
    practice, mostly readahead).  In one such scenario
    
        rbd_assert(objno < rbd_dev->object_map_size);
    
    can be triggered if a close-to-EOD read gets queued right before the
    shrink is initiated and the EOD check is performed against an outdated
    mapping_size.  After the resize is done on the server side and exclusive
    lock is (re)acquired bringing along the new (now shrunk) object map, the
    read starts going through the state machine and rbd_obj_may_exist() gets
    invoked on an object that is out of bounds of rbd_dev->object_map array.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Reviewed-by: Dongsheng Yang <dongsheng.yang@linux.dev>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
regmap: maple: free entry on mas_store_gfp() failure [+ + +]
Author: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
Date:   Mon Jan 5 08:48:20 2026 +0530

    regmap: maple: free entry on mas_store_gfp() failure
    
    [ Upstream commit f3f380ce6b3d5c9805c7e0b3d5bc28d9ec41e2e8 ]
    
    regcache_maple_write() allocates a new block ('entry') to merge
    adjacent ranges and then stores it with mas_store_gfp().
    When mas_store_gfp() fails, the new 'entry' remains allocated and
    is never freed, leaking memory.
    
    Free 'entry' on the failure path; on success continue freeing the
    replaced neighbor blocks ('lower', 'upper').
    
    Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
    Link: https://patch.msgid.link/20260105031820.260119-1-kaushlendra.kumar@intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
Revert "drm/amd: Check if ASPM is enabled from PCIe subsystem" [+ + +]
Author: Bert Karwatzki <spasswolf@web.de>
Date:   Sun Feb 1 01:24:45 2026 +0100

    Revert "drm/amd: Check if ASPM is enabled from PCIe subsystem"
    
    commit 243b467dea1735fed904c2e54d248a46fa417a2d upstream.
    
    This reverts commit 7294863a6f01248d72b61d38478978d638641bee.
    
    This commit was erroneously applied again after commit 0ab5d711ec74
    ("drm/amd: Refactor `amdgpu_aspm` to be evaluated per device")
    removed it, leading to very hard to debug crashes, when used with a system with two
    AMD GPUs of which only one supports ASPM.
    
    Link: https://lore.kernel.org/linux-acpi/20251006120944.7880-1-spasswolf@web.de/
    Link: https://github.com/acpica/acpica/issues/1060
    Fixes: 0ab5d711ec74 ("drm/amd: Refactor `amdgpu_aspm` to be evaluated per device")
    Signed-off-by: Bert Karwatzki <spasswolf@web.de>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
    Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 97a9689300eb2b393ba5efc17c8e5db835917080)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free [+ + +]
Author: Wupeng Ma <mawupeng1@huawei.com>
Date:   Sun Dec 28 14:50:07 2025 +0800

    ring-buffer: Avoid softlockup in ring_buffer_resize() during memory free
    
    [ Upstream commit 6435ffd6c7fcba330dfa91c58dc30aed2df3d0bf ]
    
    When user resize all trace ring buffer through file 'buffer_size_kb',
    then in ring_buffer_resize(), kernel allocates buffer pages for each
    cpu in a loop.
    
    If the kernel preemption model is PREEMPT_NONE and there are many cpus
    and there are many buffer pages to be freed, it may not give up cpu
    for a long time and finally cause a softlockup.
    
    To avoid it, call cond_resched() after each cpu buffer free as Commit
    f6bd2c92488c ("ring-buffer: Avoid softlockup in ring_buffer_resize()")
    does.
    
    Detailed call trace as follow:
    
      rcu: INFO: rcu_sched self-detected stall on CPU
      rcu:  24-....: (14837 ticks this GP) idle=521c/1/0x4000000000000000 softirq=230597/230597 fqs=5329
      rcu:  (t=15004 jiffies g=26003221 q=211022 ncpus=96)
      CPU: 24 UID: 0 PID: 11253 Comm: bash Kdump: loaded Tainted: G            EL      6.18.2+ #278 NONE
      pc : arch_local_irq_restore+0x8/0x20
       arch_local_irq_restore+0x8/0x20 (P)
       free_frozen_page_commit+0x28c/0x3b0
       __free_frozen_pages+0x1c0/0x678
       ___free_pages+0xc0/0xe0
       free_pages+0x3c/0x50
       ring_buffer_resize.part.0+0x6a8/0x880
       ring_buffer_resize+0x3c/0x58
       __tracing_resize_ring_buffer.part.0+0x34/0xd8
       tracing_resize_ring_buffer+0x8c/0xd0
       tracing_entries_write+0x74/0xd8
       vfs_write+0xcc/0x288
       ksys_write+0x74/0x118
       __arm64_sys_write+0x24/0x38
    
    Cc: <mathieu.desnoyers@efficios.com>
    Link: https://patch.msgid.link/20251228065008.2396573-1-mawupeng1@huawei.com
    Signed-off-by: Wupeng Ma <mawupeng1@huawei.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
sched/rt: Fix race in push_rt_task [+ + +]
Author: Harshit Agarwal <harshit@nutanix.com>
Date:   Tue Feb 25 18:05:53 2025 +0000

    sched/rt: Fix race in push_rt_task
    
    commit 690e47d1403e90b7f2366f03b52ed3304194c793 upstream.
    
    Overview
    ========
    When a CPU chooses to call push_rt_task and picks a task to push to
    another CPU's runqueue then it will call find_lock_lowest_rq method
    which would take a double lock on both CPUs' runqueues. If one of the
    locks aren't readily available, it may lead to dropping the current
    runqueue lock and reacquiring both the locks at once. During this window
    it is possible that the task is already migrated and is running on some
    other CPU. These cases are already handled. However, if the task is
    migrated and has already been executed and another CPU is now trying to
    wake it up (ttwu) such that it is queued again on the runqeue
    (on_rq is 1) and also if the task was run by the same CPU, then the
    current checks will pass even though the task was migrated out and is no
    longer in the pushable tasks list.
    
    Crashes
    =======
    This bug resulted in quite a few flavors of crashes triggering kernel
    panics with various crash signatures such as assert failures, page
    faults, null pointer dereferences, and queue corruption errors all
    coming from scheduler itself.
    
    Some of the crashes:
    -> kernel BUG at kernel/sched/rt.c:1616! BUG_ON(idx >= MAX_RT_PRIO)
       Call Trace:
       ? __die_body+0x1a/0x60
       ? die+0x2a/0x50
       ? do_trap+0x85/0x100
       ? pick_next_task_rt+0x6e/0x1d0
       ? do_error_trap+0x64/0xa0
       ? pick_next_task_rt+0x6e/0x1d0
       ? exc_invalid_op+0x4c/0x60
       ? pick_next_task_rt+0x6e/0x1d0
       ? asm_exc_invalid_op+0x12/0x20
       ? pick_next_task_rt+0x6e/0x1d0
       __schedule+0x5cb/0x790
       ? update_ts_time_stats+0x55/0x70
       schedule_idle+0x1e/0x40
       do_idle+0x15e/0x200
       cpu_startup_entry+0x19/0x20
       start_secondary+0x117/0x160
       secondary_startup_64_no_verify+0xb0/0xbb
    
    -> BUG: kernel NULL pointer dereference, address: 00000000000000c0
       Call Trace:
       ? __die_body+0x1a/0x60
       ? no_context+0x183/0x350
       ? __warn+0x8a/0xe0
       ? exc_page_fault+0x3d6/0x520
       ? asm_exc_page_fault+0x1e/0x30
       ? pick_next_task_rt+0xb5/0x1d0
       ? pick_next_task_rt+0x8c/0x1d0
       __schedule+0x583/0x7e0
       ? update_ts_time_stats+0x55/0x70
       schedule_idle+0x1e/0x40
       do_idle+0x15e/0x200
       cpu_startup_entry+0x19/0x20
       start_secondary+0x117/0x160
       secondary_startup_64_no_verify+0xb0/0xbb
    
    -> BUG: unable to handle page fault for address: ffff9464daea5900
       kernel BUG at kernel/sched/rt.c:1861! BUG_ON(rq->cpu != task_cpu(p))
    
    -> kernel BUG at kernel/sched/rt.c:1055! BUG_ON(!rq->nr_running)
       Call Trace:
       ? __die_body+0x1a/0x60
       ? die+0x2a/0x50
       ? do_trap+0x85/0x100
       ? dequeue_top_rt_rq+0xa2/0xb0
       ? do_error_trap+0x64/0xa0
       ? dequeue_top_rt_rq+0xa2/0xb0
       ? exc_invalid_op+0x4c/0x60
       ? dequeue_top_rt_rq+0xa2/0xb0
       ? asm_exc_invalid_op+0x12/0x20
       ? dequeue_top_rt_rq+0xa2/0xb0
       dequeue_rt_entity+0x1f/0x70
       dequeue_task_rt+0x2d/0x70
       __schedule+0x1a8/0x7e0
       ? blk_finish_plug+0x25/0x40
       schedule+0x3c/0xb0
       futex_wait_queue_me+0xb6/0x120
       futex_wait+0xd9/0x240
       do_futex+0x344/0xa90
       ? get_mm_exe_file+0x30/0x60
       ? audit_exe_compare+0x58/0x70
       ? audit_filter_rules.constprop.26+0x65e/0x1220
       __x64_sys_futex+0x148/0x1f0
       do_syscall_64+0x30/0x80
       entry_SYSCALL_64_after_hwframe+0x62/0xc7
    
    -> BUG: unable to handle page fault for address: ffff8cf3608bc2c0
       Call Trace:
       ? __die_body+0x1a/0x60
       ? no_context+0x183/0x350
       ? spurious_kernel_fault+0x171/0x1c0
       ? exc_page_fault+0x3b6/0x520
       ? plist_check_list+0x15/0x40
       ? plist_check_list+0x2e/0x40
       ? asm_exc_page_fault+0x1e/0x30
       ? _cond_resched+0x15/0x30
       ? futex_wait_queue_me+0xc8/0x120
       ? futex_wait+0xd9/0x240
       ? try_to_wake_up+0x1b8/0x490
       ? futex_wake+0x78/0x160
       ? do_futex+0xcd/0xa90
       ? plist_check_list+0x15/0x40
       ? plist_check_list+0x2e/0x40
       ? plist_del+0x6a/0xd0
       ? plist_check_list+0x15/0x40
       ? plist_check_list+0x2e/0x40
       ? dequeue_pushable_task+0x20/0x70
       ? __schedule+0x382/0x7e0
       ? asm_sysvec_reschedule_ipi+0xa/0x20
       ? schedule+0x3c/0xb0
       ? exit_to_user_mode_prepare+0x9e/0x150
       ? irqentry_exit_to_user_mode+0x5/0x30
       ? asm_sysvec_reschedule_ipi+0x12/0x20
    
    Above are some of the common examples of the crashes that were observed
    due to this issue.
    
    Details
    =======
    Let's look at the following scenario to understand this race.
    
    1) CPU A enters push_rt_task
      a) CPU A has chosen next_task = task p.
      b) CPU A calls find_lock_lowest_rq(Task p, CPU Z’s rq).
      c) CPU A identifies CPU X as a destination CPU (X < Z).
      d) CPU A enters double_lock_balance(CPU Z’s rq, CPU X’s rq).
      e) Since X is lower than Z, CPU A unlocks CPU Z’s rq. Someone else has
         locked CPU X’s rq, and thus, CPU A must wait.
    
    2) At CPU Z
      a) Previous task has completed execution and thus, CPU Z enters
         schedule, locks its own rq after CPU A releases it.
      b) CPU Z dequeues previous task and begins executing task p.
      c) CPU Z unlocks its rq.
      d) Task p yields the CPU (ex. by doing IO or waiting to acquire a
         lock) which triggers the schedule function on CPU Z.
      e) CPU Z enters schedule again, locks its own rq, and dequeues task p.
      f) As part of dequeue, it sets p.on_rq = 0 and unlocks its rq.
    
    3) At CPU B
      a) CPU B enters try_to_wake_up with input task p.
      b) Since CPU Z dequeued task p, p.on_rq = 0, and CPU B updates
         B.state = WAKING.
      c) CPU B via select_task_rq determines CPU Y as the target CPU.
    
    4) The race
      a) CPU A acquires CPU X’s lock and relocks CPU Z.
      b) CPU A reads task p.cpu = Z and incorrectly concludes task p is
         still on CPU Z.
      c) CPU A failed to notice task p had been dequeued from CPU Z while
         CPU A was waiting for locks in double_lock_balance. If CPU A knew
         that task p had been dequeued, it would return NULL forcing
         push_rt_task to give up the task p's migration.
      d) CPU B updates task p.cpu = Y and calls ttwu_queue.
      e) CPU B locks Ys rq. CPU B enqueues task p onto Y and sets task
         p.on_rq = 1.
      f) CPU B unlocks CPU Y, triggering memory synchronization.
      g) CPU A reads task p.on_rq = 1, cementing its assumption that task p
         has not migrated.
      h) CPU A decides to migrate p to CPU X.
    
    This leads to A dequeuing p from Y's queue and various crashes down the
    line.
    
    Solution
    ========
    The solution here is fairly simple. After obtaining the lock (at 4a),
    the check is enhanced to make sure that the task is still at the head of
    the pushable tasks list. If not, then it is anyway not suitable for
    being pushed out.
    
    Testing
    =======
    The fix is tested on a cluster of 3 nodes, where the panics due to this
    are hit every couple of days. A fix similar to this was deployed on such
    cluster and was stable for more than 30 days.
    
    Co-developed-by: Jon Kohler <jon@nutanix.com>
    Signed-off-by: Jon Kohler <jon@nutanix.com>
    Co-developed-by: Gauri Patwardhan <gauri.patwardhan@nutanix.com>
    Signed-off-by: Gauri Patwardhan <gauri.patwardhan@nutanix.com>
    Co-developed-by: Rahul Chunduru <rahul.chunduru@nutanix.com>
    Signed-off-by: Rahul Chunduru <rahul.chunduru@nutanix.com>
    Signed-off-by: Harshit Agarwal <harshit@nutanix.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: "Steven Rostedt (Google)" <rostedt@goodmis.org>
    Reviewed-by: Phil Auld <pauld@redhat.com>
    Tested-by: Will Ton <william.ton@nutanix.com>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20250225180553.167995-1-harshit@nutanix.com
    Signed-off-by: Rajani Kantha <681739313@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: target: iscsi: Fix use-after-free in iscsit_dec_conn_usage_count() [+ + +]
Author: Maurizio Lombardi <mlombard@redhat.com>
Date:   Mon Jan 12 17:53:51 2026 +0100

    scsi: target: iscsi: Fix use-after-free in iscsit_dec_conn_usage_count()
    
    [ Upstream commit 9411a89e9e7135cc459178fa77a3f1d6191ae903 ]
    
    In iscsit_dec_conn_usage_count(), the function calls complete() while
    holding the conn->conn_usage_lock. As soon as complete() is invoked, the
    waiter (such as iscsit_close_connection()) may wake up and proceed to free
    the iscsit_conn structure.
    
    If the waiter frees the memory before the current thread reaches
    spin_unlock_bh(), it results in a KASAN slab-use-after-free as the function
    attempts to release a lock within the already-freed connection structure.
    
    Fix this by releasing the spinlock before calling complete().
    
    Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
    Reported-by: Zhaojuan Guo <zguo@redhat.com>
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Link: https://patch.msgid.link/20260112165352.138606-2-mlombard@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

scsi: target: iscsi: Fix use-after-free in iscsit_dec_session_usage_count() [+ + +]
Author: Maurizio Lombardi <mlombard@redhat.com>
Date:   Mon Jan 12 17:53:52 2026 +0100

    scsi: target: iscsi: Fix use-after-free in iscsit_dec_session_usage_count()
    
    [ Upstream commit 84dc6037390b8607c5551047d3970336cb51ba9a ]
    
    In iscsit_dec_session_usage_count(), the function calls complete() while
    holding the sess->session_usage_lock. Similar to the connection usage count
    logic, the waiter signaled by complete() (e.g., in the session release
    path) may wake up and free the iscsit_session structure immediately.
    
    This creates a race condition where the current thread may attempt to
    execute spin_unlock_bh() on a session structure that has already been
    deallocated, resulting in a KASAN slab-use-after-free.
    
    To resolve this, release the session_usage_lock before calling complete()
    to ensure all dereferences of the sess pointer are finished before the
    waiter is allowed to proceed with deallocation.
    
    Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
    Reported-by: Zhaojuan Guo <zguo@redhat.com>
    Reviewed-by: Mike Christie <michael.christie@oracle.com>
    Link: https://patch.msgid.link/20260112165352.138606-3-mlombard@redhat.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb/client: fix memory leak in smb2_open_file() [+ + +]
Author: ChenXiaoSong <chenxiaosong@kylinos.cn>
Date:   Mon Feb 2 08:24:07 2026 +0000

    smb/client: fix memory leak in smb2_open_file()
    
    [ Upstream commit e3a43633023e3cacaca60d4b8972d084a2b06236 ]
    
    Reproducer:
    
      1. server: directories are exported read-only
      2. client: mount -t cifs //${server_ip}/export /mnt
      3. client: dd if=/dev/zero of=/mnt/file bs=512 count=1000 oflag=direct
      4. client: umount /mnt
      5. client: sleep 1
      6. client: modprobe -r cifs
    
    The error message is as follows:
    
      =============================================================================
      BUG cifs_small_rq (Not tainted): Objects remaining on __kmem_cache_shutdown()
      -----------------------------------------------------------------------------
    
      Object 0x00000000d47521be @offset=14336
      ...
      WARNING: mm/slub.c:1251 at __kmem_cache_shutdown+0x34e/0x440, CPU#0: modprobe/1577
      ...
      Call Trace:
       <TASK>
       kmem_cache_destroy+0x94/0x190
       cifs_destroy_request_bufs+0x3e/0x50 [cifs]
       cleanup_module+0x4e/0x540 [cifs]
       __se_sys_delete_module+0x278/0x400
       __x64_sys_delete_module+0x5f/0x70
       x64_sys_call+0x2299/0x2ff0
       do_syscall_64+0x89/0x350
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
      ...
      kmem_cache_destroy cifs_small_rq: Slab cache still has objects when called from cifs_destroy_request_bufs+0x3e/0x50 [cifs]
      WARNING: mm/slab_common.c:532 at kmem_cache_destroy+0x16b/0x190, CPU#0: modprobe/1577
    
    Link: https://lore.kernel.org/linux-cifs/9751f02d-d1df-4265-a7d6-b19761b21834@linux.dev/T/#mf14808c144448b715f711ce5f0477a071f08eaf6
    Fixes: e255612b5ed9 ("cifs: Add fallback for SMB2 CREATE without FILE_READ_ATTRIBUTES")
    Reported-by: Paulo Alcantara <pc@manguebit.org>
    Reviewed-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Reviewed-by: Pali Rohár <pali@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
smb/server: call ksmbd_session_rpc_close() on error path in create_smb2_pipe() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Sun Dec 28 22:51:01 2025 +0800

    smb/server: call ksmbd_session_rpc_close() on error path in create_smb2_pipe()
    
    [ Upstream commit 7c28f8eef5ac5312794d8a52918076dcd787e53b ]
    
    When ksmbd_iov_pin_rsp() fails, we should call ksmbd_session_rpc_close().
    
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb/server: fix refcount leak in parse_durable_handle_context() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Mon Dec 29 10:13:29 2025 +0800

    smb/server: fix refcount leak in parse_durable_handle_context()
    
    [ Upstream commit 3296c3012a9d9a27e81e34910384e55a6ff3cff0 ]
    
    When the command is a replay operation and -ENOEXEC is returned,
    the refcount of ksmbd_file must be released.
    
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

smb/server: fix refcount leak in smb2_open() [+ + +]
Author: ZhangGuoDong <zhangguodong@kylinos.cn>
Date:   Mon Dec 29 11:15:18 2025 +0800

    smb/server: fix refcount leak in smb2_open()
    
    [ Upstream commit f416c556997aa56ec4384c6b6efd6a0e6ac70aa7 ]
    
    When ksmbd_vfs_getattr() fails, the reference count of ksmbd_file
    must be released.
    
    Suggested-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: ZhangGuoDong <zhangguodong@kylinos.cn>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
spi: hisi-kunpeng: Fixed the wrong debugfs node name in hisi_spi debugfs initialization [+ + +]
Author: Devyn Liu <liudingyuan@h-partners.com>
Date:   Thu Jan 8 15:53:23 2026 +0800

    spi: hisi-kunpeng: Fixed the wrong debugfs node name in hisi_spi debugfs initialization
    
    [ Upstream commit b062a899c997df7b9ce29c62164888baa7a85833 ]
    
    In hisi_spi_debugfs_init, spi controller pointer is calculated
    by container_of macro, and the member is hs->dev. But the host
    cannot be calculated offset directly by this. (hs->dev) points
    to (pdev->dev), and it is the (host->dev.parent) rather than
    (host->dev) points to the (pdev->dev), which is set in
    __spi_alloc_controller.
    
    In this patch, this issues is fixed by getting the spi_controller
    data from pdev->dev by dev_get_drvdata() directly. (dev->driver_data)
    points to the spi controller data in the probe stage.
    
    Signed-off-by: Devyn Liu <liudingyuan@h-partners.com>
    Reviewed-by: Yang Shen <shenyang39@huawei.com>
    Link: https://patch.msgid.link/20260108075323.3831574-1-liudingyuan@h-partners.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra114: Preserve SPI mode bits in def_command1_reg [+ + +]
Author: Vishwaroop A <va@nvidia.com>
Date:   Wed Feb 4 14:12:12 2026 +0000

    spi: tegra114: Preserve SPI mode bits in def_command1_reg
    
    [ Upstream commit a0a75b40c919b9f6d3a0b6c978e6ccf344c1be5a ]
    
    The COMMAND1 register bits [29:28] set the SPI mode, which controls
    the clock idle level. When a transfer ends, tegra_spi_transfer_end()
    writes def_command1_reg back to restore the default state, but this
    register value currently lacks the mode bits. This results in the
    clock always being configured as idle low, breaking devices that
    need it high.
    
    Fix this by storing the mode bits in def_command1_reg during setup,
    to prevent this field from always being cleared.
    
    Fixes: f333a331adfa ("spi/tegra114: add spi driver")
    Signed-off-by: Vishwaroop A <va@nvidia.com>
    Link: https://patch.msgid.link/20260204141212.1540382-1-va@nvidia.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Move curr_xfer read inside spinlock [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:27 2026 -0800

    spi: tegra210-quad: Move curr_xfer read inside spinlock
    
    [ Upstream commit ef13ba357656451d6371940d8414e3e271df97e3 ]
    
    Move the assignment of the transfer pointer from curr_xfer inside the
    spinlock critical section in both handle_cpu_based_xfer() and
    handle_dma_based_xfer().
    
    Previously, curr_xfer was read before acquiring the lock, creating a
    window where the timeout path could clear curr_xfer between reading it
    and using it. By moving the read inside the lock, the handlers are
    guaranteed to see a consistent value that cannot be modified by the
    timeout path.
    
    Fixes: 921fc1838fb0 ("spi: tegra210-quad: Add support for Tegra210 QSPI controller")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-2-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Protect curr_xfer assignment in tegra_qspi_setup_transfer_one [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:28 2026 -0800

    spi: tegra210-quad: Protect curr_xfer assignment in tegra_qspi_setup_transfer_one
    
    [ Upstream commit f5a4d7f5e32ba163cff893493ec1cbb0fd2fb0d5 ]
    
    When the timeout handler processes a completed transfer and signals
    completion, the transfer thread can immediately set up the next transfer
    and assign curr_xfer to point to it.
    
    If a delayed ISR from the previous transfer then runs, it checks if
    (!tqspi->curr_xfer) (currently without the lock also -- to be fixed
    soon) to detect stale interrupts, but this check passes because
    curr_xfer now points to the new transfer. The ISR then incorrectly
    processes the new transfer's context.
    
    Protect the curr_xfer assignment with the spinlock to ensure the ISR
    either sees NULL (and bails out) or sees the new value only after the
    assignment is complete.
    
    Fixes: 921fc1838fb0 ("spi: tegra210-quad: Add support for Tegra210 QSPI controller")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-3-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Protect curr_xfer clearing in tegra_qspi_non_combined_seq_xfer [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:30 2026 -0800

    spi: tegra210-quad: Protect curr_xfer clearing in tegra_qspi_non_combined_seq_xfer
    
    [ Upstream commit 6d7723e8161f3c3f14125557e19dd080e9d882be ]
    
    Protect the curr_xfer clearing in tegra_qspi_non_combined_seq_xfer()
    with the spinlock to prevent a race with the interrupt handler that
    reads this field to check if a transfer is in progress.
    
    Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-5-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Protect curr_xfer in tegra_qspi_combined_seq_xfer [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:29 2026 -0800

    spi: tegra210-quad: Protect curr_xfer in tegra_qspi_combined_seq_xfer
    
    [ Upstream commit bf4528ab28e2bf112c3a2cdef44fd13f007781cd ]
    
    The curr_xfer field is read by the IRQ handler without holding the lock
    to check if a transfer is in progress. When clearing curr_xfer in the
    combined sequence transfer loop, protect it with the spinlock to prevent
    a race with the interrupt handler.
    
    Protect the curr_xfer clearing at the exit path of
    tegra_qspi_combined_seq_xfer() with the spinlock to prevent a race
    with the interrupt handler that reads this field.
    
    Without this protection, the IRQ handler could read a partially updated
    curr_xfer value, leading to NULL pointer dereference or use-after-free.
    
    Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-4-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra210-quad: Return IRQ_HANDLED when timeout already processed transfer [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Mon Jan 26 09:50:26 2026 -0800

    spi: tegra210-quad: Return IRQ_HANDLED when timeout already processed transfer
    
    [ Upstream commit aabd8ea0aa253d40cf5f20a609fc3d6f61e38299 ]
    
    When the ISR thread wakes up late and finds that the timeout handler
    has already processed the transfer (curr_xfer is NULL), return
    IRQ_HANDLED instead of IRQ_NONE.
    
    Use a similar approach to tegra_qspi_handle_timeout() by reading
    QSPI_TRANS_STATUS and checking the QSPI_RDY bit to determine if the
    hardware actually completed the transfer. If QSPI_RDY is set, the
    interrupt was legitimate and triggered by real hardware activity.
    The fact that the timeout path handled it first doesn't make it
    spurious. Returning IRQ_NONE incorrectly suggests the interrupt
    wasn't for this device, which can cause issues with shared interrupt
    lines and interrupt accounting.
    
    Fixes: b4e002d8a7ce ("spi: tegra210-quad: Fix timeout handling")
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Usama Arif <usamaarif642@gmail.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Jon Hunter <jonathanh@nvidia.com>
    Acked-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260126-tegra_xfer-v2-1-6d2115e4f387@debian.org
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

spi: tegra: Fix a memory leak in tegra_slink_probe() [+ + +]
Author: Felix Gu <ustc.gu@gmail.com>
Date:   Mon Feb 2 23:15:09 2026 +0800

    spi: tegra: Fix a memory leak in tegra_slink_probe()
    
    [ Upstream commit 41d9a6795b95d6ea28439ac1e9ce8c95bbca20fc ]
    
    In tegra_slink_probe(), when platform_get_irq() fails, it directly
    returns from the function with an error code, which causes a memory leak.
    
    Replace it with a goto label to ensure proper cleanup.
    
    Fixes: eb9913b511f1 ("spi: tegra: Fix missing IRQ check in tegra_slink_probe()")
    Signed-off-by: Felix Gu <ustc.gu@gmail.com>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Link: https://patch.msgid.link/20260202-slink-v1-1-eac50433a6f9@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tipc: use kfree_sensitive() for session key material [+ + +]
Author: Daniel Hodges <hodgesd@meta.com>
Date:   Sat Jan 31 10:01:14 2026 -0800

    tipc: use kfree_sensitive() for session key material
    
    [ Upstream commit 74d9391e8849e70ded5309222d09b0ed0edbd039 ]
    
    The rx->skey field contains a struct tipc_aead_key with GCM-AES
    encryption keys used for TIPC cluster communication. Using plain
    kfree() leaves this sensitive key material in freed memory pages
    where it could potentially be recovered.
    
    Switch to kfree_sensitive() to ensure the key material is zeroed
    before the memory is freed.
    
    Fixes: 1ef6f7c9390f ("tipc: add automatic session key exchange")
    Signed-off-by: Daniel Hodges <hodgesd@meta.com>
    Link: https://patch.msgid.link/20260131180114.2121438-1-hodgesd@meta.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
tracing: Fix ftrace event field alignments [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Sat Feb 7 11:52:19 2026 -0500

    tracing: Fix ftrace event field alignments
    
    [ Upstream commit 033c55fe2e326bea022c3cc5178ecf3e0e459b82 ]
    
    The fields of ftrace specific events (events used to save ftrace internal
    events like function traces and trace_printk) are generated similarly to
    how normal trace event fields are generated. That is, the fields are added
    to a trace_events_fields array that saves the name, offset, size,
    alignment and signness of the field. It is used to produce the output in
    the format file in tracefs so that tooling knows how to parse the binary
    data of the trace events.
    
    The issue is that some of the ftrace event structures are packed. The
    function graph exit event structures are one of them. The 64 bit calltime
    and rettime fields end up 4 byte aligned, but the algorithm to show to
    userspace shows them as 8 byte aligned.
    
    The macros that create the ftrace events has one for embedded structure
    fields. There's two macros for theses fields:
    
      __field_desc() and __field_packed()
    
    The difference of the latter macro is that it treats the field as packed.
    
    Rename that field to __field_desc_packed() and create replace the
    __field_packed() to be a normal field that is packed and have the calltime
    and rettime use those.
    
    This showed up on 32bit architectures for function graph time fields. It
    had:
    
     ~# cat /sys/kernel/tracing/events/ftrace/funcgraph_exit/format
    [..]
            field:unsigned long func;       offset:8;       size:4; signed:0;
            field:unsigned int depth;       offset:12;      size:4; signed:0;
            field:unsigned int overrun;     offset:16;      size:4; signed:0;
            field:unsigned long long calltime;      offset:24;      size:8; signed:0;
            field:unsigned long long rettime;       offset:32;      size:8; signed:0;
    
    Notice that overrun is at offset 16 with size 4, where in the structure
    calltime is at offset 20 (16 + 4), but it shows the offset at 24. That's
    because it used the alignment of unsigned long long when used as a
    declaration and not as a member of a structure where it would be aligned
    by word size (in this case 4).
    
    By using the proper structure alignment, the format has it at the correct
    offset:
    
     ~# cat /sys/kernel/tracing/events/ftrace/funcgraph_exit/format
    [..]
            field:unsigned long func;       offset:8;       size:4; signed:0;
            field:unsigned int depth;       offset:12;      size:4; signed:0;
            field:unsigned int overrun;     offset:16;      size:4; signed:0;
            field:unsigned long long calltime;      offset:20;      size:8; signed:0;
            field:unsigned long long rettime;       offset:28;      size:8; signed:0;
    
    Cc: stable@vger.kernel.org
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Reported-by: "jempty.liang" <imntjempty@163.com>
    Link: https://patch.msgid.link/20260204113628.53faec78@gandalf.local.home
    Fixes: 04ae87a52074e ("ftrace: Rework event_create_dir()")
    Closes: https://lore.kernel.org/all/20260130015740.212343-1-imntjempty@163.com/
    Closes: https://lore.kernel.org/all/20260202123342.2544795-1-imntjempty@163.com/
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    [ adapted field types and macro arguments ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ublk: fix deadlock when reading partition table [+ + +]
Author: Ming Lei <ming.lei@redhat.com>
Date:   Fri Dec 12 22:34:15 2025 +0800

    ublk: fix deadlock when reading partition table
    
    commit c258f5c4502c9667bccf5d76fa731ab9c96687c1 upstream.
    
    When one process(such as udev) opens ublk block device (e.g., to read
    the partition table via bdev_open()), a deadlock[1] can occur:
    
    1. bdev_open() grabs disk->open_mutex
    2. The process issues read I/O to ublk backend to read partition table
    3. In __ublk_complete_rq(), blk_update_request() or blk_mq_end_request()
       runs bio->bi_end_io() callbacks
    4. If this triggers fput() on file descriptor of ublk block device, the
       work may be deferred to current task's task work (see fput() implementation)
    5. This eventually calls blkdev_release() from the same context
    6. blkdev_release() tries to grab disk->open_mutex again
    7. Deadlock: same task waiting for a mutex it already holds
    
    The fix is to run blk_update_request() and blk_mq_end_request() with bottom
    halves disabled. This forces blkdev_release() to run in kernel work-queue
    context instead of current task work context, and allows ublk server to make
    forward progress, and avoids the deadlock.
    
    Fixes: 71f28f3136af ("ublk_drv: add io_uring based userspace block driver")
    Link: https://github.com/ublk-org/ublksrv/issues/170 [1]
    Signed-off-by: Ming Lei <ming.lei@redhat.com>
    Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
    [axboe: rewrite comment in ublk]
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    [ The fix omits the change in __ublk_do_auto_buf_reg() since this function
      doesn't exist in Linux 6.6. ]
    Signed-off-by: Alva Lan <alvalan9@foxmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: cfg80211: Fix bitrate calculation overflow for HE rates [+ + +]
Author: Veerendranath Jakkam <veerendranath.jakkam@oss.qualcomm.com>
Date:   Fri Jan 9 20:30:04 2026 +0530

    wifi: cfg80211: Fix bitrate calculation overflow for HE rates
    
    [ Upstream commit a3034bf0746d88a00cceda9541534a5721445a24 ]
    
    An integer overflow occurs in cfg80211_calculate_bitrate_he() when
    calculating bitrates for high throughput HE configurations.
    For example, with 160 MHz bandwidth, HE-MCS 13, HE-NSS 4, and HE-GI 0,
    the multiplication (result * rate->nss) overflows the 32-bit 'result'
    variable before division by 8, leading to significantly underestimated
    bitrate values.
    
    The overflow occurs because the NSS multiplication operates on a 32-bit
    integer that cannot accommodate intermediate values exceeding
    4,294,967,295. When overflow happens, the value wraps around, producing
    incorrect bitrates for high MCS and NSS combinations.
    
    Fix this by utilizing the 64-bit 'tmp' variable for the NSS
    multiplication and subsequent divisions via do_div(). This approach
    preserves full precision throughout the entire calculation, with the
    final value assigned to 'result' only after completing all operations.
    
    Signed-off-by: Veerendranath Jakkam <veerendranath.jakkam@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260109-he_bitrate_overflow-v1-1-95575e466b6e@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: collect station statistics earlier when disconnect [+ + +]
Author: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
Date:   Mon Dec 22 10:29:07 2025 +0800

    wifi: mac80211: collect station statistics earlier when disconnect
    
    [ Upstream commit a203dbeeca15a9b924f0d51f510921f4bae96801 ]
    
    In __sta_info_destroy_part2(), station statistics are requested after the
    IEEE80211_STA_NONE -> IEEE80211_STA_NOTEXIST transition. This is
    problematic because the driver may be unable to handle the request due to
    the STA being in the NOTEXIST state (i.e. if the driver destroys the
    underlying data when transitioning to NOTEXIST).
    
    Move the statistics collection to before the state transition to avoid
    this issue.
    
    Signed-off-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
    Link: https://patch.msgid.link/20251222-mac80211-move-station-stats-collection-earlier-v1-1-12cd4e42c633@oss.qualcomm.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: correctly check if CSA is active [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Sun Jan 11 19:19:30 2026 +0200

    wifi: mac80211: correctly check if CSA is active
    
    [ Upstream commit db1d0b6ab11f612ea8a327663a578c8946efeee9 ]
    
    We are not adding an interface if an existing one is doing CSA.
    But the check won't work for MLO station interfaces, since for those,
    vif->bss_conf is zeroed out.
    Fix this by checking if any link of the vif has an active CSA.
    
    Reviewed-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20260111191912.7ceff62fc561.Ia38d27f42684d1cfd82d930d232bd5dea6ab9282@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice [+ + +]
Author: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Date:   Sun Jan 18 09:28:29 2026 +0200

    wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice
    
    [ Upstream commit 3f3d8ff31496874a69b131866f62474eb24ed20a ]
    
    In reconfig, in case the driver asks to disconnect during the reconfig,
    all the keys of the interface are marked as tainted.
    Then ieee80211_reenable_keys will loop over all the interface keys, and
    for each one it will
    a) increment crypto_tx_tailroom_needed_cnt
    b) call ieee80211_key_enable_hw_accel, which in turn will detect that
    this key is tainted, so it will mark it as "not in hardware", which is
    paired with crypto_tx_tailroom_needed_cnt incrementation, so we get two
    incrementations for each tainted key.
    Then we get a warning in ieee80211_free_keys.
    
    To fix it, don't increment the count in ieee80211_reenable_keys for
    tainted keys
    
    Reviewed-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
    Link: https://patch.msgid.link/20260118092821.4ca111fddcda.Id6e554f4b1c83760aa02d5a9e4e3080edb197aa2@changeid
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: mac80211: ocb: skip rx_no_sta when interface is not joined [+ + +]
Author: Moon Hee Lee <moonhee.lee.ca@gmail.com>
Date:   Mon Dec 15 19:59:32 2025 -0800

    wifi: mac80211: ocb: skip rx_no_sta when interface is not joined
    
    [ Upstream commit ff4071c60018a668249dc6a2df7d16330543540e ]
    
    ieee80211_ocb_rx_no_sta() assumes a valid channel context, which is only
    present after JOIN_OCB.
    
    RX may run before JOIN_OCB is executed, in which case the OCB interface
    is not operational. Skip RX peer handling when the interface is not
    joined to avoid warnings in the RX path.
    
    Reported-by: syzbot+b364457b2d1d4e4a3054@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b364457b2d1d4e4a3054
    Tested-by: syzbot+b364457b2d1d4e4a3054@syzkaller.appspotmail.com
    Signed-off-by: Moon Hee Lee <moonhee.lee.ca@gmail.com>
    Link: https://patch.msgid.link/20251216035932.18332-1-moonhee.lee.ca@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

wifi: wlcore: ensure skb headroom before skb_push [+ + +]
Author: Peter Åstrand <astrand@lysator.liu.se>
Date:   Wed Dec 3 08:57:08 2025 +0100

    wifi: wlcore: ensure skb headroom before skb_push
    
    [ Upstream commit e75665dd096819b1184087ba5718bd93beafff51 ]
    
    This avoids occasional skb_under_panic Oops from wl1271_tx_work. In this case, headroom is
    less than needed (typically 110 - 94 = 16 bytes).
    
    Signed-off-by: Peter Astrand <astrand@lysator.liu.se>
    Link: https://patch.msgid.link/097bd417-e1d7-acd4-be05-47b199075013@lysator.liu.se
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
x86/kfence: fix booting on 32bit non-PAE systems [+ + +]
Author: Andrew Cooper <andrew.cooper3@citrix.com>
Date:   Mon Jan 26 21:10:46 2026 +0000

    x86/kfence: fix booting on 32bit non-PAE systems
    
    commit 16459fe7e0ca6520a6e8f603de4ccd52b90fd765 upstream.
    
    The original patch inverted the PTE unconditionally to avoid
    L1TF-vulnerable PTEs, but Linux doesn't make this adjustment in 2-level
    paging.
    
    Adjust the logic to use the flip_protnone_guard() helper, which is a nop
    on 2-level paging but inverts the address bits in all other paging modes.
    
    This doesn't matter for the Xen aspect of the original change.  Linux no
    longer supports running 32bit PV under Xen, and Xen doesn't support
    running any 32bit PV guests without using PAE paging.
    
    Link: https://lkml.kernel.org/r/20260126211046.2096622-1-andrew.cooper3@citrix.com
    Fixes: b505f1944535 ("x86/kfence: avoid writing L1TF-vulnerable PTEs")
    Reported-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Closes: https://lore.kernel.org/lkml/CAKFNMokwjw68ubYQM9WkzOuH51wLznHpEOMSqtMoV1Rn9JV_gw@mail.gmail.com/
    Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
    Tested-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
    Tested-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Jann Horn <jannh@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>