Changelog in Linux kernel 6.1.184

 
9p: skip nlink update in cacheless mode to fix WARN_ON [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Sat Jul 25 10:12:14 2026 -0400

    9p: skip nlink update in cacheless mode to fix WARN_ON
    
    [ Upstream commit 574aa0b4799470ac814479f1138d19efe6262255 ]
    
    v9fs_dec_count() unconditionally calls drop_nlink() on regular files,
    even when the inode's nlink is already zero. In cacheless mode the
    client refetches inode metadata from the server (the source of truth)
    on every operation, so by the time v9fs_remove() returns, the locally
    cached nlink may already reflect the post-unlink value:
    
      1. Client initiates unlink, server processes it and sets nlink to 0
      2. Client refetches inode metadata (nlink=0) before unlink returns
      3. Client's v9fs_remove() completes successfully
      4. Client calls v9fs_dec_count() which calls drop_nlink() on nlink=0
    
    This race is easily triggered under heavy unlink workloads, such as
    stress-ng's unlink stressor, producing the following warning:
    
      WARNING: fs/inode.c:417 at drop_nlink+0x4c/0xc8
      Call trace:
       drop_nlink+0x4c/0xc8
       v9fs_remove+0x1e0/0x250 [9p]
       v9fs_vfs_unlink+0x20/0x38 [9p]
       vfs_unlink+0x13c/0x258
       ...
    
    In cacheless mode the server is authoritative and the inode is on its
    way out, so locally adjusting nlink buys nothing. Skip v9fs_dec_count()
    entirely when neither CACHE_META nor CACHE_LOOSE is set, which both
    avoids the warning and removes a class of nlink races (two concurrent
    unlinkers observing nlink > 0 and both calling drop_nlink()) that an
    nlink == 0 guard alone would only narrow rather than close.
    
    Fixes: ac89b2ef9b55 ("9p: don't maintain dir i_nlink if the exported fs doesn't either")
    Cc: stable@vger.kernel.org
    Suggested-by: Dominique Martinet <asmadeus@codewreck.org>
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Message-ID: <20260421-9p-v2-1-48762d294fad@debian.org>
    Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
    [ Adapted `v9ses->cache & (CACHE_META | CACHE_LOOSE)` bitmask test to the pre-bitmask exclusive enum form `v9ses->cache != CACHE_LOOSE && v9ses->cache != CACHE_FSCACHE`. ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
af_packet: Don't send zero-byte data in tpacket_snd(). [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Aug 10 15:04:47 2026 +0000

    af_packet: Don't send zero-byte data in tpacket_snd().
    
    [ Upstream commit 6bcd76c134c55c697148acb5c0194e9666abdf84 ]
    
    syzbot reported a WARNING in __dev_queue_xmit() triggered via tpacket_snd():
    
    skb_assert_len
    WARNING: at include/linux/skbuff.h:2753 skb_assert_len
    WARNING: at __dev_queue_xmit+0x21bc/0x4970 net/core/dev.c:4781
    
    Call Trace:
     <TASK>
     dev_queue_xmit include/linux/netdevice.h:3448 [inline]
     packet_xmit+0x243/0x310 net/packet/af_packet.c:276
     tpacket_snd net/packet/af_packet.c:2907 [inline]
     packet_sendmsg+0x28d6/0x4eb0 net/packet/af_packet.c:3134
    
    When sending 0-byte packets via TPACKET ring buffer on devices with no
    hard header (e.g. dev->hard_header_len == 0), tpacket_fill_skb()
    populates an skb with skb->len == 0 and returns 0. tpacket_snd() then
    forwards this empty skb to packet_xmit(), causing __dev_queue_xmit() to
    hit skb_assert_len(skb).
    
    Similar checks exist in packet_snd() via commit dc633700f00f
    ("net/af_packet: check len when min_header_len equals to 0") and in
    packet_sendmsg_spkt() via commit 6a341729fb31 ("af_packet: Don't send
    zero-byte data in packet_sendmsg_spkt().").
    
    Return -EINVAL in tpacket_fill_skb() when skb->len is zero to reject
    zero-length packets in tpacket_snd().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: syzbot+30b93b6845b19cc38581@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6a79e807.01d0871a.3a0d52.00ac.GAE@google.com/T/#u
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Link: https://patch.msgid.link/20260810150447.1220864-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ALSA: hda: codecs: hdmi: disable keep-alive before audio format change [+ + +]
Author: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Date:   Thu Aug 6 13:29:02 2026 -0400

    ALSA: hda: codecs: hdmi: disable keep-alive before audio format change
    
    [ Upstream commit a3d6d3cedfe87bbd5a677d52b22ac20d28e59cf8 ]
    
    When a keep-alive (KAE) silent stream is active on an Intel HDMI/DP
    codec, opening a real PCM stream reprograms the converter format and the
    audio infoframe in snd_hda_hdmi_generic_pcm_prepare(). Part of that
    reprogramming - the converter channel count and the channel mapping in
    snd_hda_hdmi_setup_audio_infoframe() - is not safe to do while a
    keep-alive stream is active. This is most visible when switching to a
    multichannel PCM configuration, where the active channel count actually
    changes. In that case the newly opened PCM stream plays no sound.
    
    Add an optional hdmi_ops .prepare hook, called at the start of the
    PCM prepare sequence (before the format and infoframe are touched), and
    implement it for HSW+ to release keep-alive. Keep-alive is then
    re-enabled as before once the new stream has been set up, in the
    setup_stream op.
    
    Fixes: 15175a4f2bbb ("ALSA: hda/hdmi: add keep-alive support for ADL-P and DG2")
    Reported-by: Alexander Kaplan <alexander.kaplan@sms-medipool.de>
    Closes: https://gitlab.freedesktop.org/drm/xe/kernel/-/work_items/8412
    Tested-by: Alexander Kaplan <alexander.kaplan@sms-medipool.de>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Link: https://patch.msgid.link/20260715180610.1371243-1-kai.vehmanen@linux.intel.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    [ adapted three hunks from the post-6.12 split files (hdmi.c/hdmi_local.h/intelhdmi.c) back into the monolithic sound/pci/hda/patch_hdmi.c, with the prepare hook un-indented one level since 6.12 uses plain mutex_lock() instead of scoped_guard() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda: conexant: Remove mic bias threshold override [+ + +]
Author: Zhang Heng <zhangheng@kylinos.cn>
Date:   Wed Jul 22 07:24:19 2026 -0400

    ALSA: hda: conexant: Remove mic bias threshold override
    
    [ Upstream commit f52524da7084c1a54683ae9fbc73e93fff19dd64 ]
    
    Remove the mic bias current comparator threshold override (NID 0x1c,
    verb 0x320, value 0x010) from Conexant codec driver.
    
    This override was originally intended to support volume up/down controls on
    headsets with inline remote controls, but it causes microphone detection
    failures on some headsets with impedance less than 1k ohm.
    
    After consulting with the vendor's engineers, it was confirmed that this
    setting is board-specific and should be handled by BIOS/firmware rather
    than the generic codec driver, especially since inline remote support
    is not currently implemented.
    
    Fixes: 7aeb25908648 ("ALSA: hda/conexant: Fix headset auto detect fail in cx8070 and SN6140")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhang Heng <zhangheng@kylinos.cn>
    Link: https://patch.msgid.link/20260713100329.306892-1-zhangheng@kylinos.cn
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ALSA: hda: Fix cached processing coefficient verbs [+ + +]
Author: Xu Rao <raoxu@uniontech.com>
Date:   Wed Jul 22 07:33:48 2026 -0400

    ALSA: hda: Fix cached processing coefficient verbs
    
    [ Upstream commit f67be28fdf8b5d31ac1cc1152bb17250f9f8f513 ]
    
    Intel HD Audio defines Coefficient Index and Processing Coefficient as
    separate audio widget controls in the Audio Widget Verb Definitions:
    Coefficient Index selects the coefficient slot, while Processing
    Coefficient accesses the value at the selected slot.
    
    hda_reg_read_coef() selects the slot with AC_VERB_SET_COEF_INDEX, but
    then uses AC_VERB_GET_COEF_INDEX for the value read.  That reads back the
    selected index instead of the coefficient value.  hda_reg_write_coef()
    has the same issue and builds the value write from AC_VERB_GET_COEF_INDEX
    instead of AC_VERB_SET_PROC_COEF.
    
    This only affects the regmap coefficient cache path used by codecs that
    set codec->cache_coef.  Direct coefficient helpers already use the normal
    SET_COEF_INDEX followed by GET_PROC_COEF or SET_PROC_COEF sequence, which
    is likely why this has not been noticed widely.
    
    Use AC_VERB_GET_PROC_COEF for cached coefficient reads and
    AC_VERB_SET_PROC_COEF for cached coefficient writes.
    
    Fixes: 40ba66a702b8 ("ALSA: hda - Add cache support for COEF read/write")
    Cc: stable@vger.kernel.org
    Signed-off-by: Xu Rao <raoxu@uniontech.com>
    Link: https://patch.msgid.link/DB9023BF2920BA99+20260707132419.1731342-1-raoxu@uniontech.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: tegra: Add EL2 virtual timer interrupt for Tegra194 [+ + +]
Author: Jon Hunter <jonathanh@nvidia.com>
Date:   Tue Jul 28 16:50:59 2026 +0100

    arm64: tegra: Add EL2 virtual timer interrupt for Tegra194
    
    [ Upstream commit a7c28483fd57dd0e1487024af70622315320774b ]
    
    Commit d87773de9efe ("clocksource/drivers/arm_arch_timer: Default to EL2
    virtual timer when running VHE") updated the ARM arch timer driver to
    use the virtual timer by default if the CPU is running at EL2 with VHE
    enabled. If the CPU is running at EL2 with VHE enabled but there is no
    interrupt provided for the virtual timer, then the following warning is
    displayed:
    
     arch_timer: [Firmware Bug]: VHE-capable CPU without EL2 virtual timer
      interrupt
    
    This warning is observed on Tegra194 platforms. Tegra194 SoC includes
    NVIDIA Carmel ARM v8.2 CPUs and support an EL2 virtual timer. Fix the
    above warning by adding the PPI for the EL2 virtual timer interrupt for
    Tegra194.
    
    Fixes: 5425fb15d8ee ("arm64: tegra: Add Tegra194 chip device tree")
    Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ASoC: codecs: lpass-wsa-macro: Fix enum kcontrol accesses [+ + +]
Author: Dawid Wróbel <me@dawidwrobel.com>
Date:   Thu Jul 30 12:58:13 2026 +0200

    ASoC: codecs: lpass-wsa-macro: Fix enum kcontrol accesses
    
    commit 56f24311fd5607588a47e44675195a9efb200f29 upstream.
    
    EAR SPKR PA Gain" and the four "WSA RX* Mux" controls are enumerated,
    but their get and put callbacks access the value through
    ucontrol->value.integer.value[0] (a long) instead of
    ucontrol->value.enumerated.item[0] (an unsigned int).
    
    This same pattern was fixed in the sibling drivers by
    commit bcfe5f76cc40 ("ASoC: codecs: rx-macro: fix accessing array
    out of bounds for enum type") and
    commit 0ea5eff7c606 ("ASoC: codecs: va-macro: fix accessing array
    out of bounds for enum type"), but wsa-macro was missed.
    
    On 64-bit kernels with CONFIG_SND_CTL_DEBUG this trips the elem value
    sanity check and every read of these controls fails with -EINVAL.
    
    Fixes: 809bcbcecebf ("ASoC: codecs: lpass-wsa-macro: Add support to WSA Macro")
    Fixes: 2c4066e5d428 ("ASoC: codecs: lpass-wsa-macro: add dapm widgets and route")
    Assisted-by: Claude:claude-fable-5
    Cc: stable@vger.kernel.org
    Signed-off-by: Dawid Wróbel <me@dawidwrobel.com>
    Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260730-worktree-lpass-tx-macro-enum-fix-v2-2-6d091c736116@dawidwrobel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: cs35l41: sort the register default table [+ + +]
Author: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Date:   Wed Aug 5 11:24:11 2026 +0300

    ASoC: cs35l41: sort the register default table
    
    commit d74aac116cfb2058b15df53996d23232b310f7ff upstream.
    
    reg_defaults must be sorted by ascending register address, as
    regcache_lookup_reg() locates entries in it with bsearch().  See commit
    fd80df352ba1 ("regcache: Add support for sorting defaults arrays").
    
    cs35l41_reg[] lists CS35L41_BSTCVRT_PEAK_CUR (0x3808) after
    CS35L41_BSTCVRT_COEFF (0x3810) and CS35L41_BSTCVRT_SLOPE_LBST (0x3814), so
    the binary search does not find those two entries.
    regcache_reg_needs_sync() then cannot compare them against their default
    and reports that a sync is needed, so they are written to the device on
    every regcache_sync() even when they were never touched.
    
    Sort the table by register address.
    
    Fixes: 5f2f539901b0 ("ASoC: cs35l41: Correct handling of some registers in the cache")
    Cc: stable@vger.kernel.org
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Reviewed-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Link: https://patch.msgid.link/20260805082413.26174-2-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: cs4265: sort the register default table [+ + +]
Author: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Date:   Wed Aug 5 11:24:13 2026 +0300

    ASoC: cs4265: sort the register default table
    
    commit e4fe3e046524e5de3c04c6eef3743780cbdc231c upstream.
    
    reg_defaults must be sorted by ascending register address, as
    regcache_lookup_reg() locates entries in it with bsearch().  See commit
    fd80df352ba1 ("regcache: Add support for sorting defaults arrays").
    
    cs4265_reg_defaults[] lists CS4265_INT_MASK (0x0e),
    CS4265_STATUS_MODE_MSB (0x0f) and CS4265_STATUS_MODE_LSB (0x10) after
    CS4265_SPDIF_CTL1 (0x11) and CS4265_SPDIF_CTL2 (0x12), so the binary search
    does not find those three entries.  regcache_reg_needs_sync() then cannot
    compare them against their default and reports that a sync is needed, so
    they are written to the device on every regcache_sync() even when they were
    never touched.
    
    Sort the table by register address.
    
    Fixes: fb6f806967f6 ("ASoC: Add support for the CS4265 CODEC")
    Cc: stable@vger.kernel.org
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Reviewed-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Link: https://patch.msgid.link/20260805082413.26174-4-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: fsl_sai: Fix spurious BCLK on resume by clearing BYP [+ + +]
Author: Chancel Liu <chancel.liu@nxp.com>
Date:   Sat Aug 8 07:12:42 2026 -0400

    ASoC: fsl_sai: Fix spurious BCLK on resume by clearing BYP
    
    [ Upstream commit d091132889c1378dd0944a72f86eae3e4da1e4fa ]
    
    When the BCLK divider ratio is 1:1, fsl_sai_set_bclk() enables bypass
    mode by setting BYP, but never clears the bit. The BYP=1 value remains
    in the regcache, and is restored by regcache_sync() on the next runtime
    resume.
    
    Since BYP=1 combined with BCD=1 immediately outputs the ungated MCLK
    as BCLK without waiting for BCE/TE/RE to be enabled, the clock is
    driven prematurely before the stream is fully configured, causing
    noise on some codecs.
    
    Fix this by clearing BYP and BCI in fsl_sai_hw_free() taking into
    account sync mode and the opposite stream's state, so that the regcache
    holds BYP=0 before runtime suspend and regcache_sync() on resume will
    not restore bypass mode prematurely.
    
    Fixes: a50b7926d015 ("ASoC: fsl_sai: implement 1:1 bclk:mclk ratio support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chancel Liu <chancel.liu@nxp.com>
    Reviewed-by: Shengjiu Wang <shengjiu.wang@gmail.com>
    Link: https://patch.msgid.link/20260710070835.3749817-1-chancel.liu@oss.nxp.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: mt8183: Check runtime resume during probe [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Wed Jul 22 22:58:19 2026 -0400

    ASoC: mediatek: mt8183: Check runtime resume during probe
    
    [ Upstream commit f0334fbfd107682d0c95f3f71e25f6127038e2b9 ]
    
    The MT8183 AFE probe uses pm_runtime_get_sync() before reading hardware
    defaults into the regmap cache, but does not check whether runtime resume
    failed. If regmap_reinit_cache() then fails, the temporary runtime PM
    usage count is also not released.
    
    Use pm_runtime_resume_and_get() so resume failures abort probe without
    leaking a usage count, and release the temporary reference before
    handling the regmap cache result.
    
    Fixes: a94aec035a12 ("ASoC: mediatek: mt8183: add platform driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Link: https://patch.msgid.link/20260527-asoc-mt8183-probe-cleanup-v1-2-4f4f5593c8d1@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: mt8192-afe-pcm: Convert to devm_pm_runtime_enable() [+ + +]
Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Date:   Thu Jul 23 07:37:03 2026 -0400

    ASoC: mediatek: mt8192-afe-pcm: Convert to devm_pm_runtime_enable()
    
    [ Upstream commit 7aaaa22de56ce0dae15fd9f42a69a1d1a7a6e078 ]
    
    Switch from pm_runtime_enable() to devm_pm_runtime_enable(), allowing
    to remove all gotos from the probe function.
    
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
    Link: https://msgid.link/r/20240313110147.1267793-2-angelogioacchino.delregno@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: e24d5dde56a5 ("ASoC: mediatek: mt8192: Check runtime resume during probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: mt8192-afe-pcm: Simplify probe() with local dev variable [+ + +]
Author: Tang Bin <tangbin@cmss.chinamobile.com>
Date:   Thu Jul 23 07:37:06 2026 -0400

    ASoC: mediatek: mt8192-afe-pcm: Simplify probe() with local dev variable
    
    [ Upstream commit 01981565c764c554cc96e2d30a71c42975171416 ]
    
    Simplify the function mt8192_afe_pcm_dev_probe() by
    using local 'dev' instead of '&pdev->dev'.
    
    Signed-off-by: Tang Bin <tangbin@cmss.chinamobile.com>
    Link: https://patch.msgid.link/20241025080026.2393-1-tangbin@cmss.chinamobile.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: e24d5dde56a5 ("ASoC: mediatek: mt8192: Check runtime resume during probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: mt8192-afe-pcm: Simplify with dev_err_probe() [+ + +]
Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Date:   Thu Jul 23 07:37:04 2026 -0400

    ASoC: mediatek: mt8192-afe-pcm: Simplify with dev_err_probe()
    
    [ Upstream commit 324c603a4efca7d1045e0bf3477ca54970eac72c ]
    
    Simplify the probe function by switching error prints to return
    dev_err_probe(), lowering the lines count; while at it, also
    beautify some messages and change some others' level from warn
    to error.
    
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Reviewed-by: Chen-Yu Tsai <wenst@chromium.org>
    Link: https://msgid.link/r/20240313110147.1267793-3-angelogioacchino.delregno@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: e24d5dde56a5 ("ASoC: mediatek: mt8192: Check runtime resume during probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: mt8192: Check runtime resume during probe [+ + +]
Author: Cássio Gabriel <cassiogabrielcontato@gmail.com>
Date:   Thu Jul 23 07:37:07 2026 -0400

    ASoC: mediatek: mt8192: Check runtime resume during probe
    
    [ Upstream commit e24d5dde56a50946020b134fa8448869093db76a ]
    
    The MT8192 AFE probe enables runtime PM temporarily while reinitializing
    the regmap cache from hardware, but it uses pm_runtime_get_sync()
    without checking the return value. If runtime resume fails, probe keeps
    going without the device necessarily being accessible, and
    pm_runtime_get_sync() may leave the PM usage count incremented.
    
    The regmap_reinit_cache() failure path also returns before dropping the
    temporary PM reference and before clearing pm_runtime_bypass_reg_ctl.
    
    Use pm_runtime_resume_and_get() so resume failures do not leak a usage
    count, and clear the temporary bypass flag after dropping the probe PM
    reference on all regmap_reinit_cache() outcomes.
    
    Fixes: 125ab5d588b0 ("ASoC: mediatek: mt8192: add platform driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Cássio Gabriel <cassiogabrielcontato@gmail.com>
    Link: https://patch.msgid.link/20260527-asoc-mt8192-probe-cleanup-v1-2-1bb834d05b72@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: mediatek: Use common mtk_afe_pcm_platform with common probe cb [+ + +]
Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Date:   Thu Jul 23 07:37:05 2026 -0400

    ASoC: mediatek: Use common mtk_afe_pcm_platform with common probe cb
    
    [ Upstream commit 1d2a6b3b5189b6c3e51f29e050aa9b2337b774e8 ]
    
    Since the mtk-afe-platform-driver generic mtk_afe_pcm_platform now has
    a common .probe() callback, there is no reason to keep duplicating this
    function over and over in the SoC specific AFE-PCM drivers: switch over
    to register with the common bits instead.
    
    Note that MT8186 was left out of this because it is registering some
    extra sinegen controls in the AFE-PCM probe callback and needs extra
    cleanups to be able to use the common bits.
    
    Reviewed-by: Alexandre Mergnat <amergnat@baylibre.com>
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Link: https://lore.kernel.org/r/20240416071410.75620-13-angelogioacchino.delregno@collabora.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Stable-dep-of: e24d5dde56a5 ("ASoC: mediatek: mt8192: Check runtime resume during probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: SOF: ipc3-control: Fix heap overflow in bytes_ext put/get [+ + +]
Author: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Date:   Thu Jul 23 07:36:47 2026 -0400

    ASoC: SOF: ipc3-control: Fix heap overflow in bytes_ext put/get
    
    [ Upstream commit fd46668d538993218eea19c6925c868ac0f2630c ]
    
    The ipc_control_data buffer is allocated as kzalloc(max_size), where
    max_size covers the entire struct sof_ipc_ctrl_data including its
    flexible array payload. However, the bounds checks in bytes_ext_put
    and _bytes_ext_get compared user data lengths against max_size
    directly, ignoring that cdata->data sits at an offset of
    sizeof(struct sof_ipc_ctrl_data) bytes into the allocation.
    
    This allowed writing up to sizeof(struct sof_ipc_ctrl_data) bytes past
    the end of the heap buffer from unprivileged userspace via the ALSA TLV
    kcontrol interface, and similarly allowed over-reading adjacent heap
    data on the get path.
    
    Fix all bounds checks to subtract sizeof(*cdata) from max_size so they
    reflect the actual space available at the cdata->data offset. Also fix
    the error-path restore in bytes_ext_put which wrote to cdata->data
    instead of cdata, causing the same overflow.
    
    Fixes: 67ec2a091630 ("ASoC: SOF: Add bytes_ext control IPC ops for IPC3")
    Cc: stable@vger.kernel.org
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
    Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
    Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://patch.msgid.link/20260609083458.31193-7-peter.ujfalusi@linux.intel.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    [ replicated the single shared-helper bounds-check fix into the two standalone get functions and dropped the err_restore memcpy hunk absent in 6.1 ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ASoC: xilinx: formatter_pcm: pass aud_drv_data to irq handlers [+ + +]
Author: Rosen Penev <rosenp@gmail.com>
Date:   Thu Aug 6 16:32:31 2026 -0700

    ASoC: xilinx: formatter_pcm: pass aud_drv_data to irq handlers
    
    [ Upstream commit f12afefb7b01f94d6d66d397f323a9914edbf70e ]
    
    The irq handlers take a struct device pointer and call
    dev_get_drvdata() to obtain the driver data.  However, the driver
    data is only set at the end of probe, after devm_request_irq(),
    so an interrupt taken in between causes the handlers to pass a
    NULL pointer to readl() and crash.
    
    Pass the private data directly as the devm_request_irq() argument
    instead of the device pointer, matching what the handlers expect.
    
    Fixes: 6f6c3c36f091 ("ASoC: xlnx: add pcm formatter platform driver")
    Assisted-by: opencode:deepseek-v4-flash-free
    Signed-off-by: Rosen Penev <rosenp@gmail.com>
    Reviewed-by: Michal Simek <michal.simek@amd.com>
    Link: https://patch.msgid.link/20260806233231.30631-1-rosenp@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ata: libata-core: Reject an invalid concurrent positioning ranges count [+ + +]
Author: Bryam Vargas <hexlabsecurity@proton.me>
Date:   Tue Jul 28 23:53:23 2026 -0400

    ata: libata-core: Reject an invalid concurrent positioning ranges count
    
    [ Upstream commit 533a0b940f901c15e5cbbd4b5d66e871c209e8ce ]
    
    ata_dev_config_cpr() takes the number of range descriptors from buf[0]
    of the concurrent positioning ranges log (up to 255), which the device
    reports independently of the log size in the GPL directory. The count is
    then walked at a fixed 32-byte stride in two places with no bound: the
    log read here, and the INQUIRY VPD page B9h emitter, which writes one
    descriptor per range into the fixed 2048-byte ata_scsi_rbuf. A device
    reporting a count larger than its own log overflows the read buffer (up
    to 7704 bytes past a 512-byte slab), and a count above 62 overflows the
    response buffer on the emit side.
    
    Bound the count once, on probe, against both the log the device returned
    and the number of descriptors the VPD B9h response buffer can hold
    (ATA_DEV_MAX_CPR, derived from the rbuf size). Reject an out-of-range
    count with a warning; this keeps the emitter in bounds with no separate
    change there.
    
    Suggested-by: Damien Le Moal <dlemoal@kernel.org>
    Fixes: fe22e1c2f705 ("libata: support concurrent positioning ranges log")
    Fixes: c745dfc541e7 ("libata: fix reading concurrent positioning ranges log")
    Cc: stable@vger.kernel.org
    Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
    Reviewed-by: Niklas Cassel <cassel@kernel.org>
    Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
audit: fix recursive locking deadlock in audit_dupe_exe() [+ + +]
Author: Ricardo Robaina <rrobaina@redhat.com>
Date:   Wed Jul 22 06:30:48 2026 -0400

    audit: fix recursive locking deadlock in audit_dupe_exe()
    
    [ Upstream commit 81905b5acbe77284734438df3fbec1158e6429a3 ]
    
    A deadlock occurs in the audit subsystem when duplicating
    executable-related rules.
    
    When a file is moved (e.g., via do_renameat2()), the VFS layer locks
    the parent directory (I_MUTEX_PARENT), which synchronously triggers an
    fsnotify_move event. If an existing executable audit rule matches the
    file being moved, the audit subsystem catches this event and calls
    audit_dupe_exe() to duplicate the watch and update the rule. Then,
    audit_alloc_mark() would call kern_path_parent() to resolve the path,
    leading to a blind attempt to acquire the exact same I_MUTEX_PARENT lock
    already held by the task, resulting in the following recursive locking
    deadlock:
    
     ============================================
     WARNING: possible recursive locking detected
     6.12.0-55.27.1.el10_0.x86_64+debug #1 Not tainted
     --------------------------------------------
     mv/5099 is trying to acquire lock:
     ffff888132845358 (&inode->i_sb->s_type->i_mutex_dir_key/1){+.+.}-{3:3},
     at: __kern_path_locked+0x10a/0x2f0
    
     but task is already holding lock:
     ffff888132846b58 (&inode->i_sb->s_type->i_mutex_dir_key/1){+.+.}-{3:3},
     at: lock_two_directories+0x13f/0x2b0
    
     other info that might help us debug this:
      Possible unsafe locking scenario:
    
            CPU0
            ----
       lock(&inode->i_sb->s_type->i_mutex_dir_key/1);
       lock(&inode->i_sb->s_type->i_mutex_dir_key/1);
    
      *** DEADLOCK ***
    
      May be due to missing lock nesting notation
    
      6 locks held by mv/5099:
      #0: ffff888112a9c440 (sb_writers#13)
      at: do_renameat2+0x34c/0xbc0
      #1: ffff888112a9c790 (&type->s_vfs_rename_key#3)
      at: do_renameat2+0x415/0xbc0
      #2: ffff888132846b58 (&inode->i_sb->s_type->i_mutex_dir_key/1)
      at: lock_two_directories+0x13f/0x2b0
      #3: ffff888132845358 (&inode->i_sb->s_type->i_mutex_dir_key/5)
      at: lock_two_directories+0x175/0x2b0
      #4: ffffffffb3a1fb10 (&fsnotify_mark_srcu)
      at: fsnotify+0x454/0x28a0
      #5: ffffffffaf886230 (audit_filter_mutex)
      at: audit_update_watch+0x36/0x11e0
    
     stack backtrace:
     Call Trace:
      <TASK>
      dump_stack_lvl+0x6f/0xb0
      print_deadlock_bug.cold+0xbd/0xca
      validate_chain+0x83a/0xf00
      __lock_acquire+0xcac/0x1d20
      lock_acquire.part.0+0x11b/0x360
      down_write_nested+0x9f/0x230
      __kern_path_locked+0x10a/0x2f0
      kern_path_locked+0x26/0x40
      audit_alloc_mark+0xfb/0x4f0
      audit_dupe_exe+0x6c/0xe0
      audit_dupe_rule+0x6c2/0xc00
      audit_update_watch+0x4cc/0x11e0
      audit_watch_handle_event+0x12c/0x1b0
      send_to_group+0x5d0/0x8b0
      fsnotify+0x615/0x28a0
      fsnotify_move+0x1d8/0x630
      vfs_rename+0xdcd/0x1df0
      do_renameat2+0x9d4/0xbc0
      __x64_sys_renameat+0x192/0x260
      do_syscall_64+0x92/0x180
      entry_SYSCALL_64_after_hwframe+0x76/0x7e
     RIP: 0033:0x7f0491fe8c4e
     Code: 0f 1f 40 00 48 8b 15 c1 e1 16 00 f7 d8 64 89 02 b8 ff ff ff ff
     c3 66 0f 1f 44 00 00 f3 0f 1e fa 49 89 ca b8 08 01 00 00 0f 05 <48>
     3d 00 f0 ff ff 77 0a c3 66 0f 1f 84 00 00 00 00 00 48 8b 15 89
     RSP: 002b:00007ffc7210bf38 EFLAGS: 00000246 ORIG_RAX: 0000000000000108
     RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f0491fe8c4e
     RDX: 0000000000000003 RSI: 00007ffc7210e6c8 RDI: 00000000ffffff9c
     RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000001
     R10: 00005575eb2dae2a R11: 0000000000000246 R12: 00005575eb2dae2a
     R13: 00007ffc7210e6c8 R14: 0000000000000003 R15: 00000000ffffff9c
      </TASK>
    
    The aforementioned deadlock can be consistently reproduced by running
    the script below:
    
     audit-dupe-exe-deadlock.sh
     --------------------------
     #!/bin/bash
     auditctl -D
     mkdir -p /tmp/foo
     touch /tmp/file
     auditctl -a always,exit -F exe=/tmp/file -F path=/tmp/file -S all -k dr
     mv /tmp/file /tmp/foo/file
     rm -Rf /tmp/foo
    
    This patch fixes the issue by introducing struct audit_watch_ctx to pass
    the fsnotify event context down to audit_alloc_mark(). By utilizing the
    already-resolved directory inode provided by the event, we bypass the
    kern_path_parent() path resolution entirely, safely avoiding the
    recursive lock. Furthermore, it explicitly allows duplicate fsnotify
    marks (allow_dups = 1) during the rename update, allowing the new rule's
    mark to safely coexist with the old rule's mark until the old rule is
    freed.
    
    P.S.: This issue was identified and reproduced during a comprehensive
    code coverage analysis of the audit subsystem. The full report is
    available at the link below:
    
    https://people.redhat.com/rrobaina/audit-code-coverage-analysis.pdf
    
    P.P.S: With the permission of both Ricardo and Nathan, I've squashed a
    fixup patch from Nathan that addresses a compile time error when
    CONFIG_AUDITSYSCALL=n.
    
    Cc: stable@kernel.org
    Fixes: 34d99af52ad4 ("audit: implement audit by executable")
    Acked-by: Waiman Long <longman@redhat.com>
    Acked-by: Richard Guy Briggs <rgb@redhat.com>
    Signed-off-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
    [PM: move link metadata into the msg, apply fix from NC]
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

audit: use 'unsigned int' instead of 'unsigned' [+ + +]
Author: Ricardo Robaina <rrobaina@redhat.com>
Date:   Wed Jul 22 06:30:47 2026 -0400

    audit: use 'unsigned int' instead of 'unsigned'
    
    [ Upstream commit 8b226771014beab1292081151a99530886ce54b4 ]
    
    Address checkpatch.pl warning below, across the audit subsystem:
    
      WARNING: Prefer 'unsigned int' to bare use of 'unsigned'
    
    Minor cleanup, no functional changes.
    
    Signed-off-by: Ricardo Robaina <rrobaina@redhat.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Stable-dep-of: 81905b5acbe7 ("audit: fix recursive locking deadlock in audit_dupe_exe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

audit: widen ino fields to u64 [+ + +]
Author: Jeff Layton <jlayton@kernel.org>
Date:   Wed Jul 22 06:30:46 2026 -0400

    audit: widen ino fields to u64
    
    [ Upstream commit 125dfa218134df7cc112667e92984de9d8cd0bf6 ]
    
    inode->i_ino is being widened from unsigned long to u64. The audit
    subsystem uses unsigned long ino in struct fields, function parameters,
    and local variables that store inode numbers from arbitrary filesystems.
    On 32-bit platforms this truncates inode numbers that exceed 32 bits,
    which will cause incorrect audit log entries and broken watch/mark
    comparisons.
    
    Widen all audit ino fields, parameters, and locals to u64, and update
    the inode format string from %lu to %llu to match.
    
    Signed-off-by: Jeff Layton <jlayton@kernel.org>
    Link: https://patch.msgid.link/20260304-iino-u64-v3-2-2257ad83d372@kernel.org
    Acked-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Stable-dep-of: 81905b5acbe7 ("audit: fix recursive locking deadlock in audit_dupe_exe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
binfmt_misc: restore write access when removing an entry [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Wed Aug 12 05:11:58 2026 -0400

    binfmt_misc: restore write access when removing an entry
    
    [ Upstream commit db1856ea9196cf6e015d12199a34c0b9313c7bfa ]
    
    Registering an entry with the MISC_FMT_OPEN_FILE flag opens the
    interpreter via open_exec() which denies write access to it for as
    long as the entry exists. Removing the entry closes the interpreter
    file via filp_close() but never restores write access, leaving the
    inode's i_writecount permanently negative. Opening the interpreter
    for writing keeps failing with ETXTBSY long after the entry is gone
    until the inode is evicted from the inode cache.
    
    Commit 90f601b497d7 ("binfmt_misc: restore write access before
    closing files opened by open_exec()") fixed the same imbalance in the
    error path of bm_register_write() but the actual removal path has
    been leaking the write denial since the introduction of the flag.
    
    Restore write access in put_binfmt_handler() before closing the
    interpreter file.
    
    Link: https://patch.msgid.link/20260710-work-binfmt_misc-locking-v3-1-a162f7cb58d6@kernel.org
    Fixes: 948b701a607f ("binfmt_misc: add persistent opened binary handler for containers")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

binfmt_misc: use exe_file_deny_write_access() for the interpreter clone [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Fri Jul 10 11:33:03 2026 +0200

    binfmt_misc: use exe_file_deny_write_access() for the interpreter clone
    
    commit fa5990ca8fd917003e526036bcc50413edb9722c upstream.
    
    For MISC_FMT_OPEN_FILE entries load_misc_binary() clones the
    registered interpreter file and denies write access to the clone via
    plain deny_write_access(). The clone is installed as
    bprm->interpreter and later released by the exec machinery through
    exe_file_allow_write_access() which skips the i_writecount increment
    for files with FMODE_FSNOTIFY_HSM set.
    
    The deny and allow side can therefore come to different conclusions
    when pre-content watches are in play: if a pre-content watch is added
    to the interpreter after registration every subsequent exec through
    that entry takes a write denial on the clone that is never paired
    with a write allowance, driving the interpreter inode's i_writecount
    further down with each exec and leaving the interpreter unwritable
    even after the entry and all its users are gone.
    
    Take the write denial via exe_file_deny_write_access() so both sides
    of the pairing base their decision on the same file mode, and
    propagate failure instead of silently ignoring it: an interpreter
    that is concurrently open for writing now fails the exec with
    ETXTBSY, exactly like an interpreter freshly opened via open_exec()
    would.
    
    Link: https://patch.msgid.link/20260710-work-binfmt_misc-locking-v3-2-a162f7cb58d6@kernel.org
    Fixes: 0357ef03c94e ("fs: don't block write during exec on pre-content watched files")
    Cc: stable@vger.kernel.org
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
block: stop the timeout timer when releasing a never added disk [+ + +]
Author: Chao Shi <coshi036@gmail.com>
Date:   Mon Jul 27 16:12:57 2026 -0400

    block: stop the timeout timer when releasing a never added disk
    
    [ Upstream commit 26cb8ebbfaf713c82e142d08828d4d765057633b ]
    
    disk_release() undoes blk_mq_init_allocated_queue() for a disk whose
    probe failed before add_disk(), but it only calls blk_mq_exit_queue().
    Nothing there stops q->timeout, and that timer rolls forward: it stays
    pending until it next expires, not until the last request completes.
    So if the driver issued any I/O before adding the disk, the
    request_queue is freed while still linked into a timer wheel bucket.
    
    Commit 6f8191fdf41d ("block: simplify disk shutdown") dropped the
    blk_cleanup_queue() call that used to stop it.  __del_gendisk() and
    blk_mq_destroy_queue() still do; only the probe failure path lost it.
    
    nvme gets there because nvme_update_ns_info() submits Report Zones or
    FDP io-mgmt-recv on ns->queue before the disk is added, so a later
    failure - a concurrent reset setting NVME_CTRL_FROZEN, or
    device_add_disk() failing - lands in put_disk() with the timer armed:
    
      BUG: KASAN: slab-use-after-free in detach_if_pending+0x30c/0x340
      Write of size 8 at addr ffff888004d71310 by task kworker/u8:2/37
       __timer_delete_sync+0x156/0x240 kernel/time/timer.c:1621
       blk_sync_queue+0x22/0x40 block/blk-core.c:222
       nvme_sync_queues+0x100/0x150 drivers/nvme/host/core.c:5362
       nvme_reset_work+0x138/0x930 drivers/nvme/host/pci.c:3264
    
      Allocated by task 34:
       __blk_mq_alloc_disk+0x33/0x100 block/blk-mq.c:4462
       nvme_alloc_ns+0x290/0x3870 drivers/nvme/host/core.c:4146
    
      Freed by task 0:
       blk_free_queue_rcu+0x3a/0x50 block/blk-core.c:254
       rcu_core+0xc10/0x1730 kernel/rcu/tree.c:2857
    
    The queue being synced there is ctrl->admin_q, only a victim sharing a
    timer wheel bucket with the freed queue's dangling entry; other runs
    tripped in enqueue_timer(), __run_timers() or blk_mq_timeout_work().
    Failing nvme_alloc_ns() with a debug patch makes it deterministic: one
    leaked timer trips KASAN within seconds, while 1987 patched releases
    produced no splat.
    
    Stop the timer and the queue work items before blk_mq_exit_queue(), like
    blk_mq_destroy_queue() does.
    
    Found by FuzzNvme.
    
    Fixes: 6f8191fdf41d ("block: simplify disk shutdown")
    Acked-by: Weidong Zhu <weizhu@fiu.edu>
    Signed-off-by: Chao Shi <coshi036@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://patch.msgid.link/20260727201257.211635-1-coshi036@gmail.com
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
 
Bluetooth: HCI: Remove HCI_AMP support [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Wed Jul 29 20:58:09 2026 -0400

    Bluetooth: HCI: Remove HCI_AMP support
    
    [ Upstream commit 84a4bb6548a29326564f0e659fb8064503ecc1c7 ]
    
    Since BT_HS has been remove HCI_AMP controllers no longer has any use so
    remove it along with the capability of creating AMP controllers.
    
    Since we no longer need to differentiate between AMP and Primary
    controllers, as only HCI_PRIMARY is left, this also remove
    hdev->dev_type altogether.
    
    Fixes: e7b02296fb40 ("Bluetooth: Remove BT_HS")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_conn, hci_sync: Use __counted_by() to avoid -Wfamnae warnings [+ + +]
Author: Gustavo A. R. Silva <gustavoars@kernel.org>
Date:   Tue Aug 11 07:17:26 2026 -0400

    Bluetooth: hci_conn, hci_sync: Use __counted_by() to avoid -Wfamnae warnings
    
    [ Upstream commit c4585edf708edb5277a3cc4b8581ccb833f3307d ]
    
    Prepare for the coming implementation by GCC and Clang of the
    __counted_by attribute. Flexible array members annotated with
    __counted_by can have their accesses bounds-checked at run-time
    via CONFIG_UBSAN_BOUNDS (for array indexing) and CONFIG_FORTIFY_SOURCE
    (for strcpy/memcpy-family functions).
    
    Also, -Wflex-array-member-not-at-end is coming in GCC-14, and we are
    getting ready to enable it globally.
    
    So, use the `DEFINE_FLEX()` helper for multiple on-stack definitions
    of a flexible structure where the size of the flexible-array member
    is known at compile-time, and refactor the rest of the code,
    accordingly.
    
    Notice that, due to the use of `__counted_by()` in `struct
    hci_cp_le_create_cis`, the for loop in function `hci_cs_le_create_cis()`
    had to be modified. Once the index `i`, through which `cp->cis[i]` is
    accessed, falls in the interval [0, cp->num_cis), `cp->num_cis` cannot
    be decremented all the way down to zero while accessing `cp->cis[]`:
    
    net/bluetooth/hci_event.c:4310:
    4310    for (i = 0; cp->num_cis; cp->num_cis--, i++) {
                    ...
    4314            handle = __le16_to_cpu(cp->cis[i].cis_handle);
    
    otherwise, only half (one iteration before `cp->num_cis == i`) or half
    plus one (one iteration before `cp->num_cis < i`) of the items in the
    array will be accessed before running into an out-of-bounds issue. So,
    in order to avoid this, set `cp->num_cis` to zero just after the for
    loop.
    
    Also, make use of `aux_num_cis` variable to update `cmd->num_cis` after
    a `list_for_each_entry_rcu()` loop.
    
    With these changes, fix the following warnings:
    net/bluetooth/hci_sync.c:1239:56: warning: structure containing a flexible
    array member is not at the end of another structure
    [-Wflex-array-member-not-at-end]
    net/bluetooth/hci_sync.c:1415:51: warning: structure containing a flexible
    array member is not at the end of another structure
    [-Wflex-array-member-not-at-end]
    net/bluetooth/hci_sync.c:1731:51: warning: structure containing a flexible
    array member is not at the end of another structure
    [-Wflex-array-member-not-at-end]
    net/bluetooth/hci_sync.c:6497:45: warning: structure containing a flexible
    array member is not at the end of another structure
    [-Wflex-array-member-not-at-end]
    
    Link: https://github.com/KSPP/linux/issues/202
    Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: cdc36db204ff ("Bluetooth: hci_sync: Fix advertising data UAFs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_core: Fix not handling hdev->le_num_of_adv_sets=1 [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Tue Aug 11 07:17:27 2026 -0400

    Bluetooth: hci_core: Fix not handling hdev->le_num_of_adv_sets=1
    
    [ Upstream commit e77f43d531af41e9ce299eab10dcae8fa5dbc293 ]
    
    If hdev->le_num_of_adv_sets is set to 1 it means that only handle 0x00
    can be used, but since the MGMT interface instances start from 1
    (instance 0 means all instances in case of MGMT_OP_REMOVE_ADVERTISING)
    the code needs to map the instance to handle otherwise users will not be
    able to advertise as instance 1 would attempt to use handle 0x01.
    
    Fixes: 1d0fac2c38ed ("Bluetooth: Use controller sets when available")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: cdc36db204ff ("Bluetooth: hci_sync: Fix advertising data UAFs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_sock: Prevent race in socket write iter and sock bind [+ + +]
Author: Edward Adam Davis <eadavis@qq.com>
Date:   Sun Nov 16 17:04:43 2025 +0800

    Bluetooth: hci_sock: Prevent race in socket write iter and sock bind
    
    commit 89bb613511cc21ed5ba6bddc1c9b9ae9c0dad392 upstream.
    
    There is a potential race condition between sock bind and socket write
    iter. bind may free the same cmd via mgmt_pending before write iter sends
    the cmd, just as syzbot reported in UAF[1].
    
    Here we use hci_dev_lock to synchronize the two, thereby avoiding the
    UAF mentioned in [1].
    
    [1]
    syzbot reported:
    BUG: KASAN: slab-use-after-free in mgmt_pending_remove+0x3b/0x210 net/bluetooth/mgmt_util.c:316
    Read of size 8 at addr ffff888077164818 by task syz.0.17/5989
    Call Trace:
     mgmt_pending_remove+0x3b/0x210 net/bluetooth/mgmt_util.c:316
     set_link_security+0x5c2/0x710 net/bluetooth/mgmt.c:1918
     hci_mgmt_cmd+0x9c9/0xef0 net/bluetooth/hci_sock.c:1719
     hci_sock_sendmsg+0x6ca/0xef0 net/bluetooth/hci_sock.c:1839
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg+0x21c/0x270 net/socket.c:742
     sock_write_iter+0x279/0x360 net/socket.c:1195
    
    Allocated by task 5989:
     mgmt_pending_add+0x35/0x140 net/bluetooth/mgmt_util.c:296
     set_link_security+0x557/0x710 net/bluetooth/mgmt.c:1910
     hci_mgmt_cmd+0x9c9/0xef0 net/bluetooth/hci_sock.c:1719
     hci_sock_sendmsg+0x6ca/0xef0 net/bluetooth/hci_sock.c:1839
     sock_sendmsg_nosec net/socket.c:727 [inline]
     __sock_sendmsg+0x21c/0x270 net/socket.c:742
     sock_write_iter+0x279/0x360 net/socket.c:1195
    
    Freed by task 5991:
     mgmt_pending_free net/bluetooth/mgmt_util.c:311 [inline]
     mgmt_pending_foreach+0x30d/0x380 net/bluetooth/mgmt_util.c:257
     mgmt_index_removed+0x112/0x2f0 net/bluetooth/mgmt.c:9477
     hci_sock_bind+0xbe9/0x1000 net/bluetooth/hci_sock.c:1314
    
    Fixes: 6fe26f694c82 ("Bluetooth: MGMT: Protect mgmt_pending list with its own lock")
    Reported-by: syzbot+9aa47cd4633a3cf92a80@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9aa47cd4633a3cf92a80
    Tested-by: syzbot+9aa47cd4633a3cf92a80@syzkaller.appspotmail.com
    Signed-off-by: Edward Adam Davis <eadavis@qq.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_sync: call destroy in hci_cmd_sync_run if immediate [+ + +]
Author: Pauli Virtanen <pav@iki.fi>
Date:   Wed Mar 25 21:07:46 2026 +0200

    Bluetooth: hci_sync: call destroy in hci_cmd_sync_run if immediate
    
    commit a834a0b66ec6fb743377201a0f4229bb2503f4ce upstream.
    
    hci_cmd_sync_run() may run the work immediately if called from existing
    sync work (otherwise it queues a new sync work). In this case it fails
    to call the destroy() function.
    
    On immediate run, make it behave same way as if item was queued
    successfully: call destroy, and return 0.
    
    The only callsite is hci_abort_conn() via hci_cmd_sync_run_once(), and
    this changes its return value. However, its return value is not used
    except as the return value for hci_disconnect(), and nothing uses the
    return value of hci_disconnect(). Hence there should be no behavior
    change anywhere.
    
    Fixes: c898f6d7b093b ("Bluetooth: hci_sync: Introduce hci_cmd_sync_run/hci_cmd_sync_run_once")
    Signed-off-by: Pauli Virtanen <pav@iki.fi>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_sync: Fix advertising data UAFs [+ + +]
Author: Chengfeng Ye <nicoyip.dev@gmail.com>
Date:   Tue Aug 11 07:17:28 2026 -0400

    Bluetooth: hci_sync: Fix advertising data UAFs
    
    [ Upstream commit cdc36db204ffd97b947d64374cf23a210dc74777 ]
    
    hci_find_adv_instance() returns an adv_info pointer that is valid only
    while hdev->lock is held.  The advertising command-sync paths perform
    instance lookups without that lock and, in some cases, retain the pointer
    while waiting for a controller response.
    
    An advertising termination event can therefore interleave as follows:
    
      hci_cmd_sync_work                 hci_rx_work
      hci_find_adv_instance()
      __hci_cmd_sync_status()
        wait for controller reply       hci_dev_lock()
                                        hci_remove_adv_instance()
                                          kfree(adv)
      adv->scan_rsp_changed = false
    
    KASAN reported:
    
      BUG: KASAN: slab-use-after-free in hci_set_ext_scan_rsp_data_sync+0x2e1/0x300
      Write of size 1 at addr ffff88810a45d21d by task kworker/u17:0/88
      Workqueue: hci0 hci_cmd_sync_work
      Call Trace:
       hci_set_ext_scan_rsp_data_sync+0x2e1/0x300
       hci_schedule_adv_instance_sync+0x390/0x4c0
       hci_cmd_sync_work+0x173/0x300
      Allocated by task 87:
       hci_add_adv_instance+0x538/0xac0
       add_advertising+0x885/0x1160
      Freed by task 89:
       kfree+0x131/0x3c0
       hci_remove_adv_instance+0x1d8/0x3b0
       hci_le_ext_adv_term_evt+0x17b/0x730
    
    Protect the instance lookup and payload construction in the extended
    advertising, scan response, and periodic advertising data paths.  Snapshot
    the advertising parameters under hdev->lock, but release the lock before
    waiting for the controller.
    
    Clear advertising-data dirty bits before issuing their commands and
    restore them after a failure using a fresh lookup.  Likewise, update the
    reported transmit power through a fresh lookup after the parameter command
    completes.  No adv_info pointer then survives an HCI command wait.
    
    Fixes: cba6b758711c ("Bluetooth: hci_sync: Make use of hci_cmd_sync_queue set 2")
    Cc: stable@vger.kernel.org
    Suggested-by: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
    Signed-off-by: Chengfeng Ye <nicoyip.dev@gmail.com>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_sync: Fix not using correct handle [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Wed May 15 10:32:01 2024 -0400

    Bluetooth: hci_sync: Fix not using correct handle
    
    commit 86fbd9f63a6b42b8f158361334f5a25762aea358 upstream.
    
    When setting up an advertisement the code shall always attempt to use
    the handle set by the instance since it may not be equal to the instance
    ID.
    
    Fixes: e77f43d531af ("Bluetooth: hci_core: Fix not handling hdev->le_num_of_adv_sets=1")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: hci_sync: Introduce hci_cmd_sync_run/hci_cmd_sync_run_once [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Aug 10 19:51:25 2026 -0400

    Bluetooth: hci_sync: Introduce hci_cmd_sync_run/hci_cmd_sync_run_once
    
    [ Upstream commit c898f6d7b093bd71e66569cd6797c87d4056f44b ]
    
    This introduces hci_cmd_sync_run/hci_cmd_sync_run_once which acts like
    hci_cmd_sync_queue/hci_cmd_sync_queue_once but runs immediately when
    already on hdev->cmd_sync_work context.
    
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: d0a7b48ad092 ("Bluetooth: mgmt: fix UAF in pair command cancellation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: mgmt: fix locking in unpair_device/disconnect_sync [+ + +]
Author: Pauli Virtanen <pav@iki.fi>
Date:   Fri Jul 10 11:23:41 2026 +0300

    Bluetooth: mgmt: fix locking in unpair_device/disconnect_sync
    
    commit 16cd66443957e4ad42155c6fec401012f600c6f8 upstream.
    
    Dereferencing RCU-protected pointers outside critical sections is
    invalid and may lead to UAF.
    
    Take hdev->lock for hci_conn lookup and hci_abort_conn().  Don't use RCU
    to ensure the conn is fully initialized at this point.
    
    Fixes: 227a0cdf4a028 ("Bluetooth: MGMT: Fix not generating command complete for MGMT_OP_DISCONNECT")
    Signed-off-by: Pauli Virtanen <pav@iki.fi>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: MGMT: Fix not generating command complete for MGMT_OP_DISCONNECT [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Aug 10 19:51:26 2026 -0400

    Bluetooth: MGMT: Fix not generating command complete for MGMT_OP_DISCONNECT
    
    [ Upstream commit 227a0cdf4a028a73dc256d0f5144b4808d718893 ]
    
    MGMT_OP_DISCONNECT can be called while mgmt_device_connected has not
    been called yet, which will cause the connection procedure to be
    aborted, so mgmt_device_disconnected shall still respond with command
    complete to MGMT_OP_DISCONNECT and just not emit
    MGMT_EV_DEVICE_DISCONNECTED since MGMT_EV_DEVICE_CONNECTED was never
    sent.
    
    To fix this MGMT_OP_DISCONNECT is changed to work similarly to other
    command which do use hci_cmd_sync_queue and then use hci_conn_abort to
    disconnect and returns the result, in order for hci_conn_abort to be
    used from hci_cmd_sync context it now uses hci_cmd_sync_run_once.
    
    Link: https://github.com/bluez/bluez/issues/932
    Fixes: 12d4a3b2ccb3 ("Bluetooth: Move check for MGMT_CONNECTED flag into mgmt.c")
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: d0a7b48ad092 ("Bluetooth: mgmt: fix UAF in pair command cancellation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: mgmt: fix pending command UAF in EIR updates [+ + +]
Author: Zihan Xi <zihanx@nebusec.ai>
Date:   Fri Jul 24 00:43:46 2026 +0800

    Bluetooth: mgmt: fix pending command UAF in EIR updates
    
    commit 8f2f62855a41d1730fb9e8122912bd2c8d6bed5d upstream.
    
    MGMT_OP_SET_LOCAL_NAME is handled asynchronously on powered controllers
    and can run set_name_sync().  When the controller is BR/EDR capable,
    set_name_sync() updates the local name and then rebuilds EIR data through
    eir_create().  The EIR builder walks hdev->uuids, but the UUID list can
    be changed and entries can be freed by MGMT_OP_ADD_UUID and
    MGMT_OP_REMOVE_UUID.
    
    pending_eir_or_class() is meant to serialize management commands that
    can change EIR or the class of device, but it did not include
    MGMT_OP_SET_LOCAL_NAME.  In addition, it walked hdev->mgmt_pending
    without hdev->mgmt_pending_lock even though pending commands are added
    and removed under that mutex.  A racing command completion can therefore
    remove and free a pending command while pending_eir_or_class() is still
    inspecting it, leading to a use-after-free in the pending-command list or
    allowing a local name update to rebuild EIR while UUID entries are being
    removed.
    
    Take hdev->mgmt_pending_lock while scanning hdev->mgmt_pending and treat
    MGMT_OP_SET_LOCAL_NAME as an EIR/class-affecting pending command on the
    powered asynchronous path.  Check for a conflicting pending command before
    copying the new short name so a rejected SET_LOCAL_NAME request does not
    modify hdev->short_name.
    
    Fixes: 6fe26f694c82 ("Bluetooth: MGMT: Protect mgmt_pending list with its own lock")
    Cc: stable@vger.kernel.org
    Reported-by: Vega <vega@nebusec.ai>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Zihan Xi <zihanx@nebusec.ai>
    Signed-off-by: Ren Wei <enjou1224z@gmail.com>
    Reported-by: Vega <vega@nebusec.ai>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: mgmt: fix UAF in pair command cancellation [+ + +]
Author: Zihan Xi <xizh2024@lzu.edu.cn>
Date:   Mon Aug 10 19:51:29 2026 -0400

    Bluetooth: mgmt: fix UAF in pair command cancellation
    
    [ Upstream commit d0a7b48ad0921bd88effaee10bf970ab1d5d0ddd ]
    
    The pairing completion and authentication failure callbacks look up the
    pending MGMT_OP_PAIR_DEVICE command by walking hdev->mgmt_pending. The
    lookup returned a command that was still linked on the shared pending list,
    without keeping mgmt_pending_lock held for the later dereference and
    removal.
    
    A concurrent MGMT_OP_CANCEL_PAIR_DEVICE request can remove and free the
    same pending command before the callback uses it. The reverse race is also
    possible when cancel_pair_device() gets a command from pending_find() and a
    callback removes it before the cancel path dereferences it. This can lead
    to a use-after-free and a second list_del().
    
    Make the pairing lookup helpers transfer ownership of the pending command
    by removing it from hdev->mgmt_pending while holding mgmt_pending_lock.
    The callbacks and cancel path then complete the command and free it
    directly, so racing paths cannot find or free the same command again. Take
    a temporary hci_conn reference in cancel_pair_device() because the command
    completion drops the reference stored in the pending command.
    
    Fixes: e9a416b5ce0c ("Bluetooth: Add mgmt_pair_device command")
    Cc: stable@vger.kernel.org
    Reported-by: Vega <vega@nebusec.ai>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Zihan Xi <xizh2024@lzu.edu.cn>
    Reviewed-by: Ren Wei <enjou1224z@gmail.com>
    Reported-by: Vega <vega@nebusec.ai>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: MGMT: Protect mgmt_pending list with its own lock [+ + +]
Author: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Date:   Mon Aug 10 19:51:28 2026 -0400

    Bluetooth: MGMT: Protect mgmt_pending list with its own lock
    
    [ Upstream commit 6fe26f694c824b8a4dbf50c635bee1302e3f099c ]
    
    This uses a mutex to protect from concurrent access of mgmt_pending
    list which can cause crashes like:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in hci_sock_get_channel+0x60/0x68 net/bluetooth/hci_sock.c:91
    Read of size 2 at addr ffff0000c48885b2 by task syz.4.334/7318
    
    CPU: 0 UID: 0 PID: 7318 Comm: syz.4.334 Not tainted 6.15.0-rc7-syzkaller-g187899f4124a #0 PREEMPT
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/12/2025
    Call trace:
     show_stack+0x2c/0x3c arch/arm64/kernel/stacktrace.c:466 (C)
     __dump_stack+0x30/0x40 lib/dump_stack.c:94
     dump_stack_lvl+0xd8/0x12c lib/dump_stack.c:120
     print_address_description+0xa8/0x254 mm/kasan/report.c:408
     print_report+0x68/0x84 mm/kasan/report.c:521
     kasan_report+0xb0/0x110 mm/kasan/report.c:634
     __asan_report_load2_noabort+0x20/0x2c mm/kasan/report_generic.c:379
     hci_sock_get_channel+0x60/0x68 net/bluetooth/hci_sock.c:91
     mgmt_pending_find+0x7c/0x140 net/bluetooth/mgmt_util.c:223
     pending_find net/bluetooth/mgmt.c:947 [inline]
     remove_adv_monitor+0x44/0x1a4 net/bluetooth/mgmt.c:5445
     hci_mgmt_cmd+0x780/0xc00 net/bluetooth/hci_sock.c:1712
     hci_sock_sendmsg+0x544/0xbb0 net/bluetooth/hci_sock.c:1832
     sock_sendmsg_nosec net/socket.c:712 [inline]
     __sock_sendmsg net/socket.c:727 [inline]
     sock_write_iter+0x25c/0x378 net/socket.c:1131
     new_sync_write fs/read_write.c:591 [inline]
     vfs_write+0x62c/0x97c fs/read_write.c:684
     ksys_write+0x120/0x210 fs/read_write.c:736
     __do_sys_write fs/read_write.c:747 [inline]
     __se_sys_write fs/read_write.c:744 [inline]
     __arm64_sys_write+0x7c/0x90 fs/read_write.c:744
     __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
     invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:49
     el0_svc_common+0x130/0x23c arch/arm64/kernel/syscall.c:132
     do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:151
     el0_svc+0x58/0x17c arch/arm64/kernel/entry-common.c:767
     el0t_64_sync_handler+0x78/0x108 arch/arm64/kernel/entry-common.c:786
     el0t_64_sync+0x198/0x19c arch/arm64/kernel/entry.S:600
    
    Allocated by task 7037:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x40/0x78 mm/kasan/common.c:68
     kasan_save_alloc_info+0x44/0x54 mm/kasan/generic.c:562
     poison_kmalloc_redzone mm/kasan/common.c:377 [inline]
     __kasan_kmalloc+0x9c/0xb4 mm/kasan/common.c:394
     kasan_kmalloc include/linux/kasan.h:260 [inline]
     __do_kmalloc_node mm/slub.c:4327 [inline]
     __kmalloc_noprof+0x2fc/0x4c8 mm/slub.c:4339
     kmalloc_noprof include/linux/slab.h:909 [inline]
     sk_prot_alloc+0xc4/0x1f0 net/core/sock.c:2198
     sk_alloc+0x44/0x3ac net/core/sock.c:2254
     bt_sock_alloc+0x4c/0x300 net/bluetooth/af_bluetooth.c:148
     hci_sock_create+0xa8/0x194 net/bluetooth/hci_sock.c:2202
     bt_sock_create+0x14c/0x24c net/bluetooth/af_bluetooth.c:132
     __sock_create+0x43c/0x91c net/socket.c:1541
     sock_create net/socket.c:1599 [inline]
     __sys_socket_create net/socket.c:1636 [inline]
     __sys_socket+0xd4/0x1c0 net/socket.c:1683
     __do_sys_socket net/socket.c:1697 [inline]
     __se_sys_socket net/socket.c:1695 [inline]
     __arm64_sys_socket+0x7c/0x94 net/socket.c:1695
     __invoke_syscall arch/arm64/kernel/syscall.c:35 [inline]
     invoke_syscall+0x98/0x2b8 arch/arm64/kernel/syscall.c:49
     el0_svc_common+0x130/0x23c arch/arm64/kernel/syscall.c:132
     do_el0_svc+0x48/0x58 arch/arm64/kernel/syscall.c:151
     el0_svc+0x58/0x17c arch/arm64/kernel/entry-common.c:767
     el0t_64_sync_handler+0x78/0x108 arch/arm64/kernel/entry-common.c:786
     el0t_64_sync+0x198/0x19c arch/arm64/kernel/entry.S:600
    
    Freed by task 6607:
     kasan_save_stack mm/kasan/common.c:47 [inline]
     kasan_save_track+0x40/0x78 mm/kasan/common.c:68
     kasan_save_free_info+0x58/0x70 mm/kasan/generic.c:576
     poison_slab_object mm/kasan/common.c:247 [inline]
     __kasan_slab_free+0x68/0x88 mm/kasan/common.c:264
     kasan_slab_free include/linux/kasan.h:233 [inline]
     slab_free_hook mm/slub.c:2380 [inline]
     slab_free mm/slub.c:4642 [inline]
     kfree+0x17c/0x474 mm/slub.c:4841
     sk_prot_free net/core/sock.c:2237 [inline]
     __sk_destruct+0x4f4/0x760 net/core/sock.c:2332
     sk_destruct net/core/sock.c:2360 [inline]
     __sk_free+0x320/0x430 net/core/sock.c:2371
     sk_free+0x60/0xc8 net/core/sock.c:2382
     sock_put include/net/sock.h:1944 [inline]
     mgmt_pending_free+0x88/0x118 net/bluetooth/mgmt_util.c:290
     mgmt_pending_remove+0xec/0x104 net/bluetooth/mgmt_util.c:298
     mgmt_set_powered_complete+0x418/0x5cc net/bluetooth/mgmt.c:1355
     hci_cmd_sync_work+0x204/0x33c net/bluetooth/hci_sync.c:334
     process_one_work+0x7e8/0x156c kernel/workqueue.c:3238
     process_scheduled_works kernel/workqueue.c:3319 [inline]
     worker_thread+0x958/0xed8 kernel/workqueue.c:3400
     kthread+0x5fc/0x75c kernel/kthread.c:464
     ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:847
    
    Fixes: a380b6cff1a2 ("Bluetooth: Add generic mgmt helper API")
    Closes: https://syzkaller.appspot.com/bug?extid=0a7039d5d9986ff4ecec
    Closes: https://syzkaller.appspot.com/bug?extid=cc0cc52e7f43dc9e6df1
    Reported-by: syzbot+0a7039d5d9986ff4ecec@syzkaller.appspotmail.com
    Tested-by: syzbot+0a7039d5d9986ff4ecec@syzkaller.appspotmail.com
    Tested-by: syzbot+cc0cc52e7f43dc9e6df1@syzkaller.appspotmail.com
    Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: d0a7b48ad092 ("Bluetooth: mgmt: fix UAF in pair command cancellation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: MGMT: Remove unused mgmt_pending_find_data [+ + +]
Author: Dr. David Alan Gilbert <linux@treblig.org>
Date:   Mon Aug 10 19:51:27 2026 -0400

    Bluetooth: MGMT: Remove unused mgmt_pending_find_data
    
    [ Upstream commit 276af34d82f13bda0b2a4d9786c90b8bbf1cd064 ]
    
    mgmt_pending_find_data() last use was removed in 2021 by
    commit 5a7501374664 ("Bluetooth: hci_sync: Convert MGMT_OP_GET_CLOCK_INFO")
    
    Remove it.
    
    Signed-off-by: Dr. David Alan Gilbert <linux@treblig.org>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: d0a7b48ad092 ("Bluetooth: mgmt: fix UAF in pair command cancellation")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Bluetooth: Remove usage of the deprecated ida_simple_xx() API [+ + +]
Author: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Date:   Wed Jul 29 20:58:08 2026 -0400

    Bluetooth: Remove usage of the deprecated ida_simple_xx() API
    
    [ Upstream commit 9c16d0c8d93e3d2a95c5ed927b061f244db75579 ]
    
    ida_alloc() and ida_free() should be preferred to the deprecated
    ida_simple_get() and ida_simple_remove().
    
    Note that the upper limit of ida_simple_get() is exclusive, but the one of
    ida_alloc_max() is inclusive. So a -1 has been added when needed.
    
    Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
    Stable-dep-of: 84a4bb6548a2 ("Bluetooth: HCI: Remove HCI_AMP support")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bootconfig: do not put quotes on cmdline items unless necessary [+ + +]
Author: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date:   Tue Jul 28 15:30:13 2026 -0400

    bootconfig: do not put quotes on cmdline items unless necessary
    
    [ Upstream commit 212f863fa8811c780abacc1d0404c573fdc0a2de ]
    
    When trying to migrate to using bootconfig to embed the kernel's and
    PID1's command line with the kernel image itself, and so allowing changing
    that without modifying the bootloader, I noticed that /proc/cmdline
    changed from e.g.
    
      console=ttymxc0,115200n8 cma=128M quiet -- --log-level=notice
    
    to
    
      console="ttymxc0,115200n8" cma="128M" quiet -- --log-level="notice"
    
    The kernel parameters are parsed just fine, and the quotes are indeed
    stripped from the actual argv[] given to PID1.  However, the quoting
    doesn't really serve any purpose and looks excessive, and might confuse
    some (naive) userspace tool trying to parse /proc/cmdline.  So do not
    quote the value unless it contains whitespace.
    
    Link: https://lkml.kernel.org/r/20240320101952.62135-1-linux@rasmusvillemoes.dk
    Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: dec4d8118c17 ("bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline() [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Tue Jul 28 15:30:15 2026 -0400

    bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline()
    
    [ Upstream commit dec4d8118c179b3d12bca7e609054c6011c4f2ce ]
    
    xbc_snprint_cmdline() is meant to be called twice: first with
    buf=NULL, size=0 to probe the rendered length, then with a real
    buffer to fill it (the standard snprintf() two-pass pattern). The
    probe call makes the function compute "buf + size" (NULL + 0) and,
    on every iteration, advance "buf += ret" from that NULL base and
    pass the result back into snprintf().
    
    Pointer arithmetic on a NULL pointer is undefined behavior. It is
    harmless in the in-kernel callers today, but the follow-up patches
    run this same code in the userspace tools/bootconfig parser at kernel
    build time, where host UBSan / FORTIFY_SOURCE abort the build.
    
    Track a running written length (size_t) instead of mutating @buf, and
    only form "buf + len" when @buf is non-NULL. snprintf(NULL, 0, ...)
    is itself well defined and returns the would-be length, so the
    two-pass "probe then fill" usage returns identical byte counts.
    
    Link: https://lore.kernel.org/all/20260626-bootconfig_using_tools-v7-1-24ab72139c29@debian.org/
    
    Fixes: 51887d03aca1 ("bootconfig: init: Allow admin to use bootconfig for kernel command line")
    Cc: stable@vger.kernel.org
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

bootconfig: move xbc_snprint_cmdline() to lib/bootconfig.c [+ + +]
Author: Breno Leitao <leitao@debian.org>
Date:   Tue Jul 28 15:30:14 2026 -0400

    bootconfig: move xbc_snprint_cmdline() to lib/bootconfig.c
    
    [ Upstream commit 5a643e4623238e14b03d75ca0d4eda0645720cee ]
    
    Move xbc_snprint_cmdline() from init/main.c to lib/bootconfig.c so the
    function (and its xbc_namebuf scratch buffer) becomes part of the shared
    parser library. tools/bootconfig already compiles lib/bootconfig.c
    directly, which lets a follow-up patch reuse the same renderer in the
    userspace tool to convert a bootconfig file into a flat cmdline string
    at build time.
    
    No functional change.
    
    Link: https://lore.kernel.org/all/20260508-bootconfig_using_tools-v1-1-1132219aa773@debian.org/
    
    Signed-off-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Stable-dep-of: dec4d8118c17 ("bootconfig: fix NULL-pointer arithmetic in xbc_snprint_cmdline()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf,fork: wipe ->bpf_storage before bailouts that access it [+ + +]
Author: Jann Horn <jannh@google.com>
Date:   Mon Jul 27 11:40:58 2026 -0400

    bpf,fork: wipe ->bpf_storage before bailouts that access it
    
    [ Upstream commit 9b51a6155d14389876916726430da30eabb1d4ed ]
    
    Currently, copy_process() can bail out to free_task() before p->bpf_storage
    has been initialized, with this call graph (shown here for the
    !CONFIG_MEMCG case):
    
    copy_process
      dup_task_struct
        arch_dup_task_struct
          [copies the entire task_struct, including ->bpf_storage member]
      [RLIMIT_NPROC check fails]
      delayed_free_task
        free_task
          bpf_task_storage_free
            rcu_dereference(task->bpf_storage)
            bpf_local_storage_destroy
    
    In this case, the nascent task's ->bpf_storage member that
    bpf_local_storage_destroy() operates on is a plain copy of the parent's
    ->bpf_storage pointer, not a real initialized pointer.
    This leads to badness (kernel hangs, UAF).
    
    This is reachable as long as the process calling fork() has been inserted
    into a task storage map.
    
    Cc: stable@kernel.org
    Fixes: a10787e6d58c ("bpf: Enable task local storage for tracing programs")
    Signed-off-by: Jann Horn <jannh@google.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
bpf: Reject BPF_MAP_TYPE_INODE_STORAGE creation if BPF LSM is uninitialized [+ + +]
Author: Matt Bobrowski <mattbobrowski@google.com>
Date:   Tue Jul 21 13:13:01 2026 -0400

    bpf: Reject BPF_MAP_TYPE_INODE_STORAGE creation if BPF LSM is uninitialized
    
    [ Upstream commit a6f0643e4f63cfaa0d5d4a69de4f132eac4b8fe4 ]
    
    When CONFIG_BPF_LSM=y is set, BPF inode storage maps
    (BPF_MAP_TYPE_INODE_STORAGE) are compiled into the kernel. However,
    if the BPF LSM is not explicitly enabled at boot time (e.g. omitted
    from the "lsm=" boot parameter), lsm_prepare() is never executed for
    the BPF LSM.
    
    Consequently, the BPF inode security blob offset
    (bpf_lsm_blob_sizes.lbs_inode) is never initialized and remains at
    its default compiled size of 8 bytes instead of being updated to a
    valid offset past the reserved struct rcu_head (typically 16 bytes
    or more).
    
    When a privileged user creates and updates a BPF_MAP_TYPE_INODE_STORAGE
    map, bpf_inode() evaluates inode->i_security + 8. This erroneously
    aliases the struct rcu_head.func callback pointer at the beginning
    of the inode->i_security blob. During subsequent map element cleanup
    or inode destruction, writing NULL to owner_storage clears the queued
    RCU callback pointer. When rcu_do_batch() later executes the queued
    callback, it attempts an instruction fetch at address 0x0, triggering
    an immediate kernel panic.
    
    Fix this by introducing a global bpf_lsm_initialized boolean flag
    marked with __ro_after_init. Set this flag to true inside bpf_lsm_init()
    when the LSM framework successfully registers the BPF LSM. Gate map
    allocation in inode_storage_map_alloc() on this flag, returning
    -EOPNOTSUPP if the BPF LSM is in turn uninitialized.
    
    This fail-fast approach prevents userspace from allocating inode
    storage maps when the supporting BPF LSM infrastructure is absent,
    avoiding zombie map states.
    
    Fixes: 8ea636848aca ("bpf: Implement bpf_local_storage for inodes")
    Reported-by: oxsignal <awo@kakao.com>
    Signed-off-by: Matt Bobrowski <mattbobrowski@google.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Reviewed-by: Emil Tsalapatis <emil@etsalapatis.com>
    Reviewed-by: Amery Hung <ameryhung@gmail.com>
    Link: https://lore.kernel.org/bpf/20260628201103.3624525-1-mattbobrowski@google.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
can: gs_usb: gs_usb_receive_bulk_callback(): resubmit URB on skb allocation failure [+ + +]
Author: Marc Kleine-Budde <mkl@pengutronix.de>
Date:   Wed Aug 12 06:13:41 2026 -0400

    can: gs_usb: gs_usb_receive_bulk_callback(): resubmit URB on skb allocation failure
    
    [ Upstream commit 68c5724ecd159992f76edb7b57dc508a44c8b7da ]
    
    If the allocation of the SKB in gs_usb_receive_bulk_callback() fails, the
    driver returns from the callback without resubmitting the URB in order to
    receive further USB in URBs.
    
    This results in a silent performance degradation which, if it occurs
    repeatedly, results in starvation of USB in traffic.
    
    Instead of returning immediately, try to resend the URB. If this also
    fails, this is logged as an info message.
    
    Fixes: d08e973a77d1 ("can: gs_usb: Added support for the GS_USB CAN devices")
    Fixes: 26949ac935e3 ("can: gs_usb: add CAN-FD support")
    Link: https://patch.msgid.link/20260709-gs_usb-resubmit-urb-v1-1-4dd40030cc84@pengutronix.de
    Cc: stable@kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: rcar_canfd: change the initializing flow for clocks and resets [+ + +]
Author: Tu Nguyen <tu.nguyen.xg@renesas.com>
Date:   Fri Aug 14 15:50:41 2026 -0400

    can: rcar_canfd: change the initializing flow for clocks and resets
    
    [ Upstream commit bef9004c5b91debfceaea2841855a4ebe81ff2b3 ]
    
    Testing CANFD on RZ/G3E shows that many registers do not reset to their
    initial values with the current flow of deasserting resets first and then
    enabling clocks.
    
    Based on the HW manual, clocks should be supplied first and the
    resets deasserted afterward.
    
     section 7.4.3 Procedure for Activating Modules: RZ/G2L
     section 4.4.9.3 Procedure for Starting up Units: RZ/G3E
    
    So, update the order of the initializing flow for resets and clocks
    to match the hardware manual, resetting all CANFD registers to their
    initial values. Also update rcar_canfd_global_deinit() to assert
    resets before disabling clocks, so the teardown path mirrors the new
    init ordering.
    
    Fixes: 76e9353a80e9 ("can: rcar_canfd: Add support for RZ/G2L family")
    Signed-off-by: Tu Nguyen <tu.nguyen.xg@renesas.com>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Tested-by: Claudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: Vincent Mailhol <mailhol@kernel.org>
    Link: https://patch.msgid.link/20260625135216.130450-1-biju.das.jz@bp.renesas.com
    Cc: stable@kernel.org
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: rcar_canfd: Extract rcar_canfd_global_{,de}init() [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Fri Aug 14 15:50:40 2026 -0400

    can: rcar_canfd: Extract rcar_canfd_global_{,de}init()
    
    [ Upstream commit fa5f4ec8fff8bc587a2cbf7101303306e045c11f ]
    
    Extract the code to (de)initialize global state into separate functions,
    for future reuse.
    
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Link: https://patch.msgid.link/20251124102837.106973-5-biju.das.jz@bp.renesas.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Stable-dep-of: bef9004c5b91 ("can: rcar_canfd: change the initializing flow for clocks and resets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: rcar_canfd: Invert reset assert order [+ + +]
Author: Geert Uytterhoeven <geert+renesas@glider.be>
Date:   Fri Aug 14 15:50:38 2026 -0400

    can: rcar_canfd: Invert reset assert order
    
    [ Upstream commit 41c13eaf39932fc79aa1ac245a9b97090fe23d5e ]
    
    The two resets are asserted during cleanup in the same order as they
    were deasserted during probe.  Invert the order to restore symmetry.
    
    Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Reviewed-by: Vincent Mailhol <mailhol@kernel.org>
    Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Link: https://patch.msgid.link/20251124102837.106973-2-biju.das.jz@bp.renesas.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Stable-dep-of: bef9004c5b91 ("can: rcar_canfd: change the initializing flow for clocks and resets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

can: rcar_canfd: Use devm_clk_get_optional() for RAM clk [+ + +]
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Fri Aug 14 15:50:39 2026 -0400

    can: rcar_canfd: Use devm_clk_get_optional() for RAM clk
    
    [ Upstream commit eda3d6c8d784835cec86f42b3f8118c9eb0cc58c ]
    
    Replace devm_clk_get_optional_enabled()->devm_clk_get_optional() as the
    RAM clk needs to be enabled in resume for proper operation in STR mode
    for RZ/G3E SoC.
    
    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Link: https://patch.msgid.link/20251124102837.106973-4-biju.das.jz@bp.renesas.com
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Stable-dep-of: bef9004c5b91 ("can: rcar_canfd: change the initializing flow for clocks and resets")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ceph: avoid fs reclaim while using current->journal_info [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Fri Aug 7 18:16:12 2026 -0400

    ceph: avoid fs reclaim while using current->journal_info
    
    [ Upstream commit 5b602344a49e039e792ce5a8923bcc61412ee134 ]
    
    handle_reply() stores a `ceph_mds_request` pointer in
    `current->journal_info` while filling the inode and dentry cache from
    an MDS reply.
    
    An allocation in this section can enter direct reclaim and prune
    dentries from another filesystem.  If this dirties an ext4 inode, ext4
    starts a JBD2 transaction.  JBD2 interprets the Ceph request in
    `current->journal_info` as a journal handle and dereferences the
    request's `r_tid` as `h_transaction`, causing a kernel crash, e.g.:
    
     Unable to handle kernel paging request at virtual address 00000000077b4818
     [...]
     Internal error: Oops: 0000000096000004 [#1]  SMP
     Modules linked in:
     CPU: 6 UID: 0 PID: 2699135 Comm: kworker/6:3 Tainted: G        W           6.18.38-i3 #1113 NONE
     [...]
     Workqueue: ceph-msgr ceph_con_workfn
     pstate: 80400009 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
     pc : jbd2__journal_start+0x2c/0x208
     lr : __ext4_journal_start_sb+0x100/0x178
     [...]
     Call trace:
      jbd2__journal_start+0x2c/0x208 (P)
      __ext4_journal_start_sb+0x100/0x178
      ext4_dirty_inode+0x3c/0x90
      __mark_inode_dirty+0x58/0x400
      iput.part.0+0x2b0/0x370
      iput+0x18/0x30
      dentry_unlink_inode+0xc0/0x158
      __dentry_kill+0x80/0x250
      shrink_dentry_list+0x90/0x130
      prune_dcache_sb+0x60/0x98
      super_cache_scan+0xe8/0x190
      do_shrink_slab+0x174/0x388
      shrink_slab+0xd8/0x4c0
      shrink_node+0x31c/0x908
      do_try_to_free_pages+0xd0/0x508
      try_to_free_pages+0x11c/0x238
      __alloc_frozen_pages_noprof+0x4d0/0xdd0
      __folio_alloc_noprof+0x18/0x70
      __filemap_get_folio+0x248/0x440
      ceph_readdir_prepopulate+0x570/0x9e8
      mds_dispatch+0x1424/0x1ba0
      ceph_con_process_message+0x74/0xa0
      ceph_con_v1_try_read+0x3a0/0x1510
      ceph_con_workfn+0x260/0x460
    
    Enter a scoped NOFS allocation context and leave it after clearing
    `journal_info`.  This prevents filesystem reclaim from recursing into
    another filesystem while the field contains Ceph-private data.
    
    Cc: stable@vger.kernel.org
    Fixes: 315f24088048 ("ceph: fix security xattr deadlock")
    Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
    Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Reviewed-by: Xiubo Li <xiubo.li@clyso.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ceph: fix hanging __ceph_get_caps() with stale mds_wanted [+ + +]
Author: Max Kellermann <max.kellermann@ionos.com>
Date:   Fri Aug 7 22:52:10 2026 -0400

    ceph: fix hanging __ceph_get_caps() with stale mds_wanted
    
    [ Upstream commit 50958bb928bad3bdba9e5d1b7ff4bbadcf6951e6 ]
    
    A reader can hang forever in __ceph_get_caps() when the client no
    longer holds `FILE_RD`, but local cap state still says that the
    capability is already wanted (via `mds_wanted`).
    
    One way to trigger this is through MDS cap revocation.  If another
    client performs a conflicting operation, the MDS can revoke `FILE_RD`
    from the reader; the next read then has to reacquire `FILE_RD`.  If
    the cap update that should request `FILE_RD` never reaches the MDS
    after `cap->mds_wanted` was raised, the reader is left holding only
    non-file caps while local `mds_wanted` still includes the file read
    caps.
    
    In that state, try_get_cap_refs() sees `need <= mds_wanted` and
    returns 0, so __ceph_get_caps() just waits on `i_cap_wq`.  If the cap
    update that was supposed to request `FILE_RD never reaches the MDS
    after `cap->mds_wanted was` raised, no further request is sent and the
    waiter can sleep indefinitely until unrelated cap traffic happens to
    wake it up.
    
    The ordering issue is that `cap->mds_wanted` is updated in
    __prep_cap() before the `CEPH_MSG_CLIENT_CAPS message` is actually
    queued for send.  That makes one field serve two different meanings at
    once: what this client wants, and what the client believes the MDS
    already knows it wants.
    
    A proper fix would be to split those states and track whether a cap
    update is actually in flight or has been observed by the MDS.
    However, simply moving the `cap->mds_wanted assignment` later would
    not be sufficient: queueing the message in the messenger does not
    guarantee that the MDS processed that specific wanted set, and
    reconnect or message loss can still invalidate that assumption.
    Fixing that properly would require a larger rework of the cap state
    machine.
    
    To allow simpler backports to stable kernels, this patch implements a
    simpler workaround:
    
    - stop waiting forever in __ceph_get_caps(); after a bounded wait,
      fall back to the renew path
    
    - make ceph_renew_caps() issue a synchronous `OPEN` request whenever
      the inode still does not actually hold the wanted caps, instead of
      only calling ceph_check_caps()
    
    The extra issued-vs-wanted check in ceph_renew_caps() is necessary
    because the previous test only checked whether the inode still had any
    real caps at all.  That is not enough after revocation: the client can
    still hold something like `pLs` and yet be missing `FILE_RD`
    completely.  In that case, falling back to ceph_check_caps() is not
    sufficient, because it still trusts `cap->mds_wanted` and may resend
    nothing.  By requiring `(issued & wanted) == wanted` before taking the
    asynchronous path, the code only uses ceph_check_caps() when the
    `wanted caps` are already actually issued.  Otherwise, it sends the
    synchronous `OPEN` renew.
    
    This preserves the existing asynchronous fast path when the wanted
    caps are already issued, avoids changing cap-state semantics, and
    fixes the hang by guaranteeing that a stalled waiter eventually
    retries through a path that does not rely on the stale `mds_wanted`
    state.
    
    [ idryomov: move CEPH_GET_CAPS_WAIT_TIMEOUT from libceph.h to
      mds_client.h, formatting ]
    
    Cc: stable@vger.kernel.org
    Fixes: 0a454bdd501a ("ceph: reorganize __send_cap for less spinlock abuse")
    Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ceph: fix MDS random selection readiness predicate [+ + +]
Author: Yiming Zhu <zhuyiming@kuaishou.com>
Date:   Fri Jul 24 18:49:20 2026 +0800

    ceph: fix MDS random selection readiness predicate
    
    commit 2c11c4bfdb7bd2808b3b3ac228e1f2d9bcf25457 upstream.
    
    CEPH_MDS_IS_READY() is parsed so that the ternary expression can
    return true for an MDS entry with state 0 when it is not laggy. This
    allows the random selector to choose a down/DNE rank.
    
    Group the ternary expression under the state check so zero-state ranks
    are not treated as ready.
    
    Cc: stable@vger.kernel.org
    Fixes: b38c9eb4757d ("ceph: add possible_max_rank and make the code more readable")
    Link: https://tracker.ceph.com/issues/78648
    Signed-off-by: Yiming Zhu <zhuyiming@kuaishou.com>
    Reviewed-by: Viacheslav Dubeyko <slava@dubeyko.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ceph: pass the mdsc to several helpers [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Fri Aug 7 22:52:08 2026 -0400

    ceph: pass the mdsc to several helpers
    
    [ Upstream commit 197b7d792d6aead2e30d4b2c054ffabae2ed73dc ]
    
    We will use the 'mdsc' to get the global_id in the following commits.
    
    Link: https://tracker.ceph.com/issues/61590
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
    Reviewed-by: Milind Changire <mchangir@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Stable-dep-of: 50958bb928ba ("ceph: fix hanging __ceph_get_caps() with stale mds_wanted")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ceph: rename _to_client() to _to_fs_client() [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Fri Aug 7 22:52:09 2026 -0400

    ceph: rename _to_client() to _to_fs_client()
    
    [ Upstream commit 5995d90d2d19f337df6a50bcf4699ef053214dac ]
    
    We need to covert the inode to ceph_client in the following commit,
    and will add one new helper for that, here we rename the old helper
    to _fs_client().
    
    Link: https://tracker.ceph.com/issues/61590
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
    Reviewed-by: Milind Changire <mchangir@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Stable-dep-of: 50958bb928ba ("ceph: fix hanging __ceph_get_caps() with stale mds_wanted")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
crypto: ccm - Set rfc4309 maxauthsize from child [+ + +]
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Mon Jul 20 11:34:21 2026 +1000

    crypto: ccm - Set rfc4309 maxauthsize from child
    
    [ Upstream commit 438f4896f78f69ec73d5f32d2c024193f1223569 ]
    
    Set the maxauthsize of rfc4309 using that of the child algorithm.
    
    Fixes: 4a49b499dfa0 ("[CRYPTO] ccm: Added CCM mode")
    Reported-by: Seohyeon Maeng <bioloidgp@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

crypto: qce - fix error path in devm_qce_register_algs [+ + +]
Author: Thorsten Blum <thorsten.blum@linux.dev>
Date:   Fri Jul 24 10:15:38 2026 +0200

    crypto: qce - fix error path in devm_qce_register_algs
    
    commit 9c75402286409f5e1a75e4a445555c84066f89db upstream.
    
    If ops->register_algs() fails, the error path repeatedly calls the same
    ops->unregister_algs() from the failed registration. Use the loop index
    to unregister the previously registered algorithms instead.
    
    Fixes: e80cf84b6087 ("crypto: qce - unregister previously registered algos in error path")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm crypt: correct 'foo*' to 'foo *' [+ + +]
Author: Heinz Mauelshagen <heinzm@redhat.com>
Date:   Mon Jul 27 15:50:48 2026 -0400

    dm crypt: correct 'foo*' to 'foo *'
    
    [ Upstream commit ced6e475c3754dad3b63966d79f375d8f7193750 ]
    
    Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Stable-dep-of: edf025f08385 ("dm-integrity: don't increment hash_offset twice")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm-integrity: don't increment hash_offset twice [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Mon Jul 27 15:50:51 2026 -0400

    dm-integrity: don't increment hash_offset twice
    
    [ Upstream commit edf025f083854f80032b73a1aad69a3c90db236f ]
    
    hash_offset is already incremented in the loop "for (i = 0; i < to_copy;
    i++, ts--)". Do not increment it again.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Assisted-by: Claude:claude-opus-4.6
    Fixes: 84597a44a9d8 ("dm-integrity: dm integrity: add optional discard support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm-verity: avoid double increment of &use_bh_wq_enabled [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Mon Jul 27 15:24:27 2026 -0400

    dm-verity: avoid double increment of &use_bh_wq_enabled
    
    [ Upstream commit 72e9ec2fe32b00994f41719cf77423fca67d48b2 ]
    
    verity_parse_opt_args is called twice, first with the only_modifier_opts,
    first with only_modifier_opts == true and then with only_modifier_opts ==
    false. Thus, the static branch &use_bh_wq_enabled was incremented twice
    and the destructor verity_dtr would only decrement it once.
    
    Fix tihs bug by only incrementing it on the first call, on the second
    call, when v->use_bh_wq is true, do nothing.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Assisted-by: Claude:claude-opus-4-6
    Cc: stable@vger.kernel.org
    Fixes: df326e7a0699 ("dm verity: allow optional args to alter primary args handling")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dm-verity: make error counter atomic [+ + +]
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Mon Jul 27 17:00:14 2026 -0400

    dm-verity: make error counter atomic
    
    [ Upstream commit 8ec4d9c5a5cf4b61fc087f871465b1f79b393325 ]
    
    The error counter "v->corrupted_errs" was not atomic, thus it could be
    subject to race conditions. The call to
    dm_audit_log_target("max-corrupted-errors") may be skipped due to the
    races.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Assisted-by: Claude:claude-opus-4.6
    Fixes: 65ff5b7ddf05 ("dm verity: add error handling modes for corrupted blocks")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dm: add missing empty lines [+ + +]
Author: Heinz Mauelshagen <heinzm@redhat.com>
Date:   Mon Jul 27 15:50:49 2026 -0400

    dm: add missing empty lines
    
    [ Upstream commit 0ef0b4717aa6849d251b23ae1efe93ca93af540b ]
    
    Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Stable-dep-of: edf025f08385 ("dm-integrity: don't increment hash_offset twice")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dm: fix trailing statements [+ + +]
Author: Heinz Mauelshagen <heinzm@redhat.com>
Date:   Mon Jul 27 15:50:47 2026 -0400

    dm: fix trailing statements
    
    [ Upstream commit 03b18887703c5fa342896e52e873812ea33d964b ]
    
    Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Stable-dep-of: edf025f08385 ("dm-integrity: don't increment hash_offset twice")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

dm: remove unnecessary braces from single statement blocks [+ + +]
Author: Heinz Mauelshagen <heinzm@redhat.com>
Date:   Mon Jul 27 15:50:50 2026 -0400

    dm: remove unnecessary braces from single statement blocks
    
    [ Upstream commit 2d0f25cbc0d948e01573cc8ff5967e81bd98a4a1 ]
    
    Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@kernel.org>
    Stable-dep-of: edf025f08385 ("dm-integrity: don't increment hash_offset twice")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning [+ + +]
Author: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Date:   Tue Jul 21 14:49:09 2026 -0400

    dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning
    
    [ Upstream commit 504e2b4ab97a51d56d966cd36d0997ad30b65b2d ]
    
    When CONFIG_DMA_API_DEBUG_SG is enabled, importing a udmabuf into a DRM
    driver (e.g. amdgpu for video playback in GNOME Videos / Showtime)
    triggers a spurious warning:
    
      DMA-API: amdgpu 0000:03:00.0: cacheline tracking EEXIST, \
          overlapping mappings aren't supported
      WARNING: kernel/dma/debug.c:619 at add_dma_entry+0x473/0x5f0
    
    The call chain is:
    
      amdgpu_cs_ioctl
       -> amdgpu_ttm_backend_bind
        -> dma_buf_map_attachment
         -> [udmabuf] map_udmabuf -> get_sg_table
          -> dma_map_sgtable(dev, sg, direction, 0)  // attrs=0
           -> debug_dma_map_sg -> add_dma_entry -> EEXIST
    
    This happens because udmabuf builds a per-page scatter-gather list via
    sg_set_folio().  When begin_cpu_udmabuf() has already created an sg
    table mapped for the misc device, and an importer such as amdgpu maps
    the same pages for its own device via map_udmabuf(), the DMA debug
    infrastructure sees two active mappings whose physical addresses share
    cacheline boundaries and warns about the overlap.
    
    The DMA_ATTR_SKIP_CPU_SYNC flag suppresses this check in
    add_dma_entry() because it signals that no CPU cache maintenance is
    performed at map/unmap time, making the cacheline overlap harmless.
    
    All other major dma-buf exporters already pass this flag:
      - drm_gem_map_dma_buf() passes DMA_ATTR_SKIP_CPU_SYNC
      - amdgpu_dma_buf_map() passes DMA_ATTR_SKIP_CPU_SYNC
    
    The CPU sync at map/unmap time is also redundant for udmabuf:
    begin_cpu_udmabuf() and end_cpu_udmabuf() already perform explicit
    cache synchronization via dma_sync_sgtable_for_cpu/device() when CPU
    access is requested through the dma-buf interface.
    
    Pass DMA_ATTR_SKIP_CPU_SYNC to dma_map_sgtable() and
    dma_unmap_sgtable() in udmabuf to suppress the spurious warning and
    skip the redundant sync.
    
    Fixes: 284562e1f348 ("udmabuf: implement begin_cpu_access/end_cpu_access hooks")
    Cc: stable@vger.kernel.org
    Signed-off-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
    Acked-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Link: https://patch.msgid.link/20260331061657.79983-1-mikhail.v.gavrilov@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/pm: fix pptable use-after-free [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Fri Aug 14 13:24:50 2026 -0400

    drm/amd/pm: fix pptable use-after-free
    
    [ Upstream commit bb493058c35c8676e48269ab6732688ea733d23c ]
    
    amdgpu_dpm_get_pp_table() returns a pointer to a driver-owned power table
    after dropping adev->pm.mutex. The sysfs path then copies from that pointer.
    A concurrent pp_table write can replace and free the allocation during the
    copy, causing a use-after-free.
    
    Change the DPM interface to copy into caller-provided storage while the mutex
    is held. Keep the size-only query for attribute discovery without exposing
    the driver-owned pointer.
    
    Fixes: 1684d3ba4885 ("drm/amd/amdgpu: change pptable output format from ASCII to binary")
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Reviewed-by: Kenneth Feng <kenneth.feng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit f6eed7acfd30099ef7baeb6ba45bb59daad80631)
    Cc: stable@vger.kernel.org
    [ kept 6.18's existing `if (!pp_funcs->get_pp_table) return 0;` guard instead of upstream's SR-IOV/SCPM `-EOPNOTSUPP` guard and dropped the `default_attr_update()` hunk whose `pp_table` branch doesn't exist yet ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amd/pm: fix torn gpu metrics reads [+ + +]
Author: Yang Wang <kevinyang.wang@amd.com>
Date:   Wed Aug 12 18:12:35 2026 -0400

    drm/amd/pm: fix torn gpu metrics reads
    
    [ Upstream commit 048f4541b71fb19645fb79d6e62e6e4da23a4035 ]
    
    amdgpu_dpm_get_gpu_metrics() returns a pointer to the shared metrics cache
    after dropping adev->pm.mutex. The sysfs path then copies from that pointer.
    Another reader can refresh the cache in place during the copy and return a
    snapshot containing data from two generations.
    
    Pass caller-provided storage through the DPM interface and copy the metrics
    while the mutex is held. This keeps the cache pointer private and makes each
    sysfs read observe one complete sample.
    
    Fixes: 25c933b1c4fc ("drm/amd/powerplay: add new sysfs interface for retrieving gpu metrics(V2)")
    Signed-off-by: Yang Wang <kevinyang.wang@amd.com>
    Reviewed-by: Kenneth Feng <kenneth.feng@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 862333bb48693ecafcae25af0c9d9ec31015ac77)
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amdgpu: Fix UVD decode image min size calculation [+ + +]
Author: David Rosca <david.rosca@amd.com>
Date:   Thu Jul 30 18:01:51 2026 +0200

    drm/amdgpu: Fix UVD decode image min size calculation
    
    commit b8bb9ba3f101a1b0011f785a577a4a0a38371174 upstream.
    
    This needs to use pitch instead of width. Also reject pitch
    over 4096 to avoid overflow.
    
    Signed-off-by: David Rosca <david.rosca@amd.com>
    Acked-by: Leo Liu <leo.liu@amd.com>
    Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit b41c8cb12e202b220353332ab87dc01a11f69304)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: Implement insert_end for VCE 3 [+ + +]
Author: David Rosca <david.rosca@amd.com>
Date:   Mon Aug 10 11:11:35 2026 +0200

    drm/amdgpu: Implement insert_end for VCE 3
    
    commit d5ab4c6a64efef2d143a96df5357f59703cd703d upstream.
    
    After a recent change VCE now hangs when VCE_CMD_END is emitted
    after a pipeline sync without VM flush.
    Implement insert_end to correctly insert only one VCE_CMD_END per job.
    
    Fixes: bc639a9eadc7 ("drm/amdgpu: always emit the job vm fence")
    Signed-off-by: David Rosca <david.rosca@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 8897ea8c761b856f02061848a7908040a1fe5e68)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: move debug_vm handling to amdgpu_cs_parser_fini [+ + +]
Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Date:   Fri Aug 14 22:30:26 2026 -0400

    drm/amdgpu: move debug_vm handling to amdgpu_cs_parser_fini
    
    [ Upstream commit d8726ef11512754a68c0ab53c57634a569b8feff ]
    
    The commit referenced below restarts the CS if the validation is
    still in progress. When debug_vm is enabled, all BOs from the CS
    are invalidated so we will hit an infinite loop.
    
    To avoid that, defer BO invalidation to amdgpu_cs_parser_fini.
    
    Fixes: 59720bfd8c6d ("drm/amdgpu: restart the CS if some parts of the VM are still invalidated")
    Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 8c990ee9daa295462df24982ce6878db997a380a)
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: Reject UVD message with dimensions above 4096 [+ + +]
Author: David Rosca <david.rosca@amd.com>
Date:   Thu Jul 30 17:37:44 2026 +0200

    drm/amdgpu: Reject UVD message with dimensions above 4096
    
    commit 8c9aebcdd9f46f7a14b98d6ab18574b7a48fbb08 upstream.
    
    Fixes potential overflow in DPB size calculations.
    
    Signed-off-by: David Rosca <david.rosca@amd.com>
    Acked-by: Leo Liu <leo.liu@amd.com>
    Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 05e1387d151f71569fbe122d2c89f9db0c21dc10)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: Reject UVD message with invalid number of h265 refs [+ + +]
Author: David Rosca <david.rosca@amd.com>
Date:   Tue Aug 11 11:03:10 2026 +0200

    drm/amdgpu: Reject UVD message with invalid number of h265 refs
    
    commit 9fca434208f1f9ab977feac62df8ebb1cc7ce893 upstream.
    
    Same change as for h264, avoids overflow later when calculating
    min dpb size.
    
    Signed-off-by: David Rosca <david.rosca@amd.com>
    Reviewed-by: Leo Liu <leo.liu@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit a4b0720e4f1601f97f59a2be9c1b4b94fa6527d5)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: Respect placement requirements in amdgpu_gtt_mgr functions [+ + +]
Author: Timur Kristóf <timur.kristof@gmail.com>
Date:   Fri Jul 31 20:45:28 2026 -0400

    drm/amdgpu: Respect placement requirements in amdgpu_gtt_mgr functions
    
    [ Upstream commit 8882f8897e554053af9e72f4c2da8b1e2cce56c7 ]
    
    When testing intersection and compatibility, respect
    the actual placement requirements. This is a pre-requisite
    for ensuring that UVD CS BOs do not cross 256M segments.
    
    Fixes: ded910f368a5 ("drm/amdgpu: Implement intersect/compatible functions")
    Suggested-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Timur Kristóf <timur.kristof@gmail.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit bc06579ca29dee9c245a41b12e39c7bb6938af5d)
    Cc: stable@vger.kernel.org
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/amdgpu: validate GEM_CREATE domain combinations [+ + +]
Author: Candice Li <candice.li@amd.com>
Date:   Mon Jul 27 11:51:37 2026 +0800

    drm/amdgpu: validate GEM_CREATE domain combinations
    
    commit 5e9d136ad74df4edec67e502ce267597064d8f86 upstream.
    
    AMDGPU_GEM_CREATE checked domain bits against AMDGPU_GEM_DOMAIN_MASK,
    but did not validate domain combinations. Userspace could combine
    CPU|GTT|VRAM with DOORBELL, GDS, GWS, or OA, making
    amdgpu_bo_placement_from_domain() exceed AMDGPU_BO_MAX_PLACEMENTS and
    hit BUG_ON().
    
    Allow combinations only within CPU/GTT/VRAM, and require non-CPU/GTT/
    VRAM domains to be specified one at a time. Return -EINVAL for invalid
    combinations in amdgpu_gem_create_ioctl().
    
    v2: Rename helper from amdgpu_gem_domain_valid() to
        amdgpu_gem_are_domains_valid() (Christian)
    
    Signed-off-by: Candice Li <candice.li@amd.com>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit db39852d0c39843cb02048dfb47e4b8c703e9080)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/bridge: cdns-dsi: Replace deprecated UNIVERSAL_DEV_PM_OPS() [+ + +]
Author: Vitor Soares <vitor.soares@toradex.com>
Date:   Thu Jul 30 15:29:13 2026 -0400

    drm/bridge: cdns-dsi: Replace deprecated UNIVERSAL_DEV_PM_OPS()
    
    [ Upstream commit 2d8b08844c0ecc6f2002fa68711e779aa18c8585 ]
    
    The deprecated UNIVERSAL_DEV_PM_OPS() macro uses the provided callbacks
    for both runtime PM and system sleep. This causes the DSI clocks to be
    disabled twice: once during runtime suspend and again during system
    suspend, resulting in a WARN message from the clock framework when
    attempting to disable already-disabled clocks.
    
    [   84.384540] clk:231:5 already disabled
    [   84.388314] WARNING: CPU: 2 PID: 531 at /drivers/clk/clk.c:1181 clk_core_disable+0xa4/0xac
    ...
    [   84.579183] Call trace:
    [   84.581624]  clk_core_disable+0xa4/0xac
    [   84.585457]  clk_disable+0x30/0x4c
    [   84.588857]  cdns_dsi_suspend+0x20/0x58 [cdns_dsi]
    [   84.593651]  pm_generic_suspend+0x2c/0x44
    [   84.597661]  ti_sci_pd_suspend+0xbc/0x15c
    [   84.601670]  dpm_run_callback+0x8c/0x14c
    [   84.605588]  __device_suspend+0x1a0/0x56c
    [   84.609594]  dpm_suspend+0x17c/0x21c
    [   84.613165]  dpm_suspend_start+0xa0/0xa8
    [   84.617083]  suspend_devices_and_enter+0x12c/0x634
    [   84.621872]  pm_suspend+0x1fc/0x368
    
    To address this issue, replace UNIVERSAL_DEV_PM_OPS() with
    RUNTIME_PM_OPS(). Bridge and panel drivers should only deal with runtime
    PM, as the DRM framework manages system-wide power transitions through
    the bridge enable() and disable() hooks.
    
    Link: https://lore.kernel.org/all/fbde0659-78f3-46e4-98cf-d832f765a18b@ideasonboard.com/
    Cc: stable@vger.kernel.org # 6.1.x
    Fixes: e19233955d9e ("drm/bridge: Add Cadence DSI driver")
    Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Signed-off-by: Vitor Soares <vitor.soares@toradex.com>
    Reviewed-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
    Link: https://patch.msgid.link/20260505134705.188661-2-ivitro@gmail.com
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/displayid: fix Tiled Display Topology ID size [+ + +]
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Fri Jul 31 12:25:17 2026 -0400

    drm/displayid: fix Tiled Display Topology ID size
    
    [ Upstream commit 90c0486a82e27393f9eaf3bb350f51a0bd38cb6b ]
    
    The Tiled Display Topology ID of a DisplayID Tiled Display Topology Data
    Block consists of three fields:
    
    - Tiled Display Manufacturer/Vendor ID Field (3 bytes)
    - Tiled Display Product ID Code Field (2 bytes)
    - Tiled Display Serial Number Field (4 bytes)
    
    i.e. a total of 9 bytes, not 8.
    
    The DisplayID Tiled Display Topology ID is used as the tile group
    identifier.
    
    Update both struct displayid_tiled_block topology_id member and struct
    drm_tile_group group_data member to full 9 bytes.
    
    The group data was missing the last byte of the serial number. I don't
    know whether there are known bug reports that might be linked to this,
    but it's plausible the last byte could be the differentiating part for
    the tile groups, and fewer tile groups might have been created than
    intended.
    
    Fixes: b49b55bd4fba ("drm/displayid: add displayid defines and edid extension (v2)")
    Fixes: 138f9ebb9755 ("drm: add tile_group support. (v3)")
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: stable@vger.kernel.org # v3.19+
    Reviewed-by: Dave Airlie <airlied@redhat.com>
    Link: https://patch.msgid.link/20260610141549.555605-1-jani.nikula@intel.com
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/hdcp: check streams[] bounds before overflow [+ + +]
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Mon Aug 3 21:06:35 2026 -0400

    drm/i915/hdcp: check streams[] bounds before overflow
    
    [ Upstream commit bbb15a6b042d02e5508a02b4847e02d2579ee7bc ]
    
    The data->streams[] overflow check is done after the buffer overflow has
    already happened. Move the overflow check before the write.
    
    Side note, emitting a warning splat with a backtrace might be overkill
    here, but prefer not changing the behaviour other than not doing the
    overrun.
    
    Discovered using AI-assisted static analysis confirmed by Intel Product
    Security.
    
    Reported-by: Martin Hodo <martin.hodo@intel.com>
    Fixes: e03187e12cae ("drm/i915/hdcp: MST streams support in hdcp port_data")
    Cc: stable@vger.kernel.org # v5.12+
    Cc: Anshuman Gupta <anshuman.gupta@intel.com>
    Cc: Suraj Kandpal <suraj.kandpal@intel.com>
    Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Link: https://patch.msgid.link/20260625170304.1104723-1-jani.nikula@intel.com
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    (cherry picked from commit 9284ab3b6e776c315883ac2611283d263c9460fd)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/i915/hdcp: Move to using intel_display in intel_hdcp [+ + +]
Author: Suraj Kandpal <suraj.kandpal@intel.com>
Date:   Mon Aug 3 16:26:49 2026 -0400

    drm/i915/hdcp: Move to using intel_display in intel_hdcp
    
    [ Upstream commit e35bf8f6a0ff06ceeff15bb032351cd5d006f92b ]
    
    Move to using intel_display wherever possible in intel_hdcp.c
    as a part of code refactor.
    
    --v2
    -Move intel_display to the first line wherever possible [Jani]
    -use the closest reference when using to_intel_display [Jani]
    
    Signed-off-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Reviewed-by: Jani Nikula <jani.nikula@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240911090540.643155-2-suraj.kandpal@intel.com
    Stable-dep-of: db9e64c983dc ("drm/i915/hdcp: require monotonically increasing seq_num_v")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/i915/hdcp: require monotonically increasing seq_num_v [+ + +]
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Mon Aug 3 16:26:50 2026 -0400

    drm/i915/hdcp: require monotonically increasing seq_num_v
    
    [ Upstream commit db9e64c983dcb07ff256bd455f258c44aa530ff8 ]
    
    The HDCP 2.2 specification requires the seq_num_v to be monotonically
    increasing, and repeated seq_num_v needs to be treated as an integrity
    failure. Make it so.
    
    For the first message, seq_num_v must be zero, and is already
    checked. We can only check for less-than-or-equal for the subsequent
    messages, where hdcp2_encrypted is true.
    
    Discovered using AI-assisted static analysis confirmed by Intel Product
    Security.
    
    Reported-by: Martin Hodo <martin.hodo@intel.com>
    Fixes: d849178e2c9e ("drm/i915: Implement HDCP2.2 repeater authentication")
    Cc: stable@vger.kernel.org # v5.2+
    Cc: Suraj Kandpal <suraj.kandpal@intel.com>
    Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
    Link: https://patch.msgid.link/20260625104407.1025614-1-jani.nikula@intel.com
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    (cherry picked from commit 58a224375c81179b52558c53d8857b93196d2687)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/vrr: Check HAS_VRR() first in intel_vrr_is_capable() [+ + +]
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Mon Aug 3 11:30:49 2026 -0400

    drm/i915/vrr: Check HAS_VRR() first in intel_vrr_is_capable()
    
    [ Upstream commit 4b274b0b61ab2a529e5c22e9aa033f3028e639fc ]
    
    There's no point in doing all the other checks in
    intel_vrr_is_capable() if the platform doesn't support VRR at all
    Check HAS_VRR() before wasting time on the other checks.
    
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20251020185038.4272-23-ville.syrjala@linux.intel.com
    Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    Stable-dep-of: f8a9262c7a6f ("drm/i915/vrr: require valid min/max vfreq for VRR")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

drm/i915/vrr: require valid min/max vfreq for VRR [+ + +]
Author: Jani Nikula <jani.nikula@intel.com>
Date:   Mon Aug 3 11:30:50 2026 -0400

    drm/i915/vrr: require valid min/max vfreq for VRR
    
    [ Upstream commit f8a9262c7a6fc2de9802e14b0228114f0333869e ]
    
    Ensure the EDID provided min/max vfreq are valid. Most scenarios are
    already covered (by coincidence) through the checks in
    intel_vrr_is_capable() and intel_vrr_is_in_range(), but be more explicit
    about it. At worst, a zero min_vfreq could lead to a division by zero in
    intel_vrr_compute_vmax().
    
    Discovered using AI-assisted static analysis confirmed by Intel Product
    Security.
    
    Reported-by: Martin Hodo <martin.hodo@intel.com>
    Fixes: 117cd09ba528 ("drm/i915/display/dp: Compute VRR state in atomic_check")
    Cc: stable@vger.kernel.org # v5.12+
    Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
    Link: https://patch.msgid.link/20260625131040.1051272-1-jani.nikula@intel.com
    Signed-off-by: Jani Nikula <jani.nikula@intel.com>
    (cherry picked from commit 1765cf59f517b02f3b0591fe5120930d08bddeb6)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/radeon: fix autosuspend cleanup during teardown [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Sat Aug 8 21:59:42 2026 +0800

    drm/radeon: fix autosuspend cleanup during teardown
    
    commit 587be7a17358ef8c0106775fcedae5a7bef50735 upstream.
    
    radeon_driver_load_kms() calls pm_runtime_use_autosuspend() for PX
    devices, but radeon_driver_unload_kms() does not call the matching
    pm_runtime_dont_use_autosuspend() during teardown.
    
    If the autosuspend delay is set to a negative value while autosuspend
    is enabled, the runtime PM core increments usage_count to prevent
    runtime suspend. Without calling pm_runtime_dont_use_autosuspend()
    during teardown, this reference is not dropped.
    
    The documentation for pm_runtime_use_autosuspend() also notes that it
    is important to undo it with pm_runtime_dont_use_autosuspend() at
    driver exit time, unless runtime PM was initially enabled with
    devm_pm_runtime_enable().
    
    Add the missing pm_runtime_dont_use_autosuspend() call to the driver
    unload path.
    
    This issue was found by manual code inspection.
    
    Fixes: 10ebc0bc0934 ("drm/radeon: add runtime PM support (v2)")
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 0fdc1ff82ea14844c22795e9e0813c3ca03235e1)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/tegra: fbdev: Remove offset into framebuffer memory [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Fri Jul 31 12:25:21 2026 -0400

    drm/tegra: fbdev: Remove offset into framebuffer memory
    
    [ Upstream commit a18b6e30ecd69096beda4a0c96d2570900c3879a ]
    
    The screen_buffer field in struct fb_info contains the kernel address
    of the first byte of framebuffer memory. Do not add the display offset.
    This offset only describes scrolling during scanout.
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Fixes: de2ba664c30f ("gpu: host1x: drm: Add memory manager and fb")
    Cc: dri-devel@lists.freedesktop.org
    Cc: linux-tegra@vger.kernel.org
    Cc: <stable@vger.kernel.org> # v3.10+
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Link: https://patch.msgid.link/20260421073646.144712-3-tzimmermann@suse.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
erofs: cap LZMA stream pool size [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon Aug 10 06:57:47 2026 -0400

    erofs: cap LZMA stream pool size
    
    [ Upstream commit c9b47e6b23114e939b17f818471c7a46e59006e7 ]
    
    fs/erofs/decompressor_lzma.c sizes the module-global MicroLZMA stream
    pool from num_possible_cpus() when the lzma_streams module parameter is
    unset, then z_erofs_load_lzma_config() preallocates one image-supplied
    dictionary per stream, accepting dictionaries up to 8 MiB.  On high-CPU
    systems, a small EROFS image can pin hundreds of MiB of vmalloc-backed
    decoder state until the erofs module is unloaded.
    
    Impact: An EROFS image mounted by the system can pin up to 8 MiB of
    vmalloc memory per LZMA stream, either as intended or unexpectedly.
    
    Bound the default stream count by a new
    CONFIG_EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS option, default 16, so the
    worst-case default preallocation is 128 MiB if the number of CPUs is no
    less than 16 while preserving the existing per-image dictionary limit.
    An explicit lzma_streams module parameter is still honoured as-is, so
    administrators who deliberately size the pool are not affected.
    
    Fixes: 622ceaddb764 ("erofs: lzma compression support")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Reviewed-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

erofs: fix EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS on some UP platforms [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Wed Aug 12 21:11:43 2026 +0800

    erofs: fix EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS on some UP platforms
    
    commit a64d500b0078e16e9abb25baca4dee1dbc9054fc upstream.
    
    CONFIG_NR_CPUS doesn't define on some UP platforms (e.g.  arm), so this
    can cause make oldconfig to loop indefinitely when CONFIG_SMP=n:
    
      $ make ARCH=arm allmodconfig
      $ sed -i "/CONFIG_SMP=y/d" .config
      $ sed -i "/CONFIG_EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS.*/d" .config
    
      EROFS LZMA default maximum decompression streams (EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS) [0] (NEW)
      EROFS LZMA default maximum decompression streams (EROFS_FS_ZIP_LZMA_DEFAULT_MAX_STREAMS) [0] (NEW)
      ...
    
    Let's guard NR_CPUS with SMP instead of using a hardcoded arbitrary CPU
    uplimit here, similar to commit a3344078101c ("mm: make SPLIT_PTE_PTLOCKS
    depend on SMP").
    
    The initial report from SJ Park was for m68k [1] (m68k is the only arch
    without NR_CPUS in Kconfig), and that got fixed in commit 1fd495ef09ee
    ("m68k: Define NR_CPUS to 1")
    
    Reported-by: SJ Park <sj@kernel.org>
    Link: https://lore.kernel.org/all/anuyFHLUGDjZWY4K@XiangdeMacBook-Pro.local/T/#u [1]
    Closes: https://lore.kernel.org/r/20260728065447.91511-1-sj@kernel.org
    Reported-by: Guenter Roeck <groeck7@gmail.com>
    Closes: https://lore.kernel.org/r/87853c96-cc8f-49e6-81b1-02bfe409e372@roeck-us.net
    Fixes: c9b47e6b2311 ("erofs: cap LZMA stream pool size")
    Signed-off-by: Gao Xiang <xiang@kernel.org>
    Tested-by: SJ Park <sj@kernel.org>
    Tested-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

erofs: maintain cookies of share domain in self-contained list [+ + +]
Author: Jingbo Xu <jefflexu@linux.alibaba.com>
Date:   Mon Aug 10 06:57:46 2026 -0400

    erofs: maintain cookies of share domain in self-contained list
    
    [ Upstream commit 2dfb8c3b122fad4504a92c34ba68f2fe4444b3f6 ]
    
    We'd better not touch sb->s_inodes list and inode->i_count directly.
    Let's maintain cookies of share domain in a self-contained list in erofs.
    
    Besides, relinquish cookie with the mutex held.  Otherwise if a cookie
    is registered when the old cookie with the same name in the same domain
    has been removed from the list but not relinquished yet, fscache may
    complain "Duplicate cookie detected".
    
    Signed-off-by: Jingbo Xu <jefflexu@linux.alibaba.com>
    Reviewed-by: Jia Zhu <zhujia.zj@bytedance.com>
    Link: https://lore.kernel.org/r/20230209063913.46341-3-jefflexu@linux.alibaba.com
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Stable-dep-of: c9b47e6b2311 ("erofs: cap LZMA stream pool size")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

erofs: tidy up internal.h [+ + +]
Author: Gao Xiang <xiang@kernel.org>
Date:   Mon Aug 10 06:57:45 2026 -0400

    erofs: tidy up internal.h
    
    [ Upstream commit 557afdd94cf853885ac3b5c218bdf49c021f7323 ]
    
    Reorder internal.h code so that removing unneeded macros and more.
    No logic changes.
    
    Reviewed-by: Yue Hu <huyue2@coolpad.com>
    Reviewed-by: Jingbo Xu <jefflexu@linux.alibaba.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20230204093040.97967-6-hsiangkao@linux.alibaba.com
    Stable-dep-of: c9b47e6b2311 ("erofs: cap LZMA stream pool size")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
espintcp: Inline do_tcp_sendpages() [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Tue Jul 28 14:07:30 2026 -0400

    espintcp: Inline do_tcp_sendpages()
    
    [ Upstream commit 7f8816ab4bae9dd42c5720fdad4b102532d4e43a ]
    
    do_tcp_sendpages() is now just a small wrapper around tcp_sendmsg_locked(),
    so inline it, allowing do_tcp_sendpages() to be removed.  This is part of
    replacing ->sendpage() with a call to sendmsg() with MSG_SPLICE_PAGES set.
    
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Steffen Klassert <steffen.klassert@secunet.com>
    cc: Herbert Xu <herbert@gondor.apana.org.au>
    cc: David Ahern <dsahern@kernel.org>
    cc: Jens Axboe <axboe@kernel.dk>
    cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 007800408002 ("espintcp: use sk_msg_free_partial to fix partial send")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

espintcp: use sk_msg_free_partial to fix partial send [+ + +]
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Tue Jul 28 14:07:33 2026 -0400

    espintcp: use sk_msg_free_partial to fix partial send
    
    [ Upstream commit 007800408002d871f5699bdb944f985896730b8f ]
    
    sk_msg_free_partial() ensures consistency of the skmsg at every
    iteration, without having to manually handle uncharges and offsets.
    This simplifies the code, and fixes some bugs in skmsg accounting when
    we don't send the full contents.
    
    Cc: stable@vger.kernel.org
    Fixes: e27cca96cd68 ("xfrm: add espintcp (RFC 8229)")
    Reported-by: Aaron Esau <aaron1esau@gmail.com>
    Reported-by: Yiming Qian <yimingqian591@gmail.com>
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
f2fs: fix UAF issue in f2fs_merge_page_bio() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Aug 18 19:36:33 2026 +0800

    f2fs: fix UAF issue in f2fs_merge_page_bio()
    
    commit edf7e9040fc52c922db947f9c6c36f07377c52ea upstream.
    
    As JY reported in bugzilla [1],
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
    pc : [0xffffffe51d249484] f2fs_is_cp_guaranteed+0x70/0x98
    lr : [0xffffffe51d24adbc] f2fs_merge_page_bio+0x520/0x6d4
    CPU: 3 UID: 0 PID: 6790 Comm: kworker/u16:3 Tainted: P    B   W  OE      6.12.30-android16-5-maybe-dirty-4k #1 5f7701c9cbf727d1eebe77c89bbbeb3371e895e5
    Tainted: [P]=PROPRIETARY_MODULE, [B]=BAD_PAGE, [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
    Workqueue: writeback wb_workfn (flush-254:49)
    Call trace:
     f2fs_is_cp_guaranteed+0x70/0x98
     f2fs_inplace_write_data+0x174/0x2f4
     f2fs_do_write_data_page+0x214/0x81c
     f2fs_write_single_data_page+0x28c/0x764
     f2fs_write_data_pages+0x78c/0xce4
     do_writepages+0xe8/0x2fc
     __writeback_single_inode+0x4c/0x4b4
     writeback_sb_inodes+0x314/0x540
     __writeback_inodes_wb+0xa4/0xf4
     wb_writeback+0x160/0x448
     wb_workfn+0x2f0/0x5dc
     process_scheduled_works+0x1c8/0x458
     worker_thread+0x334/0x3f0
     kthread+0x118/0x1ac
     ret_from_fork+0x10/0x20
    
    [1] https://bugzilla.kernel.org/show_bug.cgi?id=220575
    
    The panic was caused by UAF issue w/ below race condition:
    
    kworker
    - writepages
     - f2fs_write_cache_pages
      - f2fs_write_single_data_page
       - f2fs_do_write_data_page
        - f2fs_inplace_write_data
         - f2fs_merge_page_bio
          - add_inu_page
          : cache page #1 into bio & cache bio in
            io->bio_list
      - f2fs_write_single_data_page
       - f2fs_do_write_data_page
        - f2fs_inplace_write_data
         - f2fs_merge_page_bio
          - add_inu_page
          : cache page #2 into bio which is linked
            in io->bio_list
                                                    write
                                                    - f2fs_write_begin
                                                    : write page #1
                                                     - f2fs_folio_wait_writeback
                                                      - f2fs_submit_merged_ipu_write
                                                       - f2fs_submit_write_bio
                                                       : submit bio which inclues page #1 and #2
    
                                                    software IRQ
                                                    - f2fs_write_end_io
                                                     - fscrypt_free_bounce_page
                                                     : freed bounced page which belongs to page #2
          - inc_page_count( , WB_DATA_TYPE(data_folio), false)
          : data_folio points to fio->encrypted_page
            the bounced page can be freed before
            accessing it in f2fs_is_cp_guarantee()
    
    It can reproduce w/ below testcase:
    Run below script in shell #1:
    for ((i=1;i>0;i++)) do xfs_io -f /mnt/f2fs/enc/file \
    -c "pwrite 0 32k" -c "fdatasync"
    
    Run below script in shell #2:
    for ((i=1;i>0;i++)) do xfs_io -f /mnt/f2fs/enc/file \
    -c "pwrite 0 32k" -c "fdatasync"
    
    So, in f2fs_merge_page_bio(), let's avoid using fio->encrypted_page after
    commit page into internal ipu cache.
    
    Fixes: 0b20fcec8651 ("f2fs: cache global IPU bio")
    Reported-by: JY <JY.Ho@mediatek.com>
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    [Jiucheng Xu: backport to 6.1.y]
    Signed-off-by: Jiucheng Xu <jiucheng.xu@amlogic.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fbcon: Rename struct fbcon_ops to struct fbcon_par [+ + +]
Author: Thomas Zimmermann <tzimmermann@suse.de>
Date:   Wed Jul 22 12:54:37 2026 -0400

    fbcon: Rename struct fbcon_ops to struct fbcon_par
    
    [ Upstream commit a6adbbc4c32a016146e117b1e9e5242724a75e10 ]
    
    The type struct fbcon_ops contains fbcon state and callbacks. As the
    callbacks will be removed from struct fbcon_ops, rename the data type
    to struct fbcon_par. Also rename the variables from ops to par.
    
    The _par postfix ("private access registers") is used throughout the
    fbdev subsystem for per-driver state. The fbcon pointer within struct
    fb_info is also named fbcon_par. Hence, the new naming fits existing
    practice.
    
    v2:
    - rename struct fbcon_ops to struct fbcon_par
    - fix build for CONFIG_FB_TILEBITTING=n (kernel test robot)
    - fix indention
    
    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
    Link: https://lore.kernel.org/r/20250909124616.143365-3-tzimmermann@suse.de
    Stable-dep-of: 84202754fb17 ("fbcon: Use correct type for vc_resize() return value")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbcon: Use correct type for vc_resize() return value [+ + +]
Author: Jiacheng Yu <yujiacheng3@huawei.com>
Date:   Wed Jul 22 12:54:38 2026 -0400

    fbcon: Use correct type for vc_resize() return value
    
    [ Upstream commit 84202754fb1727dc3ee87f47104e4162ecc8ba3a ]
    
    The return value of vc_resize() is int, but fbcon_set_disp() stores it
    in an unsigned long variable. While the !ret check happens to work
    correctly by coincidence (negative values become large positive values),
    the types should match. Use int instead.
    
    Eliminates the following W=3 warning:
    
      drivers/video/fbdev/core/fbcon.c: In function 'fbcon_set_disp':
      drivers/video/fbdev/core/fbcon.c:1494:14: warning: implicit conversion from 'int' to 'unsigned long' [-Wconversion]
    
    Fixes: af0db3c1f898 ("fbdev: Fix vmalloc out-of-bounds write in fast_imageblit")
    Cc: stable@vger.kernel.org # v6.17+
    Signed-off-by: Jiacheng Yu <yujiacheng3@huawei.com>
    Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
firmware_loader: introduce __free() cleanup hanler [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon Jul 27 20:57:56 2026 -0400

    firmware_loader: introduce __free() cleanup hanler
    
    [ Upstream commit 8dde8fa0cc3edce73c050b9882d06c1a575f6402 ]
    
    Define cleanup handler using facilities from linux/cleanup.h to simplify
    error handling in code using firmware loader. This will allow writing code
    like this:
    
    int driver_update_firmware(...)
    {
            const struct firmware *fw_entry __free(firmware) = NULL;
            int error;
    
            ...
            error = request_firmware(&fw_entry, fw_name, dev);
            if (error) {
                    dev_err(dev, "failed to request firmware %s: %d",
                            fw_name, error);
                    return error;
            }
    
            error = check_firmware_valid(fw_entry);
            if (error)
                    return error;
    
            guard(mutex)(&instance->lock);
    
            error = use_firmware(instance, fw);
            if (error)
                    return error;
    
            return 0;
    }
    
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Acked-by: Luis Chamberalin <mcgrof@kernel.org>
    Link: https://lore.kernel.org/r/ZaeQw7VXhnirX4pQ@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: d48795b5cd68 ("Input: ims-pcu - fix firmware leak in async update")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fpga: dfl-afu: validate DMA mapping length in afu_dma_map_region() [+ + +]
Author: Sebastian Alba Vives <sebasjosue84@gmail.com>
Date:   Tue Jul 21 15:36:06 2026 -0400

    fpga: dfl-afu: validate DMA mapping length in afu_dma_map_region()
    
    [ Upstream commit fc3b071a7c8dc0f5d56defddf6e6fd5aaa3e1e27 ]
    
    afu_ioctl_dma_map() accepts a 64-bit length from userspace via
    DFL_FPGA_PORT_DMA_MAP ioctl without an upper bound check. The value
    is passed to afu_dma_pin_pages() where npages is derived as
    length >> PAGE_SHIFT and passed to pin_user_pages_fast() which takes
    int nr_pages, causing implicit truncation if length is very large.
    
    Validate map.length at the ioctl entry point before calling
    afu_dma_map_region(), rejecting values whose page count exceeds
    INT_MAX.
    
    Fixes: fa8dda1edef9 ("fpga: dfl: afu: add DFL_FPGA_PORT_DMA_MAP/UNMAP ioctls support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sebastian Alba Vives <sebasjosue84@gmail.com>
    Reviewed-by: Xu Yilun <yilun.xu@intel.com>
    Link: https://lore.kernel.org/r/20260518190742.61426-3-sebasjosue84@gmail.com
    Signed-off-by: Xu Yilun <yilun.xu@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs/ntfs3: Undo critial modificatins to keep directory consistency [+ + +]
Author: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Date:   Fri Jul 24 06:49:10 2026 -0400

    fs/ntfs3: Undo critial modificatins to keep directory consistency
    
    [ Upstream commit 63e92a0c5a0d5816803907a3e30a91ef72c903a5 ]
    
    Affect xfstest 320.
    
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Stable-dep-of: f1df9d771df4 ("ntfs3: validate split-point offset in indx_insert_into_buffer")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs/resctrl: Fix double-add of pseudo-locked region's RMID to free list [+ + +]
Author: Reinette Chatre <reinette.chatre@intel.com>
Date:   Wed Jul 29 14:02:02 2026 -0400

    fs/resctrl: Fix double-add of pseudo-locked region's RMID to free list
    
    [ Upstream commit b9f089723aee892efc77c349ae47a6b452b293c4 ]
    
    A pseudo-locked group's RMID is freed when it is created. On unmount
    rmdir_all_sub() unconditionally frees all RMID of all groups, resulting
    in a double-free of the pseudo-locked group's RMID. The consequence of this
    is that the original free results in the pseudo-locked group's RMID being
    added to the rmid_free_lru linked list and the second free then attempts
    to add the same RMID entry to the rmid_free_lru again.
    
    Do not double-free a pseudo-locked group's RMID.
    
    Fixes: e0bdfe8e36f3 ("x86/intel_rdt: Support creation/removal of pseudo-locked region")
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Cc: <stable@kernel.org>
    Link: https://patch.msgid.link/551432dd7e624a862b8e58314c38aaba0afff3e9.1783377598.git.reinette.chatre@intel.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fs: don't block write during exec on pre-content watched files [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Wed Aug 12 05:11:57 2026 -0400

    fs: don't block write during exec on pre-content watched files
    
    [ Upstream commit 0357ef03c94ef835bd44a0658b8edb672a9dbf51 ]
    
    Commit 2a010c412853 ("fs: don't block i_writecount during exec") removed
    the legacy behavior of getting ETXTBSY on attempt to open and executable
    file for write while it is being executed.
    
    This commit was reverted because an application that depends on this
    legacy behavior was broken by the change.
    
    We need to allow HSM writing into executable files while executed to
    fill their content on-the-fly.
    
    To that end, disable the ETXTBSY legacy behavior for files that are
    watched by pre-content events.
    
    This change is not expected to cause regressions with existing systems
    which do not have any pre-content event listeners.
    
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Acked-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/20241128142532.465176-1-amir73il@gmail.com
    Stable-dep-of: db1856ea9196 ("binfmt_misc: restore write access when removing an entry")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fscrypt: use the mount idmap for the owner check in fscrypt_ioctl_set_policy() [+ + +]
Author: Zhan Xusheng <zhanxusheng@xiaomi.com>
Date:   Tue Aug 18 11:38:21 2026 -0700

    fscrypt: use the mount idmap for the owner check in fscrypt_ioctl_set_policy()
    
    commit cf6c993c0feca7984797e634deba3c80342e199a upstream.
    
    fscrypt_ioctl_set_policy() calls inode_owner_or_capable() with
    &nop_mnt_idmap before allowing an encryption policy to be set, instead
    of the idmap of the mount the ioctl was issued on.
    
    fscrypt is used by filesystems that support idmapped mounts (e.g. ext4,
    f2fs), so on such a mount this compares the caller's fsuid against the
    unmapped on-disk owner rather than the mapped owner: the actual owner
    can be wrongly denied with -EACCES and an unrelated caller wrongly
    allowed.  Use file_mnt_idmap(filp) instead.
    
    Fixes: 14f3db5542e6 ("ext4: support idmapped mounts")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com>
    Link: https://patch.msgid.link/20260725080004.929328-1-zhanxusheng1024@gmail.com
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
fsnotify: opt-in for permission events at file open time [+ + +]
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Wed Aug 12 05:11:56 2026 -0400

    fsnotify: opt-in for permission events at file open time
    
    [ Upstream commit a94204f4d48e28a711b7ed10399f749286c433e3 ]
    
    Legacy inotify/fanotify listeners can add watches for events on inode,
    parent or mount and expect to get events (e.g. FS_MODIFY) on files that
    were already open at the time of setting up the watches.
    
    fanotify permission events are typically used by Anti-malware sofware,
    that is watching the entire mount and it is not common to have more that
    one Anti-malware engine installed on a system.
    
    To reduce the overhead of the fsnotify_file_perm() hooks on every file
    access, relax the semantics of the legacy FAN_ACCESS_PERM event to generate
    events only if there were *any* permission event listeners on the
    filesystem at the time that the file was opened.
    
    The new semantic is implemented by extending the FMODE_NONOTIFY bit into
    two FMODE_NONOTIFY_* bits, that are used to store a mode for which of the
    events types to report.
    
    This is going to apply to the new fanotify pre-content events in order
    to reduce the cost of the new pre-content event vfs hooks.
    
    [Thanks to Bert Karwatzki <spasswolf@web.de> for reporting a bug in this
    code with CONFIG_FANOTIFY_ACCESS_PERMISSIONS disabled]
    
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/linux-fsdevel/CAHk-=wj8L=mtcRTi=NECHMGfZQgXOp_uix1YVh04fEmrKaMnXA@mail.gmail.com/
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Link: https://patch.msgid.link/5ea5f8e283d1edb55aa79c35187bfe344056af14.1731684329.git.josef@toxicpanda.com
    Stable-dep-of: db1856ea9196 ("binfmt_misc: restore write access when removing an entry")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ftrace: Fix off-by-one fentry site disable in ftrace_free_mem() [+ + +]
Author: Josh Poimboeuf <jpoimboe@kernel.org>
Date:   Wed Aug 5 21:56:46 2026 -0700

    ftrace: Fix off-by-one fentry site disable in ftrace_free_mem()
    
    commit 8b8292d6487c81bd57c2605a9b404b1cf8f1edfb upstream.
    
    When a module's init text is freed, do_init_module() calls
    ftrace_free_mem() with a half-open [start, end) range.  However the
    ftrace_cmp_recs() comparator treats the upper bound as inclusive, as all
    its other users do, passing 'ip + size - 1'.  So ftrace_free_mem() can
    delete a record sitting exactly at 'end', which is outside the freed
    range.
    
    For a kernel without CFI or IBT, the first record of a function is at
    the function start, which for the first function in a module is also the
    base of its text allocation.  As the module allocator packs its regions,
    that address is often the 'end' passed by a neighboring module's
    do_init_module(), causing the first function's ftrace location to get
    disabled, preventing an attempt to livepatch it:
    
      livepatch: failed to find location for function 'pcspkr_probe'
    
    Convert the exclusive end to the inclusive 'end - 1' the comparator
    expects, and return early for an empty range to avoid the subtraction
    from underflowing when the init text size is zero.
    
    Cc: stable@vger.kernel.org
    Fixes: 42c269c88dc1 ("ftrace: Allow for function tracing to record init functions on boot up")
    Link: https://patch.msgid.link/1b5ccfa8095bdb1277f84af1c2c2e2205aca03ae.1785992188.git.jpoimboe@kernel.org
    Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
    Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpio: mt7621: avoid corruption of shared interrupt trigger state [+ + +]
Author: Sergio Paracuellos <sergio.paracuellos@gmail.com>
Date:   Tue Jul 28 12:10:39 2026 -0400

    gpio: mt7621: avoid corruption of shared interrupt trigger state
    
    [ Upstream commit 1781172526d1092323af443fa03f00e6de560401 ]
    
    The bank-shared fields like 'rising' and 'falling' are modified using
    non-atomic read-modify-write operations. Since every gpio chip instance
    represents an entire bank of 32 pins, if 'mediatek_gpio_irq_type()' is
    called concurrently for different IRQs on the same bank a possible overwrite
    of each other's configuration is possible. Thus, protect this state with
    'gpio_generic_lock_irqsave' lock in the same way it is handled in irp_chip
    'mediatek_gpio_irq_mask()' and 'mediatek_gpio_irq_unmask()' callbacks.
    
    Cc: stable@vger.kernel.org
    Reported-by: Sashiko <sashiko-bot@kernel.org>
    Fixes: 4ba9c3afda41 ("gpio: mt7621: Add a driver for MT7621")
    Signed-off-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>
    Link: https://patch.msgid.link/20260626060112.2498324-2-sergio.paracuellos@gmail.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    [ Changed `guard(gpio_generic_lock_irqsave)(&rg->chip)` to `guard(spinlock_irqsave)(&rg->lock)` as the generic GPIO chip lock does not exist in this tree. ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

gpio: tegra: do not call pinctrl for GPIO direction [+ + +]
Author: Runyu Xiao <runyu.xiao@seu.edu.cn>
Date:   Tue Jul 28 10:27:50 2026 -0400

    gpio: tegra: do not call pinctrl for GPIO direction
    
    [ Upstream commit d3e91a95b2b0fc6336dbf3ec90d831a1654d2720 ]
    
    tegra_gpio_direction_input() and tegra_gpio_direction_output() already
    program the GPIO controller direction registers directly. The additional
    pinctrl_gpio_direction_input/output() calls do not add a Tegra pinctrl
    operation, because the Tegra pinmux ops provide GPIO request/free
    handling but no gpio_set_direction hook.
    
    The extra call still enters the pinctrl core and takes pctldev->mutex.
    Shared GPIO users can call the direction path while holding their
    per-line spinlock, so this otherwise redundant pinctrl direction call can
    sleep in an atomic context.
    
    This was found by our static analysis tool and then confirmed by manual
    review of tegra_gpio_probe(), the Tegra GPIO direction callbacks and the
    Tegra pinctrl ops. The reviewed path has a default non-sleeping
    struct gpio_chip while the direction callback still enters the pinctrl
    mutex path.
    
    A directed runtime validation kept the same non-sleeping chip registration
    and drove:
    
      gpio_shared_proxy_direction_output()
      gpiod_direction_output_raw_commit()
      tegra_gpio_direction_output()
      pinctrl_gpio_direction_output()
    
    Lockdep reported a sleep-in-atomic warning with the shared GPIO spinlock
    held and pinctrl_get_device_gpio_range() plus tegra_gpio_direction_output()
    on the stack.
    
    Do not mark the whole chip as can_sleep to paper over this: can_sleep
    describes whether get()/set() may sleep, and Tegra value access is MMIO.
    Remove the redundant pinctrl direction calls and keep pinctrl involvement
    in the existing request/free path.
    
    Fixes: 11da90541283 ("gpio: tegra: Fix offset of pinctrl calls")
    Cc: stable@vger.kernel.org
    Signed-off-by: Runyu Xiao <runyu.xiao@seu.edu.cn>
    Link: https://patch.msgid.link/20260619152439.1239561-1-runyu.xiao@seu.edu.cn
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
i2c: bcm-iproc: remove printout on handled timeouts [+ + +]
Author: Wolfram Sang <wsa+renesas@sang-engineering.com>
Date:   Wed Aug 12 05:59:30 2026 -0400

    i2c: bcm-iproc: remove printout on handled timeouts
    
    [ Upstream commit 796e2c260187e32530cf343546ba1cdf2e2f5491 ]
    
    I2C and SMBus timeouts are not something the user needs to be informed
    about on controller level. The client driver may know if that really is
    a problem and give more detailed information to the user. The controller
    should just pass this information upwards. Remove the printout.
    
    Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Stable-dep-of: 98f2e9e6d6f9 ("i2c: iproc: reset bus after timeout if START_BUSY is stuck")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: davinci: Unregister cpufreq notifier on probe failure [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
Date:   Tue Jul 21 19:58:46 2026 -0400

    i2c: davinci: Unregister cpufreq notifier on probe failure
    
    [ Upstream commit e43f32816a1b1fe5a86279411626fe3a9be56d45 ]
    
    davinci_i2c_probe() registers a cpufreq transition notifier before adding
    the I2C adapter.  If i2c_add_numbered_adapter() fails, the probe error path
    releases the device resources without unregistering the notifier.
    
    Add a dedicated error path to unregister the cpufreq notifier after
    i2c_add_numbered_adapter() fails.
    
    Fixes: 82c0de11b734 ("i2c: davinci: Add cpufreq support")
    Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
    Cc: <stable@vger.kernel.org> # v2.6.36+
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260610030513.2651018-1-haoxiang_li2024@163.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: imx: fix locked bus on SMBus block-read of 0 (atomic) [+ + +]
Author: Vincent Jardin <vjardin@free.fr>
Date:   Mon Jul 27 08:43:54 2026 -0400

    i2c: imx: fix locked bus on SMBus block-read of 0 (atomic)
    
    [ Upstream commit cb2fc37857693b55909fb77dc2c87cfbc1cdc476 ]
    
    SMBus 3.1 6.5.7 allows a Block Read byte count of 0, but the atomic
    (polling) path rejects it as -EPROTO. Worse, it returns without a
    NACK+STOP: the next receive cycle has already started, so the target
    keeps holding SDA and the bus stays stuck until a power cycle for
    this i2c controller.
    
    Reading I2DR to obtain the count likewise arms the next byte on the
    count > I2C_SMBUS_BLOCK_MAX path, which also returned -EPROTO directly
    and left the bus held.
    
    Handle both: NACK the in-flight dummy byte (TXAK) and extend msgs->len so
    the existing last-byte handling emits STOP; the dummy byte is discarded.
    A count of 0 is a valid empty block read; a count above
    I2C_SMBUS_BLOCK_MAX is still reported as -EPROTO, but only after the bus
    has been released.
    
    The interrupt-driven path has the same flaw from a later commit and is
    fixed separately, as it carries a different Fixes: tag and stable range.
    
    Fixes: 8e8782c71595 ("i2c: imx: add SMBus block read support")
    Signed-off-by: Vincent Jardin <vjardin@free.fr>
    Cc: <stable@vger.kernel.org> # v3.16+
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Acked-by: Carlos Song <carlos.song@nxp.com>
    Reviewed-by: Stefan Eichenberger <eichest@gmail.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260713-for-upstream-i2c-lx2160-fix-v1-v3-1-073ac9e103a5@free.fr
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: imx: separate atomic, dma and non-dma use case [+ + +]
Author: Stefan Eichenberger <stefan.eichenberger@toradex.com>
Date:   Mon Jul 27 08:43:53 2026 -0400

    i2c: imx: separate atomic, dma and non-dma use case
    
    [ Upstream commit b460b15b3cc23ef3639cc51043bf8b2a70ca1878 ]
    
    Separate the atomic, dma and non-dma use case as a preparation step for
    moving the non-dma use case to the isr to avoid rescheduling while a
    transfer is in progress.
    
    Signed-off-by: Stefan Eichenberger <stefan.eichenberger@toradex.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Acked-by: Oleksij Rempel <o.rempel@pengutronix.de>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Stable-dep-of: cb2fc3785769 ("i2c: imx: fix locked bus on SMBus block-read of 0 (atomic)")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

i2c: iproc: reset bus after timeout if START_BUSY is stuck [+ + +]
Author: Jonas Gorski <jonas.gorski@bisdn.de>
Date:   Wed Aug 12 05:59:31 2026 -0400

    i2c: iproc: reset bus after timeout if START_BUSY is stuck
    
    [ Upstream commit 98f2e9e6d6f91a6abb43f166b244b428ba85fa2b ]
    
    If a transaction times out, the START_BUSY signal can stay up, and
    subsequent transactaction attempts will fail as the bus is still
    considered busy.
    
    I can easily trigger this by attempting to read from an address with no
    device, e.g. when running i2cdetect. After the first read times out, all
    subsequent read attempts return busy.
    
    To get to a working state again, the controller needs to be reset to
    clear the START_BUSY signal. So check for START_BUSY still asserted on a
    timeout, and do reset in case it is,
    
    This is also done by the original non-upstream iproc-smbus driver
    implementation [1].
    
    Works around situations like:
    
        bcm-iproc-2c 1803b000.i2c: transaction timed out
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        bcm-iproc-2c 1803b000.i2c: bus is busy
        ...
    
    where the bus never recovers after a timeout.
    
    [1] https://github.com/opencomputeproject/onie/blob/master/patches/kernel/3.2.69/driver-iproc-smbus.patch
    
    Fixes: e6e5dd3566e0 ("i2c: iproc: Add Broadcom iProc I2C Driver")
    Signed-off-by: Jonas Gorski <jonas.gorski@bisdn.de>
    Cc: <stable@vger.kernel.org> # v4.0+
    Acked-by: Ray Jui <ray.jui@broadcom.com>
    Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
    Link: https://lore.kernel.org/r/20260717085507.34209-1-jonas.gorski@bisdn.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ice: fix memory leak in ice_lbtest_prepare_rings() [+ + +]
Author: Dawei Feng <dawei.feng@seu.edu.cn>
Date:   Wed Aug 12 05:11:29 2026 -0400

    ice: fix memory leak in ice_lbtest_prepare_rings()
    
    [ Upstream commit 3a9de5590da4ffd9e9c541c4c4d492aa2b54cf6e ]
    
    ice_lbtest_prepare_rings() frees Rx rings only when
    ice_vsi_start_all_rx_rings() fails. If ice_vsi_setup_rx_rings() fails
    after allocating some descriptors, or if ice_vsi_cfg_lan() fails after
    the Rx rings were prepared, the function reaches the Tx cleanup path
    without releasing the initialized Rx resources.
    
    Fix this by adding separate unwind paths for Rx setup failure and LAN
    configuration failure. The Rx setup failure path releases the partially
    prepared Rx rings before freeing Tx rings, while later failures first
    undo the LAN Tx configuration and then release the Rx rings in reverse
    setup order.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available. Manual inspection confirms that the bug is still
    present in v7.1-rc7.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have an
    Intel E800 Series adapter available to run the ethtool offline loopback
    selftest, no runtime testing was able to be performed.
    
    Fixes: 0e674aeb0b77 ("ice: Add handler for ethtool selftest")
    Cc: stable@vger.kernel.org
    Signed-off-by: Dawei Feng <dawei.feng@seu.edu.cn>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel)
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ice: fix VF interrupts cleanup [+ + +]
Author: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
Date:   Tue Aug 11 20:43:12 2026 -0400

    ice: fix VF interrupts cleanup
    
    [ Upstream commit fb096882095e5a8d6b5159e43793d4a38a0c5b1f ]
    
    When a virtual function sends an IRQ map command, the PF will set up
    interrupts according to that request. However, because these interrupts are
    never reset, the next time Virtual Function initializes, the interrupts are
    still enabled for a given VF, which leads to performance degradation in
    certain cases due to interrupts being unexpectedly enabled and thus causing
    interrupt floods.
    
    Cc: stable@vger.kernel.org
    Fixes: 1071a8358a28 ("ice: Implement virtchnl commands for AVF support")
    Suggested-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
    Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
    Signed-off-by: Dawid Osuchowski <dawid.osuchowski@linux.intel.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Tested-by: Patryk Holda <patryk.holda@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    [ changed the file path for the `ice_vf_ena_rxq_interrupt` hunk from `ice/virt/queues.c` to `ice_virtchnl.c`, which predates the upstream directory split ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
igc: remove napi_synchronize() in igc_down() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Tue Aug 11 08:35:07 2026 -0400

    igc: remove napi_synchronize() in igc_down()
    
    [ Upstream commit 5ffab5b9589c50e4cfc0cf36ffd76c89422d4019 ]
    
    When an AF_XDP zero-copy application is killed abruptly, the XSK pool is
    torn down but NAPI keeps polling. igc_clean_rx_irq_zc() then returns the
    full budget on every poll, so napi_complete_done() never clears
    NAPI_STATE_SCHED.
    
    igc_down() calls napi_synchronize() before napi_disable(), so it spins
    forever waiting for that bit and the interface never goes down. Drop the
    napi_synchronize() and let napi_disable() do the job -- it sets
    NAPI_STATE_DISABLE, which forces the stuck poll to complete. Reorder it
    ahead of igc_set_queue_napi() so the NAPI mapping is cleared only after
    polling has stopped, matching the recent igb fix b1e067240379.
    
    Fixes: fc9df2a0b520 ("igc: Enable RX via AF_XDP zero-copy")
    Suggested-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Reviewed-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
    Reviewed-by: Dima Ruinskiy <dima.ruinskiy@intel.com>
    Tested-by: Moriya Kadosh <moriyax.kadosh@intel.com>
    Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Input: atkbd - skip deactivate for Xiaomi Book Pro 14's internal keyboard [+ + +]
Author: Zhefu Zhang <a723356@gmail.com>
Date:   Sun Aug 2 15:36:54 2026 -0700

    Input: atkbd - skip deactivate for Xiaomi Book Pro 14's internal keyboard
    
    commit 3a046db33bb9f28b43a951a7a090db771dc0f8b3 upstream.
    
    The internal keyboard of the Xiaomi Book Pro 14 does not work unless
    atkbd skips deactivating it at the end of atkbd_probe().
    
    Using 'i8042.dumbkbd=1' also makes the keyboard work, but then the driver
    never writes to the keyboard at all, so the Caps Lock LED is lost. The
    atkbd_deactivate_fixup quirk fixes both without a boot parameter.
    
    DMI: XIAOMI Xiaomi Book Pro 14/TM2424, BIOS XMAPT4B0P0909 05/06/2026
    
    Signed-off-by: Zhefu Zhang <a723356@gmail.com>
    Reviewed-by: Andrew Zhou <zhoulol888@gmail.com>
    Link: https://patch.msgid.link/20260802031559.19701-1-a723356@gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: focaltech - fix array out-of-bounds in focaltech_process_rel_packet [+ + +]
Author: Richard Davies <richard@arachsys.com>
Date:   Sun Aug 2 17:53:10 2026 -0700

    Input: focaltech - fix array out-of-bounds in focaltech_process_rel_packet
    
    commit 296736076b3fd078742651c719555a488624023a upstream.
    
    Make finger2 (and also finger1) unsigned, so that if the finger index in
    the packet is 0 then subtracting 1 creates an array index which overflows
    above the existing check for FOC_MAX_FINGERS, as the existing comment says
    it should, instead of writing to state->fingers[-1].
    
    Fixes: 05be1d079ec0 ("Input: psmouse - support for the FocalTech PS/2 protocol extensions")
    Signed-off-by: Richard Davies <richard@arachsys.com>
    Link: https://patch.msgid.link/20260701190932.14960-1-richard@arachsys.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: iforce - validate input packet lengths [+ + +]
Author: Pengpeng Hou <pengpeng@iscas.ac.cn>
Date:   Fri Jul 24 20:46:27 2026 -0700

    Input: iforce - validate input packet lengths
    
    commit 5751c781d3c97ab6ce0e2a966156ed882152c415 upstream.
    
    iforce_process_packet() reads fixed fields from joystick, wheel and
    status packets without first checking their lengths. In particular, the
    shared hats-and-buttons helper unconditionally reads data[6]. The status
    tail is a sequence of 16-bit effect addresses, but an incomplete final
    address is also consumed. A successful zero-length USB URB additionally
    reads the packet ID before the common parser is called.
    
    Reject the zero-length USB transfer, require the seven-byte joystick and
    wheel prefixes and the two-byte status prefix, and consume only complete
    status-tail addresses.
    
    Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
    Link: https://patch.msgid.link/20260720115018.75045-1-pengpeng@iscas.ac.cn
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: ims-pcu - fix firmware leak in async update [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon Jul 27 20:57:57 2026 -0400

    Input: ims-pcu - fix firmware leak in async update
    
    [ Upstream commit d48795b5cd6828d36b707e8d62fc9e5c90e004ab ]
    
    The firmware object was not being released if validation failed.
    Use __free(firmware) to ensure the firmware is always released.
    
    Fixes: 628329d52474 ("Input: add IMS Passenger Control Unit driver")
    Cc: stable@vger.kernel.org
    Reported-by: Sashiko bot <sashiko-bot@kernel.org>
    Assisted-by: Gemini:gemini-3.1-pro
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: mms114 - fix touch indexing for MMS134S and MMS136 [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Jul 21 19:58:51 2026 -0400

    Input: mms114 - fix touch indexing for MMS134S and MMS136
    
    [ Upstream commit a6ac4e24c1a8a533bb61035184fdcc7eede4cc8d ]
    
    The MMS134S and MMS136 touch controllers have an event size of 6 bytes
    rather than 8 bytes. When __mms114_read_reg() reads the touch data
    packet from the device into the touch buffer, the events are packed
    tightly at 6-byte intervals. However, the driver iterates through the
    events using standard C array indexing (touch[index]), where each
    element is sizeof(struct mms114_touch) (8 bytes) apart. As a result, any
    touch events beyond the first one are read from incorrect offsets and
    parsed improperly.
    
    Fix this by explicitly calculating the byte offset for each touch event
    based on the device's specific event size.
    
    Fixes: 53fefdd1d3a3 ("Input: mms114 - support MMS136")
    Fixes: ab108678195f ("Input: mms114 - support MMS134S")
    Reported-by: sashiko-bot@kernel.org
    Assisted-by: Antigravity:gemini-3.5-flash
    Reviewed-by: Bryam Vargas <hexlabsecurity@proton.me>
    Link: https://patch.msgid.link/20260616050912.1531241-1-dmitry.torokhov@gmail.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: mms114 - reject an oversized device packet size [+ + +]
Author: Bryam Vargas <hexlabsecurity@proton.me>
Date:   Tue Jul 21 20:50:57 2026 -0400

    Input: mms114 - reject an oversized device packet size
    
    [ Upstream commit 66725039f7090afe14c31bd259e2059a68f04023 ]
    
    mms114_interrupt() reads a packet of touch data from the device into a
    fixed-size on-stack buffer
    
            struct mms114_touch touch[MMS114_MAX_TOUCH];
    
    which holds MMS114_MAX_TOUCH (10) events of MMS114_EVENT_SIZE (8) bytes,
    i.e. 80 bytes. The length of the I2C read into it is taken verbatim from
    the device:
    
            packet_size = mms114_read_reg(data, MMS114_PACKET_SIZE);
            if (packet_size <= 0)
                    goto out;
            ...
            error = __mms114_read_reg(data, MMS114_INFORMATION, packet_size,
                            (u8 *)touch);
    
    packet_size is a single device register byte (0x0F) and the only check
    is the lower bound packet_size <= 0; it is never bounded against the
    size of touch[]. A malfunctioning, malicious or counterfeit controller
    (or an attacker tampering with the I2C bus) can report a packet_size of
    up to 255, so __mms114_read_reg() writes up to 175 bytes past the end of
    touch[] on the IRQ-thread stack: a stack out-of-bounds write that can
    overwrite the stack canary, saved registers and the return address.
    
    A well-formed device never reports more than the buffer holds, so reject
    an oversized packet and drop the report, consistent with the handler's
    other error paths, rather than reading past the buffer.
    
    Fixes: 07b8481d4aff ("Input: add MELFAS mms114 touchscreen driver")
    Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260612-b4-disp-dc4b8dc4-v1-1-d7cb0a828d92@proton.me
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    [ changed `&client->dev` to `&data->client->dev` since 6.1's interrupt handler lacks the `client` local variable ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: psxpad-spi - set driver data before use [+ + +]
Author: Linmao Li <lilinmao@kylinos.cn>
Date:   Fri Jul 24 18:42:06 2026 -0700

    Input: psxpad-spi - set driver data before use
    
    commit 732f38c36059e68ba3b4b89c56911d777fd3185c upstream.
    
    psxpad_spi_suspend() retrieves the controller state with
    spi_get_drvdata(), but probe never stores it, so suspend dereferences a
    NULL pointer. Store it during probe.
    
    Fixes: 8be193c7b1f4 ("Input: add support for PlayStation 1/2 joypads connected via SPI")
    Signed-off-by: Linmao Li <lilinmao@kylinos.cn>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260721055551.1714965-1-lilinmao@kylinos.cn
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: sur40 - fix input device registration ordering [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon Jun 15 22:12:29 2026 -0700

    Input: sur40 - fix input device registration ordering
    
    commit 9da976eb649c9e2f588a4499410e4d8af687925f upstream.
    
    In sur40_probe(), input_register_device() was previously called early before
    the V4L2 video device and vb2_queue components were fully initialized. If
    userspace opened the input device immediately upon registration, sur40_open()
    would trigger and start the sur40_poll() worker thread. This worker thread
    invokes sur40_process_video() and accesses the uninitialized vb2_queue
    structure, leading to a data race and potential system crash.
    
    Furthermore, if V4L2 or video registration failed after input_register_device()
    succeeded, the error path fell through to calling input_free_device() on a
    successfully registered device instead of input_unregister_device(), corrupting
    input core state.
    
    Move input_register_device() to the very end of sur40_probe(). This ensures
    the V4L2 and video queue structures are fully initialized before polling can
    start, and naturally resolves the error path bug since input_free_device()
    is now only called when input registration has not yet occurred.
    
    To maintain strict LIFO (Last-In, First-Out) teardown ordering, also move
    input_unregister_device() to the very beginning of sur40_disconnect(). This
    guarantees that the input polling worker thread is stopped before V4L2
    video components or control handlers are unregistered.
    
    Reported-by: sashiko-bot@kernel.org
    Cc: stable@vger.kernel.org
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/20260616051235.1549517-1-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: sur40 - fix V4L error path cleanup [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon Jun 15 22:12:30 2026 -0700

    Input: sur40 - fix V4L error path cleanup
    
    commit 062dc4693e2c10d77de06f61e6f3faf37c0a8383 upstream.
    
    In sur40_probe(), if video_register_device() fails, the error path jumps to
    err_unreg_video. This incorrectly attempts to unregister a video device
    that was never successfully registered, and fails to free the V4L2 control
    handler (v4l2_ctrl_handler_free) that was initialized immediately prior.
    
    Fix this by introducing an err_free_ctrl label to properly free the V4L2
    control handler and bypass video_unregister_device() when video device
    registration fails.
    
    Reported-by: sashiko-bot@kernel.org
    Cc: stable@vger.kernel.org
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/20260616051235.1549517-2-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics-rmi4 - block s_input when F54 queue is busy [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Thu Jun 25 22:17:54 2026 -0700

    Input: synaptics-rmi4 - block s_input when F54 queue is busy
    
    commit fbfd76746adc16d64be29ff113f673b70bc3f5c2 upstream.
    
    Changing the input (diagnostic report type) mid-stream changes the
    report size. Since V4L2 buffers are allocated based on the size at
    stream start, changing the input while streaming could lead to a
    heap buffer overflow if the new size is larger than the allocated
    buffers.
    
    Prevent this by blocking VIDIOC_S_INPUT with -EBUSY if the V4L2 queue
    is busy (streaming).
    
    Fixes: 3a762dbd5347 ("[media] Input: synaptics-rmi4 - add support for F54 diagnostics")
    Cc: stable@vger.kernel.org
    Assisted-by: Antigravity:gemini-3.5-flash
    Reviewed-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Link: https://patch.msgid.link/20260626051802.4033172-5-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics-rmi4 - bound the F54 report size to the allocated buffer [+ + +]
Author: Bryam Vargas <hexlabsecurity@proton.me>
Date:   Thu Jun 25 22:17:52 2026 -0700

    Input: synaptics-rmi4 - bound the F54 report size to the allocated buffer
    
    commit 49c5adc2b7d6e43c5cf033e1c86fdb9c16ababb1 upstream.
    
    rmi_f54_work() reads a diagnostics report from the device into
    f54->report_data, sizing the transfer with rmi_f54_get_report_size():
    
            report_size = rmi_f54_get_report_size(f54);
            ...
            for (i = 0; i < report_size; i += F54_REPORT_DATA_SIZE) {
                    int size = min(F54_REPORT_DATA_SIZE, report_size - i);
                    ...
                    rmi_read_block(.., f54->report_data + i, size);
            }
    
    report_data is allocated once at probe from F54's own electrode counts
    (array3_size(f54->num_tx_electrodes, f54->num_rx_electrodes, sizeof(u16))),
    but rmi_f54_get_report_size() computes the size from
    drv_data->num_*_electrodes when those are set, i.e. from the F55
    function's electrode counts. Both counts come straight from device
    queries (F54 and F55 each report up to 255 electrodes) and nothing
    constrains the F55 counts to the F54 ones.
    
    A malicious or malfunctioning RMI4 device that reports larger F55
    electrode counts than its F54 counts makes report_size exceed the
    allocation, so the read loop writes past report_data (and the V4L2
    dequeue memcpy() then reads past it). On conforming hardware the F55
    configured electrodes are a subset of the F54 physical electrodes, so
    report_size never exceeds the buffer and well-behaved devices are
    unaffected.
    
    Record the allocation size and reject a report that does not fit,
    mirroring the existing zero-size check.
    
    Fixes: c762cc68b6a1 ("Input: synaptics-rmi4 - propagate correct number of rx and tx electrodes to F54")
    Cc: stable@vger.kernel.org
    Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/20260626051802.4033172-3-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics-rmi4 - fix F55 transmitter electrode count typo [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Thu Jun 25 22:17:50 2026 -0700

    Input: synaptics-rmi4 - fix F55 transmitter electrode count typo
    
    commit 6058f0fea10f3caf63a435677358d1b8e9325114 upstream.
    
    During F55 sensor detection, the transmitter (TX) electrode count was
    incorrectly assigned the value of the receiver (RX) electrode count
    due to copy-paste typos.
    
    This incorrect value was then propagated to the driver data and used
    by F54 to determine the diagnostics report size. On devices with more
    RX than TX electrodes, this inflated the perceived TX count, leading
    to incorrect report size calculations and potential out-of-bounds
    buffer accesses.
    
    Fix the typos by correctly assigning the TX electrode counts.
    
    Fixes: 6adba43fd222 ("Input: synaptics-rmi4 - add support for F55 sensor tuning")
    Fixes: c762cc68b6a1 ("Input: synaptics-rmi4 - propagate correct number of rx and tx electrodes to F54")
    Reported-by: sashiko-bot@kernel.org
    Cc: stable@vger.kernel.org
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/20260626051802.4033172-1-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics-rmi4 - propagate F54 worker errors to V4L2 queue [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Thu Jun 25 22:17:55 2026 -0700

    Input: synaptics-rmi4 - propagate F54 worker errors to V4L2 queue
    
    commit 8786d74bf50e6797b6f655eb381ef6b25451161f upstream.
    
    Previously, rmi_f54_buffer_queue() waited for the worker thread to
    finish but ignored whether it succeeded. If the worker failed (e.g.,
    due to a timeout or register read failure), the queue thread would
    silently return success, delivering stale or uninitialized memory to
    userspace.
    
    Add a 'report_error' field to struct f54_data to store the worker's exit
    status. Check this field in rmi_f54_buffer_queue() after the worker
    finishes, and mark the buffer as VB2_BUF_STATE_ERROR if an error
    occurred.
    
    Fixes: 3a762dbd5347 ("[media] Input: synaptics-rmi4 - add support for F54 diagnostics")
    Reported-by: sashiko-bot@kernel.org
    Cc: stable@vger.kernel.org
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/20260626051802.4033172-6-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: synaptics-rmi4 - zero report size on F54 work error [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Thu Jun 25 22:17:51 2026 -0700

    Input: synaptics-rmi4 - zero report size on F54 work error
    
    commit dc76c3c8e8ad09362b8c1561f3928288c15cba2e upstream.
    
    In rmi_f54_work(), if an error occurs during report request or command
    verification, the code jumped directly to the 'error' label, bypassing
    the 'abort' label where f54->report_size was normally zeroed out.
    
    This left f54->report_size containing its previous successful payload
    size. If a user then altered the V4L2 format to a smaller size, and a
    subsequent run failed, rmi_f54_buffer_queue() would copy the stale,
    larger payload size into the shrunken V4L2 buffer, causing a heap
    buffer overflow.
    
    Fix this by merging the 'abort' and 'error' labels into a single 'out'
    exit path, and ensuring that f54->report_size is always set to 0 on
    failure by checking for error and zeroing the local report_size first.
    
    Fixes: 3a762dbd5347 ("[media] Input: synaptics-rmi4 - add support for F54 diagnostics")
    Cc: stable@vger.kernel.org
    Reported-by: sashiko-bot@kernel.org
    Assisted-by: Antigravity:gemini-3.5-flash
    Link: https://patch.msgid.link/20260626051802.4033172-2-dmitry.torokhov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
iommu/amd: Don't split flush for amd_iommu_domain_flush_all() [+ + +]
Author: Weinan Liu <wnliu@google.com>
Date:   Tue Jul 21 13:23:54 2026 -0400

    iommu/amd: Don't split flush for amd_iommu_domain_flush_all()
    
    [ Upstream commit 69fe699afe1afcb730164b86c228483c2da05f94 ]
    
    We have observed multiple full invalidations occurring during device
    detach when we are done using the vfio-device.
    
    blocked_domain_attach_device()
      -> detach_device()
        -> amd_iommu_domain_flush_all()
          -> amd_iommu_domain_flush_pages(..., CMD_INV_IOMMU_ALL_PAGES_ADDRESS)
    
            while (size != 0) {
    
              -> __domain_flush_pages( flush_size /* power of 2 flush_size */)
                -> domain_flush_pages_v1()
                  -> build_inv_iommu_pages()
                    -> build_inv_address()
    
             }
    
    build_inv_address() will trigger a full invalidation  if the chunk
    size > (1 << 51). Consequently, the guest will issue multiple full
    invalidations for a single call to  amd_iommu_domain_flush_all()
    
    Without this patch, we will see 10 time instead of 1 time full
    invalidations for every amd_iommu_domain_flush_all().
    
    Cc: stable@vger.kernel.org
    Fixes: a270be1b3fdf ("iommu/amd: Use only natural aligned flushes in a VM")
    Suggested-by: Josef Bacik <josef@toxicpanda.com>
    Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Weinan Liu <wnliu@google.com>
    Reviewed-by: Wei Wang <wei.w.wang@hotmail.com>
    Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
    Reviewed-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
    Reviewed-by: Vasant Hegde <vasant.hegde@amd.com>
    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipmi: fix refcount leak in i_ipmi_request() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Tue Jul 28 15:30:19 2026 -0400

    ipmi: fix refcount leak in i_ipmi_request()
    
    [ Upstream commit a3f3859cecacb64f18fd446271ece9a3b3f2d4de ]
    
    When a caller provides a `supplied_recv` message to i_ipmi_request(),
    the function increments the user's `nr_msgs` reference count. If an
    error occurs later, the out_err cleanup path only frees the recv_msg
    if the function allocated it itself (i.e., !supplied_recv). In the
    supplied_recv case the cleanup is skipped, leaving the reference count
    elevated. The caller ipmi_request_supply_msgs() does not release the
    supplied_recv on error, so the reference is permanently leaked.
    
    Fix this by explicitly reverting the reference count operations when a
    supplied recv_msg with a valid user pointer is present in the error
    path: decrement nr_msgs and drop the user's kref.
    
    Cc: stable@vger.kernel.org
    Fixes: b52da4054ee0 ("ipmi: Rework user message limit handling")
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Message-ID: <20260603120634.3758747-1-vulab@iscas.ac.cn>
    Signed-off-by: Corey Minyard <corey@minyard.net>
    [ changed `free_ipmi_user` to `free_user` in the two added `kref_put()` calls ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ipvlan: inherit needed_headroom and needed_tailroom from phy_dev [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Aug 6 10:38:57 2026 +0000

    ipvlan: inherit needed_headroom and needed_tailroom from phy_dev
    
    [ Upstream commit e16e960d55a40d36bd7c2494cc005e757dc9a1ef ]
    
    ipvlan devices inherit hard_header_len from phy_dev during ipvlan_init(),
    but leave needed_headroom and needed_tailroom set to 0.
    
    When the underlying phy_dev (or stacked lower device) requires extra headroom
    or tailroom for headers/trailers (e.g. macsec, ipsec, wireguard, tunnels, or
    veth with rx headroom), upper layers calculating packet headroom and tailroom
    fail to reserve sufficient space.
    
    This can result in reallocation overhead, skb headroom underflows, or KASAN
    slab-use-after-free crashes when dev_hard_header() / ipvlan_hard_header()
    prepends header data or when lower devices append tailroom.
    
    Fix this by:
    1. Inheriting needed_headroom and needed_tailroom from phy_dev in ipvlan_init().
    2. Propagating needed_headroom and needed_tailroom updates to attached ipvlans
       in ipvlan_device_event() when receiving NETDEV_FEAT_CHANGE events.
    
    Fixes: 2ad7bf363841 ("ipvlan: Initial check-in of the IPVLAN driver.")
    Reported-by: syzbot+1f9fd0f4b601cf88d6e6@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/netdev/6a720a21.40259c87.584f4.04bb.GAE@google.com/T/#u
    Reported-by: Tangxin Xie <xietangxin@h-partners.com>
    Closes: https://lore.kernel.org/netdev/CANn89i+1EW-sFNK8xoq98gMbPCeLS7e=+rs9gHfLg5Wj+4x0sw@mail.gmail.com/T/#mcc6307f115e500df23ea2980d5669fe95f20b6b4
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Hangbin Liu <liuhangbin@kylinos.cn>
    Link: https://patch.msgid.link/20260806103857.115541-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ipvs: separate destination availability state [+ + +]
Author: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
Date:   Tue Aug 18 23:16:38 2026 +0300

    ipvs: separate destination availability state
    
    commit cdcc4e46180df8161f4d2f3c6fd6beaf6990133d upstream.
    
    IPVS configuration paths update destination availability while connection
    accounting updates destination overload state. The two independent states
    share dest->flags, so their read-modify-write updates can race and lose one
    another.
    
    Keep OVERLOAD in flags, where the preceding patch serializes its updates
    with dst_lock, and move AVAILABLE to cflags. This keeps configuration-
    controlled availability out of the scheduler hot cacheline until a
    scheduler needs to check it. It also prevents availability updates from
    clobbering overload state.
    
    The destination status bits are not exposed through the IPVS sockopt or
    netlink interfaces, so keep their definitions in the internal IPVS header.
    
    Readers can still observe stale destination state; this does not provide a
    cross-field snapshot.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Reported-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Reported-by: Yuxiang Yang <yangyx22@mails.tsinghua.edu.cn>
    Reported-by: Ao Wang <wangao@seu.edu.cn>
    Reported-by: Xuewei Feng <fengxw06@126.com>
    Reported-by: Qi Li <qli01@tsinghua.edu.cn>
    Reported-by: Ke Xu <xuke@tsinghua.edu.cn>
    Link: https://lore.kernel.org/all/8913381c-1e02-35c7-0ec4-61de5a12fd35@ssi.bg/
    Assisted-by: Claude-Code:GLM-5.2
    Suggested-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
    Acked-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    (cherry picked from commit cdcc4e46180df8161f4d2f3c6fd6beaf6990133d)
    [ Julian: Backport by removing the hunks from ip_vs_xmit.c ]
    Signed-off-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
kernel/user: Allow user_struct::locked_vm to be usable for iommufd [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Mon Aug 17 13:16:02 2026 -0700

    kernel/user: Allow user_struct::locked_vm to be usable for iommufd
    
    [ Upstream commit ce5a23c835aa0f0a931b5bcde1e7811f951b0146 ]
    
    Following the pattern of io_uring, perf, skb, and bpf, iommfd will use
    user->locked_vm for accounting pinned pages. Ensure the value is included
    in the struct and export free_uid() as iommufd is modular.
    
    user->locked_vm is the good accounting to use for ulimit because it is
    per-user, and the security sandboxing of locked pages is not supposed to
    be per-process. Other places (vfio, vdpa and infiniband) have used
    mm->pinned_vm and/or mm->locked_vm for accounting pinned pages, but this
    is only per-process and inconsistent with the new FOLL_LONGTERM users in
    the kernel.
    
    Concurrent work is underway to try to put this in a cgroup, so everything
    can be consistent and the kernel can provide a FOLL_LONGTERM limit that
    actually provides security.
    
    Link: https://lore.kernel.org/r/7-v6-a196d26f289e+11787-iommufd_jgg@nvidia.com
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Reviewed-by: Eric Auger <eric.auger@redhat.com>
    Tested-by: Nicolin Chen <nicolinc@nvidia.com>
    Tested-by: Yi Liu <yi.l.liu@intel.com>
    Tested-by: Lixiao Yang <lixiao.yang@intel.com>
    Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
ksmbd: conn lock to serialize smb2 negotiate [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Tue Aug 11 08:28:08 2026 -0400

    ksmbd: conn lock to serialize smb2 negotiate
    
    [ Upstream commit fe4ed2f09b492e3507615a053814daa8fafdecb1 ]
    
    If client send parallel smb2 negotiate request on same connection,
    ksmbd_conn can be racy. smb2 negotiate handling that are not
    performance-related can be serialized with conn lock.
    
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: cb469993b3a6 ("ksmbd: reject repeated SMB2 NEGOTIATE requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: fix SID memory leak in set_posix_acl_entries_dacl() on overflow [+ + +]
Author: Ferry Meng <mengferry@linux.alibaba.com>
Date:   Sat Aug 8 13:14:22 2026 -0400

    ksmbd: fix SID memory leak in set_posix_acl_entries_dacl() on overflow
    
    [ Upstream commit af92ee994cc7f7e83a41c2025f32257a2f82a7ef ]
    
    Commit 299f962c0b02 ("ksmbd: use check_add_overflow() to prevent u16
    DACL size overflow") added check_add_overflow() guards that break out
    of the ACE-building loops in set_posix_acl_entries_dacl() when the
    accumulated DACL size would wrap past 65535.
    
    However, each iteration allocates a struct smb_sid via kmalloc_obj()
    at the top of the loop and relies on the kfree(sid) call at the end
    of the loop body (the 'pass_same_sid' label in the first loop, and
    the explicit kfree at the tail of the second loop) to release it.
    The newly introduced 'break' statements bypass those kfree() calls,
    leaking the sid buffer every time an overflow is detected.
    
    A malicious or malformed file with enough POSIX ACL entries to trip
    the overflow check will leak one or more struct smb_sid allocations
    on every request that touches the file's DACL, providing a trivial
    kernel memory exhaustion vector.
    
    Free sid before breaking out of the loops to plug the leak.
    
    Fixes: 299f962c0b02 ("ksmbd: use check_add_overflow() to prevent u16 DACL size overflow")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ferry Meng <mengferry@linux.alibaba.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: bbf0a8e93120 ("ksmbd: restore DACL size on check_add_overflow() to avoid malformed ACL")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: reject repeated SMB2 NEGOTIATE requests [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Tue Aug 11 08:28:09 2026 -0400

    ksmbd: reject repeated SMB2 NEGOTIATE requests
    
    [ Upstream commit cb469993b3a61a72653770856d37af616d72d05f ]
    
    Unauthenticated client can send multiple successful SMB2 NEGOTIATE
    requests on one connection before SESSION_SETUP. While the connection is
    in KSMBD_SESS_NEED_SETUP, smb2_handle_negotiate() accepts another
    SMB3.1.1 NEGOTIATE and overwrites conn->preauth_info with a new allocation.
    Only the final allocation is freed when the connection is released, leaking
    one object for every additional successful request.
    
    A repeated SMB2 NEGOTIATE after a dialect has been selected is a protocol
    violation. MS-SMB2 section 3.3.5.4 requires the server to disconnect
    without replying in this case. Set the connection exiting when rejecting
    the request, in addition to suppressing the response.
    
    Reject SMB2 NEGOTIATE unless the connection is new or is waiting for the
    SMB2 NEGOTIATE that follows an SMB1 multi-protocol negotiate. Serialize
    both SMB1 and SMB2 negotiation paths under conn->srv_mutex, since they
    update connection-wide dialect and negotiation state.
    
    Move the locking contract to ksmbd_smb_negotiate_common(), where the state
    and dialect are selected, and add ksmbd_conn_new() for consistent state
    access.
    
    Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
    Cc: stable@vger.kernel.org
    Reported-by: Runa Takemoto <takemotoruna223@gmail.com>
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: rename smb2_get_msg to smb_get_msg [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Sun Aug 9 00:20:21 2026 -0400

    ksmbd: rename smb2_get_msg to smb_get_msg
    
    [ Upstream commit 0b444cfd8b74ebce421ccd96eac9c495e536c92e ]
    
    With the removal of the RFC1002 length field from the SMB header,
    smb2_get_msg is now used to get the smb1 request from the request buffer.
    Since this function is no longer exclusive to smb2 and now supports smb1
    as well, This patch rename it to smb_get_msg to better reflect its usage.
    
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: cfc0b8e5080a ("ksmbd: validate minimum PDU size for transform requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: restore DACL size on check_add_overflow() to avoid malformed ACL [+ + +]
Author: Wentao Guan <guanwentao@uniontech.com>
Date:   Sat Aug 8 13:14:24 2026 -0400

    ksmbd: restore DACL size on check_add_overflow() to avoid malformed ACL
    
    [ Upstream commit bbf0a8e931204ecdab494a88d43b0a24a04285c5 ]
    
    check_add_overflow() unconditionally writes the truncated sum into *d
    even on overflow, per its contract in include/linux/overflow.h.
    The four check_add_overflow() guards in set_posix_acl_entries_dacl()
    and set_ntacl_dacl() break out of the ACE-building loops on overflow,
    but the truncated *size is then consumed downstream at the end of
    set_ntacl_dacl():
    
        pndacl->size = cpu_to_le16(le16_to_cpu(pndacl->size) + size);
    
    This produces an on-wire NT ACL whose pndacl->size under-reports the
    bytes actually written by the preceding fill_ace_for_sid()/memcpy()
    calls, yielding a malformed ACL that can trigger out-of-bounds reads
    when re-parsed by clients or ksmbd itself.
    
    Restore *size to its pre-addition value on each overflow branch (via
    `*size -= ace_sz` / `size -= nt_ace_size`) so that after the break,
    *size once again holds the cumulative size of the successfully-written
    ACEs. The committed ACL is then truncated-but-self-consistent rather
    than malformed.
    
    The ksmbd DACL builders are the only check_add_overflow() sites found
    where an overflow path breaks out of a loop and the destination value
    is consumed afterward. The other nearby break-style cases either
    return -EINVAL on overflow (transport_ipc.c) or break without
    consuming the overflowed destination value afterward (buildid.c).
    
    Fixes: 299f962c0b02 ("ksmbd: use check_add_overflow() to prevent u16 DACL size overflow")
    Assisted-by: atomcode:glm-5.2
    Assisted-by: Codex:gpt-5.5
    Cc: stable@vger.kernel.org
    Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: validate minimum PDU size for transform requests [+ + +]
Author: Namjae Jeon <linkinjeon@kernel.org>
Date:   Sun Aug 9 00:20:24 2026 -0400

    ksmbd: validate minimum PDU size for transform requests
    
    [ Upstream commit cfc0b8e5080aec87700774e8568765eaa4b7b92b ]
    
    The receive path applies the minimum SMB2 PDU size check only when
    ProtocolId is SMB2_PROTO_NUMBER. A packet carrying
    SMB2_TRANSFORM_PROTO_NUM bypasses the check even when the negotiated
    dialect does not provide transform handling.
    
    On an SMB 2.1 connection, a short transform packet therefore reaches
    init_smb2_rsp_hdr(), which interprets the request as a full SMB2 header
    and reads beyond the request allocation. The copied fields can then be
    returned to the unauthenticated client.
    
    Compression transforms are converted to ordinary SMB2 messages before
    protocol validation. After that conversion, validate ordinary SMB2
    requests against SMB2_MIN_SUPPORTED_PDU_SIZE and require encryption
    transform requests to contain both a transform header and an SMB2
    header. This rejects truncated requests before work allocation.
    
    Fixes: 368ba06881c3 ("ksmbd: check the validation of pdu_size in ksmbd_conn_handler_loop")
    Cc: stable@vger.kernel.org
    Reported-by: zdi-disclosures@trendmicro.com # ZDI-CAN-31063
    Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

ksmbd: validate num_subauth when copying ACE in set_ntacl_dacl [+ + +]
Author: Haofeng Li <lihaofeng@kylinos.cn>
Date:   Sat Aug 8 13:14:23 2026 -0400

    ksmbd: validate num_subauth when copying ACE in set_ntacl_dacl
    
    [ Upstream commit 47f0b34f6bc98ed85bfdc293e8f3e432ec24958d ]
    
    set_ntacl_dacl() copies each ACE from the attacker-controlled stored
    security descriptor verbatim into the response DACL without checking
    sid.num_subauth. The ACE bytes (including an unchecked num_subauth)
    originate from an authenticated SMB2_SET_INFO(SecInfo=DACL) that is
    stored raw via ksmbd_vfs_set_sd_xattr(); parse_dacl() rejects a bad ACE
    with `break` rather than an error, so parse_sec_desc() still returns
    success and the malformed SD reaches the xattr intact.
    
    On a subsequent SMB2_QUERY_INFO(SecInfo=DACL) for an inode carrying a
    POSIX access ACL, build_sec_desc() -> set_ntacl_dacl() ->
    set_posix_acl_entries_dacl() walks the copied ACEs and reads
    
        ntace->sid.sub_auth[ntace->sid.num_subauth - 1]
    
    with num_subauth taken straight from the stored SD. Since sub_auth[]
    is fixed at SID_MAX_SUB_AUTHORITIES (15), a crafted num_subauth (e.g.
    255) drives an out-of-bounds heap read of ~1 KB with an offset fully
    controlled by an authenticated client.
    
    The sibling functions already gate this field:
      parse_dacl()    -- num_subauth == 0 || > SID_MAX_SUB_AUTHORITIES
      parse_sid()     -- num_subauth > SID_MAX_SUB_AUTHORITIES
      smb_copy_sid()  -- min_t(u8, num_subauth, SID_MAX_SUB_AUTHORITIES)
    set_ntacl_dacl() is the lone inconsistent path that omits the check.
    
    Add the same num_subauth validation in set_ntacl_dacl() before copying
    the ACE, matching the gate already enforced by parse_dacl().
    
    Signed-off-by: Haofeng Li <lihaofeng@kylinos.cn>
    Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Suggested-by: Namjae Jeon <linkinjeon@kernel.org>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: bbf0a8e93120 ("ksmbd: restore DACL size on check_add_overflow() to avoid malformed ACL")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
KVM: Introduce vcpu->wants_to_run [+ + +]
Author: David Matlack <dmatlack@google.com>
Date:   Thu Jul 30 09:12:46 2026 -0400

    KVM: Introduce vcpu->wants_to_run
    
    [ Upstream commit a6816314af5749cd88944bfdceb270c627cdf348 ]
    
    Introduce vcpu->wants_to_run to indicate when a vCPU is in its core run
    loop, i.e. when the vCPU is running the KVM_RUN ioctl and immediate_exit
    was not set.
    
    Replace all references to vcpu->run->immediate_exit with
    !vcpu->wants_to_run to avoid TOCTOU races with userspace. For example, a
    malicious userspace could invoked KVM_RUN with immediate_exit=true and
    then after KVM reads it to set wants_to_run=false, flip it to false.
    This would result in the vCPU running in KVM_RUN with
    wants_to_run=false. This wouldn't cause any real bugs today but is a
    dangerous landmine.
    
    Signed-off-by: David Matlack <dmatlack@google.com>
    Link: https://lore.kernel.org/r/20240503181734.1467938-2-dmatlack@google.com
    Signed-off-by: Sean Christopherson <seanjc@google.com>
    Stable-dep-of: e800decd9c0a ("KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: s390: pci: Fix aisb calculation [+ + +]
Author: Matthew Rosato <mjrosato@linux.ibm.com>
Date:   Mon Aug 17 13:16:06 2026 -0700

    KVM: s390: pci: Fix aisb calculation
    
    [ Upstream commit 0cfe660559e857d7c00ab86c73e4510ce069086f ]
    
    The current implementation of aisb calculation will erroneously index
    via an unsigned long * as well as multiply by 8B for every 64-bits in
    the offset; only one or the other is required.  This throws off aisb
    calculations once the number of devices exceeds 64, and can result
    in out-of-bounds access as well as failure to indicate summary bits
    associated with those devices in guests.
    
    Fix this by converting to a physical address before applying the
    offset, as is already done in arch/s390/pci/pci_irq.c.
    
    Fixes: 3c5a1b6f0a18 ("KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding")
    Signed-off-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
    Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    [alifm@linux.ibm.com: Resolved merge conflict]
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: s390: pci: Fix memory accounting for pinned/unpinned pages [+ + +]
Author: Farhan Ali <alifm@linux.ibm.com>
Date:   Mon Aug 17 13:16:03 2026 -0700

    KVM: s390: pci: Fix memory accounting for pinned/unpinned pages
    
    [ Upstream commit 36f6999ecde3976731a8bfc0b8e667da6f593069 ]
    
    The account_mem() and unaccount_mem() functions call get_uid() which
    increments the reference count of struct user_struct on every invocation.
    But we don't decrement the count by calling free_uid(). It also
    accounted/unaccounted the pages against the current->mm. But its possible
    the unaccount_mem() can be called from a different process context than the
    one that originally pinned the pages.
    
    Let's fix this by storing the pinning process user_struct and mm_struct
    when accounting for pinned pages, and subsequently free these resources
    when the pages are unpinned.
    
    Fixes: 3c5a1b6f0a18 ("KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding")
    Cc: stable@vger.kernel.org
    Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
    [borntraeger@linux.ibm.com: Fixed whitespace]
    Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    [alifm@linux.ibm.com: Resolved merge conflict]
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: s390: pci: Fix missing error codes and memory unaccounting [+ + +]
Author: Farhan Ali <alifm@linux.ibm.com>
Date:   Mon Aug 17 13:16:04 2026 -0700

    KVM: s390: pci: Fix missing error codes and memory unaccounting
    
    [ Upstream commit f86842e4d6c482300f4567f492d512c9ccf5bc4f ]
    
    In kvm_s390_pci_aif_enable() two error paths failed to set an error code,
    causing the function to return 0 on failure. It also failed to rollback
    memory accounting on failure. Fix both by propagating an error code on
    failure and calling unaccount_mem() in the cleanup path.
    
    Fixes: 3c5a1b6f0a18 ("KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding")
    Cc: stable@vger.kernel.org
    Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: s390: pci: Fix resource leak on IRQ registration failure [+ + +]
Author: Farhan Ali <alifm@linux.ibm.com>
Date:   Mon Aug 17 13:16:05 2026 -0700

    KVM: s390: pci: Fix resource leak on IRQ registration failure
    
    [ Upstream commit 5580c9858f1e00f60191eb09c3add359836d60b6 ]
    
    Currently if kvm_zpci_set_airq() fails, kvm_s390_pci_aif_enable() returns
    the error code but doesn't do any resource cleanup thus leaking resources.
    Fix this by cleaning up all the resources such as the GAITE, AIBV, AISB and
    unpinning any pinned pages. While at it, remove dead code that stored FIB
    values that were never referenced.
    
    As part of the cleanup, we are also holding the aift_lock a bit longer, as
    we hold the lock while executing the MPCIFC instruction. Though this is not
    strictly necessary, it means we don't have to drop and re-acquire in the
    error case.
    
    Fixes: 3c5a1b6f0a18 ("KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding")
    Cc: stable@vger.kernel.org
    Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    [alifm@linux.ibm.com: Resolved merge conflict]
    Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

KVM: SVM: Serialize accesses to the owner and mirror list with separate lock [+ + +]
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Wed Aug 19 11:03:54 2026 -0400

    KVM: SVM: Serialize accesses to the owner and mirror list with separate lock
    
    [ Upstream commit 1d78d33275ef2a16c6d080910b291d0a97a0e613 ]
    
    Interaction between KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM and
    KVM_CAP_VM_COPY_ENC_CONTEXT_FROM can cause two separate issues:
    
    - in sev_migrate_from(), when the destination KVM is a mirror, the mirror
      entry is moved from the source's list to the owner's mirror_vms list,
      without holding the owner's lock unlike other writers of the owner's
      mirror list (sev_vm_copy_enc_context_from(), sev_vm_destroy()).
      A concurrent COPY or destroy can race with sev_migrate_from() and
      corrupt the list.
    
    - In sev_vm_destroy(), the *owner* is still active and could receive
      concurrently a KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM that causes
      sev->enc_context_owner to change.  In this case the incorrect VM
      receives kvm_put_kvm().
    
    The second issue needs particular care because the owner could disappear
    altogether (even though the race window is impossibly small) between
    reading it and locking it.  There is thus no way to perform the checks
    under the owner lock without putting struct kvm under SLAB_TYPESAFE_BY_RCU
    (which would allow kvm_get_kvm_safe() under RCU critical section).
    
    It is much simpler to just use a global lock, since the critical
    sections are so small and the new lock is always a leaf lock.
    
    Fixes: b2125513dfc0 ("KVM: SEV: Allow SEV intra-host migration of VM with mirrors")
    Cc: stable@vger.kernel.org
    Reported-by: Shen Yongchao <grayhat@foxmail.com>
    Link: https://lore.kernel.org/kvm/tencent_625C0F42824E542C72B34733392AF2C49709@qq.com/
    Link: https://lore.kernel.org/kvm/tencent_DDC4E4352EC91CAC05A9A8F4E55E8C96730A@qq.com/
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [ Replaced `to_kvm_sev_info(src->enc_context_owner)` with `&to_kvm_svm(src->enc_context_owner)->sev_info` since that helper doesn't exist, and adjusted context for absent `vmsa_features`/`ghcb_version` fields. ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN [+ + +]
Author: Venkatesh Srinivas <venkateshs@chromium.org>
Date:   Thu Jul 30 09:12:47 2026 -0400

    KVM: x86: Only reset TSC Deadline Timer in apic_timer_expired on KVM_RUN
    
    [ Upstream commit e800decd9c0ac4349bcd8f8f9b29fd21fe93165e ]
    
    On Intel platforms with a VMX preemption timer and APICv, if a VMM
    calls KVM_GET_LAPIC before KVM_GET_MSRS to save the vCPU state, it is
    possible to lose a pending timer interrupt.
    
    If the thread running these ioctls is migrated to another core after
    calling KVM_GET_LAPIC but before KVM_GET_MSRS and the guest is using
    their LAPIC timer in TSC-deadline mode, not only does the save LAPIC
    state not carry the pending interrupt, the TSCDEADLINE MSR will be
    zeroed.
    
    After migration across CPUs, KVM_GET_MSRS calls vcpu_load, posting the
    interrupt and clearing the MSR:
    vcpu_load() ->
      kvm_arch_vcpu_load() ->
        kvm_lapic_restart_hv_timer() ->
          start_hv_timer() ->
            apic_timer_expired() ->
              kvm_apic_inject_pending_timer_irqs()
                . post interrupt into the LAPIC state
                . clear IA32_TSCDEADLINE
    
    The saved LAPIC state will be missing the pending interrupt and the saved
    MSR will be zero. Oops.
    
    Fix by only posting an interrupt when we're attempting to enter the guest
    (vcpu->wants_to_run == true), not for vcpu_load from other paths.
    
    Assisted-by: gemini:gemini-3.1-pro-preview
    Debugged-by: David Matlack <dmatlack@google.com>
    Debugged-by: Sean Christopherson <seanjc@google.com>
    Debugged-by: Jim Mattson <jmattson@google.com>
    Debugged-by: James Houghton <jthoughton@google.com>
    Signed-off-by: Venkatesh Srinivas <venkateshs@chromium.org>
    Message-ID: <20260715234234.15382-2-venkateshs@chromium.org>
    Reviewed-by: James Houghton <jthoughton@google.com>
    Reviewed-by: Chao Gao <chao.gao@intel.com>
    Cc: stable@vger.kernel.org
    Fixes: ae95f566b3d2 ("KVM: X86: TSCDEADLINE MSR emulation fastpath", 2020-05-15)
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
libceph: add doutc and *_client debug macros support [+ + +]
Author: Xiubo Li <xiubli@redhat.com>
Date:   Fri Aug 7 22:52:07 2026 -0400

    libceph: add doutc and *_client debug macros support
    
    [ Upstream commit 5c5f0d2b5f92c47baf82b9b211e27edd7d195158 ]
    
    This will help print the fsid and client's global_id in debug logs,
    and also print the function names.
    
    [ idryomov: %lld -> %llu, leading space for doutc(), don't include
      __func__ in pr_*() variants ]
    
    Link: https://tracker.ceph.com/issues/61590
    Signed-off-by: Xiubo Li <xiubli@redhat.com>
    Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
    Reviewed-by: Milind Changire <mchangir@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Stable-dep-of: 50958bb928ba ("ceph: fix hanging __ceph_get_caps() with stale mds_wanted")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: Amend checking to fix `make W=1` build breakage [+ + +]
Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date:   Fri Aug 7 22:51:39 2026 -0400

    libceph: Amend checking to fix `make W=1` build breakage
    
    [ Upstream commit 04d8712b079327409b09dee628378f9583e2e035 ]
    
    In a few cases the code compares 32-bit value to a SIZE_MAX derived
    constant which is much higher than that value on 64-bit platforms,
    Clang, in particular, is not happy about this
    
    net/ceph/osdmap.c:1441:10: error: result of comparison of constant 4611686018427387891 with expression of type 'u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
     1441 |         if (len > (SIZE_MAX - sizeof(*pg)) / sizeof(u32))
          |             ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    net/ceph/osdmap.c:1624:10: error: result of comparison of constant 2305843009213693945 with expression of type 'u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare]
     1624 |         if (len > (SIZE_MAX - sizeof(*pg)) / (2 * sizeof(u32)))
          |             ~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Fix this by casting to size_t. Note, that possible replacement of SIZE_MAX
    by U32_MAX may lead to the behaviour changes on the corner cases.
    
    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Stable-dep-of: 9f00f9cf2be2 ("libceph: bound pg_{temp,upmap,upmap_items} length to CEPH_PG_MAX_SIZE")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: Avoid using invalid osd indices from primary_temp [+ + +]
Author: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
Date:   Tue Jul 28 10:43:40 2026 +0200

    libceph: Avoid using invalid osd indices from primary_temp
    
    commit 3660b98d1204b419f6a77e9a295f148dcf38d042 upstream.
    
    A corrupted osdmap received from a Ceph monitor or OSD may contain osd
    indices in its pg_temp, primary_temp, pg_upmap, and pg_upmap_items parts
    that don't exist, i.e., that are greater than max_osd or smaller than
    CEPH_HOMELESS_OSD (-1). These indices are used to create the up and
    acting set in ceph_pg_to_up_acting_osds(), called from calc_target().
    While most of these osd indices are checked, the one from primary_temp
    is not. Subsequently, this may lead to calc_target() returning this
    (potentially invalid) index as target osd for a (linger) request.
    Because the osd_state, osd_weight, and osd_addr arrays only contain
    max_osd entries (with indices 0 to max_osd -1), this leads to
    out-of-bounds accesses when trying to read values from these arrays.
    
    This patch fixes the issue by adding a check to get_temp_osds(), so that
    only valid osd indices from primary_temp are used, and it falls back to
    using the primary from pg_temp or the up set if it is invalid.
    
    [ idryomov: changelog ]
    
    Cc: stable@vger.kernel.org
    Fixes: 5e8d4d36bf23 ("libceph: add support for primary_temp mappings")
    Signed-off-by: Raphael Zimmer <raphael.zimmer@tu-ilmenau.de>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: bound pg_{temp,upmap,upmap_items} length to CEPH_PG_MAX_SIZE [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Fri Aug 7 22:51:40 2026 -0400

    libceph: bound pg_{temp,upmap,upmap_items} length to CEPH_PG_MAX_SIZE
    
    [ Upstream commit 9f00f9cf2be293efe899db67dc5272e3a9c62717 ]
    
    __decode_pg_temp() decodes an user-controlled length but only rejects
    values large enough to overflow the allocation; it does not bound it to
    CEPH_PG_MAX_SIZE. The helper backs both pg_temp and pg_upmap decoding, and
    apply_upmap()/get_temp_osds() later copy the decoded list into the fixed-size
    on-stack array struct ceph_osds.osds[CEPH_PG_MAX_SIZE]. A monitor that sends
    an OSDMap with a pg_temp/pg_upmap entry longer than 32 thus causes a stack
    out-of-bounds write.
    
    An OSD set for a single PG can never exceed CEPH_PG_MAX_SIZE, so reject longer
    entries at decode time. The bound is well below the old overflow threshold, so
    it also covers the allocation-size overflow the previous check guarded against.
    
      BUG: KASAN: stack-out-of-bounds in ceph_pg_to_up_acting_osds
      Write of size 4 ... by task exploit
       kasan_report (mm/kasan/report.c:595)
       ceph_pg_to_up_acting_osds (net/ceph/osdmap.c:2617 net/ceph/osdmap.c:2833)
       calc_target (net/ceph/osd_client.c:1638)
       __submit_request (net/ceph/osd_client.c:2394)
       ceph_osdc_start_request (net/ceph/osd_client.c:2490)
       ceph_osdc_call (net/ceph/osd_client.c:5164)
       rbd_dev_image_probe (drivers/block/rbd.c:6899)
       do_rbd_add (drivers/block/rbd.c:7138)
       ...
      kernel BUG at net/ceph/osdmap.c:2670!
    
    [ idryomov: do the same in __decode_pg_upmap_items() ]
    
    Cc: stable@vger.kernel.org
    Fixes: a303bb0e5834 ("libceph: introduce and switch to decode_pg_mapping()")
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Reviewed-by: Alex Markuze <amarkuze@redhat.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: fix multiple unsafe decodes in decode_locker() [+ + +]
Author: Pavitra Jha <jhapavitra98@gmail.com>
Date:   Tue Jun 2 01:02:19 2026 -0400

    libceph: fix multiple unsafe decodes in decode_locker()
    
    commit 437b6551cfcc235eea1d735a874f9d421f555e17 upstream.
    
    decode_locker() in cls_lock_client.c contains three unsafe decode
    operations that allow a malicious or compromised OSD to trigger
    slab-out-of-bounds reads:
    
    1. ceph_decode_copy() at the locker_id_t name field has no preceding
       bounds check. With p == end after ceph_start_decoding() accepts
       struct_len=0, this reads sizeof(ceph_entity_name) = 9 bytes past
       the validated buffer boundary.
    
    2. *p += sizeof(struct ceph_timespec) after the locker_info_t header
       is an unchecked pointer advance. A malicious OSD can position p
       past end, causing all subsequent _safe checks to pass against a
       bogus boundary.
    
    3. len = ceph_decode_32(p) has no preceding bounds check, and the
       immediately following *p += len is uncapped. A malicious OSD can
       send len=0xffffffff, advancing p gigabytes past end and escaping
       the decode window entirely.
    
    Fix all three by replacing bare operations with their safe variants:
      ceph_decode_copy   -> ceph_decode_copy_safe
      *p += sizeof(...)  -> ceph_decode_skip_n
      ceph_decode_32(p)  -> ceph_decode_32_safe
      *p += len          -> ceph_decode_skip_n
    
    A new label is added to return -EINVAL on any bounds violation.
    -EINVAL is appropriate here: the data received from the OSD
    is structurally malformed, which is an invalid argument to the decode
    contract regardless of whether the caller or the wire is at fault.
    
    Attacker model: a malicious or compromised OSD in a multi-tenant Ceph
    deployment can trigger this against any kernel client that issues the
    lock.get_info class method (e.g. during RBD exclusive lock acquisition)
    without any further privileges beyond OSD session establishment.
    
    [ idryomov: use ceph_decode_skip_string() to skip description, trim
      changelog ]
    
    Cc: stable@vger.kernel.org
    Fixes: d4ed4a530562 ("libceph: support for lock.lock_info")
    Signed-off-by: Pavitra Jha <jhapavitra98@gmail.com>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: fix two unsafe bare decodes in decode_lockers() [+ + +]
Author: Pavitra Jha <jhapavitra98@gmail.com>
Date:   Sat Aug 8 07:55:12 2026 -0400

    libceph: fix two unsafe bare decodes in decode_lockers()
    
    [ Upstream commit a109a556115271ca7896dcda7b4b7e45e156c227 ]
    
    decode_lockers() in cls_lock_client.c contains two bare decode operations
    that allow a malicious or compromised OSD to trigger slab-out-of-bounds
    reads:
    
    1. ceph_decode_32(p) at the num_lockers field has no preceding bounds
       check. ceph_start_decoding() accepts struct_len=0 as valid -- the
       internal ceph_decode_need(p, end, 0, bad) always passes -- so when an
       OSD sends struct_len=0, ceph_start_decoding() returns success with
       p == end. The immediately following bare ceph_decode_32(p) then reads
       4 bytes past the validated buffer boundary. The garbage value is
       passed directly to kzalloc_objs() as the locker count.
    
       The sibling function decode_watchers() in osd_client.c already uses
       ceph_decode_32_safe() after its own ceph_start_decoding() call.
       decode_lockers() was the only site using the bare variant.
    
    2. ceph_decode_8(p) after the decode_locker() loop has no preceding
       bounds check. If an OSD crafts num_lockers such that the loop
       advances p exactly to end, the subsequent bare ceph_decode_8(p) reads
       one byte past the validated buffer boundary. The result is passed
       directly into *type, which is used as a lock type discriminator by
       callers, giving an OSD-controlled one-byte OOB read with direct
       influence over the lock type field.
    
    Fix both by replacing bare operations with their safe variants:
      ceph_decode_32(p) -> ceph_decode_32_safe(p, end, *num_lockers,
                                               err_inval)
      ceph_decode_8(p)  -> ceph_decode_8_safe(p, end, *type,
                                              err_free_lockers)
    
    The goto targets differ intentionally:
      err_inval: is a new label returning -EINVAL directly. It is used for
      the pre-allocation failure path where *lockers is not yet allocated
      and must not be passed to ceph_free_lockers().
    
      err_free_lockers: is the existing label. It is used for the
      post-allocation failure path where *lockers is allocated and must
      be freed.
    
    ret is set to -EINVAL before ceph_decode_8_safe() so that
    err_free_lockers returns the correct error code on bounds violation.
    Without this, err_free_lockers would return a stale ret value (0 from
    the successful decode_locker() loop), silently swallowing the error.
    
    -EINVAL is correct for both failure paths. The data received from the
    OSD is structurally malformed. -ENOMEM would misrepresent the failure
    class to callers and to stable@ backporters triaging error paths.
    
    Attacker model: a malicious or compromised OSD in a multi-tenant Ceph
    deployment can trigger this against any kernel client that issues the
    lock.get_info class method (e.g. during RBD exclusive lock acquisition).
    
    [ idryomov: trim changelog, formatting ]
    
    Cc: stable@vger.kernel.org
    Fixes: d4ed4a530562 ("libceph: support for lock.lock_info")
    Signed-off-by: Pavitra Jha <jhapavitra98@gmail.com>
    Reviewed-by: Viacheslav Dubeyko <Slava.Dubeyko@ibm.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

libceph: tolerate addrvecs with multiple entries of the same type [+ + +]
Author: Kefu Chai <k.chai@proxmox.com>
Date:   Thu Jun 11 19:32:51 2026 +0800

    libceph: tolerate addrvecs with multiple entries of the same type
    
    commit 5a87925539acecfe88229bad76ab81bd75a7e3f5 upstream.
    
    ceph_decode_entity_addrvec() rejects any addrvec containing more than
    one entry that matches the requested msgr type (LEGACY or MSGR2),
    logging "another match of type N in addrvec" and returning -EINVAL.
    
    Some admin tooling (e.g. pveceph mon create from Proxmox VE) generates
    addrvecs with multiple same-type entries when public_network lists more
    than one CIDR: it picks one local IP per subnet and emits both a v2 and
    a v1 entry for each IP.  Monmaps shaped this way cause:
    
      libceph: mon0 (1)10.10.10.15:6789 session established
      libceph: another match of type 1 in addrvec
      libceph: problem decoding monmap, -22
    
    No Ceph code uses the extra entries: since Nautilus, the userspace
    messenger (AsyncMessenger) unconditionally picks the first address of
    the requested type and ignores any subsequent matches.
    
    Match that behavior: use the first matching entry and silently skip any
    subsequent ones.  This is a compatibility fix for existing deployments
    and does not enable dual-stack or multi-subnet address selection.
    
    [ idryomov: tweak ceph_decode_entity_addrvec() comment ]
    
    Cc: stable@vger.kernel.org
    Fixes: a5cbd5fc22d5 ("libceph, ceph: get and handle cluster maps with addrvecs")
    Link: https://bugzilla.proxmox.com/show_bug.cgi?id=7518
    Signed-off-by: Kefu Chai <k.chai@proxmox.com>
    Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.1.184 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Aug 23 14:18:37 2026 +0200

    Linux 6.1.184
    
    Link: https://lore.kernel.org/r/20260820145253.200766705@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
locking/rt: Fix the incorrect RCU protection in rt_spin_unlock() [+ + +]
Author: Thomas Gleixner <tglx@kernel.org>
Date:   Mon Jul 27 23:25:55 2026 -0400

    locking/rt: Fix the incorrect RCU protection in rt_spin_unlock()
    
    [ Upstream commit 89038cc87d80c77e7aa6f42a64b2573b74af339f ]
    
    rt_spin_unlock() releases the RCU protection before unlocking the
    lock. That opens the door for the following UAF scenario:
    
     T1                                     T2
     spin_lock(&p->lock);           rcu_read_lock();
     invalidate(p);                 p = rcu_dereference(ptr);
     rcu_assign_pointer(ptr, NULL); if (!p) return;
     spin_unlock(&p->lock);         spin_lock(&p->lock)
                                       lock(&lock->lock);
                                       rcu_read_lock();
     kfree_rcu(p);                  rcu_read_unlock();
                                    ....
                                    spin_unlock(&p->lock)
                                      rcu_read_unlock(); // Ends grace period
     rcu_do_batch()
       kfree(p);
                                UAF ->        rt_mutex_cmpxchg_release(&lock->lock...)
    
    Regular spinlocks keep preemption disabled accross the unlock operation,
    which provides full RCU protection, but the RT substitution fails to
    resemble that. Same applies for the rwlock substitution.
    
    Move the rcu_read_unlock() invocation past the unlock operations to match
    the non-RT semantics. This makes it asymmetric vs. rt_xxx_lock(), but
    that's harmless as the caller needs to hold RCU read lock across the lock
    operation. The migrate_enable() call stays before the unlock operation
    because there is no per CPU operation in the unlock path which would
    require migration to be kept disabled.
    
    Fixes: 0f383b6dc96e ("locking/spinlock: Provide RT variant")
    Reported-by: syzbot+000c800a02097aaa10ed@syzkaller.appspotmail.com
    Decoded-by: Jann Horn <jannh@google.com>
    Signed-off-by: Thomas Gleixner <tglx@kernel.org>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Acked-by: Al Viro <viro@zeniv.linux.org.uk>
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/87jyrud75z.ffs@fw13
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lsm: infrastructure management of the sock security [+ + +]
Author: Casey Schaufler <casey@schaufler-ca.com>
Date:   Thu Jul 23 12:54:37 2026 -0400

    lsm: infrastructure management of the sock security
    
    [ Upstream commit 2aff9d20d50ac45dd13a013ef5231f4fb8912356 ]
    
    Move management of the sock->sk_security blob out
    of the individual security modules and into the security
    infrastructure. Instead of allocating the blobs from within
    the modules the modules tell the infrastructure how much
    space is required, and the space is allocated there.
    
    Acked-by: Paul Moore <paul@paul-moore.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: John Johansen <john.johansen@canonical.com>
    Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
    [PM: subject tweak]
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Stable-dep-of: 56acfeb10019 ("selinux: avoid sk_socket dereference in selinux_sctp_bind_connect()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
macvlan: inherit needed_headroom and needed_tailroom from lowerdev [+ + +]
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Aug 6 14:19:38 2026 +0000

    macvlan: inherit needed_headroom and needed_tailroom from lowerdev
    
    [ Upstream commit cef51860becd9700217c81732ca1eb1ea6ed6fe1 ]
    
    macvlan devices inherit hard_header_len from lowerdev during macvlan_init(),
    but leave needed_headroom and needed_tailroom set to 0.
    
    When the underlying lowerdev requires extra headroom or tailroom for
    headers/trailers (e.g. macsec, ipsec, wireguard, tunnels, or veth with rx
    headroom), upper layers calculating packet headroom and tailroom fail to
    reserve sufficient space.
    
    This can result in reallocation overhead, skb headroom underflows, or KASAN
    slab-use-after-free crashes when dev_hard_header() / macvlan_hard_header()
    prepends header data or when lower devices append tailroom.
    
    Fix this by:
    1. Inheriting needed_headroom and needed_tailroom from lowerdev in macvlan_init().
    2. Propagating needed_headroom and needed_tailroom updates to attached macvlans
       in macvlan_device_event() when receiving NETDEV_FEAT_CHANGE events.
    
    Fixes: b863ceb7ddce ("[NET]: Add macvlan driver")
    Reported-by: Tangxin Xie <xietangxin@h-partners.com>
    Closes: https://lore.kernel.org/netdev/CANn89i+1EW-sFNK8xoq98gMbPCeLS7e=+rs9gHfLg5Wj+4x0sw@mail.gmail.com/T/#m16adf0ff972cbfd8066c3a8e656e75eaeb12d021
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reviewed-by: Hangbin Liu <liuhangbin@kylinos.cn>
    Link: https://patch.msgid.link/20260806141938.287660-1-edumazet@google.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
media: i2c: imx219: Correct the minimum vblanking value [+ + +]
Author: David Plowman <david.plowman@raspberrypi.com>
Date:   Tue Aug 4 20:08:35 2026 -0400

    media: i2c: imx219: Correct the minimum vblanking value
    
    [ Upstream commit e3b82d49bf676f3c873e642038765eac32ab6d39 ]
    
    The datasheet for this sensor documents the minimum vblanking as being
    32 lines. It does fix some problems with occasional black lines at the
    bottom of images (tested on Raspberry Pi).
    
    Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
    Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
    Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Signed-off-by: Jai Luthra <jai.luthra@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
    Stable-dep-of: 2c4f1ba73543 ("media: imx219: Fix maximum frame length in lines")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: i2c: imx219: Drop IMX219_VTS_* macros [+ + +]
Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date:   Tue Aug 4 20:08:34 2026 -0400

    media: i2c: imx219: Drop IMX219_VTS_* macros
    
    [ Upstream commit 5ebbdd7aab3321e60a8be23aac1fee4f16644021 ]
    
    The IMX219_VTS_* macros define default VTS values for the modes
    supported by the driver. They are used in a single place, and hinder
    readability compared to using the value directly as a decimal number.
    Drop them.
    
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Stable-dep-of: 2c4f1ba73543 ("media: imx219: Fix maximum frame length in lines")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: i2c: imx219: Rename VTS to FRM_LENGTH [+ + +]
Author: Jai Luthra <jai.luthra@ideasonboard.com>
Date:   Tue Aug 4 20:08:36 2026 -0400

    media: i2c: imx219: Rename VTS to FRM_LENGTH
    
    [ Upstream commit 04f78503f99ae7e9887c7fe5e4bc54a7cfb10fe0 ]
    
    The IMX219 datasheet refers to the vertical length + blanking as
    FRM_LENGTH instead of VTS.
    
    Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Signed-off-by: Jai Luthra <jai.luthra@ideasonboard.com>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
    Stable-dep-of: 2c4f1ba73543 ("media: imx219: Fix maximum frame length in lines")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

media: imx219: Fix maximum frame length in lines [+ + +]
Author: Sakari Ailus <sakari.ailus@linux.intel.com>
Date:   Tue Aug 4 20:08:37 2026 -0400

    media: imx219: Fix maximum frame length in lines
    
    [ Upstream commit 2c4f1ba7354312ad2d6e34e70a518a51a9344715 ]
    
    The driver used the maximum frame length in lines value of 0xffff, but the
    maximum appears to be 0xfffe instead. Fix it.
    
    Fixes: 1283b3b8f82b ("media: i2c: Add driver for Sony IMX219 sensor")
    Cc: stable@vger.kernel.org
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mei: bus: access mei_device under device_lock on cleanup [+ + +]
Author: Alexander Usyskin <alexander.usyskin@intel.com>
Date:   Thu Aug 6 14:17:32 2026 -0400

    mei: bus: access mei_device under device_lock on cleanup
    
    [ Upstream commit f112ea910e554d58b4b39a4492b7d302f0f4204f ]
    
    Fix couple of problems in mei_cl_bus_dev_release():
    
    mei_cl_flush_queues() is running without lock.
    bus->file_list access after mei_dev_bus_put(bus) can become a
    use-after-free if this was the last reference to bus.
    
    Protect queues cleanup and WARN traversal by device lock there
    to avoid the concurrent access problems.
    Move WARN traversal before mei_dev_bus_put(bus).
    
    This file uses bus variable name for mei_device, adjust
    code of mei_cl_bus_dev_release() to use bus variable too.
    
    Cc: stable <stable@kernel.org>
    Fixes: 35e8a426b16a ("mei: bus: Check for still connected devices in mei_cl_bus_dev_release()")
    Reviewed-by: Menachem Adin <menachem.adin@intel.com>
    Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
    Link: https://patch.msgid.link/20260705151259.3054795-1-alexander.usyskin@intel.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mlxsw: fix refcount leak in mlxsw_sp_port_lag_join() [+ + +]
Author: Wentao Liang <vulab@iscas.ac.cn>
Date:   Wed Jul 22 19:46:55 2026 -0400

    mlxsw: fix refcount leak in mlxsw_sp_port_lag_join()
    
    [ Upstream commit 41c8c1d65b32beacd8d916a22457b4f6e47f45af ]
    
    When mlxsw_sp_port_lag_index_get() fails, mlxsw_sp_port_lag_join()
    returns an error without releasing the lag reference obtained by
    the earlier mlxsw_sp_lag_get().  All other error paths in the
    function jump to the cleanup label that ends with
    mlxsw_sp_lag_put(), so this is a single missed release.
    
    Fix the leak by replacing the bare 'return err' with a goto to the
    existing error cleanup label, which will drop the reference safely.
    
    Cc: stable@vger.kernel.org
    Fixes: 0d65fc13042f ("mlxsw: spectrum: Implement LAG port join/leave")
    Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
    Reviewed-by: Ido Schimmel <idosch@nvidia.com>
    Link: https://patch.msgid.link/20260609083709.209743-1-vulab@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mlxsw: spectrum: On port enslavement to a LAG, join upper's bridges [+ + +]
Author: Petr Machata <petrm@nvidia.com>
Date:   Wed Jul 22 19:46:54 2026 -0400

    mlxsw: spectrum: On port enslavement to a LAG, join upper's bridges
    
    [ Upstream commit 987c7782f0627e1c87617458806a7e6c1995678a ]
    
    Currently it never happens that a netdevice that is already a bridge slave
    would suddenly become mlxsw upper. The only case where this might be
    possible as far as mlxsw is concerned, is with LAG netdevices. But if a LAG
    already has an upper, enslaving mlxsw port to that LAG is forbidden. Thus
    the only way to install a LAG between a bridge and a mlxsw port is by first
    enslaving the port to the LAG, and then enslaving that LAG to a bridge.
    
    However in the following patches, the requirement that ports be only
    enslaved to masters without uppers, is going to be relaxed. It will
    therefore be necessary to join bridges of LAG uppers. Without this replay,
    the mlxsw bridge_port objects are not instantiated, which causes issues
    later, as a lot of code relies on their presence.
    
    Therefore in this patch, when the first mlxsw physical netdevice is
    enslaved to a LAG, consider bridges upper to the LAG (both the direct
    master, if any, and any bridge masters of VLAN uppers), and have the
    relevant netdevices join their bridges.
    
    Signed-off-by: Petr Machata <petrm@nvidia.com>
    Reviewed-by: Danielle Ratson <danieller@nvidia.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: 41c8c1d65b32 ("mlxsw: fix refcount leak in mlxsw_sp_port_lag_join()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/huge_memory: fix huge_zero_pfn race [+ + +]
Author: Lorenzo Stoakes (ARM) <ljs@kernel.org>
Date:   Thu Jul 30 11:55:47 2026 +0100

    mm/huge_memory: fix huge_zero_pfn race
    
    commit 33192a26cddea7a7e4ca66e5c3eebd36fa8be2bb upstream.
    
    Patch series "mm/huge_memory: fix huge_zero_pfn race", v2.
    
    There is a subtle race in the reference-counted huge_zero_folio
    implementation.
    
    The fast path atomic logic fails to account for the fact that the shrinker
    (which drops the final huge_zero_refcount pin) can overwrite huge_zero_pfn
    with the ~0UL sentinel value in shrink_huge_zero_folio_scan() after a
    racing get_huge_zero_folio() installed a valid value there.
    
    This results in huge_zero_folio being correctly set but huge_zero_pfn
    being set incorrectly and thus is_huge_zero_pfn() and consequently
    is_huge_zero_pmd() will misidentify the huge zero folio as being an
    ordinary THP folio.
    
    This can result in the huge zero folio being split and otherwise treated
    incorrectly.
    
    The solution to this is very subtle as there is an atomic fast path, and
    thus ordering in weakly ordered architectures has to be treated very
    carefully.
    
    The first commit fixes the issue by introducing a spinlock around
    huge_zero_[pfn, folio, refcount] write, with careful consideration paid to
    load/store ordering in the fast path.  It is placed first and kept as
    small as possible so that it can be backported on its own.
    
    The second commit is a pure cleanup which reworks the
    CONFIG_PERSISTENT_HUGE_ZERO_FOLIO logic to better separate the persistent
    logic from the dynamically allocated one.
    
    
    This patch (of 2):
    
    If !CONFIG_PERSISTENT_HUGE_ZERO_FOLIO, the huge_zero_folio is refcounted
    by huge_zero_refcount and returned by mm_get_huge_zero_folio().
    
    When the caller is done with the huge zero page, its reference count is
    decremented.  Only a shrinker can set the reference count to zero.
    
    A race can unfortunately occur between a shrinker decrementing the
    reference count to zero and a concurrent page fault.
    
    This is because shrink_huge_zero_folio_scan() might, if very unlucky, be
    preempted between setting huge_zero_refcount to zero and writing an
    invalid value.
    
    During this time get_huge_zero_folio() could write to huge_zero_pfn before
    shrink_huge_zero_folio_scan() resumes.
    
    In this event the huge zero folio will be persistently misidentified
    causing the THP code path to be entered inappropriately for the huge zero
    folio:
    
                    CPU 0                                   CPU 1
    =======================================|=================================
    shrink_huge_zero_folio_scan()          |
       atomic_cmpxchg() sets refcount to 0 |
       xchg() sets huge_zero_folio to NULL | get_huge_zero_folio()
                     |                     |    atomic_inc_not_zero() -> zero
          preempted for a long time        |    Allocate new huge zero folio
                     |                     |    Write valid huge_zero_folio
                     v                     |    Write valid huge_zero_pfn
      Overwrite huge_zero_pfn with ~0UL   <--- Invalid overwrite!
    
    This results in is_huge_zero_pfn() and is_huge_zero_pmd() incorrectly
    returning false for a huge zero page which could result in issues like the
    huge zero folio being incorrectly split.
    
    Note that the issue is with huge_zero_pfn not huge_zero_folio, as
    get_huge_zero_folio() uses cmpxchg() gated on huge_zero_folio being NULL
    with a retry loop and shrink_huge_zero_folio_scan() uses xchg() to set
    huge_zero_folio.
    
    Fix the issue by introducing a spinlock, huge_zero_lock, to prevent
    concurrent write of huge_zero_folio, huge_zero_pfn and huge_zero_refcount.
    
    There needs to be significant care taken here to ensure correctness:
    
    The fast path in get_huge_zero_folio() uses atomic_inc_not_zero(), which
    is outside of the critical section, and means huge zero allocation is
    gated on zero huge_zero_refcount.
    
    The fast path doesn't use huge_zero_lock, so the critical section is
    irrelevant to it.
    
    So invariants are required - huge_zero_refcount MUST:
    
    * Only be set in the huge_zero_lock critical section to ensure
      serialisation of huge_zero_pfn, huge_zero_folio and huge_zero_refcount
      writes.
    
    * Be set non-zero only AFTER huge_zero_[pfn, folio] are set to valid values
      so installation of the huge zero folio on read page fault ensures
      concurrent is_huge_zero_*() calls correctly identify the huge zero folio.
    
    * Be set zero only BEFORE huge_zero_[pfn, folio] are set to NULL and ~0UL
      respectively, and atomically.
    
    Establish these by:
    
    * Only setting huge_zero_refcount to zero or an absolute value in the
      huge_zero_lock critical section in get_huge_zero_folio() and
      shrink_huge_zero_folio_scan(), and always updating atomically there
      and elsewhere.
    
    * Using atomic_set_release(&huge_zero_refcount) in get_huge_zero_folio()
      after huge_zero_[pfn, folio] are set. This is paired with
      atomic_inc_not_zero() to ensure atomic_inc_not_zero() only observes a
      non-zero value if huge_zero_[pfn, folio] are set.
    
    * Using atomic_cmpxchg() in shrink_huge_zero_folio_scan() (as before) to
      ensure that it is set zero only when equal to 1 and set atomically.
    
    * atomic_cmpxchg() being fully ordered ensures this is done prior to
      huge_zero_[folio, pfn] being set to NULL and ~0UL respectively.
    
    Eliminate the retry loop in get_huge_zero_folio() as the atomic_cmpxchg()
    in shrink_huge_zero_folio_scan() is now performed under the lock, and
    replace with an equally locked atomic_inc() to set the reference count
    should the caller be raced on huge zero folio installation.
    
    folio_put() naturally implies a full memory barrier so its ordering is
    maintained correctly.
    
    The huge zero folio also cannot be released except when the shrinker does
    so as it is non-LRU and non-rmappable.
    
    Note that only the huge zero shrinker (via shrink_huge_zero_folio_scan())
    can actually set huge_zero_refcount to zero, which is the count of mm's
    which have at least one huge zero folio installed plus one shrinker pin.
    
    Additionally convert a BUG_ON() to a VM_WARN_ON_ONCE().
    
    Link: https://lore.kernel.org/20260730-fix-refcounted-huge-zero-v2-0-c5d8a41b317f@kernel.org
    Link: https://lore.kernel.org/20260730-fix-refcounted-huge-zero-v2-1-c5d8a41b317f@kernel.org
    Fixes: 3b77e8c8cde5 ("mm/thp: make is_huge_zero_pmd() safe and quicker")
    Signed-off-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
    Reported-by: Hengbin Zhang <uqbarz@gmail.com>
    Closes: https://lore.kernel.org/linux-mm/20260727154001.4102341-1-uqbarz@gmail.com/
    Suggested-by: David Hildenbrand (Arm) <david@kernel.org>
    Acked-by: David Hildenbrand (Arm) <david@kernel.org>
    Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Barry Song <baohua@kernel.org>
    Cc: Dev Jain <dev.jain@arm.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Kiryl Shutsemau <kas@kernel.org>
    Cc: Lance Yang <lance.yang@linux.dev>
    Cc: Liam R. Howlett <liam@infradead.org>
    Cc: Nico Pache <npache@redhat.com>
    Cc: Pankaj Raghav <p.raghav@samsung.com>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Zi Yan <ziy@nvidia.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    [ adapted folio API (`huge_zero_folio`, `folio_pfn`, `folio_put`) to pre-6.11 page naming (`huge_zero_page`, `page_to_pfn`, `__free_pages`) ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/migrate_device: page_remove_rmap() -> folio_remove_rmap_pte() [+ + +]
Author: David Hildenbrand <david@kernel.org>
Date:   Mon Aug 10 06:57:29 2026 -0400

    mm/migrate_device: page_remove_rmap() -> folio_remove_rmap_pte()
    
    [ Upstream commit 5b205c7f2684764c8a9cc3442986623d4d6e87f1 ]
    
    Let's convert migrate_vma_collect_pmd().  While at it, perform more folio
    conversion.
    
    Link: https://lkml.kernel.org/r/20231220224504.646757-30-david@redhat.com
    Signed-off-by: David Hildenbrand <david@redhat.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Muchun Song <muchun.song@linux.dev>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Yin Fengwei <fengwei.yin@intel.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: 63867c82d0c0 ("mm: migrate_device: fix pte_pfn/pte_dirty called on non-present PTE")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/mm_init: fix uninitialized struct pages for ZONE_DEVICE [+ + +]
Author: Muchun Song <muchun.song@linux.dev>
Date:   Fri Jul 24 12:44:43 2026 -0400

    mm/mm_init: fix uninitialized struct pages for ZONE_DEVICE
    
    [ Upstream commit cd681403a87085562499d60325b7b45d3be11217 ]
    
    If DAX memory is hotplugged into an unoccupied subsection of an early
    section, section_activate() reuses the unoptimized boot memmap.  However,
    compound_nr_pages() still assumes that vmemmap optimization is in effect
    and initializes only the reduced number of struct pages.  As a result, the
    remaining tail struct pages are left uninitialized, which can later lead
    to unexpected behavior or crashes.
    
    Fix this by treating early sections as unoptimized when calculating how
    many struct pages to initialize.
    
    Link: https://lore.kernel.org/20260428081855.1249045-7-songmuchun@bytedance.com
    Fixes: 6fd3620b3428 ("mm/page_alloc: reuse tail struct pages for compound devmaps")
    Signed-off-by: Muchun Song <songmuchun@bytedance.com>
    Acked-by: David Hildenbrand (Arm) <david@kernel.org>
    Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Acked-by: Liam R. Howlett <liam@infradead.org>
    Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com>
    Cc: Joao Martins <joao.m.martins@oracle.com>
    Cc: Lorenzo Stoakes <ljs@kernel.org>
    Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/vmalloc: acquire init_mm lock on huge vmap to avoid ptdump UAF [+ + +]
Author: Lorenzo Stoakes (ARM) <ljs@kernel.org>
Date:   Sat Aug 15 07:18:16 2026 -0400

    mm/vmalloc: acquire init_mm lock on huge vmap to avoid ptdump UAF
    
    [ Upstream commit 26444eb71465c9934d9d418ef69c43f61185329b ]
    
    Patch series "mm: fix UAF caused by race between ptdump and vmap pgtable
    freeing", v6.
    
    Kernel page table walkers fall into two broad categories - those ranges
    where no exclusion is required via walk_kernel_page_table_range_lockless()
    and those where exclusion is required via walk_kernel_page_table_range()
    or walk_page_range_debug().
    
    The former category is used only by arm64 arch code operating on ranges it
    both wholly owns and does not concurrently write.
    
    The latter category consists of kernel page table walkers operating on
    ranges that are wholly owned (but which need exclusion against concurrent
    writers).
    
    The lock used for exclusion is the mmap lock, and for kernel ranges this
    is the mmap lock on init_mm.
    
    ptdump is a special case being both the only user of
    walk_page_range_debug(), and the only case in which it walks ranges it
    does not own.
    
    This presents a problem, as page tables may be freed under ptdump.  And
    indeed there is a use-after-free bug in the kernel as a result, which this
    series addresses.
    
    vmap promotes page tables to huge leaf entries where possible, freeing the
    lower page table when it does.  It does this with no meaningful locks held
    against concurrent ptdump walks.
    
    As a result, use-after-free can currently occur.  This series addresses
    the issue by having the vmap huge promotion logic acquire the mmap read
    lock while both setting the huge page table entry and freeing the prior
    leaf page table.
    
    The ptdump code already acquires the mmap write lock, so by doing so we
    ensure that the ptdump walker only ever observes either the huge page
    table entry or the existing page table entry, and nothing is freed
    underneath it.
    
    A mitigation for this issue was already applied for arm64 in commit
    fa93b45fd397 ("arm64: Enable vmalloc-huge with ptdump"), which this series
    has to deal with carefully.
    
    This mitigation resolves the issue by acquiring the mmap read lock on
    init_mm on vmap page table free if a ptdump is in progress.
    
    However the fix in this series would cause a deadlock if we were to simply
    apply it for arm64 without also reverting the change.
    
    This is because vmap may acquire the read lock before ptdump attempts to
    acquire the write lock, which then gets queued, and rwsem starvation rules
    mean that the (unacknowledged) nested mmap read lock in the arm64 code
    would also block, meaning the original read lock is never released and
    thus deadlock.
    
    This series works around this by #ifndef CONFIG_ARM64'ing the mmap read
    lock in vmap logic, then partially reverting commit fa93b45fd397 ("arm64:
    Enable vmalloc-huge with ptdump"), keeping the enablement of huge vmap
    support, and removing the ifdeffery with the partial revert patch.
    
    There are related issues that are also addressed in this series:
    
    * x86 page attribute logic, specifically Change Page Attributes (CPA),
      implements a feature whereby huge ranges can be collapsed into huge leaf
      entries. This can similarly cause a UAF when done in parallel with a
      ptdump walk, so similarly acquire the init_mm mmap lock to avoid this.
    
    * The CPA logic allows concurrent page table manipulation and CPA
      collapse, meaning the former risks accessing a page table the latter
      frees. Fix this by acquiring mmap write lock on init_mm across the
      whole CPA collapse operation and read lock on the page table
      manipulation.
    
    * x86 and arm64 permit walks of non-kernel mm's (both allowing efi mm
      walks, and in x86's case arbitrary mm's), so we ensure kernel mappings
      remain stable by locking the init_mm as well as the mm being walked.
    
    The ordering of patches is established for both strict dependencies (the
    arm64 partial revert in particular has to be done after the vmap changes)
    and logical ones (the non-kernel mm fix only makes sense once the vmap/CPA
    fixes are in place).
    
    This patch (of 3):
    
    Currently there is a nasty race between ptdump and vmap when attempting to
    map a huge P4D, PUD or PMD entry:
    
    * ptdump walks kernel page table ranges it doesn't own.
    
    * When vmap maps ranges it tries to promotes existing ones to huge page
      tables in vmap_try_huge_[p4d,pud,pmd]() at P4D, PUD and PMD level,
      freeing the lower page table in [p4d,pud,pmd]_free_[pud,pmd,pte]_page()
      when it succeeds.
    
    Both of these things can happen at the same time and as a result ptdump
    can access a freed page table, resulting in a use-after-free and memory
    corruption.
    
    This is possible because while ptdump_walk_pgd() holds both the mem
    hotplug lock and the mmap write lock before invoking
    walk_page_range_debug(), vmap takes no relevant locks at all.
    
    Fix this by holding the mmap read lock in vmap_try_huge_*() when freeing
    page tables.
    
    The read lock is sufficient: ptdump is the only walker that must be
    excluded and it holds the mmap write lock.  Other holders of the read lock
    may run concurrently, but each exclusively owns the range it operates on
    and cannot reach the page tables freed here.
    
    We also hold the lock while assigning the huge page table entry, which
    means page table walkers observe only the huge or non-huge page table
    entry.
    
    We use a trylock to prevent ptdump from blocking vmap making forward
    progress.  This is fine because it's an optimisation in any case, and thus
    the vmap can safely proceed regardless.
    
    All other kernel page table walkers that touch vmalloc ranges either
    exclusively own the memory walked or acquire the mmap lock, so this
    correctly excludes those walkers.
    
    One wrinkle here is commit fa93b45fd397 ("arm64: Enable vmalloc-huge with
    ptdump"), which addresses the issue for arm64 only by explicitly acquiring
    the mmap read lock on kernel page table freeing should a concurrent ptdump
    be in progress.
    
    This is problematic as vmap may acquire the mmap read lock prior to ptdump
    attempting to acquire an mmap write lock, leading to a deadlock when the
    mmap read lock is slept upon on page table freeing due to rwsem
    anti-starvation.
    
    We work around this by predicating the mmap lock being taken on
    !CONFIG_ARM64 for the time being.
    
    With this patch applied, a follow up will partially revert commit
    fa93b45fd397 ("arm64: Enable vmalloc-huge with ptdump") and at that stage
    remove the arm64 ifdeffery.
    
    We also update walk_page_range_debug() to assert the mmap write lock
    unconditionally and update the comment here to reflect this change.
    
    The issue has existed as long as ptdump was available and vmap freed page
    tables when promoting to a huge leaf entry, that is, since commit
    b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page table")
    for huge ioremap, and commit 121e6f3258fe ("mm/vmalloc: hugepage vmalloc
    mappings") for huge vmalloc.
    
    Since the former is the earlier of the two we choose that for our Fixes
    tag.
    
    We also define a guard class for mmap_read_trylock() so we can use
    cleanup.h to make the scope handling cleaner in the implementation.
    
    This patch is based on work by David Carlier (linked), with gratitude!
    
    Link: https://lore.kernel.org/20260723-series-vmap-race-fix-v6-0-8cc77dcc0018@kernel.org
    Link: https://lore.kernel.org/20260723-series-vmap-race-fix-v6-1-8cc77dcc0018@kernel.org
    Fixes: b6bdb7517c3d ("mm/vmalloc: add interfaces to free unmapped page table")
    Signed-off-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
    Reported-by: syzbot+fd95a72470f5a44e464c@syzkaller.appspotmail.com
    Closes: https://lore.kernel.org/all/6a287988.39669fcc.33b062.00a0.GAE@google.com/T/
    Link: https://lore.kernel.org/linux-mm/20260706203128.162335-1-devnexen@gmail.com/
    Reviewed-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
    Reviewed-by: Dev Jain <dev.jain@arm.com>
    Acked-by: David Hildenbrand (Arm) <david@kernel.org>
    Reviewed-by: Kiryl Shutsemau <kas@kernel.org>
    Cc: <stable@vger.kernel.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: "Borah, Chaitanya Kumar" <chaitanya.kumar.borah@intel.com>
    Cc: "Borislav Petkov (AMD)" <bp@alien8.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Liam R. Howlett <liam@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Toshi Kani <toshi.kani@hpe.com>
    Cc: "Uladzislau Rezki (Sony)" <urezki@gmail.com>
    Cc: Vlastimil Babka <vbabka@kernel.org>
    Cc: Will Deacon <will@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/vmemmap/devdax: fix kernel crash when probing devdax devices [+ + +]
Author: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Date:   Fri Jul 24 12:44:42 2026 -0400

    mm/vmemmap/devdax: fix kernel crash when probing devdax devices
    
    [ Upstream commit 87a7ae75d7383afa998f57656d1d14e2a730cc47 ]
    
    commit 4917f55b4ef9 ("mm/sparse-vmemmap: improve memory savings for
    compound devmaps") added support for using optimized vmmemap for devdax
    devices.  But how vmemmap mappings are created are architecture specific.
    For example, powerpc with hash translation doesn't have vmemmap mappings
    in init_mm page table instead they are bolted table entries in the
    hardware page table
    
    vmemmap_populate_compound_pages() used by vmemmap optimization code is not
    aware of these architecture-specific mapping.  Hence allow architecture to
    opt for this feature.  I selected architectures supporting
    HUGETLB_PAGE_OPTIMIZE_VMEMMAP option as also supporting this feature.
    
    This patch fixes the below crash on ppc64.
    
    BUG: Unable to handle kernel data access on write at 0xc00c000100400038
    Faulting instruction address: 0xc000000001269d90
    Oops: Kernel access of bad area, sig: 11 [#1]
    LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
    Modules linked in:
    CPU: 7 PID: 1 Comm: swapper/0 Not tainted 6.3.0-rc5-150500.34-default+ #2 5c90a668b6bbd142599890245c2fb5de19d7d28a
    Hardware name: IBM,9009-42G POWER9 (raw) 0x4e0202 0xf000005 of:IBM,FW950.40 (VL950_099) hv:phyp pSeries
    NIP:  c000000001269d90 LR: c0000000004c57d4 CTR: 0000000000000000
    REGS: c000000003632c30 TRAP: 0300   Not tainted  (6.3.0-rc5-150500.34-default+)
    MSR:  8000000000009033 <SF,EE,ME,IR,DR,RI,LE>  CR: 24842228  XER: 00000000
    CFAR: c0000000004c57d0 DAR: c00c000100400038 DSISR: 42000000 IRQMASK: 0
    ....
    NIP [c000000001269d90] __init_single_page.isra.74+0x14/0x4c
    LR [c0000000004c57d4] __init_zone_device_page+0x44/0xd0
    Call Trace:
    [c000000003632ed0] [c000000003632f60] 0xc000000003632f60 (unreliable)
    [c000000003632f10] [c0000000004c5ca0] memmap_init_zone_device+0x170/0x250
    [c000000003632fe0] [c0000000005575f8] memremap_pages+0x2c8/0x7f0
    [c0000000036330c0] [c000000000557b5c] devm_memremap_pages+0x3c/0xa0
    [c000000003633100] [c000000000d458a8] dev_dax_probe+0x108/0x3e0
    [c0000000036331a0] [c000000000d41430] dax_bus_probe+0xb0/0x140
    [c0000000036331d0] [c000000000cef27c] really_probe+0x19c/0x520
    [c000000003633260] [c000000000cef6b4] __driver_probe_device+0xb4/0x230
    [c0000000036332e0] [c000000000cef888] driver_probe_device+0x58/0x120
    [c000000003633320] [c000000000cefa6c] __device_attach_driver+0x11c/0x1e0
    [c0000000036333a0] [c000000000cebc58] bus_for_each_drv+0xa8/0x130
    [c000000003633400] [c000000000ceefcc] __device_attach+0x15c/0x250
    [c0000000036334a0] [c000000000ced458] bus_probe_device+0x108/0x110
    [c0000000036334f0] [c000000000ce92dc] device_add+0x7fc/0xa10
    [c0000000036335b0] [c000000000d447c8] devm_create_dev_dax+0x1d8/0x530
    [c000000003633640] [c000000000d46b60] __dax_pmem_probe+0x200/0x270
    [c0000000036337b0] [c000000000d46bf0] dax_pmem_probe+0x20/0x70
    [c0000000036337d0] [c000000000d2279c] nvdimm_bus_probe+0xac/0x2b0
    [c000000003633860] [c000000000cef27c] really_probe+0x19c/0x520
    [c0000000036338f0] [c000000000cef6b4] __driver_probe_device+0xb4/0x230
    [c000000003633970] [c000000000cef888] driver_probe_device+0x58/0x120
    [c0000000036339b0] [c000000000cefd08] __driver_attach+0x1d8/0x240
    [c000000003633a30] [c000000000cebb04] bus_for_each_dev+0xb4/0x130
    [c000000003633a90] [c000000000cee564] driver_attach+0x34/0x50
    [c000000003633ab0] [c000000000ced878] bus_add_driver+0x218/0x300
    [c000000003633b40] [c000000000cf1144] driver_register+0xa4/0x1b0
    [c000000003633bb0] [c000000000d21a0c] __nd_driver_register+0x5c/0x100
    [c000000003633c10] [c00000000206a2e8] dax_pmem_init+0x34/0x48
    [c000000003633c30] [c0000000000132d0] do_one_initcall+0x60/0x320
    [c000000003633d00] [c0000000020051b0] kernel_init_freeable+0x360/0x400
    [c000000003633de0] [c000000000013764] kernel_init+0x34/0x1d0
    [c000000003633e50] [c00000000000de14] ret_from_kernel_thread+0x5c/0x64
    
    Link: https://lkml.kernel.org/r/20230411142214.64464-1-aneesh.kumar@linux.ibm.com
    Fixes: 4917f55b4ef9 ("mm/sparse-vmemmap: improve memory savings for compound devmaps")
    Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Reported-by: Tarun Sahu <tsahu@linux.ibm.com>
    Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
    Cc: Muchun Song <songmuchun@bytedance.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Mike Kravetz <mike.kravetz@oracle.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: cd681403a870 ("mm/mm_init: fix uninitialized struct pages for ZONE_DEVICE")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/vmstat: fold stranded per-cpu node stats when a node comes online [+ + +]
Author: Gregory Price <gourry@gourry.net>
Date:   Mon Aug 10 20:23:11 2026 -0400

    mm/vmstat: fold stranded per-cpu node stats when a node comes online
    
    [ Upstream commit ea3034b2b00fa50c8d2518d0804c9d427bbafa86 ]
    
    A per-node vmstat counter is pgdat->vm_stat[] plus per-cpu deltas.  A
    balanced counter can sit split as global=+N / per-cpu=-N.
    
    The folds reconciling the split only walk online nodes, so when
    try_offline_node() marks a node offline the per-cpu deltas are stranded.
    
    A subsequent online resets the per-cpu area but not pgdat->vm_stat[],
    orphaning the +N permanently.  All NR_VM_NODE_STAT_ITEMS are affected.
    
    The existing code zeroes the per-cpu counters and causes a permanent skew.
    Fold the stranded deltas instead, before the node rejoins the online set.
    The node is not online yet and the hotplug lock is held, so the remote
    access to per-cpu values is safe.
    
    Discovered when node compaction hung for a nearly empty node, as the math
    to determine throttling broke.  Reproduced by repeated memory
    hotplug/unplug cycles on a node under pressure: NR_ISOLATED_ANON ratchets
    up and never returns to zero.
    
    Link: https://lore.kernel.org/20260627202243.758289-1-gourry@gourry.net
    Fixes: 75ef71840539 ("mm, vmstat: add infrastructure for per-node vmstats")
    Signed-off-by: Gregory Price <gourry@gourry.net>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Mike Rapoport <rppt@kernel.org>
    Cc: Vlastimil Babka <vbabka@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm: do file ownership checks with the proper mount idmap [+ + +]
Author: Pedro Falcato <pfalcato@suse.de>
Date:   Tue Jul 21 11:48:33 2026 -0400

    mm: do file ownership checks with the proper mount idmap
    
    [ Upstream commit e187bc02f8fa4226d62814592cf064ee4557c470 ]
    
    Ever since idmapped mounts were introduced, inode ownership checks (for
    side-channel protection) in mincore() and madvise(MADV_PAGEOUT) were done
    against the nop_mnt_idmap, which completely ignores the file's mount's
    idmap.  This results in odd edgecases like:
    
    1) mount/bind-mount with an idmap userA:userB:1
    2) userB runs an owner_or_capable() check on file that is owned by userA
    on-disk/in-memory, but owned by userB after idmap translation
    3) owner_or_capable() mysteriously fails as the correct idmap wasn't supplied
    
    In the case of mincore/madvise MADV_PAGEOUT, this is usually benign,
    because file_permission(file, MAY_WRITE) will probably succeed, as it uses
    the proper idmap internally, but it does not need to be the case on e.g a
    0444 file where even the owner itself doesn't have permissions to write to
    it.
    
    Since this is clearly not trivial to get right, introduce a
    file_owner_or_capable() that can carry the correct semantics, and switch
    the various users in mm to it.
    
    The issue was found by manual code inspection & an off-list discussion
    with Jan Kara.
    
    Link: https://lore.kernel.org/20260625153853.913949-1-pfalcato@suse.de
    Fixes: 9caccd41541a ("fs: introduce MOUNT_ATTR_IDMAP")
    Signed-off-by: Pedro Falcato <pfalcato@suse.de>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Acked-by: David Hildenbrand (Arm) <david@kernel.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Jann Horn <jannh@google.com>
    Cc: Liam R. Howlett <liam@infradead.org>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Vlastimil Babka <vbabka@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: migrate_device: fix pte_pfn/pte_dirty called on non-present PTE [+ + +]
Author: Kefeng Wang <wangkefeng.wang@huawei.com>
Date:   Mon Aug 10 06:57:30 2026 -0400

    mm: migrate_device: fix pte_pfn/pte_dirty called on non-present PTE
    
    [ Upstream commit 63867c82d0c0c2d182016a32b1cc0103116b0ea5 ]
    
    pte_pfn() and pte_dirty() have undefined behaviour when called on a
    non-present PTE. In migrate_vma_collect_pmd(), these functions may be
    invoked on non-present entries (e.g., device-private entries), leading
    to potential crashes from pte_pfn() or incorrect dirty folio accounting
    from pte_dirty(). Fix both by guarding with pte_present() checks.
    
    Link: https://lore.kernel.org/20260708003955.4024340-1-wangkefeng.wang@huawei.com
    Link: https://lore.kernel.org/20260706111958.3649651-1-wangkefeng.wang@huawei.com
    Fixes: fd35ca3d12cc ("mm/migrate_device.c: copy pte dirty bit to page")
    Fixes: 6c287605fd56 ("mm: remember exclusively mapped anonymous pages with PG_anon_exclusive")
    Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    Reviewed-by: Balbir Singh <balbirs@nvidia.com>
    Acked-by: Zi Yan <ziy@nvidia.com>
    Cc: Alistair Popple <apopple@nvidia.com>
    Cc: Byungchul Park <byungchul@sk.com>
    Cc: David Hildenbrand <david@kernel.org>
    Cc: Gregory Price <gourry@gourry.net>
    Cc: "Huang, Ying" <ying.huang@linux.alibaba.com>
    Cc: Joshua Hahn <joshua.hahnjy@gmail.com>
    Cc: Matthew Brost <matthew.brost@intel.com>
    Cc: Rakie Kim <rakie.kim@sk.com>
    Cc: Ying Huang <ying.huang@linux.alibaba.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mm: move most of core MM initialization to mm/mm_init.c [+ + +]
Author: Mike Rapoport (IBM) <rppt@kernel.org>
Date:   Fri Jul 24 12:44:41 2026 -0400

    mm: move most of core MM initialization to mm/mm_init.c
    
    [ Upstream commit 9420f89db2dd611c5b436a13e13f74d65ecc3a6a ]
    
    The bulk of memory management initialization code is spread all over
    mm/page_alloc.c and makes navigating through page allocator functionality
    difficult.
    
    Move most of the functions marked __init and __meminit to mm/mm_init.c to
    make it better localized and allow some more spare room before
    mm/page_alloc.c reaches 10k lines.
    
    No functional changes.
    
    Link: https://lkml.kernel.org/r/20230321170513.2401534-4-rppt@kernel.org
    Signed-off-by: Mike Rapoport (IBM) <rppt@kernel.org>
    Acked-by: David Hildenbrand <david@redhat.com>
    Acked-by: Vlastimil Babka <vbabka@suse.cz>
    Cc: Doug Berger <opendmb@gmail.com>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: cd681403a870 ("mm/mm_init: fix uninitialized struct pages for ZONE_DEVICE")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mmc: omap_hsmmc: fix busy_timeout overflow in ns conversion on 32-bit [+ + +]
Author: Zhan Xusheng <zhanxusheng1024@gmail.com>
Date:   Tue Aug 4 10:25:00 2026 +0800

    mmc: omap_hsmmc: fix busy_timeout overflow in ns conversion on 32-bit
    
    commit f64ea900e4bda3055ef24a2c906f8d049cf1c3bd upstream.
    
    omap_hsmmc_prepare_data() converts the command busy timeout to nanoseconds
    with:
    
            timeout = req->cmd->busy_timeout * NSEC_PER_MSEC;
    
    busy_timeout is an unsigned int (milliseconds) and timeout is a u64, but
    NSEC_PER_MSEC is 1000000L.  On 32-bit builds the multiplication is
    performed in 32-bit arithmetic and wraps for busy_timeout values above
    ~4294 ms, before the result is assigned to the u64.
    
    The driver does not set mmc->max_busy_timeout, so the core does not cap the
    busy timeout, and commands such as erase or SANITIZE (MMC_SANITIZE_TIMEOUT_MS
    is 240000 ms) can pass a busy_timeout far larger than 4294 ms.  The wrapped,
    much smaller ns value is then programmed via set_data_timeout(), so the data
    timeout is set too short and the operation can time out prematurely.
    
    Cast busy_timeout to u64 before the multiplication so the conversion is done
    in 64-bit arithmetic.
    
    Fixes: 8cc9a3e73de1 ("mmc: host: omap_hsmmc: use generic_cmd6_time to program timeout value for CMD6")
    Cc: stable@vger.kernel.org
    Signed-off-by: Zhan Xusheng <zhanxusheng@xiaomi.com>
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci: make tuning_err a signed int [+ + +]
Author: Haibo Chen <haibo.chen@nxp.com>
Date:   Mon Jul 27 18:38:49 2026 +0800

    mmc: sdhci: make tuning_err a signed int
    
    commit ae31bcc92bb42502bb7c9029e6dc7a824cf6cd14 upstream.
    
    Coverity report INTEGER_OVERFLOW for host->tuning_err.
    The tuning_err field in struct sdhci_host is used to store an error
    code for re-tuning, but it was declared as unsigned int. Several call
    sites store negative error codes into it and later compare against
    negative values:
    
      - sdhci.c, sdhci-of-dwcmshc.c and sdhci-pci-gli.c assign it the
        return value of __sdhci_execute_tuning()/__sdhci_execute_tuning_9750(),
        both of which return a signed int (possibly a negative errno);
      - sdhci-of-esdhc.c assigns host->tuning_err = -EAGAIN and later does
        "ret = host->tuning_err; if (ret == -EAGAIN ...)";
      - sdhci-of-dwcmshc.c prints it with the %d (signed) conversion.
    
    Storing a negative errno in an unsigned int and reading it back as a
    signed int only happens to work because of two's-complement, same-width
    integer conversions. It is misleading and triggers sign-conversion
    warnings. All users treat the value either as a signed error code or as
    a boolean (zero / non-zero), so changing the type to a signed int is
    safe and makes the intent explicit.
    
    Fixes: 7d8bb1f46e13 ("mmc: sdhci: add tuning error codes")
    Assisted-by: Cline:claude-sonnet [read_file, search_files, git]
    Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: sdhci: unmap the bounce buffer before device release [+ + +]
Author: Myeonghun Pak <mhun512@gmail.com>
Date:   Mon Jul 27 23:03:22 2026 +0900

    mmc: sdhci: unmap the bounce buffer before device release
    
    commit 9e9f561269dff35e6f84ed21776ec37fd6360b03 upstream.
    
    sdhci_allocate_bounce_buffer() allocates its buffer with devm_kmalloc()
    but maps it with dma_map_single(). The buffer is therefore released by
    devres without the streaming DMA mapping being unmapped.
    
    Register a managed action after dma_map_single() succeeds so the mapping
    is removed before devres releases the buffer. The action is registered
    only for buffers allocated and mapped by the SDHCI core, leaving buffers
    provided by host drivers under their existing ownership.
    
    Fixes: bd9b902798ab ("mmc: sdhci: Implement an SDHCI-specific bounce buffer")
    Cc: stable@vger.kernel.org
    Co-developed-by: Ijae Kim <ae878000@gmail.com>
    Signed-off-by: Ijae Kim <ae878000@gmail.com>
    Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: vub300: fix use-after-free on disconnect [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jul 27 22:46:38 2026 -0400

    mmc: vub300: fix use-after-free on disconnect
    
    The vub300 driver maintains an explicit reference count for the
    controller and its driver data and the last reference can in theory be
    dropped after the driver has been unbound.
    
    This specifically means that the controller allocation must not be
    device managed as that can lead to use-after-free.
    
    Note that the lifetime is currently also incorrectly tied the parent USB
    device rather than interface, which can lead to memory leaks if the
    driver is unbound without its device being physically disconnected (e.g.
    on probe deferral).
    
    Fix both issues by reverting to non-managed allocation of the controller.
    
    Fixes: dcfdd698dc52 ("mmc: vub300: Use devm_mmc_alloc_host() helper")
    Cc: stable@vger.kernel.org # 6.17+
    Cc: Binbin Zhou <zhoubinbin@loongson.cn>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    (cherry picked from commit 8f4d20a710225ec7a565f6a0459862d3b1f32330)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: vub300: fix use-after-free on probe failure [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Mon Jul 27 22:46:40 2026 -0400

    mmc: vub300: fix use-after-free on probe failure
    
    The vub300 driver lifetime-manages its controller state using
    vub300->kref, with vub300_delete() freeing the mmc host when the last
    reference is dropped. The probe error path after the inactivity timer has
    been armed still bypasses that lifetime rule, however, and falls through
    to mmc_free_host() directly if mmc_add_host() fails.
    
    The race window is between arming the inactivity timer and reaching the
    probe error unwind after mmc_add_host() fails:
    
            probe thread                     timer/workqueue
            ------------                     ---------------
            kref_init(&vub300->kref)         ref = 1
            kref_get(&vub300->kref)          ref = 2, timer ref
            add_timer(inactivity_timer)      fires after one second
            |
            |   race window
            |<---------------------------------------------------->
            |
            mmc_add_host(mmc)
                                             inactivity timer fires
                                             vub300_queue_dead_work()
                                               kref_get()          ref = 3
                                               queue_work(deadwork)
            mmc_add_host() fails
            timer_delete_sync()
            mmc_free_host(mmc)
              frees vub300
                                             deadwork runs
                                               use-after-free
    
    The inactivity timeout is one second, so this would require
    mmc_add_host() to both fail and take more than one second to do so. This
    is unlikely to happen in practice, but the error path is still wrong.
    
    timer_delete_sync() only waits for the timer callback itself. It does
    not flush deadwork that the callback may already have queued. As a
    result, queued deadwork can still hold a kref while the probe error path
    directly frees the backing mmc host, including the vub300 storage.
    
    Fix this by using the same lifetime mechanism as disconnect. Clear
    vub300->interface so that the timer callback and any queued deadwork
    return early and drop their references, then drop the initial probe
    reference and return without falling through to err_free_host.
    
    Fixes: 0613ad2401f8 ("mmc: vub300: fix return value check of mmc_add_host()")
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Reviewed-by: Johan Hovold <johan@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    (cherry picked from commit a3b5f242997a3be7404112fd48784881560aea57)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mmc: vub300: rename probe error labels [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Jul 27 22:46:39 2026 -0400

    mmc: vub300: rename probe error labels
    
    Error labels should be named after what they do.
    
    Rename the probe error labels.
    
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    (cherry picked from commit 5b8b35d6f4fa758dd5e8ae18526ea1c73f6787e0)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: add mptcp_userspace_pm_lookup_addr helper [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Fri Aug 7 09:05:47 2026 -0400

    mptcp: add mptcp_userspace_pm_lookup_addr helper
    
    [ Upstream commit e7b4083b90b7213902124d13fd1ed808360e32b1 ]
    
    Like __lookup_addr() helper in pm_netlink.c, a new helper
    mptcp_userspace_pm_lookup_addr() is also defined in pm_userspace.c.
    It looks up the corresponding mptcp_pm_addr_entry address in
    userspace_pm_local_addr_list through the passed "addr" parameter
    and returns the found address entry.
    
    This helper can be used in mptcp_userspace_pm_delete_local_addr(),
    mptcp_userspace_pm_set_flags(), mptcp_userspace_pm_get_local_id()
    and mptcp_userspace_pm_is_backup() to simplify the code.
    
    Please note that with this change now list_for_each_entry() is used in
    mptcp_userspace_pm_append_new_local_addr(), not list_for_each_entry_safe(),
    but that's OK to do so because mptcp_userspace_pm_lookup_addr() only
    returns an entry from the list, the list hasn't been modified here.
    
    Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20241213-net-next-mptcp-pm-misc-cleanup-v1-1-ddb6d00109a8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 9bc6d5e4ca9f ("mptcp: pm: userspace: fix use-after-free in get_local_id")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: options: reset DSS fields in case of unexpected size [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Mon Aug 3 18:16:33 2026 +0200

    mptcp: options: reset DSS fields in case of unexpected size
    
    commit 35772b4981f38ba8059372cde8753e8e477e98ec upstream.
    
    A remote peer could send a malformed DSS with a wrong size, followed by
    another DSS or MPC + Data. In this case, the first suboption will be
    ignored, but leaving some fields written, which could lead to
    inconsistency or access uninitialized data.
    
    Explicitly reset the fields that could have been modified in case of
    unexpected size.
    
    Link: https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260728-net-mptcp-misc-fixes-7-2-rc6-v1-0-f7e2d229159d%40kernel.org?part=1
    Fixes: 648ef4b88673 ("mptcp: Implement MPTCP receive path")
    Cc: stable@vger.kernel.org
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260803-net-mptcp-misc-fixes-7-2-rc6-v2-1-b8f496d71664@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: avoid code duplication to lookup endp [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Fri Aug 7 09:05:46 2026 -0400

    mptcp: pm: avoid code duplication to lookup endp
    
    [ Upstream commit 1d7fa6ceb91fddbe38cae3521d5d1075bce6a00e ]
    
    The helper __lookup_addr() can be used in mptcp_pm_nl_get_local_id()
    and mptcp_pm_nl_is_backup() to simplify the code, and avoid code
    duplication.
    
    Co-developed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20241115-net-next-mptcp-pm-lockless-dump-v1-2-f4a1bcb4ca2c@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 9bc6d5e4ca9f ("mptcp: pm: userspace: fix use-after-free in get_local_id")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: use addr entry for get_local_id [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Fri Aug 7 09:05:48 2026 -0400

    mptcp: pm: use addr entry for get_local_id
    
    [ Upstream commit 7462fe22cc74321eb663768848976d42eba3ddbb ]
    
    The following code in mptcp_userspace_pm_get_local_id() that assigns "skc"
    to "new_entry" is not allowed in BPF if we use the same code to implement
    the get_local_id() interface of a BFP path manager:
    
            memset(&new_entry, 0, sizeof(struct mptcp_pm_addr_entry));
            new_entry.addr = *skc;
            new_entry.addr.id = 0;
            new_entry.flags = MPTCP_PM_ADDR_FLAG_IMPLICIT;
    
    To solve the issue, this patch moves this assignment to "new_entry" forward
    to mptcp_pm_get_local_id(), and then passing "new_entry" as a parameter to
    both mptcp_pm_nl_get_local_id() and mptcp_userspace_pm_get_local_id().
    
    No behavioural changes intended.
    
    Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20250307-net-next-mptcp-pm-reorg-v1-1-abef20ada03b@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 9bc6d5e4ca9f ("mptcp: pm: userspace: fix use-after-free in get_local_id")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

mptcp: pm: userspace: fix use-after-free in get_local_id [+ + +]
Author: Geliang Tang <geliang@kernel.org>
Date:   Fri Aug 7 09:05:49 2026 -0400

    mptcp: pm: userspace: fix use-after-free in get_local_id
    
    [ Upstream commit 9bc6d5e4ca9f3cbb41d43400b3a31cb0403796c9 ]
    
    In mptcp_pm_userspace_get_local_id(), the address entry is looked up under
    spinlock, but its id is read after dropping the lock. A concurrent deletion
    can free the entry between the unlock and the read, leading to UAF.
    
    The race window is narrow. It was reproduced only with a locally
    constructed stress test that repeatedly overlaps an MP_JOIN SYN with a
    MPTCP_PM_CMD_SUBFLOW_DESTROY request.
    
    However, the KASAN report below confirms that the race is reachable:
    
      [  666.319376] BUG: KASAN: slab-use-after-free in mptcp_userspace_pm_get_local_id+0x1dc/0x1f0
      [  666.319386] Read of size 1 at addr ffff888124845610 by task swapper/0/0
      ...
      [  666.319401] Call Trace:
      [  666.319405]  <IRQ>
      [  666.319408]  dump_stack_lvl+0x53/0x70
      [  666.319412]  print_address_description.constprop.0+0x2c/0x3b0
      [  666.319418]  print_report+0xbe/0x2b0
      [  666.319421]  ? mptcp_userspace_pm_get_local_id+0x1dc/0x1f0
      [  666.319423]  kasan_report+0xce/0x100
      [  666.319426]  ? mptcp_userspace_pm_get_local_id+0x1dc/0x1f0
      [  666.319429]  mptcp_userspace_pm_get_local_id+0x1dc/0x1f0
      [  666.319433]  mptcp_pm_get_local_id+0x371/0x440
      ...
      [  666.319821] Allocated by task 45539:
      [  666.319844]  kasan_save_stack+0x33/0x60
      [  666.319855]  kasan_save_track+0x14/0x30
      [  666.319858]  __kasan_kmalloc+0x8f/0xa0
      [  666.319863]  __kmalloc_noprof+0x1e7/0x520
      [  666.319867]  sock_kmalloc+0xdf/0x130
      [  666.319885]  sock_kmemdup+0x1b/0x40
      [  666.319888]  mptcp_userspace_pm_append_new_local_addr+0x261/0x500
      [  666.319910]  mptcp_pm_nl_announce_doit+0x16a/0x610
      ...
      [  666.319967] Freed by task 45560:
      [  666.319988]  kasan_save_stack+0x33/0x60
      [  666.319991]  kasan_save_track+0x14/0x30
      [  666.319994]  kasan_save_free_info+0x3b/0x60
      [  666.319998]  __kasan_slab_free+0x43/0x70
      [  666.320000]  kfree+0x166/0x440
      [  666.320003]  sock_kfree_s+0x1d/0x50
      [  666.320007]  mptcp_userspace_pm_delete_local_addr.isra.0+0x157/0x200
      [  666.320011]  mptcp_pm_nl_subflow_destroy_doit+0x51d/0xea0
    
    Fix by copying the id into a local variable while still holding the lock,
    and use -1 as a "not found" sentinel.
    
    Fixes: f012d796a6de ("mptcp: check addrs list in userspace_pm_get_local_id")
    Cc: stable@vger.kernel.org
    Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
    Tested-by: Xuanqiang Luo <luoxuanqiang@kylinos.cn>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260722-net-mptcp-misc-fixes-7-2-rc5-v1-2-6fb595bc86ef@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mtd: maps: vmu-flash: fix fault in unaligned fixup [+ + +]
Author: Florian Fuchs <fuchsfl@gmail.com>
Date:   Sat Jul 25 10:12:16 2026 -0400

    mtd: maps: vmu-flash: fix fault in unaligned fixup
    
    [ Upstream commit 79d1661502c6e4b6f626185cef72cf2fa78116e1 ]
    
    Use kzalloc_obj() / kzalloc_objs() to allocate the memcard structs,
    instead of kmalloc_obj() / kmalloc_objs() to prevent access to
    uninitialized data.
    
    Fixes runtime error: Fault in unaligned fixup: 0000 [#1] at
    mtd_get_fact_prot_info.
    
    Fixes: 47a72688fae7 ("mtd: flash mapping support for Dreamcast VMU.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Florian Fuchs <fuchsfl@gmail.com>
    Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/sched: act_ct: fix sk_buff leak when the header checks reject a packet [+ + +]
Author: Hyunjung Ko <hj351016@gmail.com>
Date:   Wed Aug 19 15:08:36 2026 -0400

    net/sched: act_ct: fix sk_buff leak when the header checks reject a packet
    
    [ Upstream commit 8a7ed561671aa6a911a2de99e59ef670a4d0b1df ]
    
    tcf_ct_handle_fragments() runs its header sanity checks before handing
    anything to the defragmentation engine:
    
            if (family == NFPROTO_IPV4)
                    err = tcf_ct_ipv4_is_fragment(skb, &frag);
            else
                    err = tcf_ct_ipv6_is_fragment(skb, &frag);
            if (err || !frag)
                    return err;
    
    tcf_ct_ipv4_is_fragment() returns -EINVAL or -ENOMEM;
    tcf_ct_ipv6_is_fragment() adds -EPROTO when ipv6_find_hdr() fails. None of
    them frees or queues the skb, so on that path the caller still owns it.
    
    tcf_ct_act() however funnels every non-zero return into the
    ownership-transfer exit:
    
            err = tcf_ct_handle_fragments(net, skb, family, p->zone, &defrag);
            if (err)
                    goto out_frag;
            ...
    out_frag:
            if (err != -EINPROGRESS)
                    tcf_action_inc_drop_qstats(&c->common);
            return TC_ACT_CONSUMED;
    
    TC_ACT_CONSUMED means the action took ownership of the skb, so no caller
    frees it - sch_handle_ingress(), sch_handle_egress() and
    tcf_qevent_handle() all deliberately skip the free for that verdict. The
    skb is therefore orphaned: one sk_buff plus its data buffer is leaked per
    malformed packet, unbounded. Note the drop counter is already incremented
    for these errors, so the statistics claim a drop that never happens.
    
    Three different ownership states reach out_frag: today - the skb may be
    queued by the defrag engine (-EINPROGRESS), already freed by
    nf_ct_handle_fragments(), or still owned by us. Tell the caller which of
    those it is, and free the packet ourselves in the last case, which
    restores the TC_ACT_SHOT behaviour that predated the Fixes: commit.
    
    Reproduced on v7.2-rc6 with a 54-byte frame carrying a 40-byte IPv6
    header with nexthdr = 0 (hop-by-hop) and nothing after it, on a
    clsact ingress chain with "action ct". kmemleak reports one leaked
    232-byte skbuff_head_cache object plus its 704-byte data buffer per
    packet; with this patch it reports none.
    
    Fixes: 3f14b377d01d ("net/sched: act_ct: fix skb leak and crash on ooo frags")
    Cc: stable@vger.kernel.org # v6.8+
    Signed-off-by: Hyunjung Ko <hj351016@gmail.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/20260806101235.809370-1-hj351016@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Dropped upstream's `bool add_helper = false;` context line, absent on 6.1, keeping only the new `bool skb_is_ours = false;` declaration. ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: act_ct: preserve tc_skb_cb across defragmentation [+ + +]
Author: Zihan Xi <xizh2024@lzu.edu.cn>
Date:   Tue Jul 28 08:34:17 2026 -0400

    net/sched: act_ct: preserve tc_skb_cb across defragmentation
    
    [ Upstream commit 9092e15defbe6c7bc241c306093ca9d358a578e7 ]
    
    tcf_ct_handle_fragments() calls nf_ct_handle_fragments() without saving
    and restoring skb->cb. The defrag helper clears IPCB/IP6CB, which aliases
    the tc_skb_cb/qdisc_skb_cb control buffer. Fragmented traffic through
    act_ct therefore loses qdisc metadata such as pkt_segs and can trigger
    WARN_ON_ONCE() in qdisc_pkt_segs() when panic_on_warn is enabled.
    
    Save and restore the full tc_skb_cb around nf_ct_handle_fragments(),
    matching the pattern used by ovs_ct_handle_fragments().
    
    Fixes: ec624fe740b4 ("net/sched: Extend qdisc control block with tc control block")
    Cc: stable@vger.kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Zihan Xi <xizh2024@lzu.edu.cn>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Link: https://patch.msgid.link/510c51217fd7aaf29c6dc298bab8d643fe229b1c.1781358692.git.xizh2024@lzu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: cls_u32: skip hash tables in u32_bind_class() [+ + +]
Author: Zhang Changzhong <zhangchangzhong@huawei.com>
Date:   Fri Aug 7 15:50:38 2026 +0800

    net/sched: cls_u32: skip hash tables in u32_bind_class()
    
    [ Upstream commit 6d3724e616faf952c3adcf8414fc21a828ef3709 ]
    
    u32_walk() enumerates both struct tc_u_hnode and struct tc_u_knode
    through the walker callback. u32_bind_class() unconditionally casts the
    passed fh to tc_u_knode and accesses &n->res, so when fh is actually a
    tc_u_hnode, which has no tcf_result member, this results in a
    slab-out-of-bounds read of res->classid in tc_cls_bind_class().
    
    The issue can be reproduced with the following commands:
    
        tc qdisc add dev lo root handle 1: hfsc
        tc class add dev lo parent 1: classid 1:1 hfsc sc rate 1000kbit
        tc filter add dev lo parent 1:1 protocol ip prio 1 u32 match u32 0 0 flowid 1:1
        tc class add dev lo parent 1: classid 1:2 hfsc sc rate 2000kbit
    
    Fix this by skipping hash tables via the TC_U32_KEY(handle) check.
    
    Fixes: 07d79fc7d94e ("net_sched: add reverse binding for tc class")
    Signed-off-by: Zhang Changzhong <zhangchangzhong@huawei.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/1786089038-36366-1-git-send-email-zhangchangzhong@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked [+ + +]
Author: Bryam Vargas <hexlabsecurity@proton.me>
Date:   Tue Jul 28 14:06:35 2026 -0400

    net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked
    
    [ Upstream commit e056e1dfcddca877dd46d704e8ec9860cfc9ec44 ]
    
    When taprio's software path peeks a non-work-conserving child qdisc, the
    child stashes the peeked skb in its gso_skb; taprio_dequeue_from_txq()
    then takes the packet with a direct child ->dequeue() call, which ignores
    that stash, orphans the peeked skb and desyncs the child's qlen/backlog.
    With a qfq child this re-enters the child on an emptied list and
    dereferences NULL, panicking the kernel from softirq on ordinary egress.
    
    Take the packet through qdisc_dequeue_peeked(), as sch_red and sch_sfb
    now do. The helper returns the child's stashed skb first and is a no-op
    when there is none, so a work-conserving child is unaffected and the
    gated path now consumes the skb whose length was charged to the budget.
    
    Fixes: 5a781ccbd19e ("tc: Add support for configuring the taprio scheduler")
    Cc: stable@vger.kernel.org
    Cc: Vladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
    Reviewed-by: Victor Nogueira <victor@mojatatu.com>
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Link: https://patch.msgid.link/20260625-b4-disp-31bcb279-v1-1-85c40b83c529@proton.me
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: serialize qdisc_rtab_list against concurrent get/put [+ + +]
Author: Aldo Ariel Panzardo <qwe.aldo@gmail.com>
Date:   Sat Aug 8 11:49:09 2026 -0400

    net/sched: serialize qdisc_rtab_list against concurrent get/put
    
    [ Upstream commit f43ee0c0730d6191629b5ee1ceae27b1ebfdc047 ]
    
    qdisc_get_rtab() and qdisc_put_rtab() mutate the process-global singly
    linked list qdisc_rtab_list and a plain non-atomic 'int refcnt' with no
    lock. This was only safe because every caller historically held the RTNL
    mutex, which serialized all rate-table lookups, inserts and frees.
    
    That invariant no longer holds. cls_flower sets
    TCF_PROTO_OPS_DOIT_UNLOCKED, so tc_new_tfilter() keeps rtnl_held == false
    for it and sets TCA_ACT_FLAGS_NO_RTNL. That flag propagates through
    tcf_exts_validate_ex() -> tcf_action_init() -> tcf_action_init_1() ->
    tcf_police_init(), which calls qdisc_get_rtab()/qdisc_put_rtab() with the
    RTNL mutex NOT held. Two RTM_NEWTFILTER requests on different CPUs, each
    adding a flower filter with a police action carrying the same rate, then
    race on qdisc_rtab_list and on the non-atomic refcnt, leading to a
    use-after-free / double-free of the kmalloc-2k struct qdisc_rate_table.
    qdisc_rtab_list is a single global (not per-netns), so the corrupted
    object is shared system-wide.
    
      BUG: KASAN: slab-use-after-free in qdisc_put_rtab+0x12f/0x160
       qdisc_put_rtab+0x12f/0x160
       tcf_police_init+0xda9/0x1590
       tcf_action_init_1+0x460/0x6b0
       tcf_action_init+0x439/0xa40
       tcf_exts_validate_ex+0x42d/0x550
       fl_change+0xddd/0x7da0
       tc_new_tfilter+0xaa7/0x2420
       rtnetlink_rcv_msg+0x95e/0xe90
      which belongs to the cache kmalloc-2k of size 2048
    
    Protect qdisc_rtab_list and the refcount with a dedicated spinlock. The
    (sleeping, GFP_KERNEL) allocation in qdisc_get_rtab() is performed before
    taking the lock; if a concurrent inserter added an identical table in the
    meantime the freshly allocated one is freed under the lock, so no
    duplicate is leaked. qdisc_put_rtab() now decrements the refcount and
    unlinks under the same lock.
    
    Fixes: 470502de5bdb ("net: sched: unlock rules update API")
    Suggested-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Aldo Ariel Panzardo <qwe.aldo@gmail.com>
    Cc: stable@vger.kernel.org
    Acked-by: Jamal Hadi Salim <jhs@mojatatu.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Link: https://patch.msgid.link/20260715114114.446841-1-qwe.aldo@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net/sched: taprio: avoid calling child->ops->dequeue(child) twice [+ + +]
Author: Vladimir Oltean <vladimir.oltean@nxp.com>
Date:   Tue Jul 28 14:06:34 2026 -0400

    net/sched: taprio: avoid calling child->ops->dequeue(child) twice
    
    [ Upstream commit 4c22942734f0814d3c928c25a80f48df0a6ce45e ]
    
    Simplify taprio_dequeue_from_txq() by noticing that we can goto one call
    earlier than the previous skb_found label. This is possible because
    we've unified the treatment of the child->ops->dequeue(child) return
    call, we always try other TXQs now, instead of abandoning the root
    dequeue completely if we failed in the peek() case.
    
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Stable-dep-of: e056e1dfcddc ("net/sched: sch_taprio: Replace direct dequeue call with peek and qdisc_dequeue_peeked")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/tls: Fail tls_sw_splice_read() after a failed async decrypt [+ + +]
Author: Chuck Lever <cel@kernel.org>
Date:   Thu Aug 6 20:44:07 2026 -0400

    net/tls: Fail tls_sw_splice_read() after a failed async decrypt
    
    [ Upstream commit 976df67f463db1fddaf2a32fb04f57ad2891a23d ]
    
    When an async decrypt fails, tls_decrypt_done() records the error in
    ctx->async_wait.err and calls tls_err_abort(), which stores it in
    sk_err. tls_sw_recvmsg() and tls_sw_read_sock() each read
    async_wait.err once they hold the reader lock and fail the call: a
    record that did not authenticate breaks the connection.
    
    tls_sw_splice_read() has no such check, and sk_err does not stand in
    for one. tls_rx_rec_wait() tests sk_err only inside the loop it
    skips whenever a record is already parsed, and the first reader to
    reach sock_error() clears it, while async_wait.err persists. A
    splice therefore keeps delivering records on a connection that
    recvmsg() and read_sock() refuse to read.
    
    Read async_wait.err in tls_sw_splice_read() as the other two readers
    do.
    
    Fixes: f314bfee81b1 ("tls: rx: return the already-copied data on crypto error")
    Reviewed-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Chuck Lever <cel@kernel.org>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://patch.msgid.link/20260806-tls-splice-crypto-fix-v1-1-a2624005a286@kernel.org
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
net/x25: fix use-after-free of the socket by its timers [+ + +]
Author: Baul Lee <baul.lee@xbow.com>
Date:   Mon Jul 27 07:03:42 2026 +0900

    net/x25: fix use-after-free of the socket by its timers
    
    commit 2195424c3da2ef1829a63b807e3a900a90e57d85 upstream.
    
    The x25 timers are armed with mod_timer() and cancelled with
    timer_delete(), so a pending timer holds no reference on the socket and a
    cancel does not wait for a callback already running on another CPU.
    
    x25_heartbeat_expiry() also rearms unconditionally, so it can reinstall
    sk->sk_timer after __x25_destroy_socket() has passed its cancel point.
    The following __sock_put() frees the socket while the timer is still
    queued, and the next expiry uses freed memory.  KASAN reports a
    slab-use-after-free on the kmalloc-2k object freed by close().
    
    timer_delete_sync() cannot be used here: x25_heartbeat_expiry() and
    x25_timer_expiry() both reach the cancels from inside the timer they
    would wait on, through __x25_destroy_socket() and x25_disconnect().
    
    Arm the timers with sk_reset_timer() and cancel them with sk_stop_timer()
    so that an armed timer owns a reference, and release it in both expiry
    handlers.  Rearm the heartbeat only while sk_hashed(sk) is still true,
    since __x25_destroy_socket() unlinks the socket before dropping it.  Arm
    the deferred destroy timer the same way and drop its reference in
    x25_destroy_timer().
    
    Reproduced on net with KASAN, with the heartbeat period shortened so the
    window recurs.  With this patch the reproducer no longer triggers a
    report and /proc/net/x25 drains.
    
    Discovered by XBOW, triaged by Baul Lee <baul.lee@xbow.com>
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Baul Lee <baul.lee@xbow.com>
    Link: https://patch.msgid.link/20260726220342.47245-1-baul.lee@xbow.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ adjusted context due to `del_timer()` not yet renamed to `timer_delete()` ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: bonding: fix use-after-free in bond_xmit_broadcast() [+ + +]
Author: Xiang Mei <xmei5@asu.edu>
Date:   Thu Mar 26 00:55:53 2026 -0700

    net: bonding: fix use-after-free in bond_xmit_broadcast()
    
    commit 2884bf72fb8f03409e423397319205de48adca16 upstream.
    
    bond_xmit_broadcast() reuses the original skb for the last slave
    (determined by bond_is_last_slave()) and clones it for others.
    Concurrent slave enslave/release can mutate the slave list during
    RCU-protected iteration, changing which slave is "last" mid-loop.
    This causes the original skb to be double-consumed (double-freed).
    
    Replace the racy bond_is_last_slave() check with a simple index
    comparison (i + 1 == slaves_count) against the pre-snapshot slave
    count taken via READ_ONCE() before the loop.  This preserves the
    zero-copy optimization for the last slave while making the "last"
    determination stable against concurrent list mutations.
    
    The UAF can trigger the following crash:
    
    ==================================================================
    BUG: KASAN: slab-use-after-free in skb_clone
    Read of size 8 at addr ffff888100ef8d40 by task exploit/147
    
    CPU: 1 UID: 0 PID: 147 Comm: exploit Not tainted 7.0.0-rc3+ #4 PREEMPTLAZY
    Call Trace:
     <TASK>
     dump_stack_lvl (lib/dump_stack.c:123)
     print_report (mm/kasan/report.c:379 mm/kasan/report.c:482)
     kasan_report (mm/kasan/report.c:597)
     skb_clone (include/linux/skbuff.h:1724 include/linux/skbuff.h:1792 include/linux/skbuff.h:3396 net/core/skbuff.c:2108)
     bond_xmit_broadcast (drivers/net/bonding/bond_main.c:5334)
     bond_start_xmit (drivers/net/bonding/bond_main.c:5567 drivers/net/bonding/bond_main.c:5593)
     dev_hard_start_xmit (include/linux/netdevice.h:5325 include/linux/netdevice.h:5334 net/core/dev.c:3871 net/core/dev.c:3887)
     __dev_queue_xmit (include/linux/netdevice.h:3601 net/core/dev.c:4838)
     ip6_finish_output2 (include/net/neighbour.h:540 include/net/neighbour.h:554 net/ipv6/ip6_output.c:136)
     ip6_finish_output (net/ipv6/ip6_output.c:208 net/ipv6/ip6_output.c:219)
     ip6_output (net/ipv6/ip6_output.c:250)
     ip6_send_skb (net/ipv6/ip6_output.c:1985)
     udp_v6_send_skb (net/ipv6/udp.c:1442)
     udpv6_sendmsg (net/ipv6/udp.c:1733)
     __sys_sendto (net/socket.c:730 net/socket.c:742 net/socket.c:2206)
     __x64_sys_sendto (net/socket.c:2209)
     do_syscall_64 (arch/x86/entry/syscall_64.c:63 arch/x86/entry/syscall_64.c:94)
     entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
     </TASK>
    
    Allocated by task 147:
    
    Freed by task 147:
    
    The buggy address belongs to the object at ffff888100ef8c80
     which belongs to the cache skbuff_head_cache of size 224
    The buggy address is located 192 bytes inside of
     freed 224-byte region [ffff888100ef8c80, ffff888100ef8d60)
    
    Memory state around the buggy address:
     ffff888100ef8c00: fb fb fb fb fc fc fc fc fc fc fc fc fc fc fc fc
     ffff888100ef8c80: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff888100ef8d00: fb fb fb fb fb fb fb fb fb fb fb fb fc fc fc fc
                                                        ^
     ffff888100ef8d80: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
     ffff888100ef8e00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    Fixes: 4e5bd03ae346 ("net: bonding: fix bond_xmit_broadcast return value error bug")
    Reported-by: Weiming Shi <bestswngs@gmail.com>
    Signed-off-by: Xiang Mei <xmei5@asu.edu>
    Link: https://patch.msgid.link/20260326075553.3960562-1-xmei5@asu.edu
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG [+ + +]
Author: Siddharth Vadapalli <s-vadapalli@ti.com>
Date:   Fri Aug 7 16:47:37 2026 +0530

    net: ethernet: ti: am65-cpsw-nuss: Fix port_id extraction from SRC TAG
    
    [ Upstream commit 36a05d2820077bb3955acb8111e1041d39148037 ]
    
    On the packet reception path, the ID of the MAC Port on which the packet
    was received, is embedded in the RX DMA Descriptor's metadata. The ID is
    extracted using the helper function cppi5_desc_get_tags_ids() which fills
    in the 16-bit Source Tag into the 'port_id' variable. However, it is only
    the lower 8-bits of the 16-bit Source Tag that represent the MAC Port ID,
    while the upper 8-bits are Hardware-Reserved and carry an arbitrary value.
    With the existing logic, sporadic kernel crash is observed due to the
    subsequent driver code accessing out-of-bound memory because of an invalid
    port_id.
    
    Hence, fix the port_id extraction logic to use only the lower 8-bits of the
    Source Tag as the MAC Port ID.
    
    Fixes: 93a76530316a ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver")
    Signed-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>
    Reviewed-by: Chintan Vankar <c-vankar@ti.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260807111738.2055900-1-s-vadapalli@ti.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: gro: fix double aggregation of flush-marked skbs [+ + +]
Author: Shiming Cheng <shiming.cheng@mediatek.com>
Date:   Sat Aug 8 10:09:41 2026 -0400

    net: gro: fix double aggregation of flush-marked skbs
    
    [ Upstream commit e751256486d0ded20f5a9f9863467f1dce65142f ]
    
    Commit 0ab03f353d36 ("net-gro: Fix GRO flush when receiving a GSO
    packet.") added a flush check to skb_gro_receive(), but
    skb_gro_receive_list() lacks the same validation.
    
    As a result, packets marked with NAPI_GRO_CB(skb)->flush may still be
    re-aggregated.
    
    This allows already-GRO'd packets with existing frag_list to be
    re-aggregated into a new GRO session, corrupting the frag_list chain
    structure. When skb_segment() attempts to unpack these malformed packets,
    it encounters invalid state and triggers a kernel panic.
    
    Scenario (Tethering/Device forwarding):
      1. Driver: Generated aggregated packet P1 via LRO with frag_list
      2. Dev A: Receives aggregated fraglist packet and flush flag set
      3. Dev A: Re-enters GRO, skb_gro_receive_list() is called
      4. Missing flush check allows re-aggregation despite flush flag
      5. Frag_list chain becomes corrupted (loops or dangling refs)
      6. Dev B: TX path calls skb_segment(), crashes on corrupted frag_list
    
    Root cause in skb_segment():
      The check at line ~4891:
        if (hsize <= 0 && i >= nfrags && skb_headlen(list_skb) &&
            (skb_headlen(list_skb) == len || sg)) {
    
      When frag_list is corrupted by double aggregation, when list_skb is
      a NULL pointer from skb->next, skb_headlen(list_skb) dereference
      NULL/corrupted pointers occurs.
    
    Call Trace:
     skb_headlen(NULL skb)
     skb_segment
     tcp_gso_segment
     tcp4_gso_segment
     inet_gso_segment
     skb_mac_gso_segment
     __skb_gso_segment
     skb_gso_segment
     validate_xmit_skb
     validate_xmit_skb_list
     sch_direct_xmit
     qdisc_restart
     __qdisc_run
     qdisc_run
     net_tx_action
    
    Fix: Add NAPI_GRO_CB(skb)->flush validation to the early-return check in
    skb_gro_receive_list(), matching the defensive programming pattern of
    skb_gro_receive().
    
    Fixes: 3a1296a38d0c ("net: Support GRO/GSO fraglist chaining.")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shiming Cheng <shiming.cheng@mediatek.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260709014704.3625-1-shiming.cheng@mediatek.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ip6_tunnel: require CAP_NET_ADMIN in the device netns for changelink [+ + +]
Author: Maoyi Xie <maoyixie.tju@gmail.com>
Date:   Tue Jul 28 09:59:50 2026 -0400

    net: ip6_tunnel: require CAP_NET_ADMIN in the device netns for changelink
    
    [ Upstream commit 2496fa0b7d180b3ad356b514e7ff93bb14e6140a ]
    
    ip6_tnl_changelink() operates on at most two netns, dev_net(dev) and the
    tunnel link netns t->net. They differ once the device is created in or
    moved to a netns other than the one the request runs in. The rtnl
    changelink path checks CAP_NET_ADMIN only against dev_net(dev), so a
    caller privileged there but not in t->net can rewrite a tunnel that
    lives in t->net.
    
    Gate ip6_tnl_changelink() on rtnl_dev_link_net_capable() at its top,
    before any attribute is parsed.
    
    Reported-by: Xiao Liang <shaw.leon@gmail.com>
    Closes: https://lore.kernel.org/netdev/CABAhCOSzP1vaThGV35_VnsRCb=87_CPjPVsTHbq905k8A+BuUg@mail.gmail.com/
    Fixes: 0bd8762824e7 ("ip6tnl: add x-netns support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Maoyi Xie <maoyixie.tju@gmail.com>
    Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
    Link: https://patch.msgid.link/20260612085941.3158249-5-maoyixie.tju@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: ipa: fix SMEM state handle leaks in SMP2P init [+ + +]
Author: Haoxiang Li <haoxiang_li2024@163.com>
Date:   Tue Jul 28 23:27:28 2026 -0400

    net: ipa: fix SMEM state handle leaks in SMP2P init
    
    [ Upstream commit 96ca1e658ae459276292bd6d971ab5d8c7e0379a ]
    
    ipa_smp2p_init() acquires two Qualcomm SMEM state handles with
    qcom_smem_state_get(). However, neither the init error paths
    nor ipa_smp2p_exit() release them.
    
    Release both handles with qcom_smem_state_put() in the init
    error paths and in ipa_smp2p_exit().
    
    Fixes: 530f9216a953 ("soc: qcom: ipa: AP/modem communications")
    Cc: stable@vger.kernel.org
    Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
    Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Reviewed-by: Alex Elder <elder@riscstar.com>
    Link: https://patch.msgid.link/20260624065955.2822765-1-haoxiang_li2024@163.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ kzalloc_obj() context line kept as kzalloc(sizeof(*smp2p), GFP_KERNEL) since ipa_smp2p.c was not yet converted in this tree ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: macb: drop in-flight Tx SKBs on close [+ + +]
Author: Théo Lebrun <theo.lebrun@bootlin.com>
Date:   Tue Jul 28 23:20:11 2026 -0400

    net: macb: drop in-flight Tx SKBs on close
    
    [ Upstream commit 27f575836cfebbf872dec020428742b10650a955 ]
    
    The MACB driver has since forever leaked the outgoing SKBs that
    have not yet been marked as completed. They live in queue->tx_skb
    which gets freed without remorse nor checking.
    
    macb_free_consistent() gets called in a few codepaths, but only close will
    trigger the added expressions. In macb_open() and macb_alloc_consistent()
    failure cases, queues' tx_skb just got allocated and are empty.
    
    Fixes: 89e5785fc8a6 ("[PATCH] Atmel MACB ethernet driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Nicolai Buchwitz <nb@tipi-net.de>
    Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com>
    Link: https://patch.msgid.link/20260702-macb-drop-tx-v4-1-1c833eebdbc8@bootlin.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    [ adjusted context to free each queue's Tx/Rx rings individually since 6.12 lacks the single-dma_alloc_coherent refactor ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: mana: Validate the packet length reported by the NIC [+ + +]
Author: Dexuan Cui <decui@microsoft.com>
Date:   Tue Jul 28 08:11:30 2026 -0400

    net: mana: Validate the packet length reported by the NIC
    
    [ Upstream commit 2e2a83b4998af4384e677d3b2ac08565274279bf ]
    
    Validate the packet length reported in the RX CQE before passing it
    to skb processing. The CQE is supplied by the NIC device and should
    not be blindly trusted.
    
    Cc: stable@vger.kernel.org
    Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
    Signed-off-by: Dexuan Cui <decui@microsoft.com>
    Fixes: ca9c54d2d6a5 ("net: mana: Add a driver for Microsoft Azure Network Adapter (MANA)")
    Link: https://patch.msgid.link/20260702041237.617719-2-decui@microsoft.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: move skb_gro_receive_list from udp to core [+ + +]
Author: Felix Fietkau <nbd@nbd.name>
Date:   Sat Aug 8 10:09:40 2026 -0400

    net: move skb_gro_receive_list from udp to core
    
    [ Upstream commit 8928756d53d5b99dcd18073dc7738b8ebdbe7d96 ]
    
    This helper function will be used for TCP fraglist GRO support
    
    Acked-by: Paolo Abeni <pabeni@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Reviewed-by: David Ahern <dsahern@kernel.org>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Stable-dep-of: e751256486d0 ("net: gro: fix double aggregation of flush-marked skbs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: packet: fix wrong transport_header when sending VLAN-tagged frame [+ + +]
Author: Wei Fang <wei.fang@nxp.com>
Date:   Fri Aug 7 14:34:04 2026 +0800

    net: packet: fix wrong transport_header when sending VLAN-tagged frame
    
    [ Upstream commit 01fdecc0480d916c799dbee584833a4a37e94d06 ]
    
    In packet_parse_headers(), when processing a VLAN-tagged frame,
    skb_set_network_header() is called to advance network_header past the
    VLAN tag to the inner protocol header. skb_probe_transport_header() is
    then called with skb->protocol still set to the outer VLAN EtherType
    (e.g. ETH_P_8021Q), while nhoff (derived from skb_network_offset())
    already points past the VLAN tag to the inner protocol header.
    
    In __skb_flow_dissect(), proto is initialized to ETH_P_8021Q and nhoff
    points past the VLAN tag. When the dissector hits case ETH_P_8021Q, it
    reads a struct vlan_hdr at nhoff via __skb_header_pointer(), but that
    offset contains the inner protocol header (e.g. an IP header). The bytes
    are misinterpreted as a VLAN header, yielding a garbage encapsulated
    EtherType that matches no known protocol. The dissector returns false,
    so skb_probe_transport_header() never calls skb_set_transport_header(),
    leaving transport_header at its uninitialized sentinel value (~0U).
    
    Move skb_probe_transport_header() to before skb_set_network_header(). At
    the time skb_probe_transport_header() is called, network_header still
    points to the VLAN header, so nhoff correctly points to the VLAN header.
    The flow dissector can then parse the VLAN header, extract the inner
    EtherType, and advance nhoff to the inner protocol header, allowing
    transport_header to be set correctly.
    
    Fixes: dfed913e8b55 ("net/af_packet: add VLAN support for AF_PACKET SOCK_RAW GSO")
    Assisted-by: WChat:claude-opus-4-8
    Signed-off-by: Wei Fang <wei.fang@nxp.com>
    Reviewed-by: Willem de Bruijn <willemb@google.com>
    Link: https://patch.msgid.link/20260807063405.688780-2-wei.fang@oss.nxp.com
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

net: pktgen: fix code style (WARNING: Block comments) [+ + +]
Author: Peter Seiderer <ps.report@gmx.net>
Date:   Tue Aug 11 08:35:09 2026 -0400

    net: pktgen: fix code style (WARNING: Block comments)
    
    [ Upstream commit 870b856cb478bc02fffe4d89897e62c692efb09a ]
    
    Fix checkpatch code style warnings:
    
      WARNING: Block comments use a trailing */ on a separate line
      +                                * removal by worker thread */
    
      WARNING: Block comments use * on subsequent lines
      +       __u8 tos;            /* six MSB of (former) IPv4 TOS
      +                               are for dscp codepoint */
    
      WARNING: Block comments use a trailing */ on a separate line
      +                               are for dscp codepoint */
    
      WARNING: Block comments use * on subsequent lines
      +       __u8 traffic_class;  /* ditto for the (former) Traffic Class in IPv6
      +                               (see RFC 3260, sec. 4) */
    
      WARNING: Block comments use a trailing */ on a separate line
      +                               (see RFC 3260, sec. 4) */
    
      WARNING: Block comments use * on subsequent lines
      +       /* = {
      +          0x00, 0x80, 0xC8, 0x79, 0xB3, 0xCB,
    
      WARNING: Block comments use * on subsequent lines
      +       /* Field for thread to receive "posted" events terminate,
      +          stop ifs etc. */
    
      WARNING: Block comments use a trailing */ on a separate line
      +          stop ifs etc. */
    
      WARNING: Block comments should align the * on each line
      + * we go look for it ...
      +*/
    
      WARNING: Block comments use a trailing */ on a separate line
      +        * we resolve the dst issue */
    
      WARNING: Block comments use a trailing */ on a separate line
      +        * with proc_create_data() */
    
    Signed-off-by: Peter Seiderer <ps.report@gmx.net>
    Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 817ff6efdb7f ("net: pktgen: fix proc entry use-after-free")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: pktgen: fix proc entry use-after-free [+ + +]
Author: Chengfeng Ye <nicoyip.dev@gmail.com>
Date:   Tue Aug 11 08:35:10 2026 -0400

    net: pktgen: fix proc entry use-after-free
    
    [ Upstream commit 817ff6efdb7f484ea547218e11e17d8e43daa3b4 ]
    
    pktgen_change_name() replaces pkt_dev->entry while holding t->if_lock.
    pktgen_remove_device() removes the same entry before
    _rem_dev_from_if_list() takes that lock.
    
    This allows the following interleaving:
    
      CPU 0 (NETDEV_CHANGENAME)       CPU 1 (kpktgend)
      if_lock(t)
      proc_remove(pkt_dev->entry)
                                      proc_remove(pkt_dev->entry)
      pkt_dev->entry = proc_create_data(...)
      if_unlock(t)
    
    The kthread can pass the stale proc_dir_entry to proc_remove() after the
    rename path has freed it. A reproducer with a widened race window reports:
    
      BUG: KASAN: slab-use-after-free in proc_remove+0x78/0x80
      Read of size 8 at addr ffff8881478fea70 by task kpktgend_0/67
      Call Trace:
       proc_remove+0x78/0x80
       pktgen_remove_device.isra.0+0x11c/0x4c0
       pktgen_thread_worker+0x1214/0x6bc0
       kthread+0x2c6/0x3b0
      Allocated by task 95:
       __proc_create+0x204/0x790
       proc_create_data+0x72/0xe0
       pktgen_thread_write+0xd61/0x1510
      Freed by task 28:
       kmem_cache_free+0xcb/0x3d0
       proc_free_inode+0x5b/0x80
       rcu_core+0x50a/0x1850
      The buggy address belongs to the object at ffff8881478fea00
       which belongs to the cache proc_dir_entry of size 192
    
    Move proc_remove() into the if_lock-protected list removal helper. Keep it
    before list_del_rcu() to preserve the ordering required by add_device().
    The rename path must then finish replacing the entry before removal, or
    it observes that the device is no longer on the list.
    
    Fixes: 39df232f1a9b ("[PKTGEN]: fix device name handling")
    Cc: stable@vger.kernel.org
    Signed-off-by: Chengfeng Ye <nicoyip.dev@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260719145740.2888967-1-nicoyip.dev@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: sched: use skb_ip_totlen and iph_totlen [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Wed Aug 19 15:08:34 2026 -0400

    net: sched: use skb_ip_totlen and iph_totlen
    
    [ Upstream commit 043e397e48c58b4442ea5124dc1bdc95367a0a33 ]
    
    There are 1 action and 1 qdisc that may process IPv4 TCP GSO packets
    and access iph->tot_len, replace them with skb_ip_totlen() and
    iph_totlen() accordingly.
    
    Note that we don't need to replace the one in tcf_csum_ipv4(), as it
    will return for TCP GSO packets in tcf_csum_ipv4_tcp().
    
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 8a7ed561671a ("net/sched: act_ct: fix sk_buff leak when the header checks reject a packet")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: thunderbolt: Fix frags[] overflow by bounding frame_count [+ + +]
Author: Maoyi Xie <maoyixie.tju@gmail.com>
Date:   Sat Jul 25 10:12:26 2026 -0400

    net: thunderbolt: Fix frags[] overflow by bounding frame_count
    
    [ Upstream commit 55d9895f89970501fe126d1026b586b04a224c27 ]
    
    tbnet_poll() assembles a multi-frame ThunderboltIP packet into one skb. The
    first frame goes into the skb linear area and every further frame is added as
    a page fragment.
    
            skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
                            page, hdr_size, frame_size,
                            TBNET_RX_PAGE_SIZE - hdr_size);
    
    A packet of frame_count frames therefore ends up with frame_count - 1
    fragments. tbnet_check_frame() only bounds the peer supplied frame_count to
    TBNET_RING_SIZE / 4 (64), which is far above MAX_SKB_FRAGS (17 by default). A
    peer that sends a packet of 19 or more small frames pushes nr_frags past
    MAX_SKB_FRAGS, so skb_add_rx_frag() writes past skb_shinfo()->frags[] and
    corrupts memory after the shared info.
    
    Tighten the start of packet bound to MAX_SKB_FRAGS + 1 so a packet can never
    produce more fragments than frags[] can hold. This matches the recent skb
    frags overflow fixes in other receive paths, for example f0813bcd2d9d ("net:
    wwan: t7xx: fix potential skb->frags overflow in RX path") and 600dc40554dc
    ("net: usb: cdc-phonet: fix skb frags[] overflow in rx_complete()").
    
    Fixes: e69b6c02b4c3 ("net: Add support for networking over Thunderbolt cable")
    Cc: stable@vger.kernel.org
    Signed-off-by: Maoyi Xie <maoyixie.tju@gmail.com>
    Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Link: https://patch.msgid.link/178163152194.2486768.14724194232649760778@maoyixie.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: bitwise: rename some boolean operation functions [+ + +]
Author: Jeremy Sowden <jeremy@azazel.net>
Date:   Thu Jul 23 21:24:49 2026 -0400

    netfilter: bitwise: rename some boolean operation functions
    
    [ Upstream commit a12143e6084c502fc3cfaa8b717bffc8c14cf806 ]
    
    In the next patch we add support for doing AND, OR and XOR operations
    directly in the kernel, so rename some functions and an enum constant
    related to mask-and-xor boolean operations.
    
    Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: d07955dd34ec ("netfilter: nft_fib: reject fib expression on the netdev egress hook")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: conntrack: sctp: use nf log infrastructure for invalid packets [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Aug 20 00:21:59 2026 -0400

    netfilter: conntrack: sctp: use nf log infrastructure for invalid packets
    
    [ Upstream commit f71cb8f45d092a1805e9ad474b6c6a17219cede5 ]
    
    The conntrack logging facilities include useful info such as in/out
    interface names and packet headers.
    
    Use those in more places instead of pr_debug calls.
    Furthermore, several pr_debug calls can be removed, they are useless
    on production machines due to the sheer volume of log messages.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: 2d19b95c9723 ("netfilter: nf_conntrack: defer invalid log until after unlock")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: flowtable: publish GC-visible tuple last [+ + +]
Author: Jérémy Jean <Jeremy.Jean@oss.cyber.gouv.fr>
Date:   Sat Aug 8 12:40:02 2026 +0000

    netfilter: flowtable: publish GC-visible tuple last
    
    [ Upstream commit 2014ac62df9d45bb9a004a043e85df7be09ed780 ]
    
    nf_flow_table_iterate() only treats original-direction tuple nodes as
    owning entries. Publishing the original node first lets GC observe and
    free a flow while flow_offload_add() is still inserting the reply node.
    Publish the reply node first and the original node last so GC never
    sees a partially installed flow.
    
    KASAN can trigger slab-use-after-free read and write reports in the
    flowtable/rhashtable path (rht_deferred_worker, jhash, flow_offload_del,
    flow_offload_lookup, etc.).
    
    Fixes: ac2a66665e23 ("netfilter: add generic flow table infrastructure")
    Signed-off-by: Jérémy Jean <Jeremy.Jean@oss.cyber.gouv.fr>
    Assisted-by: Codex:gpt-5
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ipset: fix list type element drift bug [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Aug 6 15:53:41 2026 +0200

    netfilter: ipset: fix list type element drift bug
    
    [ Upstream commit 4cbd69766b35a089664cadb1f613bb85f7ef77a9 ]
    
    If list_set_uadd() calls list_set_replace() to swap an expired entry,
    the element count remains the same, therefore the increment must be elided.
    
    Fixes: 702b71e7c666 ("netfilter: ipset: Add element count to all set types header")
    Link: https://sashiko.dev/#/patchset/20260806101947.2802-1-fw%40strlen.de
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ipset: fix refcount race between list:set GC and swap [+ + +]
Author: Xiang Mei (Microsoft) <xmei5@asu.edu>
Date:   Wed Jul 22 22:38:32 2026 +0000

    netfilter: ipset: fix refcount race between list:set GC and swap
    
    [ Upstream commit 0c88868271653537ed443272dd8e7d13634d214b ]
    
    __ip_set_put_byindex() resolved the index to a set pointer under RCU,
    then took ip_set_ref_lock in __ip_set_put() to decrement set->ref.
    ip_set_swap() holds that same lock while swapping both the ip_set_list
    slots and the two sets' ref counters, so it can interleave between the
    dereference and the lock acquisition, leaving the caller to decrement a
    set whose reference already moved to the other index and hit
    BUG_ON(set->ref == 0). list_set_gc() reaches this from timer softirq,
    which the nfnl mutex does not serialize against swap: an expiring
    list:set member calls list_set_del() -> ip_set_put_byindex() while
    IPSET_CMD_SWAP runs on the referenced sets.
    
    Resolve the index and decrement under ip_set_ref_lock, as ip_set_swap()
    already does, keeping the refcount tied to the index rather than to a
    stale set pointer.
    
      kernel BUG at net/netfilter/ipset/ip_set_core.c:685!
      Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI
      RIP: 0010:ip_set_put_byindex (net/netfilter/ipset/ip_set_core.c:870)
      Call Trace:
       <IRQ>
       list_set_del (net/netfilter/ipset/ip_set_list_set.c:159)
       set_cleanup_entries (net/netfilter/ipset/ip_set_list_set.c:181)
       list_set_gc (net/netfilter/ipset/ip_set_list_set.c:578)
       call_timer_fn (kernel/time/timer.c:1748)
       __run_timers (kernel/time/timer.c:1799 kernel/time/timer.c:2374)
       run_timer_softirq (kernel/time/timer.c:2405)
       </IRQ>
      Kernel panic - not syncing: Fatal exception in interrupt
    
    Fixes: 9076aea76538 ("netfilter: ipset: Increase the number of maximal sets automatically")
    Reported-by: AutonomousCodeSecurity@microsoft.com
    Signed-off-by: Xiang Mei (Microsoft) <xmei5@asu.edu>
    Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: ipset: let destroy callbacks adjust ext mem size [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Aug 6 16:17:50 2026 +0200

    netfilter: ipset: let destroy callbacks adjust ext mem size
    
    [ Upstream commit 490937b88cb592cc0c5367758edd700fd5abd15c ]
    
    For bitmap this change makes no difference, because destructors are
    called synchronously.
    
    List type however calls them via call_rcu() so accounting decrement can
    happen after list_set_flush() set ext_size to 0.
    
    'set->elements = 0' can be removed for the same reason in the list type
    case, it calls 'set->elements--' for each element.
    
    Fixes: 9e41f26a505c ("netfilter: ipset: Count non-static extension memory for userspace")
    Suggested-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Acked-by: Jozsef Kadlecsik <kadlec@netfilter.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nf_conntrack: defer invalid log until after unlock [+ + +]
Author: Zihan Xi <zihanx@nebusec.ai>
Date:   Thu Aug 20 00:22:00 2026 -0400

    netfilter: nf_conntrack: defer invalid log until after unlock
    
    [ Upstream commit 2d19b95c9723001f214f7a47d67b09f46238f200 ]
    
    TCP and SCTP conntrack paths can emit invalid-packet logs while ct->lock
    is still held.
    
    When invalid logging is routed to nfnetlink_log and conntrack export is
    enabled, the log path can re-enter conntrack netlink glue and dump the
    same conntrack again. Protocol attribute dumping may take ct->lock, so
    logging while holding that lock can deadlock.
    
    Defer the TCP invalid logs by storing only the minimal log context while
    ct->lock is held and emitting the log after unlocking. Also make the TCP
    timeout-lowering invalid path return whether a log is needed, then emit
    that log after unlocking.
    
    Do the same for the SCTP invalid state-transition log that can be reached
    while ct->lock is held.
    
    Add a lockdep assertion to nf_ct_l4proto_log_invalid() so future callers
    that log invalid conntracks while holding ct->lock are caught outside TCP
    and SCTP as well.
    
    Fixes: 628d694344a0 ("netfilter: conntrack: reduce timeout when receiving out-of-window fin or rst")
    Fixes: d9a6f0d0df18 ("netfilter: conntrack: prepare tcp_in_window for ternary return value")
    Fixes: f71cb8f45d09 ("netfilter: conntrack: sctp: use nf log infrastructure for invalid packets")
    Cc: stable@vger.kernel.org
    Reported-by: Vega <vega@nebusec.ai>
    Assisted-by: Codex:gpt-5.4
    Signed-off-by: Zihan Xi <zihanx@nebusec.ai>
    Reviewed-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_conntrack_sip: remove net variable shadowing [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:59:58 2026 -0400

    netfilter: nf_conntrack_sip: remove net variable shadowing
    
    [ Upstream commit 7970d6aaf710db166de98c5356a260089896fae5 ]
    
    net is already set, derived from nf_conn.
    I don't see how the device could be living in a different netns
    than the conntrack entry.
    
    Remove the extra variable and re-use existing one.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: e5e24a365a5e ("netfilter: nf_conntrack_sip: validate skb_dst() before accessing it")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_conntrack_sip: validate skb_dst() before accessing it [+ + +]
Author: Pablo Neira Ayuso <pablo@netfilter.org>
Date:   Thu Jul 23 10:59:59 2026 -0400

    netfilter: nf_conntrack_sip: validate skb_dst() before accessing it
    
    [ Upstream commit e5e24a365a5e024efef63cc49abb345fbd4852c5 ]
    
    tc ingress and openvswitch do not guarantee routing information to be
    available. These subsystems use the conntrack helper infrastructure, and
    the SIP helper relies on the skb_dst() to be present if
    sip_external_media is set to 1 (which is disabled by default as a module
    parameter).
    
    This effectively disables the sip_external_media toggle for these
    subsystems without resulting in a crash.
    
    Fixes: cae3a2627520 ("openvswitch: Allow attaching helpers to ct action")
    Fixes: b57dc7c13ea9 ("net/sched: Introduce action ct")
    Cc: stable@vger.kernel.org
    Reported-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: drop unused 3rd argument from validate callback ops [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 21:24:48 2026 -0400

    netfilter: nf_tables: drop unused 3rd argument from validate callback ops
    
    [ Upstream commit eaf9b2c875ece22768b78aa38da8b232e5de021b ]
    
    Since commit a654de8fdc18 ("netfilter: nf_tables: fix chain dependency validation")
    the validate() callback no longer needs the return pointer argument.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: d07955dd34ec ("netfilter: nft_fib: reject fib expression on the netdev egress hook")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: pass context structure to nft_parse_register_load [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 21:24:47 2026 -0400

    netfilter: nf_tables: pass context structure to nft_parse_register_load
    
    [ Upstream commit 7ea0522ef81a335c2d3a0ab1c8a4fab9a23c4a03 ]
    
    Mechanical transformation, no logical changes intended.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: d07955dd34ec ("netfilter: nft_fib: reject fib expression on the netdev egress hook")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables: Remove unused nft_reduce_is_readonly() [+ + +]
Author: Yue Haibing <yuehaibing@huawei.com>
Date:   Thu Jul 23 21:24:50 2026 -0400

    netfilter: nf_tables: Remove unused nft_reduce_is_readonly()
    
    [ Upstream commit bf6788742b8d6c73de441e088a71de7154f0d4aa ]
    
    Since commit 9e539c5b6d9c ("netfilter: nf_tables: disable expression
    reduction infra") this is unused.
    
    Signed-off-by: Yue Haibing <yuehaibing@huawei.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: d07955dd34ec ("netfilter: nft_fib: reject fib expression on the netdev egress hook")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nf_tables_offload: suppress WARN_ON_ONCE for ENOMEM in abort path [+ + +]
Author: Alexey Velichayshiy <a.velichayshiy@ispras.ru>
Date:   Thu Aug 6 19:11:38 2026 +0300

    netfilter: nf_tables_offload: suppress WARN_ON_ONCE for ENOMEM in abort path
    
    [ Upstream commit d02f592064347e0c1e0d84f24941ad338838cc48 ]
    
    In nft_flow_rule_offload_abort(), WARN_ON_ONCE(err) is triggered on every
    error during rollback, including -ENOMEM. Memory allocation failures are
    expected under low-memory conditions and do not indicate a kernel bug.
    
    Trace for example:
    nft_flow_offload_chain() // FLOW_BLOCK_BIND
      nft_flow_block_chain()
        nft_chain_offload_cmd()
          nft_block_offload_cmd()
            ->ndo_setup_tc()
            nsim_setup_tc()
              flow_block_cb_setup_simple()
                flow_block_cb_alloc() // fails to -ENOMEM
    
    The warning was reproduced on the 5.10 stable kernel under memory pressure
    via fault injection, but the underlying bug exists in mainline as well,
    as demonstrated by the ENOMEM trace above. The following splat was
    triggered during nf_tables transaction processing:
    
    WARNING: CPU: 0 PID: 8567 at net/netfilter/nf_tables_offload.c:532 nft_flow_rule_offload_abort net/netfilter/nf_tables_offload.c:532 [inline]
    WARNING: CPU: 0 PID: 8567 at net/netfilter/nf_tables_offload.c:532 nft_flow_rule_offload_commit+0x971/0xcd0 net/netfilter/nf_tables_offload.c:591
    Modules linked in:
    CPU: 0 PID: 8567 Comm: syz-executor.0 Not tainted 5.10.260-syzkaller #0
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:nft_flow_rule_offload_abort net/netfilter/nf_tables_offload.c:532 [inline]
    RIP: 0010:nft_flow_rule_offload_commit+0x971/0xcd0 net/netfilter/nf_tables_offload.c:591
    Call Trace:
     nf_tables_commit+0x3bd/0x4bd0 net/netfilter/nf_tables_api.c:8604
     nfnetlink_rcv_batch+0xb1e/0x1f20 net/netfilter/nfnetlink.c:509
     nfnetlink_rcv_skb_batch net/netfilter/nfnetlink.c:579 [inline]
     nfnetlink_rcv+0x3b3/0x420 net/netfilter/nfnetlink.c:597
     netlink_unicast_kernel net/netlink/af_netlink.c:1314 [inline]
     netlink_unicast+0x6cd/0xa00 net/netfilter/af_netlink.c:1340
     netlink_sendmsg+0x906/0xe10 net/netfilter/af_netlink.c:1919
     sock_sendmsg_nosec net/socket.c:651 [inline]
     __sock_sendmsg+0x155/0x190 net/socket.c:663
     ____sys_sendmsg+0x705/0x870 net/socket.c:2379
     ___sys_sendmsg+0x100/0x170 net/socket.c:2433
     __sys_sendmsg+0xe9/0x1c0 net/socket.c:2462
     do_syscall_64+0x33/0x40 arch/x86/entry/common.c:46
     entry_SYSCALL_64_after_hwframe+0x67/0xd1
    
    Change the condition to WARN_ON_ONCE(err && err != -ENOMEM) so that
    warnings are only emitted for unexpected errors. This aligns with the
    common kernel practice of not warning on -ENOMEM.
    
    Found by Linux Verification Center (linuxtesting.org) with Syzkaller.
    
    Fixes: 63b48c73ff56 ("netfilter: nf_tables_offload: undo updates if transaction fails")
    Signed-off-by: Alexey Velichayshiy <a.velichayshiy@ispras.ru>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

netfilter: nft_objref: validate objref and objrefmap expressions [+ + +]
Author: Fernando Fernandez Mancera <fmancera@suse.de>
Date:   Thu Jul 23 21:24:51 2026 -0400

    netfilter: nft_objref: validate objref and objrefmap expressions
    
    [ Upstream commit f359b809d54c6e3dd1d039b97e0b68390b0e53e4 ]
    
    Referencing a synproxy stateful object from OUTPUT hook causes kernel
    crash due to infinite recursive calls:
    
    BUG: TASK stack guard page was hit at 000000008bda5b8c (stack is 000000003ab1c4a5..00000000494d8b12)
    [...]
    Call Trace:
     __find_rr_leaf+0x99/0x230
     fib6_table_lookup+0x13b/0x2d0
     ip6_pol_route+0xa4/0x400
     fib6_rule_lookup+0x156/0x240
     ip6_route_output_flags+0xc6/0x150
     __nf_ip6_route+0x23/0x50
     synproxy_send_tcp_ipv6+0x106/0x200
     synproxy_send_client_synack_ipv6+0x1aa/0x1f0
     nft_synproxy_do_eval+0x263/0x310
     nft_do_chain+0x5a8/0x5f0 [nf_tables
     nft_do_chain_inet+0x98/0x110
     nf_hook_slow+0x43/0xc0
     __ip6_local_out+0xf0/0x170
     ip6_local_out+0x17/0x70
     synproxy_send_tcp_ipv6+0x1a2/0x200
     synproxy_send_client_synack_ipv6+0x1aa/0x1f0
    [...]
    
    Implement objref and objrefmap expression validate functions.
    
    Currently, only NFT_OBJECT_SYNPROXY object type requires validation.
    This will also handle a jump to a chain using a synproxy object from the
    OUTPUT hook.
    
    Now when trying to reference a synproxy object in the OUTPUT hook, nft
    will produce the following error:
    
    synproxy_crash.nft: Error: Could not process rule: Operation not supported
      synproxy name mysynproxy
      ^^^^^^^^^^^^^^^^^^^^^^^^
    
    Fixes: ee394f96ad75 ("netfilter: nft_synproxy: add synproxy stateful object support")
    Reported-by: Georg Pfuetzenreuter <georg.pfuetzenreuter@suse.com>
    Closes: https://bugzilla.suse.com/1250237
    Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de>
    Reviewed-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: d07955dd34ec ("netfilter: nft_fib: reject fib expression on the netdev egress hook")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: don't leak bad clone into future transaction [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:33 2026 -0400

    netfilter: nft_set_pipapo: don't leak bad clone into future transaction
    
    [ Upstream commit 47e65eff50691f0a5b79d325e28d83ec1da43bcf ]
    
    On memory allocation failure the cloned nft_pipapo_match can enter a bad
    state:
     - some fields can have their lookup tables resized while others did
       not
     - bits might have been toggled
     - scratch map can be undersized which also means m->bsize_max can be
       lower than what is required
    
    This means that the next insertion in the same batch can trigger
    out-of-bounds writes.
    
    Furthermore, a failure in the first can result in the bad clone to
    leak into the next transaction because the abort callback is never
    executed in this case (the upper layer saw an error and no attempt to
    allocate a transactional request was made).
    
    Record a state for the nft_pipapo_match structure:
    - NEW (pristine clone)
    - MOD (modified clone with good state)
    - ERR (potentially bogus content)
    
    Then make it so that deletes and insertions fail when the clone
    entered ERR state.
    
    In case the very first insert attempt results in an error, free the
    clone right away.
    
    Fixes: 3c4287f62044 ("nf_tables: Add set type for arbitrary concatenation of ranges")
    Cc: stable@vger.kernel.org
    Reported-and-tested-by: Seesee <cjc000013@gmail.com>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: make pipapo_clone helper return NULL [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:28 2026 -0400

    netfilter: nft_set_pipapo: make pipapo_clone helper return NULL
    
    [ Upstream commit 80efd2997fb9343a0283cf3cac5524a4595c8ff4 ]
    
    Currently it returns an error pointer, but the only possible failure
    is ENOMEM.
    
    After a followup patch, we'd need to discard the errno code, i.e.
    
    x = pipapo_clone()
    if (IS_ERR(x))
            return NULL
    
    or make more changes to fix up callers to expect IS_ERR() code
    from set->ops->deactivate().
    
    So simplify this and make it return ptr-or-null.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 47e65eff5069 ("netfilter: nft_set_pipapo: don't leak bad clone into future transaction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: merge deactivate helper into caller [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:30 2026 -0400

    netfilter: nft_set_pipapo: merge deactivate helper into caller
    
    [ Upstream commit c5444786d0ea2417a5e2cee7bd67137fc8bad687 ]
    
    Its the only remaining call site so there is no need for this to
    be separated anymore.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 47e65eff5069 ("netfilter: nft_set_pipapo: don't leak bad clone into future transaction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: move cloning of match info to insert/removal path [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:32 2026 -0400

    netfilter: nft_set_pipapo: move cloning of match info to insert/removal path
    
    [ Upstream commit 3f1d886cc7c3525d4dbeee24bfa9bb3fe0d48ddc ]
    
    This set type keeps two copies of the sets' content,
       priv->match (live version, used to match from packet path)
       priv->clone (work-in-progress version of the 'future' priv->match).
    
    All additions and removals are done on priv->clone.  When transaction
    completes, priv->clone becomes priv->match and a new clone is allocated
    for use by next transaction.
    
    Problem is that the cloning requires GFP_KERNEL allocations but we
    cannot fail at either commit or abort time.
    
    This patch defers the clone until we get an insertion or removal
    request.  This allows us to handle OOM situations correctly.
    
    This also allows to remove ->dirty in a followup change:
    
    If ->clone exists, ->dirty is always true
    If ->clone is NULL, ->dirty is always false, no elements were added
    or removed (except catchall elements which are external to the specific
    set backend).
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 47e65eff5069 ("netfilter: nft_set_pipapo: don't leak bad clone into future transaction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: move prove_locking helper around [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:27 2026 -0400

    netfilter: nft_set_pipapo: move prove_locking helper around
    
    [ Upstream commit a590f4760922acaa2d2b55a88004a38eecdd6412 ]
    
    Preparation patch, the helper will soon get called from insert
    function too.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 47e65eff5069 ("netfilter: nft_set_pipapo: don't leak bad clone into future transaction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: prepare pipapo_get helper for on-demand clone [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:31 2026 -0400

    netfilter: nft_set_pipapo: prepare pipapo_get helper for on-demand clone
    
    [ Upstream commit a238106703ab4ae1090b86eba128815b8626d8f1 ]
    
    The helper uses priv->clone unconditionally which will fail once we do
    the clone conditionally on first insert or removal.
    
    'nft get element' from userspace needs to use priv->match since this
    runs from rcu read side lock section.
    
    Prepare for this by passing the match backend data as argument.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 47e65eff5069 ("netfilter: nft_set_pipapo: don't leak bad clone into future transaction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: prepare walk function for on-demand clone [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:29 2026 -0400

    netfilter: nft_set_pipapo: prepare walk function for on-demand clone
    
    [ Upstream commit 6c108d9bee448a850b03e682836bfe91fca645cb ]
    
    The existing code uses iter->type to figure out what data is needed, the
    live copy (READ) or clone (UPDATE).
    
    Without pending updates, priv->clone and priv->match will point to
    different memory locations, but they have identical content.
    
    Future patch will make priv->clone == NULL if there are no pending changes,
    in this case we must copy the live data for the UPDATE case.
    
    Currently this would require GFP_ATOMIC allocation.  Split the walk
    function in two parts: one that does the walk and one that decides which
    data is needed.
    
    In the UPDATE case, callers hold the transaction mutex so we do not need
    the rcu read lock.  This allows to use GFP_KERNEL allocation while
    cloning.
    
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Stable-dep-of: 47e65eff5069 ("netfilter: nft_set_pipapo: don't leak bad clone into future transaction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: use GFP_KERNEL for insertions [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Thu Jul 23 10:34:26 2026 -0400

    netfilter: nft_set_pipapo: use GFP_KERNEL for insertions
    
    [ Upstream commit 5b651783d80b97167ecd27dc6a4408c694873902 ]
    
    An earlier attempt changed this to GFP_KERNEL, but the get helper is
    also called for get requests from userspace, which uses rcu.
    
    Let the caller pass in the kmalloc flags to allow insertions
    to schedule if needed.
    
    Suggested-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Stable-dep-of: 47e65eff5069 ("netfilter: nft_set_pipapo: don't leak bad clone into future transaction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ntfs3: validate split-point offset in indx_insert_into_buffer [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Fri Jul 24 06:49:11 2026 -0400

    ntfs3: validate split-point offset in indx_insert_into_buffer
    
    [ Upstream commit f1df9d771df47aa40de6d70949c28720ae1e430d ]
    
    indx_insert_into_buffer() computes
    
        used = used1 - to_copy - sp_size;
        memmove(de_t, Add2Ptr(sp, sp_size), used - le32_to_cpu(hdr1->de_off));
    
    where sp and sp_size come from hdr_find_split().  hdr_find_split()
    walks entries by le16_to_cpu(e->size) without validating that each
    step stays within hdr->used or that the size field is at least
    sizeof(struct NTFS_DE).  index_hdr_check(), the on-load gatekeeper,
    only validates header-level fields (used, total, de_off) and does
    not walk per-entry sizes.
    
    A crafted NTFS image whose leaf INDEX_HDR reports used == total but
    contains one interior NTFS_DE with size = 0xFFF0 therefore passes
    validation, descends to indx_insert_into_buffer() through the
    ntfs_create() -> indx_insert_entry() path, and makes hdr_find_split()
    return an sp whose sp_size (0xFFF0) greatly exceeds the remaining
    bytes in the buffer.  The u32 subtraction underflows and the memmove
    count becomes a near-4-GiB value, producing an out-of-bounds kernel
    write that corrupts adjacent allocations and panics the kernel.
    
    Reproduced on 7.0.0-rc7 with UML + KASAN via a crafted image and a
    single 'touch' inside the mounted directory; crash site resolves to
    fs/ntfs3/index.c at the memmove.  Trigger requires only local mount
    of an attacker-supplied filesystem image (USB, loopback, or removable
    media auto-mount).
    
    Reject the split whenever the chosen sp plus its declared size
    already extends past hdr1->used.  This is the minimal fix; it
    preserves the existing hdr_find_split() contract and relies on the
    same out: cleanup path as the pre-existing error returns.
    
    A prior OOB read in the very same indx_insert_into_buffer() memmove
    was fixed in commit b8c44949044e ("fs/ntfs3: Fix OOB read in
    indx_insert_into_buffer") by tightening hdr_find_e(), but that fix
    does not cover the split-point size field path addressed here: sp is
    returned by hdr_find_split(), not hdr_find_e(), and the underflow is
    driven by sp->size rather than hdr->used exceeding hdr->total.
    
    Fixes: 82cae269cfa9 ("fs/ntfs3: Add initialization of super block")
    Cc: stable@vger.kernel.org
    Reported-by: Michael Bommarito <michael.bommarito@gmail.com>
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeontx2-af: cn10k: restrict VF LMTLINE sharing to its own PF [+ + +]
Author: Junrui Luo <moonafterrain@outlook.com>
Date:   Tue Jul 28 12:29:48 2026 -0400

    octeontx2-af: cn10k: restrict VF LMTLINE sharing to its own PF
    
    [ Upstream commit 8cdcf3d2caacdee7ddd363705fb4d93b0c1a0915 ]
    
    rvu_mbox_handler_lmtst_tbl_setup() uses req->base_pcifunc as a direct
    index into the LMT map table to read another function's LMTLINE
    physical base address and copy it into the caller's own LMT map table
    entry. The mailbox dispatcher authenticates req->hdr.pcifunc from the
    IRQ source, but req->base_pcifunc is a separate payload field and is
    not sanitized.
    
    Reject the request with -EPERM when a VF caller's base_pcifunc is not a
    valid function under its own PF. is_pf_func_valid() bounds the FUNC field
    to the PF's configured VF count, keeping the computed index inside the
    caller's own slot block.
    
    Fixes: 893ae97214c3 ("octeontx2-af: cn10k: Support configurable LMTST regions")
    Reported-by: Yuhao Jiang <danisjiang@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Junrui Luo <moonafterrain@outlook.com>
    Link: https://patch.msgid.link/SYBPR01MB78811656934E713B77DA6CEDAFE62@SYBPR01MB7881.ausprd01.prod.outlook.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ Dropped `rvu->pdev` argument from `rvu_get_pf()` calls and folded in the `is_pf_func_valid()` de-static plus its `rvu.h` declaration from commit 2156a29aecff. ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeontx2-pf: clear stale mailbox IRQ state before request_irq() [+ + +]
Author: Runyu Xiao <runyu.xiao@seu.edu.cn>
Date:   Wed Jul 22 19:47:02 2026 -0400

    octeontx2-pf: clear stale mailbox IRQ state before request_irq()
    
    [ Upstream commit f918554fb7246e89b98ef90abe80801f038258b3 ]
    
    otx2_register_mbox_intr() currently installs the PF mailbox IRQ handler
    before clearing stale mailbox interrupt state. The function itself then
    comments that the local interrupt bits must be cleared first to avoid
    spurious interrupts, but that clear happens only after request_irq() has
    already exposed the handler to irq delivery.
    
    A running system can reach this during PF mailbox interrupt registration
    while stale or latched RVU_PF_INT state is still present. If delivery
    happens in the request_irq()-to-clear window,
    otx2_pfaf_mbox_intr_handler() can run before local quiesce and touch
    the same pf->mbox and pf->mbox_wq carrier that probe and teardown later
    reuse or destroy.
    
    Move the stale mailbox interrupt clear ahead of request_irq(), but keep
    interrupt enabling after the handler is installed. This closes the
    pre-clear early-IRQ window without creating a new enable-before-handler
    window.
    
    Fixes: 5a6d7c9daef3 ("octeontx2-pf: Mailbox communication with AF")
    Cc: stable@vger.kernel.org
    Signed-off-by: Runyu Xiao <runyu.xiao@seu.edu.cn>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Ratheesh Kannoth <rkannoth@marvell.com>
    Link: https://patch.msgid.link/20260611160014.3202224-2-runyu.xiao@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

octeontx2-pf: fix SQB pointer leak on init failure [+ + +]
Author: Dawei Feng <dawei.feng@seu.edu.cn>
Date:   Tue Jul 28 23:53:20 2026 -0400

    octeontx2-pf: fix SQB pointer leak on init failure
    
    [ Upstream commit 62e7df6d042aeebd5efb581074e28865c04477be ]
    
    otx2_init_hw_resources() initializes SQ aura and pool resources before
    several later setup steps. On failure, err_free_sq_ptrs only frees SQB
    pages, leaving the per-SQ sqb_ptrs arrays behind.
    
    Use otx2_free_sq_res() for the SQ unwind path and let it free sqb_ptrs
    even when sq->sqe has not been allocated yet.
    
    The bug was first flagged by an experimental analysis tool we are
    developing for kernel memory-management bugs while analyzing
    v6.13-rc1. The tool is still under development and is not yet publicly
    available. Manual inspection confirms that the bug is still
    present in v7.1.1.
    
    An x86_64 allyesconfig build showed no new warnings. As we do not have an
    OcteonTX2 PF device and the corresponding AF mailbox setup to test with,
    no runtime testing was able to be performed.
    
    Fixes: caa2da34fd25 ("octeontx2-pf: Initialize and config queues")
    Cc: stable@vger.kernel.org
    Reviewed-by: Ratheesh Kannoth <rkannoth@marvell.com>
    Signed-off-by: Dawei Feng <dawei.feng@seu.edu.cn>
    Link: https://patch.msgid.link/20260630071625.349996-1-dawei.feng@seu.edu.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeontx2-vf: clear stale mailbox IRQ state before request_irq() [+ + +]
Author: Runyu Xiao <runyu.xiao@seu.edu.cn>
Date:   Wed Jul 22 19:47:04 2026 -0400

    octeontx2-vf: clear stale mailbox IRQ state before request_irq()
    
    [ Upstream commit 0b352f04b9be2c83c0240aa6dae7257fefa90464 ]
    
    otx2vf_register_mbox_intr() currently installs the VF mailbox IRQ
    handler before clearing stale mailbox interrupt state. The code then says
    that local interrupt bits should be cleared first to avoid spurious
    interrupts, but that clear still happens only after request_irq() has
    already made the handler reachable.
    
    A running system can reach this during VF mailbox interrupt registration
    while stale or latched RVU_VF_INT state is still present. If delivery
    happens in the request_irq()-to-clear window,
    otx2vf_vfaf_mbox_intr_handler() can run before local quiesce and touch
    the same vf->mbox and vf->mbox_wq carrier that probe and teardown later
    reuse or destroy.
    
    Move the stale mailbox interrupt clear ahead of request_irq(), but keep
    interrupt enabling after the handler is installed. This closes the
    pre-clear early-IRQ window without creating a new enable-before-handler
    window.
    
    Fixes: 3184fb5ba96e ("octeontx2-vf: Virtual function driver support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Runyu Xiao <runyu.xiao@seu.edu.cn>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Ratheesh Kannoth <rkannoth@marvell.com>
    Link: https://patch.msgid.link/20260611160014.3202224-3-runyu.xiao@seu.edu.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
octeontx2: Annotate mmio regions as __iomem [+ + +]
Author: Subbaraya Sundeep <sbhatta@marvell.com>
Date:   Wed Jul 22 19:47:01 2026 -0400

    octeontx2: Annotate mmio regions as __iomem
    
    [ Upstream commit d0976b43956ee8c8bd093223df9115bfcf63dfe5 ]
    
    This patch removes unnecessary typecasts by marking the
    mbox_regions array as __iomem since it is used to store
    pointers to memory-mapped I/O (MMIO) regions. Also simplified
    the call to readq() in PF driver by removing redundant type casts.
    
    Signed-off-by: Subbaraya Sundeep <sbhatta@marvell.com>
    Link: https://patch.msgid.link/1749484309-3434-1-git-send-email-sbhatta@marvell.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: f918554fb724 ("octeontx2-pf: clear stale mailbox IRQ state before request_irq()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
openrisc: signal: do not restore privileged SR bits on sigreturn [+ + +]
Author: Ali Ahmet Memis <ali@iusegentoo.com>
Date:   Fri Aug 7 23:42:30 2026 +0000

    openrisc: signal: do not restore privileged SR bits on sigreturn
    
    commit 32ef1b30ad736519f7a207bcc2986f3d4129d972 upstream.
    
    restore_sigcontext() copies the whole supervision register (SR) from the
    signal frame and only clears SPR_SR_SM before the value is reloaded into
    the hardware SR (through ESR and l.rfe) on the return to user space.  All
    other SR bits are left under user control.
    
    An unprivileged task can thus return from a signal handler through a
    crafted sigframe that clears SPR_SR_DME.  With the data MMU disabled the
    CPU performs no translation or protection on data accesses, so the task
    gains read and write access to arbitrary physical memory, a local
    privilege escalation.  SPR_SR_IME, SPR_SR_SUMRA, SPR_SR_LEE, SPR_SR_EPH
    and the cache-enable bits are exposed the same way.  The ptrace GPR regset
    already refuses any change to SR for exactly this reason.
    
    Restore only the arithmetic flag bits (F, CY, OV) from the signal frame
    and take every privileged control bit from the SR the kernel saved on
    signal entry.
    
    Verified with qemu-system-or1k -M or1k-sim: before this change an
    unprivileged PoC clears SPR_SR_DME in rt_sigreturn and writes a marker to
    physical address 0x03000000 (beyond the kernel's mem=32M); afterwards the
    same PoC receives SIGSEGV and physical memory is unchanged.
    
    Fixes: ac689eb7f9d4 ("OpenRISC: Signal handling")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ali Ahmet Memis <ali@iusegentoo.com>
    Signed-off-by: Stafford Horne <shorne@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
openvswitch: move key and ovs_cb update out of handle_fragments [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Wed Aug 19 15:08:35 2026 -0400

    openvswitch: move key and ovs_cb update out of handle_fragments
    
    [ Upstream commit 1b83bf4489cbc47d88976291cc967a17adb8e118 ]
    
    This patch has no functional changes and just moves key and ovs_cb update
    out of handle_fragments, and skb_clear_hash() and skb->ignore_df change
    into handle_fragments(), to make it easier to move the duplicate code
    from handle_fragments() into nf_conntrack_ovs later.
    
    Note that it changes to pass info->family to handle_fragments() instead
    of key for the packet type check, as info->family is set according to
    key->eth.type in ovs_ct_copy_action() when creating the action.
    
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Reviewed-by: Aaron Conole <aconole@redhat.com>
    Acked-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 8a7ed561671a ("net/sched: act_ct: fix sk_buff leak when the header checks reject a packet")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

openvswitch: use skb_ip_totlen in conntrack [+ + +]
Author: Xin Long <lucien.xin@gmail.com>
Date:   Wed Aug 19 15:08:33 2026 -0400

    openvswitch: use skb_ip_totlen in conntrack
    
    [ Upstream commit ec84c955a0d06cef31664bae328d94be7a3e2f03 ]
    
    IPv4 GSO packets may get processed in ovs_skb_network_trim(),
    and we need to use skb_ip_totlen() to get iph totlen.
    
    Signed-off-by: Xin Long <lucien.xin@gmail.com>
    Reviewed-by: Aaron Conole <aconole@redhat.com>
    Reviewed-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 8a7ed561671a ("net/sched: act_ct: fix sk_buff leak when the header checks reject a packet")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
overflow: Change DEFINE_FLEX to take __counted_by member [+ + +]
Author: Kees Cook <kees@kernel.org>
Date:   Tue Aug 11 07:17:25 2026 -0400

    overflow: Change DEFINE_FLEX to take __counted_by member
    
    [ Upstream commit d8e45f2929b94099913eb66c3ebb18b5063e9421 ]
    
    The norm should be flexible array structures with __counted_by
    annotations, so DEFINE_FLEX() is updated to expect that. Rename
    the non-annotated version to DEFINE_RAW_FLEX(), and update the
    few existing users. Additionally add selftests for the macros.
    
    Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Link: https://lore.kernel.org/r/20240306235128.it.933-kees@kernel.org
    Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Stable-dep-of: cdc36db204ff ("Bluetooth: hci_sync: Fix advertising data UAFs")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ovl: use linked upper dentry in copy-up tmpfile [+ + +]
Author: Souvik Banerjee <souvik@amlalabs.com>
Date:   Mon Jul 27 11:50:33 2026 -0400

    ovl: use linked upper dentry in copy-up tmpfile
    
    [ Upstream commit e348eecd4d8fa8d18a5157ff59f7be1dc59c5928 ]
    
    ovl_copy_up_tmpfile() stores the disconnected O_TMPFILE dentry as the
    overlay's upper dentry reference via ovl_inode_update().  vfs_tmpfile()
    allocated this dentry via d_alloc(parentpath->dentry, &slash_name), so
    d_name is "/" and d_parent is c->workdir.  Local upper filesystems
    (ext4, btrfs, xfs, ...) immediately rename it to "#<inum>" via
    d_mark_tmpfile() inside their ->tmpfile() op; FUSE and virtiofs do
    not, so both fields stay that way.  Neither identifies the destination
    directory and filename where ovl_do_link() actually linked the file.
    
    When the upper filesystem implements ->d_revalidate() (e.g. FUSE or
    virtiofs), ovl_revalidate_real() calls it with the dentry's parent
    inode and a snapshot of d_name.  The server tries to look up "/" inside
    c->workdir, fails, and overlayfs reports -ESTALE.
    
    This causes persistent ESTALE errors for any file that was copied up via
    the tmpfile path, breaking dpkg, apt, and other tools that do
    rename-over-existing on overlayfs with a FUSE/virtiofs upper.
    
    Before commit 6b52243f633e ("ovl: fold copy-up helpers into callers"),
    the tmpfile copy-up path used a dedicated helper ovl_link_tmpfile()
    that captured the linked destination dentry returned by ovl_do_link():
    
        err = ovl_do_link(temp, udir, upper);
        ...
        if (!err)
            *newdentry = dget(upper);
    
    and published it via ovl_inode_update(d_inode(c->dentry), newdentry).
    The fold inlined ovl_do_link() into ovl_copy_up_tmpfile() but dropped
    the dget(upper) capture, and rewrote the publish line as
    ovl_inode_update(d_inode(c->dentry), dget(temp)) — where temp is the
    disconnected O_TMPFILE dentry.
    
    Fix by keeping a reference to the linked destination dentry after
    ovl_do_link() succeeds, and publishing that dentry at the existing
    ovl_inode_update() call site.  The non-tmpfile/workdir path continues to
    publish the renamed temporary dentry.
    
    Reproducer:
      - Mount overlayfs with virtiofs (or a FUSE fs whose server advertises
        FUSE_TMPFILE) as upper
      - Run: dpkg -i <any .deb>
      - Observe: "error installing new file '...': Stale file handle"
    
    Fixes: 6b52243f633e ("ovl: fold copy-up helpers into callers")
    Cc: stable@vger.kernel.org # v4.20+
    Signed-off-by: Souvik Banerjee <souvik@amlalabs.com>
    Link: https://patch.msgid.link/20260501232735.2610824-1-souvik@amlalabs.com
    Reviewed-by: Amir Goldstein <amir73il@gmail.com>
    Reviewed-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    [ adapted scoped credential and creation helpers to explicit credential, locking, lookup, and cleanup handling ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
pmdomain: imx: Fix i.MX8MP power notifier [+ + +]
Author: Peng Fan <peng.fan@nxp.com>
Date:   Wed Jul 29 11:51:45 2026 -0400

    pmdomain: imx: Fix i.MX8MP power notifier
    
    [ Upstream commit 72422525f641f68bed6ca3389d29ee3f41fdea33 ]
    
    Using imx8mm_vpu_power_notifier() for i.MX8MP is wrong, as it ungates
    the VPU clocks to provide the ADB clock, which is necessary on i.MX8MM,
    but on i.MX8MP there is a separate gate (bit 3) for the NoC. So add
    imx8mp_vpu_power_notifier() for i.MX8MP.
    
    Fixes: a1a5f15f7f6cb ("soc: imx: imx8m-blk-ctrl: add i.MX8MP VPU blk ctrl")
    Cc: stable@vger.kernel.org
    Reviewed-by: Frank Li <Frank.Li@nxp.com>
    Signed-off-by: Peng Fan <peng.fan@nxp.com>
    Signed-off-by: Ulf Hansson <ulfh@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
powerpc/pseries: lparcfg - fix kbuf[] underflow [+ + +]
Author: George Wilson <gcwilson@linux.ibm.com>
Date:   Fri Aug 7 11:59:00 2026 -0500

    powerpc/pseries: lparcfg - fix kbuf[] underflow
    
    commit fb442a6673ff1046bf67754957d95880fdb394b5 upstream.
    
    In lparcfg_write(), a count of 0 results in kbuf[] being indexed at -1.
    Check for count == 0 in the existing check for count > sizeof(kbuf) and
    return -EINVAL if true.
    
    Fixes: 74422e2b1939 ("powerpc/pseries: Remove VLA from lparcfg_write()")
    Acked-by: Nayna Jain <nayna@linux.ibm.com>
    Tested-by: R Nageswara Sastry <rnsastry@linux.ibm.com>
    Cc: stable@vger.kernel.org # 4.20
    Signed-off-by: George Wilson <gcwilson@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

powerpc/pseries: pci - logic bug [+ + +]
Author: George Wilson <gcwilson@linux.ibm.com>
Date:   Fri Aug 7 11:58:36 2026 -0500

    powerpc/pseries: pci - logic bug
    
    commit 649c10bff5cb7a514bf299094833ec8c9190aac3 upstream.
    
    The checks on num_vfs in pseries_pci_sriov_enable() are ANDed where OR
    was apparently intended.  Change it to OR.
    
    Fixes: 9a7f6b438664 ("powerpc/pseries/pci: Associate PEs to VFs in configure SR-IOV")
    Acked-by: Nayna Jain <nayna@linux.ibm.com>
    Tested-by: R Nageswara Sastry <rnsastry@linux.ibm.com>
    Cc: stable@vger.kernel.org # 4.16
    Signed-off-by: George Wilson <gcwilson@linux.ibm.com>
    Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
RDMA/siw: Fix the sendmsg byte count in siw_tcp_sendpages [+ + +]
Author: Pedro Falcato <pfalcato@suse.de>
Date:   Tue Jul 29 13:03:48 2025 +0100

    RDMA/siw: Fix the sendmsg byte count in siw_tcp_sendpages
    
    commit c18646248fed07683d4cee8a8af933fc4fe83c0d upstream.
    
    Ever since commit c2ff29e99a76 ("siw: Inline do_tcp_sendpages()"),
    we have been doing this:
    
    static int siw_tcp_sendpages(struct socket *s, struct page **page, int offset,
                                 size_t size)
    [...]
            /* Calculate the number of bytes we need to push, for this page
             * specifically */
            size_t bytes = min_t(size_t, PAGE_SIZE - offset, size);
            /* If we can't splice it, then copy it in, as normal */
            if (!sendpage_ok(page[i]))
                    msg.msg_flags &= ~MSG_SPLICE_PAGES;
            /* Set the bvec pointing to the page, with len $bytes */
            bvec_set_page(&bvec, page[i], bytes, offset);
            /* Set the iter to $size, aka the size of the whole sendpages (!!!) */
            iov_iter_bvec(&msg.msg_iter, ITER_SOURCE, &bvec, 1, size);
    try_page_again:
            lock_sock(sk);
            /* Sendmsg with $size size (!!!) */
            rv = tcp_sendmsg_locked(sk, &msg, size);
    
    This means we've been sending oversized iov_iters and tcp_sendmsg calls
    for a while. This has a been a benign bug because sendpage_ok() always
    returned true. With the recent slab allocator changes being slowly
    introduced into next (that disallow sendpage on large kmalloc
    allocations), we have recently hit out-of-bounds crashes, due to slight
    differences in iov_iter behavior between the MSG_SPLICE_PAGES and
    "regular" copy paths:
    
    (MSG_SPLICE_PAGES)
    skb_splice_from_iter
      iov_iter_extract_pages
        iov_iter_extract_bvec_pages
          uses i->nr_segs to correctly stop in its tracks before OoB'ing everywhere
      skb_splice_from_iter gets a "short" read
    
    (!MSG_SPLICE_PAGES)
    skb_copy_to_page_nocache copy=iov_iter_count
     [...]
       copy_from_iter
            /* this doesn't help */
            if (unlikely(iter->count < len))
                    len = iter->count;
              iterate_bvec
                ... and we run off the bvecs
    
    Fix this by properly setting the iov_iter's byte count, plus sending the
    correct byte count to tcp_sendmsg_locked.
    
    Link: https://patch.msgid.link/r/20250729120348.495568-1-pfalcato@suse.de
    Cc: stable@vger.kernel.org
    Fixes: c2ff29e99a76 ("siw: Inline do_tcp_sendpages()")
    Reported-by: kernel test robot <oliver.sang@intel.com>
    Closes: https://lore.kernel.org/oe-lkp/202507220801.50a7210-lkp@intel.com
    Reviewed-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Pedro Falcato <pfalcato@suse.de>
    Acked-by: Bernard Metzler <bernard.metzler@linux.dev>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
remoteproc: qcom: Fix leak when custom dump_segments addition fails [+ + +]
Author: Wasim Nazir <wasim.nazir@oss.qualcomm.com>
Date:   Thu Jul 23 14:07:17 2026 -0400

    remoteproc: qcom: Fix leak when custom dump_segments addition fails
    
    [ Upstream commit ecf9fc18e62c58eae1ceb65dab2bccb8a724de2d ]
    
    Free allocated minidump_region 'name' in qcom_add_minidump_segments()
    when failing before adding the region to 'dump_segments'. Otherwise,
    the 'name' is not tracked and is never freed by qcom_minidump_cleanup().
    
    Return error when adding to 'dump_segments' fails.
    
    Cc: stable@vger.kernel.org # v5.11
    Fixes: 8ed8485c4f05 ("remoteproc: qcom: Add capability to collect minidumps")
    Reviewed-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com>
    Signed-off-by: Wasim Nazir <wasim.nazir@oss.qualcomm.com>
    Link: https://lore.kernel.org/r/20260318-rproc-memleak-v2-1-ade70ab858f2@oss.qualcomm.com
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

remoteproc: qcom: fix sparse warnings [+ + +]
Author: Mukesh Ojha <quic_mojha@quicinc.com>
Date:   Thu Jul 23 14:07:15 2026 -0400

    remoteproc: qcom: fix sparse warnings
    
    [ Upstream commit 2554dd0ac362738f588ba073d8333eb9b14f9587 ]
    
    This patch try to address below sparse warnings.
    
    drivers/remoteproc/qcom_common.c:126:27: warning: restricted __le32 degrades to integer
    drivers/remoteproc/qcom_common.c:133:32: warning: cast to restricted __le32
    drivers/remoteproc/qcom_common.c:133:32: warning: cast from restricted __le64
    
    Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/1675180866-16695-1-git-send-email-quic_mojha@quicinc.com
    Stable-dep-of: ecf9fc18e62c ("remoteproc: qcom: Fix leak when custom dump_segments addition fails")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

remoteproc: qcom: pas: Adjust the phys addr wrt the mem region [+ + +]
Author: Yogesh Lal <quic_ylal@quicinc.com>
Date:   Thu Jul 23 14:07:16 2026 -0400

    remoteproc: qcom: pas: Adjust the phys addr wrt the mem region
    
    [ Upstream commit a376c10d45a8e6ee5ea55791193f90625b35e156 ]
    
    The minidump table in the toc contains physical addresses that may lie
    before the physical address of the first elf segment in relocatable
    images. This change adds a custom dump function for minidumps which
    calculates the offset into the carveout region using the start of
    the physical address instead of the start of the first elf segment.
    
    Signed-off-by: Yogesh Lal <quic_ylal@quicinc.com>
    Reviewed-by: Sibi Sankar <quic_sibis@quicinc.com>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/1667409129-6254-1-git-send-email-quic_ylal@quicinc.com
    Stable-dep-of: ecf9fc18e62c ("remoteproc: qcom: Fix leak when custom dump_segments addition fails")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

remoteproc: qcom: replace kstrdup with kstrndup [+ + +]
Author: Mukesh Ojha <quic_mojha@quicinc.com>
Date:   Thu Jul 23 14:07:14 2026 -0400

    remoteproc: qcom: replace kstrdup with kstrndup
    
    [ Upstream commit 9d5b9ad97f83b2390a6006eeb5ae5e48ec4298ce ]
    
    Since, there is no guarantee that region.name will be 0-terminated
    from the firmware side, replace kstrdup with kstrndup.
    
    Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Mukesh Ojha <quic_mojha@quicinc.com>
    Signed-off-by: Bjorn Andersson <andersson@kernel.org>
    Link: https://lore.kernel.org/r/1676383691-29738-1-git-send-email-quic_mojha@quicinc.com
    Stable-dep-of: ecf9fc18e62c ("remoteproc: qcom: Fix leak when custom dump_segments addition fails")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ring-buffer: Remove jump to out label in ring_buffer_swap_cpu() [+ + +]
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Tue May 27 14:57:53 2025 -0400

    ring-buffer: Remove jump to out label in ring_buffer_swap_cpu()
    
    [ Upstream commit f115d2b70bff2665f67fa8e8dc5ed9452b696c44 ]
    
    The function ring_buffer_swap_cpu() has a bunch of jumps to the label out
    that simply returns "ret". There's no reason to jump to a label that
    simply returns a value. Just return directly from there.
    
    This goes back to almost the beginning when commit 8aabee573dff
    ("ring-buffer: remove unneeded get_online_cpus") was introduced. That
    commit removed a put_online_cpus() from that label, but never updated all
    the jumps to it that now no longer needed to do anything but return a
    value.
    
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Link: https://lore.kernel.org/20250527145753.6b45d840@gandalf.local.home
    Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
    Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
    Stable-dep-of: f27bdc43077e ("ring-buffer: Use current_context for safe per-CPU buffer swap")
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ring-buffer: Use current_context for safe per-CPU buffer swap [+ + +]
Author: Tengda Wu <wutengda@huaweicloud.com>
Date:   Mon Aug 3 00:56:39 2026 +0000

    ring-buffer: Use current_context for safe per-CPU buffer swap
    
    [ Upstream commit f27bdc43077e4fcb5557dfc315ee8d91e741f483 ]
    
    The ring_buffer_swap_cpu() function currently checks the per-CPU
    committing counter to determine if a buffer is actively being written to
    before performing the swap. However, there exists a race window where
    this check can be bypassed:
    
        ring_buffer_lock_reserve
            cpu_buffer = buffer->buffers[cpu];       // cpu_buffer_a
            rb_reserve_next_event
                rb_start_commit // inc committing
                if (unlikely(READ_ONCE(cpu_buffer->buffer) != buffer)) {...}
                __rb_reserve_next
                    rb_move_tail
                        rb_end_commit(cpu_buffer);   // dec committing => 0
                        /* interrupt hits here, successfully swaps! */
                        local_inc(&cpu_buffer->committing);
    
        ring_buffer_unlock_commit
            cpu_buffer = buffer->buffers[cpu];      // cpu_buffer_b
            rb_commit
                rb_end_commit
                RB_WARN_ON(cpu_buffer, !local_read(&cpu_buffer->committing))
                                                    // triggers warning
    
    The committing counter can temporarily drop to 0 during a single write
    operation (within rb_move_tail), creating a window where swap can
    succeed even though the write is still in progress. This leads to
    inconsistent buffer state and triggers the RB_WARN_ON in rb_commit().
    
    Replace the committing counter check with current_context checks, which
    are set at the entry of ring_buffer_lock_reserve() and remain valid
    throughout the entire write operation, providing a reliable indicator of
    buffer busy state during swap.
    
    Cc: stable@vger.kernel.org
    Fixes: 4239c38fe0b3 ("ring-buffer: Process commits whenever moving to a new page.")
    Link: https://patch.msgid.link/20260803005640.2445666-2-wutengda@huaweicloud.com
    Signed-off-by: Tengda Wu <wutengda@huaweicloud.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
RISC-V: Provide pgtable_l5_enabled on rv32 [+ + +]
Author: Palmer Dabbelt <palmer@rivosinc.com>
Date:   Tue Aug 29 21:39:19 2023 -0700

    RISC-V: Provide pgtable_l5_enabled on rv32
    
    commit 10128f8b1663a8bce27df051c750d116bb8cd737 upstream.
    
    A few of the other page table level helpers are defined on rv32, but not
    pgtable_l5_enabled.  This adds the definition as a constant and converts
    pgtable_l4_enabled to a constant as well.
    
    Link: https://lore.kernel.org/r/20230830044129.11481-2-palmer@rivosinc.com
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    [ Ben: Applies unchanged; needed by both 6.1.y and 6.6.y. Both trees took
      commit e59e5e2754bf ("riscv: correct pt_level name via
      pgtable_l5/4_enabled") -- 6.1.y as of v6.1.64 -- without this
      prerequisite from the same series, so arch/riscv/mm/ptdump.c fails to
      build on rv32 whenever CONFIG_PTDUMP_CORE is enabled:
    
        arch/riscv/mm/ptdump.c: In function 'ptdump_init':
        arch/riscv/mm/ptdump.c:387:28: error: 'pgtable_l5_enabled' undeclared
        (first use in this function); did you mean 'pgtable_l4_enabled'?
    
      Only pgtable_l5_enabled fails because pgtable_l4_enabled still has an
      unconditional extern in asm/pgtable.h; this patch removes that and
      provides both as constants for rv32. The only assignments to them, in
      disable_pgtable_l4/l5(), are already inside
      #if defined(CONFIG_64BIT) && !defined(CONFIG_XIP_KERNEL), so making them
      const on rv32 is safe. v6.12 and later are unaffected. ]
    Signed-off-by: Ben Zong-You Xie <ben717@andestech.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
riscv: Don't use PGD entries for the linear mapping [+ + +]
Author: Alexandre Ghiti <alexghiti@rivosinc.com>
Date:   Wed Nov 8 08:59:29 2023 +0100

    riscv: Don't use PGD entries for the linear mapping
    
    commit 629db01c64ff6cea08fc61b52426362689ef8618 upstream.
    
    Propagating changes at this level is cumbersome as we need to go through
    all the page tables when that happens (either when changing the
    permissions or when splitting the mapping).
    
    Note that this prevents the use of 4MB mapping for sv32 and 1GB mapping for
    sv39 in the linear mapping.
    
    Signed-off-by: Alexandre Ghiti <alexghiti@rivosinc.com>
    Link: https://lore.kernel.org/r/20231108075930.7157-2-alexghiti@rivosinc.com
    Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
    [ Ben: Only backport the RV32 guard. 6.1.y can build the RV32 linear
    mapping from PGD entries, and there is no splitting in __set_memory().
    So a one-page permission change mutates 1024 pages.]
    Signed-off-by: Ben Zong-You Xie <ben717@andestech.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rxrpc: serialize kernel accept preallocation with socket teardown [+ + +]
Author: Li Daming <d4n.for.sec@gmail.com>
Date:   Wed Jul 22 12:07:48 2026 -0400

    rxrpc: serialize kernel accept preallocation with socket teardown
    
    [ Upstream commit dc175389b18c29a5303ee83169ec653adfae3e17 ]
    
    rxrpc_kernel_charge_accept() reads rx->backlog without any
    socket/backlog synchronization and passes that raw pointer into
    rxrpc_service_prealloc_one(). A concurrent rxrpc_discard_prealloc()
    sets rx->backlog = NULL and frees the backlog rings, so a kernel
    preallocation worker can keep using a freed struct rxrpc_backlog
    while updating *_backlog_head/tail and array slots.
    
    Serialize the state check and backlog lookup with the socket lock,
    and reject kernel preallocation once teardown has disabled
    listening or discarded the service backlog.
    
    Fixes: 00e907127e6f ("rxrpc: Preallocate peers, conns and calls for incoming service requests")
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Li Daming <d4n.for.sec@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Jeffrey Altman <jaltman@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260609140911.838677-6-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ kept 6.1's extra user_attach_call argument in the rxrpc_service_prealloc_one() call ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/cpum_cf: merge source files for CPU Measurement counter facility [+ + +]
Author: Thomas Richter <tmricht@linux.ibm.com>
Date:   Thu Jul 23 10:19:03 2026 -0400

    s390/cpum_cf: merge source files for CPU Measurement counter facility
    
    [ Upstream commit 1e99c242acb2fc211aa9f57cd1060622e66bbf63 ]
    
    With no in-kernel user, the source files can be merged.
    
    Move all functions and the variable definitions to file perf_cpum_cf.c
    This file now contains all the necessary functions and definitions
    for the CPU Measurement counter facility device driver.
    
    The files cpu_mcf.h and perf_cpum_cf_common.c are deleted.
    
    Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
    Acked-by: Hendrik Brueckner <brueckner@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Stable-dep-of: 49145bce5391 ("s390/perf_cpum_cf: Add missing array_index_nospec() to __hw_perf_event_init()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/cpum_cf: move cpum_cf_ctrset_size() [+ + +]
Author: Thomas Richter <tmricht@linux.ibm.com>
Date:   Thu Jul 23 10:19:00 2026 -0400

    s390/cpum_cf: move cpum_cf_ctrset_size()
    
    [ Upstream commit 345d2a4dcdb7d0f33ebd990a19aeb3f3f458817d ]
    
    Function cpum_cf_ctrset_size() is defined in one source file and the
    only user is in another source file. Move this function to the source
    file where it is used and remove its prototype from the header file.
    No functional change.
    
    Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
    Acked-by: Hendrik Brueckner <brueckner@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Stable-dep-of: 49145bce5391 ("s390/perf_cpum_cf: Add missing array_index_nospec() to __hw_perf_event_init()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/cpum_cf: move stccm_avail() [+ + +]
Author: Thomas Richter <tmricht@linux.ibm.com>
Date:   Thu Jul 23 10:19:01 2026 -0400

    s390/cpum_cf: move stccm_avail()
    
    [ Upstream commit 7a8f09ac1850b17ca0cc9e1e4d6621a64661347e ]
    
    Function stccm_avail() is defined in a header file and the
    only user is one single source file. Move this function to the source
    file where it is also used and remove it from the header file.
    No functional change.
    
    Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
    Acked-by: Hendrik Brueckner <brueckner@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Stable-dep-of: 49145bce5391 ("s390/perf_cpum_cf: Add missing array_index_nospec() to __hw_perf_event_init()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/cpum_cf: remove in-kernel counting facility interface [+ + +]
Author: Thomas Richter <tmricht@linux.ibm.com>
Date:   Thu Jul 23 10:19:02 2026 -0400

    s390/cpum_cf: remove in-kernel counting facility interface
    
    [ Upstream commit ea53e6995f45e857fd34e4fbfbd436b5457da5f7 ]
    
    Commit 17bebcc68eee ("s390/cpum_cf: Add minimal in-kernel interface for
    counter measurements") introduced a small in-kernel interface for CPU
    Measurement counter facility.
    There are no users of this interface, therefore remove it.
    
    The following functions are removed:
     kernel_cpumcf_alert(),
     kernel_cpumcf_begin(),
     kernel_cpumcf_end(),
     kernel_cpumcf_avail()
    there is no need for them anymore.
    With the removal of function kernel_cpumcf_alert(), also remove
    member alert in struct cpu_cf_events. Its purpose was to counter
    measurement alert interrupts for the in-kernel interface.
    
    Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
    Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    Stable-dep-of: 49145bce5391 ("s390/perf_cpum_cf: Add missing array_index_nospec() to __hw_perf_event_init()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/perf_cpum_cf: Add missing array_index_nospec() to __hw_perf_event_init() [+ + +]
Author: Sumanth Korikkar <sumanthk@linux.ibm.com>
Date:   Thu Jul 23 10:19:04 2026 -0400

    s390/perf_cpum_cf: Add missing array_index_nospec() to __hw_perf_event_init()
    
    [ Upstream commit 49145bce539117db4b6e9e83c0e5ef528e361050 ]
    
    ev variable is userspace controlled via event->attr.config and used
    as an array index after bounds checking, but without speculation
    barriers.
    
    Add the missing array_index_nospec() call to prevent speculative
    execution.
    
    Cc: stable@vger.kernel.org
    Fixes: 212188a596d1 ("[S390] perf: add support for s390x CPU counters")
    Signed-off-by: Sumanth Korikkar <sumanthk@linux.ibm.com>
    Reviewed-by: Ilya Leoshkevich <iii@linux.ibm.com>
    Acked-by: Thomas Richter <tmricht@linux.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/qeth: validate user buffer length in SNMP and ARP query ioctls [+ + +]
Author: Hidayath Khan <hidayath@linux.ibm.com>
Date:   Thu Jul 30 16:22:16 2026 +0200

    s390/qeth: validate user buffer length in SNMP and ARP query ioctls
    
    commit d141f087b1af656f055d7c5793a3e87817ba0bbe upstream.
    
    qeth_snmp_command() and qeth_l3_arp_query() allocate a buffer sized by
    a user-supplied length (udata_len) without checking a lower bound, then
    set udata_offset to a fixed non-zero value and pass both to a reply
    callback. The callback bounds-checks the copy with
    
            if ((udata_len - udata_offset) < len)
    
    Both fields are u32, so a udata_len smaller than udata_offset makes the
    subtraction wrap and the check pass, and the following memcpy() writes
    past the allocation. A udata_len of 0 also yields ZERO_SIZE_PTR from
    kzalloc(), which the existing NULL check does not catch.
    
    Reject buffers smaller than udata_offset before allocating, so the
    callback subtraction can no longer underflow.
    
    Fixes: 4a71df50047f ("qeth: new qeth device driver")
    Cc: stable@vger.kernel.org
    Reviewed-by: Alexandra Winter <wintera@linux.ibm.com>
    Signed-off-by: Hidayath Khan <hidayath@linux.ibm.com>
    Reviewed-by: Joe Damato <joe@dama.to>
    Link: https://patch.msgid.link/20260730142216.218309-1-hidayath@linux.ibm.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
s390/vfio_ccw: Ensure index for read/write regions are within range [+ + +]
Author: Eric Farman <farman@linux.ibm.com>
Date:   Tue Jul 28 05:30:18 2026 +0200

    s390/vfio_ccw: Ensure index for read/write regions are within range
    
    commit 9f5f9a78fedc45bc29d6a0a64e3a3472361afae5 upstream.
    
    The introduction of the capability chain rightly clamped the
    region indexes to the range of the capabilities itself, but
    neglected to do so for the existing read/write regions which
    should also be enforced.
    
    Fixes: db8e5d17ac03 ("vfio-ccw: add capabilities chain")
    Cc: stable@vger.kernel.org
    Cc: Cornelia Huck <cohuck@redhat.com>
    Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: Eric Farman <farman@linux.ibm.com>
    Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

s390/vfio_ccw: Fix out of bounds check on CCW array [+ + +]
Author: Eric Farman <farman@linux.ibm.com>
Date:   Tue Jul 28 05:30:15 2026 +0200

    s390/vfio_ccw: Fix out of bounds check on CCW array
    
    commit a005b7f1a491ffda61bff0fd0f6548f8986fb977 upstream.
    
    The routine ccwchain_calc_length() counts the number of channel
    command words (CCWs) that are chained together in a single channel
    program, and rejects anything larger than CCWCHAIN_LEN_MAX (256) CCWs.
    
    The loop itself is "do..while (count < 257)", and while the logic in
    is_cpa_within_range() correctly adjusts between the 0-index array of
    CCWs and the count of CCWs starting at 1, this means it would look
    at a possible 257th CCW before ending the loop and (correctly)
    returning an error.
    
    Fix this by restructuring the loop to break as soon as 256 CCWs
    (thus indexes 0-255) are examined, without looking at memory
    outside the range.
    
    Fixes: 0a19e61e6d4c ("vfio: ccw: introduce channel program interfaces")
    Cc: stable@vger.kernel.org
    Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
    Signed-off-by: Eric Farman <farman@linux.ibm.com>
    Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
sctp: avoid auth_enable sysctl UAF during netns teardown [+ + +]
Author: Zhiling Zou <roxy520tt@gmail.com>
Date:   Fri Aug 7 11:19:18 2026 -0400

    sctp: avoid auth_enable sysctl UAF during netns teardown
    
    [ Upstream commit f8d5e7846025f4ab15a461235f8ebae9094a361a ]
    
    proc_sctp_do_auth() updates the SCTP control socket after changing
    net.sctp.auth_enable. The handler gets the per-net SCTP state from
    ctl->data, so an already opened sysctl file can still target a network
    namespace while that namespace is being torn down.
    
    SCTP previously registered its per-net sysctls from sctp_defaults_init(),
    while the control socket is created later from sctp_ctrlsock_init(). This
    exposed a window during initialization where auth_enable was writable
    before net->sctp.ctl_sock existed, and a teardown window where auth_enable
    stayed writable after inet_ctl_sock_destroy() had released the control
    socket.
    
    Move the per-net SCTP sysctl registration into sctp_ctrlsock_init() after
    sctp_ctl_sock_init() succeeds, and unregister the sysctl table before
    destroying the control socket in sctp_ctrlsock_exit(). If sysctl
    registration fails after the control socket was created, destroy the
    control socket in the same init path.
    
    Make sctp_sysctl_net_unregister() tolerate a missing header and clear the
    saved pointer so init-error and exit paths can safely share the unregister
    helper.
    
    Fixes: 15649fd5415e ("sctp: sysctl: auth_enable: avoid using current->nsproxy")
    Cc: stable@vger.kernel.org
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Co-developed-by: Qi Tang <tpluszz77@gmail.com>
    Signed-off-by: Qi Tang <tpluszz77@gmail.com>
    Signed-off-by: Zhiling Zou <roxy520tt@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Acked-by: Xin Long <lucien.xin@gmail.com>
    Link: https://patch.msgid.link/390cd5e91ed60eea27b0b64d0468301a9e73b808.1784033357.git.roxy520tt@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ dropped the missing `l3mdev_accept` context block and kept 6.1's non-const `struct ctl_table *table` declaration ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selftests: mptcp: join: mark tests with data corruption as failed [+ + +]
Author: Gang Yan <yangang@kylinos.cn>
Date:   Mon Aug 3 18:16:37 2026 +0200

    selftests: mptcp: join: mark tests with data corruption as failed
    
    commit ca318e7bbb7723f57bcd9e69a2873b5884435552 upstream.
    
    check_transfer() compares the input and output files byte-by-byte using
    `cmp -l "$in" "$out" | while read ...`. Because the while-loop body runs
    in a subshell (the script sets neither lastpipe nor pipefail), the
    fail_test call inside it -- which sets the global ret/last_test_failed --
    and the `return 1` both act on the subshell, not on check_transfer().
    
    check_transfer() thus always falls through to `return 0`, and any data
    corruption affecting only the payload (leaving the subflow/PM counters
    untouched) is silently reported as PASS.
    
    Fixes: 8117dac3e7c3 ("selftests: mptcp: add invert check in check_transfer")
    Cc: stable@vger.kernel.org
    Signed-off-by: Gang Yan <yangang@kylinos.cn>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260803-net-mptcp-misc-fixes-7-2-rc6-v2-5-b8f496d71664@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
selinux: avoid sk_socket dereference in selinux_sctp_bind_connect() [+ + +]
Author: Tristan Madani <tristan@talencesecurity.com>
Date:   Thu Jul 23 12:54:38 2026 -0400

    selinux: avoid sk_socket dereference in selinux_sctp_bind_connect()
    
    [ Upstream commit 56acfeb10019e200ab6787d01f8d7cbe0f01526f ]
    
    selinux_sctp_bind_connect() dereferences sk->sk_socket to pass a
    struct socket * to selinux_socket_bind() and
    selinux_socket_connect_helper().  However, when the hook is invoked
    from the ASCONF softirq path (sctp_process_asconf), there is no file
    reference guaranteeing that sk->sk_socket is non-NULL.  The setsockopt
    callers (bindx, connectx, set_primary, sendmsg connect) hold a file
    reference and are not affected.
    
    Both selinux_socket_bind() and selinux_socket_connect_helper()
    immediately resolve sock->sk, never using the struct socket * for
    anything else.  Refactor the inner logic into helpers that take a
    struct sock * directly so that selinux_sctp_bind_connect() never needs
    to touch sk->sk_socket at all.
    
    Cc: stable@vger.kernel.org
    Fixes: d452930fd3b9 ("selinux: Add SCTP support")
    Suggested-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Tristan Madani <tristan@talencesecurity.com>
    Reviewed-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Tested-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selinux: do not cancel a policy conversion that never started [+ + +]
Author: Bryam Vargas <hexlabsecurity@proton.me>
Date:   Fri Jul 31 12:44:09 2026 -0500

    selinux: do not cancel a policy conversion that never started
    
    commit e5c0235a3c4e9eb047a16cd02323fe4ecf2f570e upstream.
    
    sel_write_load() calls selinux_policy_cancel() when sel_make_policy_nodes()
    fails, and that helper dereferences the outgoing policy to cancel its
    sidtab conversion. On the first policy load there is no outgoing policy:
    security_load_policy() returns early for that case, before it converts
    anything, and state->policy is still NULL. A first load that fails while
    building the selinuxfs tree therefore takes a NULL dereference in
    selinux_policy_cancel(), reached from a write(2) to /sys/fs/selinux/load.
    
    Skip the cancel when there is no old policy, mirroring the check
    security_load_policy() already makes before it converts.
    
    Cc: stable@vger.kernel.org
    Fixes: 02a52c5c8c3b ("selinux: move policy commit after updating selinuxfs")
    Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
    Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selinux: reject a class permission count below its inherited common [+ + +]
Author: Bryam Vargas <hexlabsecurity@proton.me>
Date:   Mon Jul 27 20:30:59 2026 -0500

    selinux: reject a class permission count below its inherited common
    
    commit 9a82dcd98b6e6e11cfd162410967951f12152528 upstream.
    
    security_get_permissions() maps an inherited common's permissions into
    an array sized by the class's own permissions.nprim, but class_read()
    takes that nprim verbatim from the policy image and never checks that it
    covers the common.  A class that inherits a common of N permissions while
    declaring a smaller nprim is accepted, and on load the common's
    permissions are written past the class-sized array -- an out-of-bounds
    heap write.
    
    Reject a class whose permission count is below its inherited common's.
    Well-formed policies, where the class count already includes the
    inherited permissions, are unaffected.
    
    Cc: stable@vger.kernel.org
    Fixes: 55fcf09b3fe4 ("selinux: add support for querying object classes and permissions from the running policy")
    Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
    Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

selinux: require every boolean value to be defined [+ + +]
Author: Bryam Vargas <hexlabsecurity@proton.me>
Date:   Fri Jul 31 12:44:12 2026 -0500

    selinux: require every boolean value to be defined
    
    commit a93d37a09b863810653f93d371fb197457d59deb upstream.
    
    p_bools.nprim comes from the policy image independently of how many
    booleans follow it, and cond_index_bool() fills bool_val_to_struct[] at
    value - 1, so a count larger than the values present leaves NULL entries.
    Every user of that array then walks it by index and dereferences each
    entry: cond_evaluate_expr() on the access-vector path,
    security_get_bools() and security_get_bool_value() behind selinuxfs, and
    security_set_bools(). A sparse class value is absorbed by
    policydb_class_isvalid() and its siblings; booleans have no such
    predicate, and no consumer that could use one.
    
    Reject a boolean value that no boolean defines, once, where the array is
    built. Conforming policies define every boolean they declare and are
    unaffected.
    
    Cc: stable@vger.kernel.org
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Bryam Vargas <hexlabsecurity@proton.me>
    Acked-by: Stephen Smalley <stephen.smalley.work@gmail.com>
    Signed-off-by: Paul Moore <paul@paul-moore.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
serial: max310x: implement gpio_chip::get_direction() [+ + +]
Author: Tapio Reijonen <tapio.reijonen@vaisala.com>
Date:   Wed Jul 22 10:48:16 2026 -0400

    serial: max310x: implement gpio_chip::get_direction()
    
    [ Upstream commit a483b1a91b33b7533280e7c3efd2bc1275caef18 ]
    
    It's strongly recommended for GPIO drivers to always implement the
    .get_direction() callback - even when the direction is tracked in
    software. The GPIO core emits a warning when the callback is missing
    and a user reads the direction of a line, e.g. via
    /sys/kernel/debug/gpio.
    
    The MAX310X keeps the GPIO direction in the GPIOCFG register (a set bit
    selects output), which the existing direction_input/output callbacks
    already program, so the current direction can be read back directly.
    
    Fixes: f65444187a66 ("serial: New serial driver MAX310X")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Tapio Reijonen <tapio.reijonen@vaisala.com>
    Reviewed-by: Linus Walleij <linusw@kernel.org>
    Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Reviewed-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
    Link: https://patch.msgid.link/20260615-b4-serial-max310x-gpio-get-direction-v2-1-4704ba2b181a@vaisala.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

serial: max310x: replace bare use of 'unsigned' with 'unsigned int' (checkpatch) [+ + +]
Author: Hugo Villeneuve <hvilleneuve@dimonoff.com>
Date:   Wed Jul 22 10:48:15 2026 -0400

    serial: max310x: replace bare use of 'unsigned' with 'unsigned int' (checkpatch)
    
    [ Upstream commit 79b69eb09cf5b6a77e621b2838b7e0d38113debb ]
    
    Fixes the following checkpatch warnings:
    
        WARNING: Prefer 'unsigned int' to bare use of 'unsigned'
    
    With this change, the affected functions now match the prototypes in
    struct gpio_chip.
    
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Signed-off-by: Hugo Villeneuve <hvilleneuve@dimonoff.com>
    Link: https://lore.kernel.org/r/20240118152213.2644269-16-hugo@hugovil.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: a483b1a91b33 ("serial: max310x: implement gpio_chip::get_direction()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
siw: Inline do_tcp_sendpages() [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Tue Jul 28 14:07:31 2026 -0400

    siw: Inline do_tcp_sendpages()
    
    [ Upstream commit c2ff29e99a764769eb2ce3a1a5585013633ee9a6 ]
    
    do_tcp_sendpages() is now just a small wrapper around tcp_sendmsg_locked(),
    so inline it, allowing do_tcp_sendpages() to be removed.  This is part of
    replacing ->sendpage() with a call to sendmsg() with MSG_SPLICE_PAGES set.
    
    Signed-off-by: David Howells <dhowells@redhat.com>
    Reviewed-by: Bernard Metzler <bmt@zurich.ibm.com>
    Reviewed-by: Tom Talpey <tom@talpey.com>
    cc: Jason Gunthorpe <jgg@ziepe.ca>
    cc: Leon Romanovsky <leon@kernel.org>
    cc: Jens Axboe <axboe@kernel.dk>
    cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 007800408002 ("espintcp: use sk_msg_free_partial to fix partial send")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
smb/server: fix minimum SMB1 PDU size [+ + +]
Author: ChenXiaoSong <chenxiaosong@kylinos.cn>
Date:   Sun Aug 9 00:20:22 2026 -0400

    smb/server: fix minimum SMB1 PDU size
    
    [ Upstream commit 3b9c30eb8f5aaad4a54cdfa470b74c0467cc71e8 ]
    
    Since the RFC1002 header has been removed from `struct smb_hdr`,
    the minimum SMB1 PDU size should be updated as well.
    
    Fixes: 83bfbd0bb902 ("cifs: Remove the RFC1002 header from smb_hdr")
    Suggested-by: David Howells <dhowells@redhat.com>
    Suggested-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Reviewed-by: David Howells <dhowells@redhat.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: cfc0b8e5080a ("ksmbd: validate minimum PDU size for transform requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb/server: fix minimum SMB2 PDU size [+ + +]
Author: ChenXiaoSong <chenxiaosong@kylinos.cn>
Date:   Sun Aug 9 00:20:23 2026 -0400

    smb/server: fix minimum SMB2 PDU size
    
    [ Upstream commit 4c7d8eb9a79ae5400eac19c4f6f0815bff674452 ]
    
    The minimum SMB2 PDU size should be updated to the size of
    `struct smb2_pdu` (that is, the size of `struct smb2_hdr` + 2).
    
    Suggested-by: David Howells <dhowells@redhat.com>
    Suggested-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Reviewed-by: David Howells <dhowells@redhat.com>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: cfc0b8e5080a ("ksmbd: validate minimum PDU size for transform requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

smb/server: rename include guard in smb_common.h [+ + +]
Author: ChenXiaoSong <chenxiaosong@kylinos.cn>
Date:   Sun Aug 9 00:20:20 2026 -0400

    smb/server: rename include guard in smb_common.h
    
    [ Upstream commit 01ab0d1640e379f0a0d6602250b33ff2b45e9560 ]
    
    Make the include guard more descriptive to avoid conflicts with include
    guards that may be used in the future.
    
    Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
    Acked-by: Namjae Jeon <linkinjeon@kernel.org>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Stable-dep-of: cfc0b8e5080a ("ksmbd: validate minimum PDU size for transform requests")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
super: fix emergency thaw deadlock on frozen block devices [+ + +]
Author: Christian Brauner <brauner@kernel.org>
Date:   Sun Aug 9 00:19:43 2026 -0400

    super: fix emergency thaw deadlock on frozen block devices
    
    [ Upstream commit 749d7aa0377aae32af8c0a4ad43371e7bf830ab5 ]
    
    do_thaw_all_callback() calls bdev_thaw() while holding sb->s_umount
    exclusively. If the block device was frozen via bdev_freeze() dropping
    the last block layer freeze reference calls fs_bdev_thaw() which
    reacquires s_umount:
    
      do_thaw_all_callback(sb)
        super_lock_excl(sb)                     # holds sb->s_umount
        bdev_thaw(sb->s_bdev)
          mutex_lock(&bdev->bd_fsfreeze_mutex)
          # bd_fsfreeze_count drops 1 -> 0
          bd_holder_ops->thaw == fs_bdev_thaw
            get_bdev_super(bdev)
              bdev_super_lock(bdev, true)
                super_lock(sb, true)
                  down_write(&sb->s_umount)     # same task: deadlock
    
    The emergency thaw worker deadlocks against itself holding both
    s_umount and bd_fsfreeze_mutex. That fscks any subsequent unmount,
    freeze, or thaw of that filesystem and block device.
    
      [   81.878470] sysrq: Show Blocked State
      [   81.880140] task:kworker/0:1     state:D stack:0     pid:11    tgid:11    ppid:2      task_flags:0x4208060 flags:0x00080000
      [   81.884876] Workqueue: events do_thaw_all
      [   81.886656] Call Trace:
      [   81.887759]  <TASK>
      [   81.888763]  __schedule+0x579/0x1420
      [   81.890372]  schedule+0x3a/0x100
      [   81.891794]  schedule_preempt_disabled+0x15/0x30
      [   81.893848]  rwsem_down_write_slowpath+0x1ea/0x900
      [   81.895191]  ? __pfx_do_thaw_all_callback+0x10/0x10
      [   81.896528]  down_write+0xbd/0xc0
      [   81.897505]  super_lock+0x91/0x180
      [   81.898457]  ? __mutex_lock+0xa99/0x1140
      [   81.900748]  ? __mutex_unlock_slowpath+0x1f/0x400
      [   81.902069]  bdev_super_lock+0x5b/0x150
      [   81.903132]  get_bdev_super+0x10/0x60
      [   81.904042]  fs_bdev_thaw+0x23/0xf0
      [   81.904755]  bdev_thaw+0x82/0x100
      [   81.905484]  do_thaw_all_callback+0x2c/0x50
      [   81.906298]  __iterate_supers+0x5d/0x130
      [   81.907067]  do_thaw_all+0x20/0x40
      [   81.907739]  process_one_work+0x206/0x5e0
      [   81.908545]  worker_thread+0x1e2/0x3c0
      [   81.909339]  ? __pfx_worker_thread+0x10/0x10
      [   81.910171]  kthread+0xf4/0x130
      [   81.910799]  ? __pfx_kthread+0x10/0x10
      [   81.911528]  ret_from_fork+0x2e2/0x3b0
      [   81.912259]  ? __pfx_kthread+0x10/0x10
      [   81.913010]  ret_from_fork_asm+0x1a/0x30
      [   81.913806]  </TASK>
    
    bdev_super_lock() even documents the violated requirement with
    lockdep_assert_not_held(&sb->s_umount).
    
    Acquiring bd_fsfreeze_mutex under s_umount also inverts the
    bd_fsfreeze_mutex vs. s_umount ordering established by
    bdev_{freeze,thaw}() and can thus ABBA against a concurrent block-layer
    freeze even when the recursive path isn't hit.
    
    Fix this by not holding s_umount around the bdev_thaw() loop at all. Pin
    the superblock with an active reference instead as
    filesystems_freeze_callback() does. The active reference keeps the
    superblock from being shut down and so ->s_bdev stays valid without
    holding s_umount. The block-layer-held freeze is dropped by
    fs_bdev_thaw() with FREEZE_MAY_NEST | FREEZE_HOLDER_USERSPACE exactly as
    a regular unfreeze would and thaw_super_locked() handles
    filesystem-level freezes as before.
    
    The emergency thaw path has deadlocked like this in one form or
    another for a long long time but the current exclusively-held
    shape dates back to commit [1] where thaw_bdev() already ended in
    thaw_super() with s_umount held by do_thaw_all_callback().
    
    Fixes: 08fdc8a0138a ("buffer.c: call thaw_super during emergency thaw") [1]
    Cc: stable@vger.kernel.org
    Link: https://patch.msgid.link/20260723-work-super-emergency_thaw-v1-1-7c315c600245@kernel.org
    Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
taskstats: fill_stats_for_tgid: use for_each_thread() [+ + +]
Author: Oleg Nesterov <oleg@redhat.com>
Date:   Sun Jul 26 08:46:43 2026 -0400

    taskstats: fill_stats_for_tgid: use for_each_thread()
    
    [ Upstream commit ed5378a387fd7c382497f2abcf4605e030b64044 ]
    
    do/while_each_thread should be avoided when possible.
    
    Plus I _think_ this change allows to avoid lock_task_sighand() but I am
    not sure, I forgot everything about taskstats.  In any case, this code
    does not look right in that the same thread can be accounted twice:
    taskstats_exit() can account the exiting thread in signal->stats and drop
    ->siglock but this thread is still on the thread-group list, so
    lock_task_sighand() can't help.
    
    Link: https://lkml.kernel.org/r/20230909214951.GA24274@redhat.com
    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Cc: Eric W. Biederman <ebiederm@xmission.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Stable-dep-of: b3e4fbb04220 ("taskstats: retain dead thread stats in TGID queries")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

taskstats: retain dead thread stats in TGID queries [+ + +]
Author: Yiyang Chen <cyyzero16@gmail.com>
Date:   Sun Jul 26 08:46:44 2026 -0400

    taskstats: retain dead thread stats in TGID queries
    
    [ Upstream commit b3e4fbb04220efc3bc022bcf31b5689d39c6b111 ]
    
    Patch series "taskstats: fix TGID dead-thread stat retention", v3.
    
    This series fixes a taskstats TGID aggregation bug where fields added in
    the TGID query path were not preserved after thread exit, and adds a
    kselftest covering the regression.
    
    The first patch keeps the cached TGID aggregate used for dead threads in
    step with the fields already accumulated for live threads, and also fixes
    the final TGID exit notification emitted when group_dead is true.
    
    The second patch adds a kselftest that verifies TGID CPU stats do not
    regress after a worker thread exits and has been reaped.
    
    This patch (of 2):
    
    fill_stats_for_tgid() builds TGID stats from two sources: the cached
    aggregate in signal->stats and a scan of the live threads in the group.
    
    However, fill_tgid_exit() only accumulates delay accounting into
    signal->stats.  This means that once a thread exits, TGID queries lose the
    fields that fill_stats_for_tgid() adds for live threads.
    
    This gap was introduced incrementally by two earlier changes that extended
    fill_stats_for_tgid() but did not make the corresponding update to
    fill_tgid_exit():
    
    - commit 8c733420bdd5 ("taskstats: add e/u/stime for TGID command")
      added ac_etime, ac_utime, and ac_stime to the TGID query path.
    - commit b663a79c1915 ("taskstats: add context-switch counters")
      added nvcsw and nivcsw to the TGID query path.
    
    As a result, those fields were accounted for live threads in TGID queries,
    but were dropped from the cached TGID aggregate after thread exit.  The
    final TGID exit notification emitted when group_dead is true also copies
    that cached aggregate, so it loses the same fields.
    
    Factor the per-task TGID accumulation into tgid_stats_add_task() and use
    it in both fill_stats_for_tgid() and fill_tgid_exit().  This keeps the
    cached aggregate used for dead threads aligned with the live-thread
    accumulation used by TGID queries.
    
    Link: https://lore.kernel.org/cover.1776094300.git.cyyzero16@gmail.com
    Link: https://lore.kernel.org/abd2a15d33343636ab5ba43d540bcfe508bd66c7.1776094300.git.cyyzero16@gmail.com
    Fixes: 8c733420bdd5 ("taskstats: add e/u/stime for TGID command")
    Fixes: b663a79c1915 ("taskstats: add context-switch counters")
    Signed-off-by: Yiyang Chen <cyyzero16@gmail.com>
    Acked-by: Balbir Singh <balbirs@nvidia.com>
    Cc: Dr. Thomas Orgis <thomas.orgis@uni-hamburg.de>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Wang Yaxin <wang.yaxin@zte.com.cn>
    Cc: Yang Yang <yang.yang29@zte.com.cn>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp_bpf, smc, tls, espintcp, siw: Reduce MSG_SENDPAGE_NOTLAST usage [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Tue Jul 28 14:07:32 2026 -0400

    tcp_bpf, smc, tls, espintcp, siw: Reduce MSG_SENDPAGE_NOTLAST usage
    
    [ Upstream commit f8dd95b29d7ef08c19ec9720564acf72243ddcf6 ]
    
    As MSG_SENDPAGE_NOTLAST is being phased out along with sendpage(), don't
    use it further in than the sendpage methods, but rather translate it to
    MSG_MORE and use that instead.
    
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
    cc: Bernard Metzler <bmt@zurich.ibm.com>
    cc: Jason Gunthorpe <jgg@ziepe.ca>
    cc: Leon Romanovsky <leon@kernel.org>
    cc: John Fastabend <john.fastabend@gmail.com>
    cc: Jakub Sitnicki <jakub@cloudflare.com>
    cc: David Ahern <dsahern@kernel.org>
    cc: Karsten Graul <kgraul@linux.ibm.com>
    cc: Wenjia Zhang <wenjia@linux.ibm.com>
    cc: Jan Karcher <jaka@linux.ibm.com>
    cc: "D. Wythe" <alibuda@linux.alibaba.com>
    cc: Tony Lu <tonylu@linux.alibaba.com>
    cc: Wen Gu <guwen@linux.alibaba.com>
    cc: Boris Pismenny <borisp@nvidia.com>
    cc: Steffen Klassert <steffen.klassert@secunet.com>
    cc: Herbert Xu <herbert@gondor.apana.org.au>
    Link: https://lore.kernel.org/r/20230623225513.2732256-2-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 007800408002 ("espintcp: use sk_msg_free_partial to fix partial send")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tcp_bpf: Inline do_tcp_sendpages as it's now a wrapper around tcp_sendmsg [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Tue Jul 28 14:07:29 2026 -0400

    tcp_bpf: Inline do_tcp_sendpages as it's now a wrapper around tcp_sendmsg
    
    [ Upstream commit ebf2e8860eea66e2c4764316b80c6a5ee5f336ee ]
    
    do_tcp_sendpages() is now just a small wrapper around tcp_sendmsg_locked(),
    so inline it.  This is part of replacing ->sendpage() with a call to
    sendmsg() with MSG_SPLICE_PAGES set.
    
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: John Fastabend <john.fastabend@gmail.com>
    cc: Jakub Sitnicki <jakub@cloudflare.com>
    cc: David Ahern <dsahern@kernel.org>
    cc: Jens Axboe <axboe@kernel.dk>
    cc: Matthew Wilcox <willy@infradead.org>
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Stable-dep-of: 007800408002 ("espintcp: use sk_msg_free_partial to fix partial send")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
thunderbolt: Prevent XDomain delayed work use-after-free on disconnect [+ + +]
Author: Michael Bommarito <michael.bommarito@gmail.com>
Date:   Mon Jul 27 08:19:48 2026 -0400

    thunderbolt: Prevent XDomain delayed work use-after-free on disconnect
    
    [ Upstream commit 2c5d2d3c3f70cde2565d7b279b544893a2035842 ]
    
    tb_xdp_handle_request() runs on system_wq and queues
    xd->state_work via queue_delayed_work() in three request handlers:
    PROPERTIES_CHANGED_REQUEST, UUID_REQUEST (via start_handshake),
    and LINK_STATE_CHANGE_REQUEST.  Similarly, update_xdomain() queues
    xd->properties_changed_work when local properties change.
    
    Concurrently, tb_xdomain_remove() calls stop_handshake() which does
    cancel_delayed_work_sync() on both delayed works.  Later,
    tb_xdomain_unregister() calls device_unregister() which eventually
    frees the xdomain.  Since commit 559c1e1e0134 ("thunderbolt: Run
    tb_xdp_handle_request() in system workqueue") moved the request
    handler off tb->wq, the handler and the remove path are no longer
    serialized.  If queue_delayed_work() executes after
    cancel_delayed_work_sync() but before the xdomain is freed, the
    delayed work fires on a freed object.
    
    Add xd->removing that tb_xdomain_remove() sets under xd->lock
    before calling stop_handshake().  Each external queue site holds
    the same lock and checks removing before calling
    queue_delayed_work().  This provides the mutual exclusion needed:
    either the queue site acquires the lock first and queues work that
    the subsequent cancel will see, or the remove path acquires the
    lock first and the queue site observes removing == true and skips
    the queue.
    
    Fixes: 559c1e1e0134 ("thunderbolt: Run tb_xdp_handle_request() in system workqueue")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-7
    Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tipc: restrict socket queue dumps in enqueue tracepoints [+ + +]
Author: Li Xiasong <lixiasong1@huawei.com>
Date:   Wed Jul 22 14:00:55 2026 -0400

    tipc: restrict socket queue dumps in enqueue tracepoints
    
    [ Upstream commit acd7df8d955480a6f6e5bb809da67b1500cc3cf4 ]
    
    tipc_sk_enqueue() runs with sk->sk_lock.slock held while the socket is
    owned by user context. The spinlock protects the backlog queue in this
    path, but it does not serialize against the socket owner consuming or
    purging sk_receive_queue.
    
    KASAN reported:
    
      CPU: 14 UID: 0 PID: 1050 Comm: tipc3 Not tainted 7.1.0-rc6+ #126 PREEMPT(lazy)
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      Call Trace:
        <TASK>
        dump_stack_lvl+0x76/0xa0 lib/dump_stack.c:123
        print_report+0xce/0x5b0 mm/kasan/report.c:482
        kasan_report+0xc6/0x100 mm/kasan/report.c:597
        __asan_report_load4_noabort+0x14/0x30 mm/kasan/report_generic.c:380
        tipc_skb_dump+0x1327/0x16f0 net/tipc/trace.c:73
        tipc_list_dump+0x208/0x2e0 net/tipc/trace.c:187
        tipc_sk_dump+0xaf6/0xd60 net/tipc/socket.c:3996
        trace_event_raw_event_tipc_sk_class+0x312/0x5a0 net/tipc/trace.h:188
        tipc_sk_rcv+0xb1d/0x1d50 net/tipc/socket.c:2497
        tipc_node_xmit+0x1c3/0x1440 net/tipc/node.c:1689
        __tipc_sendmsg+0x97a/0x1440 net/tipc/socket.c:1512
        tipc_sendmsg+0x52/0x80 net/tipc/socket.c:1400
        sock_sendmsg+0x2f6/0x3e0 net/socket.c:825
        splice_to_socket+0x7f9/0x1010 fs/splice.c:884
        do_splice+0xe21/0x2330 fs/splice.c:936
        __do_splice+0x153/0x260 fs/splice.c:1431
        __x64_sys_splice+0x150/0x230 fs/splice.c:1616
        x64_sys_call+0xeb5/0x2790 arch/x86/entry/syscall_64.c:41
        do_syscall_64+0xf3/0x620 arch/x86/entry/syscall_64.c:63
        entry_SYSCALL_64_after_hwframe+0x76/0x7e arch/x86/entry/entry_64.S:130
      RIP: 0033:0x71624e8aafe2
      Code: 08 0f 85 71 3a ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 66 2e 0f 1f 84 00 00 00 00 00 66 2e 0f 1f 84 00 00 00 00 00 66
      RSP: 002b:0000716157ffed68 EFLAGS: 00000246 ORIG_RAX: 0000000000000113
      RAX: ffffffffffffffda RBX: 0000716157fff6c0 RCX: 000071624e8aafe2
      RDX: 000000000000005f RSI: 0000000000000000 RDI: 0000000000000066
      RBP: 0000716157ffed90 R08: 0000000000008000 R09: 0000000000000001
      R10: 0000000000000000 R11: 0000000000000246 R12: ffffffffffffff00
      R13: 0000000000000021 R14: 0000000000000000 R15: 00007fff89799c40
        </TASK>
    
    The TIPC_DUMP_ALL tracepoints in tipc_sk_enqueue() also dump
    sk_receive_queue and can therefore dereference skbs that the socket
    owner has already dequeued or freed. Restrict these dumps to
    TIPC_DUMP_SK_BKLGQ, which matches the queue protected by the held
    spinlock.
    
    Keep the change limited to the enqueue path, where the unsafe queue dump
    is reachable while the socket is owned by user context.
    
    Fixes: 01e661ebfbad ("tipc: add trace_events for tipc socket")
    Cc: stable@vger.kernel.org
    Signed-off-by: Li Xiasong <lixiasong1@huawei.com>
    Reviewed-by: Tung Nguyen <tung.quang.nguyen@est.tech>
    Link: https://patch.msgid.link/20260611135647.3666727-1-lixiasong1@huawei.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing/osnoise: Call synchronize_rcu() when unregistering [+ + +]
Author: Crystal Wood <crwood@redhat.com>
Date:   Tue Jul 28 23:20:18 2026 -0400

    tracing/osnoise: Call synchronize_rcu() when unregistering
    
    [ Upstream commit fe58f457ad8d0a2bef4e053cfecca4b5cd266b1a ]
    
    This ensures that any RCU readers traversing the instance list
    have finished, before releasing the reference on the tracer that
    the instance points to.
    
    Cc: stable@vger.kernel.org
    Fixes: a6ed2aee54644 ("tracing: Switch to kvfree_rcu() API")
    Link: https://patch.msgid.link/20260609045430.1589786-1-crwood@redhat.com
    Suggested-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Crystal Wood <crwood@redhat.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tracing: Rename kvfree_rcu() to kvfree_rcu_mightsleep() [+ + +]
Author: Uladzislau Rezki (Sony) <urezki@gmail.com>
Date:   Tue Jul 28 23:20:17 2026 -0400

    tracing: Rename kvfree_rcu() to kvfree_rcu_mightsleep()
    
    [ Upstream commit cae16f2c2e11c60c888715f4d98c12740683d6a2 ]
    
    The kvfree_rcu() macro's single-argument form is deprecated.  Therefore
    switch to the new kvfree_rcu_mightsleep() variant. The goal is to
    avoid accidental use of the single-argument forms, which can introduce
    functionality bugs in atomic contexts and latency bugs in non-atomic
    contexts.
    
    Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Acked-by: Daniel Bristot de Oliveira <bristot@kernel.org>
    Acked-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Uladzislau Rezki (Sony) <urezki@gmail.com>
    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    Stable-dep-of: fe58f457ad8d ("tracing/osnoise: Call synchronize_rcu() when unregistering")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
treewide: rename pinctrl_gpio_direction_input_new() [+ + +]
Author: Bartosz Golaszewski <brgl@kernel.org>
Date:   Tue Jul 28 10:27:49 2026 -0400

    treewide: rename pinctrl_gpio_direction_input_new()
    
    [ Upstream commit 315c46f9b696be82972290d50349c7824276b844 ]
    
    Now that pinctrl_gpio_direction_input() is no longer used, let's drop the
    '_new' suffix from its improved variant.
    
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
    Acked-by: Linus Walleij <linus.walleij@linaro.org>
    Stable-dep-of: d3e91a95b2b0 ("gpio: tegra: do not call pinctrl for GPIO direction")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
udmabuf: Do not create malformed scatterlists [+ + +]
Author: Jason Gunthorpe <jgg@ziepe.ca>
Date:   Tue Jul 21 14:49:08 2026 -0400

    udmabuf: Do not create malformed scatterlists
    
    [ Upstream commit 5bf888673e0dda5a53220fa0c4956271a46c353c ]
    
    Using a sg_set_folio() loop for every 4K results in a malformed scatterlist
    because sg_set_folio() has an issue with offsets > PAGE_SIZE and because
    scatterlist expects the creator to build a list which consolidates any
    physical contiguity.
    
    sg_alloc_table_from_pages() creates a valid scatterlist directly from a
    struct page array, so go back to that.
    
    Remove the offsets allocation and just store an array of tail pages as it
    did before the below commit. Everything wants that anyhow.
    
    Fixes: 0c8b91ef5100 ("udmabuf: add back support for mapping hugetlb pages")
    Reported-by: Julian Orth <ju.orth@gmail.com>
    Closes: https://lore.kernel.org/all/20260308-scatterlist-v1-1-39c4566b0bba@gmail.com/
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Link: https://patch.msgid.link/0-v1-42779f29381a+4b9-udmabuf_sg_jgg@nvidia.com
    Stable-dep-of: 504e2b4ab97a ("dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

udmabuf: Ensure to perform cache synchronisation in begin_cpu_udmabuf() [+ + +]
Author: Robert Mader <robert.mader@collabora.com>
Date:   Sat Jun 27 12:57:25 2026 +0200

    udmabuf: Ensure to perform cache synchronisation in begin_cpu_udmabuf()
    
    commit 1d0e25c1ddf2063c499264fb2ba0fa6a3e4f8a00 upstream.
    
    The message of commit 504e2b4ab97a ("dma-buf/udmabuf: skip redundant cpu sync to
    fix cacheline EEXIST warning") says:
    
    > The CPU sync at map/unmap time is also redundant for udmabuf:
    > begin_cpu_udmabuf() and end_cpu_udmabuf() already perform explicit
    > cache synchronization via dma_sync_sgtable_for_cpu/device() when CPU
    > access is requested through the dma-buf interface.
    
    This, however, does not apply to the first time begin_cpu_udmabuf() is
    called on an udmabuf, in which case the implementation previously relied on
    get_sg_table() to perform the cache synchronisation.
    
    Ensure to call dma_sync_sgtable_for_cpu() in that case as well.
    
    Fixes: 504e2b4ab97a ("dma-buf/udmabuf: skip redundant cpu sync to fix cacheline EEXIST warning")
    Signed-off-by: Robert Mader <robert.mader@collabora.com>
    Reviewed-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
    Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
    Link: https://patch.msgid.link/20260627105725.9083-1-robert.mader@collabora.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: gadget: f_tcm: synchronize delayed set_alt with teardown [+ + +]
Author: Cen Zhang <zzzccc427@gmail.com>
Date:   Thu Jul 30 22:40:52 2026 -0400

    usb: gadget: f_tcm: synchronize delayed set_alt with teardown
    
    [ Upstream commit 79e2d75725c85607f8a9d87ae9cace62a19f767d ]
    
    The f_tcm set_alt() path defers endpoint setup to a work item and
    completes the delayed status response from process context. The delayed
    work uses f_tcm private state and may complete the setup request after
    disconnect or function teardown has already moved on.
    
    Cancel and drain the delayed set_alt work when the function is unbound or
    freed. For disable paths, which are reached under the composite device
    lock, use a small state machine and a non-sleeping cancellation path
    instead of cancel_work_sync(). If the work is already running, mark it
    cancelled and let the worker own the cleanup; otherwise tcm_disable() can
    cancel the queued work and clean up immediately.
    
    Also serialize the final delayed-status completion with the cancellation
    check while holding the composite device lock. This prevents a disconnect
    from clearing delayed_status while the worker is about to complete the
    control request.
    
    Validation reproduced this kernel report:
    BUG: KASAN: slab-use-after-free in tcm_delayed_set_alt+0x6c/0xef0
    
    Call Trace:
     <TASK>
     dump_stack_lvl+0x66/0xa0
     print_report+0xce/0x630
     ? tcm_delayed_set_alt+0x6c/0xef0
     ? srso_alias_return_thunk+0x5/0xfbef5
     ? __virt_addr_valid+0x188/0x320
     ? tcm_delayed_set_alt+0x6c/0xef0
     kasan_report+0xe0/0x110
     ? tcm_delayed_set_alt+0x6c/0xef0
     tcm_delayed_set_alt+0x6c/0xef0
     ? __pfx_tcm_delayed_set_alt+0x10/0x10
     ? process_one_work+0x4cb/0xb90
     ? rcu_is_watching+0x20/0x50
     ? tcm_delayed_set_alt+0x9/0xef0
     process_one_work+0x4d7/0xb90
     ? __pfx_process_one_work+0x10/0x10
     ? srso_alias_return_thunk+0x5/0xfbef5
     ? __list_add_valid_or_report+0x37/0xf0
     ? __pfx_tcm_delayed_set_alt+0x10/0x10
     ? srso_alias_return_thunk+0x5/0xfbef5
     worker_thread+0x2d8/0x570
     ? __pfx_worker_thread+0x10/0x10
     kthread+0x1ad/0x1f0
     ? __pfx_kthread+0x10/0x10
     ret_from_fork+0x3c9/0x540
     ? __pfx_ret_from_fork+0x10/0x10
     ? srso_alias_return_thunk+0x5/0xfbef5
     ? __switch_to+0x2e9/0x730
     ? __pfx_kthread+0x10/0x10
     ret_from_fork_asm+0x1a/0x30
     </TASK>
    
    Allocated by task 544:
     kasan_save_stack+0x33/0x60
     kasan_save_track+0x14/0x30
     __kasan_kmalloc+0x8f/0xa0
     tcm_alloc+0x68/0x180
     usb_get_function+0x36/0x60
     config_usb_cfg_link+0x125/0x1b0
     configfs_symlink+0x322/0x890
     vfs_symlink+0xc2/0x270
     filename_symlinkat+0x295/0x2f0
     __x64_sys_symlinkat+0x62/0x90
     do_syscall_64+0x115/0x6a0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Freed by task 661:
     kasan_save_stack+0x33/0x60
     kasan_save_track+0x14/0x30
     kasan_save_free_info+0x3b/0x60
     __kasan_slab_free+0x43/0x70
     kfree+0x2f9/0x530
     config_usb_cfg_unlink+0x173/0x1e0
     configfs_unlink+0x1fa/0x340
     vfs_unlink+0x15c/0x510
     filename_unlinkat+0x2ba/0x450
     __x64_sys_unlinkat+0x63/0x90
     do_syscall_64+0x115/0x6a0
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: c52661d60f63 ("usb-gadget: Initial merge of target module for UASP + BOT")
    Cc: stable <stable@kernel.org>
    Assisted-by: Codex:gpt-5.5
    Signed-off-by: Cen Zhang <zzzccc427@gmail.com>
    Link: https://patch.msgid.link/20260627104153.3822495-1-zzzccc427@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [ adjusted context for 6.12's scalar `struct usbg_cdb cmd` and missing `stream_hash`, dropping the `hash_init()` context line ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: musb: omap2430: clean up probe error handling [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Thu Jul 30 10:06:17 2026 -0400

    usb: musb: omap2430: clean up probe error handling
    
    [ Upstream commit 51d4b0a44c82e5eff056ef76acd2c3c605a8eb74 ]
    
    Using numbered error labels is discouraged (e.g. as it requires
    renumbering them when adding a new intermediate error path).
    
    Rename the error labels after what they do.
    
    While at it, drop the redundant platform allocation failure dev_err()
    as the error would already have been logged by the allocator.
    
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Link: https://lore.kernel.org/r/20250724091910.21092-6-johan@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: c947360ae63e ("usb: musb: omap2430: Do not put borrowed of_node in probe")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: musb: omap2430: Do not put borrowed of_node in probe [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Thu Jul 30 10:06:18 2026 -0400

    usb: musb: omap2430: Do not put borrowed of_node in probe
    
    [ Upstream commit c947360ae63eee1c9eacc030dd6f5a53f717addf ]
    
    omap2430_probe() stores pdev->dev.of_node in a local np variable. This is
    a borrowed pointer and the probe function does not take a reference to
    it.
    
    The success and error paths nevertheless call of_node_put(np). This drops
    a reference that is owned by the platform device, and can leave
    pdev->dev.of_node with an unbalanced reference count.
    
    Do not put the borrowed platform device node from omap2430_probe().
    References taken for the child MUSB device are handled by the device core,
    and the ctrl-module phandle reference is still released separately.
    
    Fixes: ffbe2feac59b ("usb: musb: omap2430: Fix probe regression for missing resources")
    Cc: stable <stable@kernel.org>
    Reviewed-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Link: https://patch.msgid.link/20260713114711.955253-1-lgs201920130244@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: Correct teardown ordering in ucsi_init() error path [+ + +]
Author: Andrei Kuchynski <akuchynski@chromium.org>
Date:   Fri Jul 17 10:46:14 2026 +0000

    usb: typec: ucsi: Correct teardown ordering in ucsi_init() error path
    
    commit fb0bf289f5d529336ef490c8273e88a8a8b29f69 upstream.
    
    The commit 7aa7d4bf9d3f ("usb: typec: ucsi: Fix race condition and
    ordering in port unregistration") consolidated port teardown into the
    ucsi_unregister_port() helper. However, it introduced an ordering problem
    in the ucsi_init() error path.
    
    Fix this by ensuring ucsi_unregister_port() is called before we unregister
    their corresponding lockdep keys.
    
    Cc: stable@vger.kernel.org
    Fixes: 7aa7d4bf9d3f ("usb: typec: ucsi: Fix race condition and ordering in port unregistration")
    Reported-by: "Borah, Chaitanya Kumar" <chaitanya.kumar.borah@intel.com>
    Closes: https://lore.kernel.org/all/22064276-6c56-411a-9f20-6917ceeb865f@intel.com/
    Signed-off-by: Andrei Kuchynski <akuchynski@chromium.org>
    Tested-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/20260717104614.325250-1-akuchynski@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: Fix race condition and ordering in port unregistration [+ + +]
Author: Andrei Kuchynski <akuchynski@chromium.org>
Date:   Fri Jul 31 07:10:46 2026 -0400

    usb: typec: ucsi: Fix race condition and ordering in port unregistration
    
    [ Upstream commit 7aa7d4bf9d3fa9a6a47b640ad103ab433b7ff261 ]
    
    A synchronization issue exists during port unregistration where pending
    partner work items can race against workqueue destruction, leading to
    use-after-free conditions:
    
      cros_ec_ucsi cros_ec_ucsi.3.auto: error -ETIMEDOUT: PPM init failed
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      RIP: 0010:__queue_work+0x83/0x4a0
      Call Trace:
        <IRQ>
        __cfi_delayed_work_timer_fn+0x10/0x10
        run_timer_softirq+0x3b6/0xbd0
        sched_clock_cpu+0xc/0x110
        irq_exit_rcu+0x18d/0x330
        fred_sysvec_apic_timer_interrupt+0x5e/0x80
    
    Fix this by ensuring strict ordering and proper serialization during
    teardown:
    
    1. Move ucsi_unregister_partner() to the beginning of the teardown
    sequence and protect it under the connector mutex lock.
    2. Ensure all pending partner tasks are explicitly flushed and finished
    before the workqueue is destroyed.
    3. Switch from mod_delayed_work() to a cancel_delayed_work() and
    queue_delayed_work() sequence. This guarantees that items currently marked
    as pending won't be scheduled an additional time, preventing a double
    release of resources which leads to the following crash:
    
      Oops: general protection fault, probably for non-canonical address
        0xdead000000000122: 0000 [#1] SMP NOPTI
      Workqueue: cros_ec_ucsi.3.auto-con2 ucsi_poll_worker
      RIP: 0010:ucsi_poll_worker+0x65/0x1e0
      Call Trace:
      <TASK>
        process_scheduled_works+0x218/0x6d0
        worker_thread+0x188/0x3f0
        __cfi_worker_thread+0x10/0x10
        kthread+0x226/0x2a0
    
    To ensure these rules are applied identically across both the normal
    teardown and the ucsi_init() error paths, consolidate the cleanup logic
    into a new helper, ucsi_unregister_port().
    
    Cc: stable <stable@kernel.org>
    Fixes: b9aa02ca39a4 ("usb: typec: ucsi: Add polling mechanism for partner tasks like alt mode checking")
    Fixes: b13abcb7ddd8 ("usb: typec: ucsi: Fix NULL pointer access")
    Fixes: fac4b8633fd6 ("usb: ucsi: Ensure connector delayed work items are flushed")
    Signed-off-by: Andrei Kuchynski <akuchynski@chromium.org>
    Reviewed-by: Benson Leung <bleung@chromium.org>
    Link: https://patch.msgid.link/20260707141736.1635698-1-akuchynski@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: Only enable supported notifications [+ + +]
Author: Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt>
Date:   Fri Jul 31 07:10:44 2026 -0400

    usb: typec: ucsi: Only enable supported notifications
    
    [ Upstream commit 27ffe4ff0b33b3dcc97fd448fd1e38d31ade575b ]
    
    The UCSI specification defines some notifications to be optional for the
    PPM to support. From these only enable the ones the PPM informs us are
    actually supported.
    
    Signed-off-by: Diogo Ivo <diogo.ivo@tecnico.ulisboa.pt>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://lore.kernel.org/r/yhz7nq622mbg3rqsyvqz632pc756niagpfbnzayfswhzo7esho@vrdtx5c3hjgx
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 7aa7d4bf9d3f ("usb: typec: ucsi: Fix race condition and ordering in port unregistration")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: typec: ucsi: split connector lock classes [+ + +]
Author: Sergey Senozhatsky <senozhatsky@chromium.org>
Date:   Fri Jul 31 07:10:45 2026 -0400

    usb: typec: ucsi: split connector lock classes
    
    [ Upstream commit 8c22256bbafad3dc5fdbe9f684d045b67ff06a68 ]
    
    Lockdep detects a possible recursive locking scenario during
    ucsi init:
    
    [    5.418616] ============================================
    [    5.418634] WARNING: possible recursive locking detected
    [    5.418706] --------------------------------------------
    [    5.418725] kworker/4:1/82 is trying to acquire lock:
    [    5.418759] ffff888119a34648 (&con->lock){+.+.}-{3:3}, at: ucsi_init_work+0x1a78/0x2eb0 [typec_ucsi]
    [    5.418801]
                   but task is already holding lock:
    [    5.418835] ffff888119a34080 (&con->lock){+.+.}-{3:3}, at: ucsi_init_work+0x1a78/0x2eb0 [typec_ucsi]
    [    5.418884]
                   other info that might help us debug this:
    [    5.418904]  Possible unsafe locking scenario:
    
    [    5.418937]        CPU0
    [    5.418956]        ----
    [    5.418991]   lock(&con->lock);
    [    5.419013]   lock(&con->lock);
    [    5.419033]
                    *** DEADLOCK ***
    
    [    5.419387] Call Trace:
    [    5.419406]  <TASK>
    [    5.419425]  dump_stack_lvl+0x61/0xa0
    [    5.419448]  print_deadlock_bug+0x4a6/0x650
    [    5.419483]  __lock_acquire+0x62b6/0x7f50
    [    5.419507]  lock_acquire+0x11b/0x390
    [    5.419654]  __mutex_lock+0xbc/0xcd0
    [    5.419741]  ucsi_init_work+0x1a78/0x2eb0
    [    5.419785]  ? worker_thread+0xf53/0x2bc0
    [    5.419819]  worker_thread+0xff4/0x2bc0
    [    5.419842]  kthread+0x2a7/0x330
    [    5.419863]  ? __pfx_worker_thread+0x10/0x10
    [    5.419896]  ? __pfx_kthread+0x10/0x10
    [    5.419916]  ret_from_fork+0x38/0x70
    [    5.419936]  ? __pfx_kthread+0x10/0x10
    [    5.419969]  ret_from_fork_asm+0x1b/0x30
    [    5.419991]  </TASK>
    [    5.420009] ---[ end trace 0000000000000000 ]---
    
    The problem is that all connector locks belong to the same
    lockdep lock class, so the following loop:
    
            for (i = 0; i < ucsi->cap.num_connectors; i++)
                    ucsi_register_port(connector[i])
                            mutex_lock(&connector[i]->lock)
    
    looks like a recursive acquire of the same mutex.  Put each connector
    lock into a dedicated lock class so that lockdep doesn't see it as a
    possible recursion.
    
    Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
    Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Link: https://patch.msgid.link/20260515060042.136083-1-senozhatsky@chromium.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Stable-dep-of: 7aa7d4bf9d3f ("usb: typec: ucsi: Fix race condition and ordering in port unregistration")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
VDUSE: avoid leaking information to userspace [+ + +]
Author: Jason Wang <jasowangio@gmail.com>
Date:   Wed Jul 22 14:07:41 2026 -0400

    VDUSE: avoid leaking information to userspace
    
    [ Upstream commit 9c1523803445ee0348f62b77793266dd981596e0 ]
    
    The bounceing is not necessarily page aligned, so current VDUSE can
    leak kernel information through mapping bounce pages to
    userspace. Allocate bounce pages with __GFP_ZERO to avoid leaking
    information to userspace.
    
    Fixes: 8c773d53fb7b ("vduse: Implement an MMU-based software IOTLB")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Wang <jasowang@redhat.com>
    Reviewed-by: Xie Yongji <xieyongji@bytedance.com>
    Reviewed-by: Eugenio Pérez <eperezma@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Message-ID: <20260130050750.4050-1-jasowang@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vduse: remove unused vaddr parameter of vduse_domain_free_coherent [+ + +]
Author: Eugenio Pérez <eperezma@redhat.com>
Date:   Wed Jul 22 14:07:39 2026 -0400

    vduse: remove unused vaddr parameter of vduse_domain_free_coherent
    
    [ Upstream commit 766e1749c0ef6a09651be9b8a8283d508c322b58 ]
    
    We will modify the function in next patches so let's clean it first.
    
    Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Message-Id: <20260119143306.1818855-9-eperezma@redhat.com>
    Stable-dep-of: 9c1523803445 ("VDUSE: avoid leaking information to userspace")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

vduse: take out allocations from vduse_dev_alloc_coherent [+ + +]
Author: Eugenio Pérez <eperezma@redhat.com>
Date:   Wed Jul 22 14:07:40 2026 -0400

    vduse: take out allocations from vduse_dev_alloc_coherent
    
    [ Upstream commit 489d76520612abf9a4ede4344349105406c91a73 ]
    
    The function vduse_dev_alloc_coherent will be called under rwlock in
    next patches.  Make it out of the lock to avoid increasing its fail
    rate.
    
    Acked-by: Jason Wang <jasowang@redhat.com>
    Signed-off-by: Eugenio Pérez <eperezma@redhat.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Message-Id: <20260119143306.1818855-10-eperezma@redhat.com>
    Stable-dep-of: 9c1523803445 ("VDUSE: avoid leaking information to userspace")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

vduse: Use fixed 4KB bounce pages for non-4KB page size [+ + +]
Author: Sheng Zhao <sheng.zhao@bytedance.com>
Date:   Wed Jul 22 14:07:38 2026 -0400

    vduse: Use fixed 4KB bounce pages for non-4KB page size
    
    [ Upstream commit 3fc3068e7247c94dec08e93fea422a1bb649bfe5 ]
    
    The allocation granularity of bounce pages is PAGE_SIZE. This may cause
    even small IO requests to occupy an entire bounce page exclusively. The
    kind of memory waste will be more significant when PAGE_SIZE is larger
    than 4KB (e.g. arm64 with 64KB pages).
    
    So, optimize it by using fixed 4KB bounce maps and iova allocation
    granularity. A single IO request occupies at least a 4KB bounce page
    instead of the entire memory page of PAGE_SIZE.
    
    Signed-off-by: Sheng Zhao <sheng.zhao@bytedance.com>
    Message-Id: <20250925113516.60305-1-sheng.zhao@bytedance.com>
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Stable-dep-of: 9c1523803445 ("VDUSE: avoid leaking information to userspace")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
veth: convert frag_list skbs before running XDP [+ + +]
Author: Matt Fleming <mfleming@cloudflare.com>
Date:   Tue Aug 11 15:17:29 2026 -0400

    veth: convert frag_list skbs before running XDP
    
    [ Upstream commit d0d6415963040c401e7a7e4e482a698ba52448cb ]
    
    A frag_list skb can reach veth with data_len set but nr_frags zero.
    veth_convert_skb_to_xdp_buff() only converts skbs that are shared,
    locked, have frags[], or do not have enough headroom. It later uses
    skb_is_nonlinear() to decide whether to set XDP_FLAGS_HAS_FRAGS and
    xdp_frags_size.
    
    That exposes frag_list data to XDP as if it were stored in frags[], but
    frags[] is empty. AF_XDP copy mode can then trust the bogus XDP fragment
    metadata, walk an empty fragment entry, and crash in memcpy() from
    __xsk_rcv().
    
    Route non-linear skbs through skb_pp_cow_data() before exposing them to
    XDP, and only advertise XDP frags when the resulting skb has frags[].
    skb_copy_bits() already handles frag_list input, and skb_pp_cow_data()
    builds frags[] output with skb_add_rx_frag(), which is the
    representation XDP multi-buffer expects.
    
    Fixes: 718a18a0c8a6 ("veth: Rework veth_xdp_rcv_skb in order to accept non-linear skb")
    Cc: stable@vger.kernel.org
    Signed-off-by: Matt Fleming <mfleming@cloudflare.com>
    Reviewed-by: Toke Høiland-Jørgensen <toke@toke.dk>
    Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Link: https://patch.msgid.link/20260722191925.2192070-1-matt@readmodwrite.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

veth: fix skb length accounting after XDP frag adjustment [+ + +]
Author: Sun Jian <sun.jian.kdev@gmail.com>
Date:   Wed Aug 19 10:56:58 2026 -0400

    veth: fix skb length accounting after XDP frag adjustment
    
    [ Upstream commit cb6379feaaff11c4e1e79c26c745ffa23182768a ]
    
    veth exposes non-linear skb fragments through an xdp_buff. If an XDP
    program adjusts the fragment area, veth_xdp_rcv_skb() copies
    xdp_frags_size back to skb->data_len but leaves skb->len containing the
    old fragment contribution.
    
    After a fragment shrink, this makes skb_headlen() larger than the actual
    linear area. In the reproduced UDP receive path, __skb_datagram_iter()
    copied 1024 bytes past the actual linear tail to userspace, starting at
    struct skb_shared_info. The copied bytes included the affected skb's
    nr_frags, xdp_frags_size, and a kernel pointer from
    skb_shinfo(skb)->frags[0]. Real packet data was displaced by the same
    amount and truncated at the end.
    
    Subtract the old data_len before replacing it and add the new data_len
    afterwards, keeping skb->len and skb->data_len synchronized.
    
    Additionally, bpf_xdp_pull_data() can advance data_end while leaving
    frags present. The skb is then still non-linear, so the old
    __skb_put(skb, off) triggers SKB_LINEAR_ASSERT().
    
    Use skb_set_tail_pointer() and update skb->len explicitly instead,
    following bpf_prog_run_generic_xdp(). Unlike __skb_put(),
    skb_set_tail_pointer() does not require a linear skb.
    
    A 60000-byte UDP datagram on a veth pair with MTU 64000 was shortened by
    1024 bytes from its fragment area. Before the fix, all 10 runs produced
    corrupted payloads. After the fix, all 10 runs matched the expected
    payload exactly. A forced-tailroom reproducer also exercises
    bpf_xdp_pull_data() with frags still present; the old code triggers
    SKB_LINEAR_ASSERT(), while this fix passes 10/10 runs.
    
    Fixes: 718a18a0c8a6 ("veth: Rework veth_xdp_rcv_skb in order to accept non-linear skb")
    Cc: stable@vger.kernel.org
    Reported-by: Mohsin Bashir <mohsin.bashr@gmail.com>
    Link: https://lore.kernel.org/bpf/80687d9c-9c27-494c-b3f2-efd0230b1895@gmail.com/
    Suggested-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Acked-by: Lorenzo Bianconi <lorenzo@kernel.org>
    Signed-off-by: Sun Jian <sun.jian.kdev@gmail.com>
    Link: https://patch.msgid.link/20260804054040.613675-3-sun.jian.kdev@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

veth: Introduce veth_xdp_buff wrapper for xdp_buff [+ + +]
Author: Stanislav Fomichev <sdf@fomichev.me>
Date:   Wed Aug 19 10:56:57 2026 -0400

    veth: Introduce veth_xdp_buff wrapper for xdp_buff
    
    [ Upstream commit fefb695a745f10247fd68f5561e6e3d85e1d7b59 ]
    
    No functional changes. Boilerplate to allow stuffing more data after xdp_buff.
    
    Cc: Martin KaFai Lau <martin.lau@linux.dev>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Willem de Bruijn <willemb@google.com>
    Cc: Jesper Dangaard Brouer <brouer@redhat.com>
    Cc: Anatoly Burakov <anatoly.burakov@intel.com>
    Cc: Alexander Lobakin <alexandr.lobakin@intel.com>
    Cc: Magnus Karlsson <magnus.karlsson@gmail.com>
    Cc: Maryam Tahhan <mtahhan@redhat.com>
    Cc: xdp-hints@xdp-project.net
    Cc: netdev@vger.kernel.org
    Signed-off-by: Stanislav Fomichev <sdf@google.com>
    Link: https://lore.kernel.org/r/20230119221536.3349901-10-sdf@google.com
    Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
    Stable-dep-of: cb6379feaaff ("veth: fix skb length accounting after XDP frag adjustment")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
vfio/pci: Fix racy bitfields and tighten struct layout [+ + +]
Author: Alex Williamson <alex.williamson@nvidia.com>
Date:   Thu Jul 30 08:15:30 2026 -0400

    vfio/pci: Fix racy bitfields and tighten struct layout
    
    [ Upstream commit e73638e55f861758d49f14d7bb5dba3035981cd7 ]
    
    Bitfield operations are not atomic, they use a read-modify-write
    pattern, therefore we should be careful not to pack bitfields that
    can be concurrently updated into the same storage unit.
    
    This split takes a binary approach: flags that are only modified
    pre/post open/close remain bitfields, flags modified from user
    action, including actions that reach across to another device (ex.
    reset) use dedicated storage units.
    
    Note that the virq_disabled and bardirty flags are relocated to fill
    an existing hole in the structure.
    
    Bitfield justifications:
    
      has_dyn_msix: written only in vfio_pci_core_enable()
      pci_2_3: written only in vfio_pci_core_enable()
      reset_works: written only in vfio_pci_core_enable()
      extended_caps: written only in vfio_cap_len() under vfio_config_init()
      has_vga: written only in vfio_pci_core_enable()
      nointx: written only in vfio_pci_core_enable()
      needs_pm_restore: written only in vfio_pci_probe_power_state()
      disable_idle_d3: written only at .init in vfio_pci_core_init_dev()
    
    Dedicated storage units:
    
      virq_disabled: written by guest INTx command writes in
                     vfio_basic_config_write() while the device is open
      bardirty: written by guest BAR writes in vfio_basic_config_write()
                while the device is open
      pm_intx_masked: written in the runtime-PM suspend path.
      pm_runtime_engaged: written by low-power feature entry/exit paths
      needs_reset: set in vfio_pci_core_disable() and cleared for devices in
                   the set by vfio_pci_dev_set_try_reset()
      sriov_active: written by vfio_pci_core_sriov_configure() via sysfs
                    sriov_numvfs while bound.
    
    Fixes: 9cd0f6d5cbb6 ("vfio/pci: Use bitfield for struct vfio_pci_core_device flags")
    Cc: stable@vger.kernel.org
    Assisted-by: Claude:claude-opus-4-8
    Signed-off-by: Alex Williamson <alex.williamson@nvidia.com>
    Reviewed-by: Kevin Tian <kevin.tian@intel.com>
    Link: https://lore.kernel.org/r/20260615191241.688297-4-alex.williamson@nvidia.com
    Signed-off-by: Alex Williamson <alex@shazbot.org>
    [ dropped the `has_dyn_msix:1` bitfield line (absent in this tree) while keeping the rest of the struct layout change ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
VFS/audit: introduce kern_path_parent() for audit [+ + +]
Author: NeilBrown <neil@brown.name>
Date:   Wed Jul 22 06:30:45 2026 -0400

    VFS/audit: introduce kern_path_parent() for audit
    
    [ Upstream commit 76a53de6f7ff0641570364234fb4489f4d4fc8e9 ]
    
    audit_alloc_mark() and audit_get_nd() both need to perform a path
    lookup getting the parent dentry (which must exist) and the final
    target (following a LAST_NORM name) which sometimes doesn't need to
    exist.
    
    They don't need the parent to be locked, but use kern_path_locked() or
    kern_path_locked_negative() anyway.  This is somewhat misleading to the
    casual reader.
    
    This patch introduces a more targeted function, kern_path_parent(),
    which returns not holding locks.  On success the "path" will
    be set to the parent, which must be found, and the return value is the
    dentry of the target, which might be negative.
    
    This will clear the way to rename kern_path_locked() which is
    otherwise only used to prepare for removing something.
    
    It also allows us to remove kern_path_locked_negative(), which is
    transformed into the new kern_path_parent().
    
    Signed-off-by: NeilBrown <neil@brown.name>
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Stable-dep-of: 81905b5acbe7 ("audit: fix recursive locking deadlock in audit_dupe_exe()")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: ath6kl: fix use-after-free in aggr_reset_state() [+ + +]
Author: Daniel Hodges <git@danielhodges.dev>
Date:   Thu Aug 6 09:59:38 2026 -0400

    wifi: ath6kl: fix use-after-free in aggr_reset_state()
    
    [ Upstream commit ba7debb4dd6427386862220e8335a53a4bfc235d ]
    
    The aggr_reset_state() function uses timer_delete() (non-synchronous)
    for the aggregation timer before proceeding to delete TID state and
    before the structure is freed by callers like aggr_module_destroy().
    
    If the timer callback (aggr_timeout) is executing when aggr_reset_state()
    is called, the callback will continue to access aggr_conn fields like
    rx_tid[] and stat[] which may be freed immediately after by
    kfree(aggr_info->aggr_conn) in aggr_module_destroy().
    
    Additionally, the timer callback can re-arm itself via mod_timer() while
    aggr_reset_state() is running, creating a more complex race condition.
    
    Use timer_delete_sync() instead to ensure any running timer callback
    has completed before returning.
    
    Fixes: bdcd81707973 ("Add ath6kl cleaned up driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Daniel Hodges <git@danielhodges.dev>
    Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
    Link: https://patch.msgid.link/20260206185207.30098-1-git@danielhodges.dev
    Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: brcmfmac: drain bus_reset work on device removal [+ + +]
Author: Fan Wu <fanwu01@zju.edu.cn>
Date:   Thu Aug 6 10:53:27 2026 -0400

    wifi: brcmfmac: drain bus_reset work on device removal
    
    [ Upstream commit 43b25879f004c98defa2776bedc6ca4763c51945 ]
    
    brcmf_fw_crashed() and the debugfs "reset" entry both schedule
    drvr->bus_reset, whose callback recovers drvr through container_of()
    and dereferences it.  The removal path frees drvr (brcmf_free ->
    wiphy_free) without draining the work, so a bus_reset callback pending
    or running during removal can outlive drvr.
    
    Cancellation cannot live in brcmf_detach() or brcmf_free(): the work
    callback reaches teardown through the bus .reset op (PCIe
    brcmf_pcie_reset -> brcmf_detach; SDIO brcmf_sdio_bus_reset ->
    brcmf_sdiod_remove -> brcmf_free), so cancelling there would wait for
    the running work and deadlock.
    
    Add a per-bus mutex (bus_reset_lock) and route all arming through
    brcmf_bus_schedule_reset(), which under the lock skips when the bus is
    marked removing.  Each bus remove entry calls
    brcmf_bus_cancel_reset_work(), which under the same lock sets removing
    and cancels the work.  Holding the mutex across cancel_work_sync() makes
    the set-removing + drain step atomic.  Every producer reaches the arming
    path from process context -- the PCIe firmware-halt notification runs in
    the threaded IRQ handler (brcmf_pcie_isr_thread) and the SDIO hostmail
    path runs from the data workqueue -- so the mutex is taken only in
    sleepable contexts.  Where applicable the remove entry first stops the
    firmware-crash producer: on PCIe mask the mailbox and synchronize_irq;
    on SDIO unregister the bus interrupt and cancel the data worker, which
    also reports firmware halts through brcmf_fw_crashed().  The mutex is
    initialized at bus allocation.  The SDIO suspend power-off path frees
    drvr through the same brcmf_sdiod_remove() and takes the same lock;
    resume re-allows the work only on a successful re-probe.
    
    Also guard brcmf_fw_crashed() against a NULL bus_if/drvr: it can fire
    before brcmf_attach() wires up drvr, and it dereferences drvr
    (bphy_err/brcmf_dev_coredump) before reaching the arming gate.
    
    The bus_reset work is shared across buses, so the drain is applied to
    every remove path: PCIe (the .reset op introduced by the Fixes commit),
    SDIO (arms the same work through brcmf_fw_crashed()), and USB (via the
    debugfs "reset" entry).  cancel_work_sync() drains a running or pending
    bus_reset work item before removal frees drvr, and patch 1/2 makes the
    scratch-buffer release safe when reset teardown has already released
    those DMA buffers.
    
    This patch fixes the lifetime of the bus_reset work item itself.  It does
    not attempt to address the separate, pre-existing lifetime of the
    asynchronous firmware completion started by the PCIe reset path.  That
    callback needs its own lifetime/ownership protocol and is being tracked
    separately.
    
    This issue was found by an in-house static analysis tool.
    
    Fixes: 4684997d9eea ("brcmfmac: reset PCIe bus on a firmware crash")
    Cc: stable@vger.kernel.org
    Signed-off-by: Fan Wu <fanwu01@zju.edu.cn>
    Assisted-by: Codex:gpt-5.6
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Link: https://patch.msgid.link/20260718024353.3147201-3-fanwu01@zju.edu.cn
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: brcmfmac: fix 43752 SDIO FWVID incorrectly labelled as Cypress (CYW) [+ + +]
Author: Gokul Sivakumar <gokulkumar.sivakumar@infineon.com>
Date:   Thu Aug 6 13:02:08 2026 -0400

    wifi: brcmfmac: fix 43752 SDIO FWVID incorrectly labelled as Cypress (CYW)
    
    [ Upstream commit 74e2ef72bd4b25ce21c8f309d4f5b91b5df9ff5b ]
    
    Cypress(Infineon) is not the vendor for this 43752 SDIO WLAN chip, and so
    has not officially released any firmware binary for it. It is incorrect to
    maintain this WLAN chip with firmware vendor ID as "CYW". So relabel the
    chip's firmware Vendor ID as "WCC" as suggested by the maintainer.
    
    Fixes: d2587c57ffd8 ("brcmfmac: add 43752 SDIO ids and initialization")
    Fixes: f74f1ec22dc2 ("wifi: brcmfmac: add support for Cypress firmware api")
    Signed-off-by: Gokul Sivakumar <gokulkumar.sivakumar@infineon.com>
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Link: https://patch.msgid.link/20250724101136.6691-1-gokulkumar.sivakumar@infineon.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: 29ab31f3f271 ("wifi: brcmfmac: set F2 blocksize to 256 for BCM43752")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: brcmfmac: set F2 blocksize to 256 for BCM43752 [+ + +]
Author: LiangCheng Wang <zaq14760@gmail.com>
Date:   Thu Aug 6 13:02:09 2026 -0400

    wifi: brcmfmac: set F2 blocksize to 256 for BCM43752
    
    [ Upstream commit 29ab31f3f27157648f2f7e6d5e1fd9792fdf0614 ]
    
    The BCM43752 is not reliable with the default 512-byte SDIO function 2
    block size: on an i.MX8MP board with an AMPAK AP6275S module at
    SDR104 / 200 MHz, an iperf TX stress test kills WLAN within seconds:
    
      mmc_submit_one: CMD53 sg block write failed -84
      brcmf_sdio_dpc: failed backplane access over SDIO, halting operation
    
    Commit d2587c57ffd8 ("brcmfmac: add 43752 SDIO ids and initialization")
    set up the 43752 like the 4373 for the F2 watermark but missed the F2
    block size, which the 4373 limits to 256 bytes. The vendor driver
    (bcmdhd) also programs a 256-byte F2 block size for this chip and runs
    the same hardware without errors.
    
    Group the 43752 with the 4373, matching the F2 watermark handling.
    With this change a 10-minute bidirectional iperf3 soak completes with
    zero SDIO errors at ~270 Mbit/s in each direction.
    
    Backporting note: kernels before v6.18 name this id
    SDIO_DEVICE_ID_BROADCOM_CYPRESS_43752, so on those trees the case
    label added by this patch must be adjusted to that name. Cherry-picking
    the rename commit 74e2ef72bd4b ("wifi: brcmfmac: fix 43752 SDIO FWVID
    incorrectly labelled as Cypress (CYW)") first is not a clean
    alternative: on trees before v6.17 its context collides with the 43751
    additions, and trees before v6.2 lack the FWVID framework it touches.
    
    Fixes: d2587c57ffd8 ("brcmfmac: add 43752 SDIO ids and initialization")
    Cc: stable@vger.kernel.org # see patch description, needs adjustments for <= 6.17
    Signed-off-by: LiangCheng Wang <zaq14760@gmail.com>
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Link: https://patch.msgid.link/20260715-b43752-f2-blksz-v2-1-f9be49856050@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: libertas_tf: fix use-after-free in lbtf_free_adapter() [+ + +]
Author: Maoyi Xie <maoyixie.tju@gmail.com>
Date:   Mon Jul 27 22:46:16 2026 -0400

    wifi: libertas_tf: fix use-after-free in lbtf_free_adapter()
    
    [ Upstream commit aa6dcd5c8dd9ba1d7d0f60093bcda41c0d6d438d ]
    
    lbtf_free_adapter() calls timer_delete(&priv->command_timer), which does
    not wait for a running command_timer_fn() callback. lbtf_free_adapter()
    runs on the teardown path right before ieee80211_free_hw() frees priv,
    both in lbtf_remove_card() and in the probe error path. command_timer is
    armed by mod_timer() in lbtf_cmd() whenever a firmware command is sent.
    command_timer_fn() dereferences priv. If a command times out as the
    device is removed, command_timer_fn() runs concurrently with teardown and
    dereferences priv after it has been freed.
    
    This is the same use-after-free that commit 03cc8f90d053 ("wifi: libertas:
    fix use-after-free in lbs_free_adapter()") fixed in the sibling libertas
    driver. The libertas_tf variant has the identical pattern and was left
    unchanged. Use timer_delete_sync() so any in-flight callback completes
    before priv is freed.
    
    Fixes: 06b16ae53192 ("libertas_tf: main.c, data paths and mac80211 handlers")
    Cc: stable@vger.kernel.org
    Signed-off-by: Maoyi Xie <maoyixie.tju@gmail.com>
    Link: https://patch.msgid.link/178211481807.2212567.8773346114561900100@maoyixie.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfs: check v5 superblock features early [+ + +]
Author: Christoph Hellwig <hch@lst.de>
Date:   Wed Jul 29 15:00:58 2026 +0200

    xfs: check v5 superblock features early
    
    commit eb6b2cc1fc8ad566d746d128a559989ff0bba5cc upstream.
    
    When working on a new features that reuses the existing pad in the
    superblock, I noticed that mounting such a file system on an old kernel
    logs a rather confusing warning:
    
        XFS (vdc): Metadir superblock padding fields must be zero.
    
    This is because we only validate the various feature fields in v5
    superblocks after the common superblock validation helper is called.
    
    Fix this by calling the feature validation first.
    
    Fixes: eca383fcd63b ("xfs: refactor superblock verifiers")
    Cc: <stable@vger.kernel.org> # v4.19
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: don't swallow dquot recovery verification errors [+ + +]
Author: Long Li <leo.lilong@huawei.com>
Date:   Mon Jul 27 10:38:49 2026 +0800

    xfs: don't swallow dquot recovery verification errors
    
    commit e2b4a856085e9bd939bde2dee0d08b1d41babde9 upstream.
    
    xlog_recover_dquot_commit_pass2() validates the recovered dquot with
    xfs_dqblk_verify() and, on failure, sets error = -EFSCORRUPTED and jumps
    to out_release.  But out_release unconditionally returns 0, so the
    corruption error is discarded: the caller xlog_recover_items_pass2()
    sees success, log recovery proceeds as if the dquot were valid, and the
    corrupt quota buffer can be written back to disk.
    
    Fixes: 9c235dfc3d3f ("xfs: dquot recovery does not validate the recovered dquot")
    Cc: stable@vger.kernel.org # v6.8
    Signed-off-by: Long Li <leo.lilong@huawei.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

xfs: fix ilock leak on error in xfs_dq_get_next_id [+ + +]
Author: Long Li <leo.lilong@huawei.com>
Date:   Mon Jul 27 10:38:48 2026 +0800

    xfs: fix ilock leak on error in xfs_dq_get_next_id
    
    commit 63320a0f70f66f311f4bccff3af0719c2119f46c upstream.
    
    xfs_dq_get_next_id() takes the quota inode ILOCK before calling
    xfs_iread_extents().  If xfs_iread_extents() fails, the function returns
    immediately without releasing the lock, leaking the quota inode ILOCK.
    This can leave the quota inode locked and cause subsequent quota
    operations to hang.
    
    Fix this by jumping to a common unlock path on error instead of returning
    directly.
    
    Fixes: bda250dbaf39f ("xfs: rewrite xfs_dq_get_next_id using xfs_iext_lookup_extent")
    Cc: stable@vger.kernel.org # v4.12
    Signed-off-by: Long Li <leo.lilong@huawei.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Darrick J. Wong <djwong@kernel.org>
    Signed-off-by: Carlos Maiolino <cem@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>