Changelog in Linux kernel 6.18.13

 
ALSA: hda/realtek - fixed speaker no sound [+ + +]
Author: Kailang Yang <kailang@realtek.com>
Date:   Fri Jan 23 15:21:36 2026 +0800

    ALSA: hda/realtek - fixed speaker no sound
    
    [ Upstream commit 630fbc6e870eb06c5126cc97a3abecbe012272c8 ]
    
    If it play a 5s above silence media stream, it will cause silence
    detection trigger.
    Speaker will make no sound when you use another app to play a stream.
    Add this patch will solve this issue.
    
    GPIO2: Mute Hotkey GPIO3: Mic Mute LED
    Enable this will turn on hotkey and LED support.
    
    Signed-off-by: Kailang Yang <kailang@realtek.com>
    Link: https://lore.kernel.org/f4929e137a7949238cc043d861a4d9f8@realtek.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Add quirk for Inspur S14-G1 [+ + +]
Author: Zhang Heng <zhangheng@kylinos.cn>
Date:   Mon Jan 26 15:35:08 2026 +0800

    ALSA: hda/realtek: Add quirk for Inspur S14-G1
    
    [ Upstream commit 9e18920e783d0bcd4c127a7adc66565243ab9655 ]
    
    Inspur S14-G1 is equipped with ALC256.
    Enable "power saving mode" and Enable "headset jack mode".
    
    Signed-off-by: Zhang Heng <zhangheng@kylinos.cn>
    Link: https://patch.msgid.link/20260126073508.3897461-2-zhangheng@kylinos.cn
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ALSA: hda/realtek: Enable headset mic for Acer Nitro 5 [+ + +]
Author: Breno Baptista <brenomb07@gmail.com>
Date:   Wed Feb 4 23:43:41 2026 -0300

    ALSA: hda/realtek: Enable headset mic for Acer Nitro 5
    
    [ Upstream commit 51db05283f7c9c95a3e6853a3044cd04226551bf ]
    
    Add quirk to support microphone input through headphone jack on Acer Nitro 5 AN515-57 (ALC295).
    
    Signed-off-by: Breno Baptista <brenomb07@gmail.com>
    Link: https://patch.msgid.link/20260205024341.26694-1-brenomb07@gmail.com
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
arm64: dts: mediatek: mt8183: Add missing endpoint IDs to display graph [+ + +]
Author: Otto Pflüger <otto.pflueger@abscue.de>
Date:   Tue Jan 6 11:11:12 2026 +0100

    arm64: dts: mediatek: mt8183: Add missing endpoint IDs to display graph
    
    commit be0b304eeb8c5f77e4f98f64e58729d879195f2f upstream.
    
    The endpoint IDs in the display graph are expected to match the
    associated display path number, i.e. all endpoints connected to
    mmsys_ep_main must have reg = <0> and all endpoints connected to
    mmsys_ep_ext must have reg = <1>.
    
    Add the missing ID to all endpoints in the display graph, based on
    mt8365.dtsi as an existing example that does this correctly.
    
    Fixes: e72d63fa0563 ("arm64: dts: mediatek: mt8183: Migrate to display controller OF graph")
    Reported-by: Evans Jahja <evansjahja13@gmail.com>
    Closes: https://lore.kernel.org/linux-mediatek/CAAq5pW9o3itC0G16LnJO7KMAQ_XoqXUpB=cuJ_7e3-H11zKd5Q@mail.gmail.com/
    Tested-by: Chen-Yu Tsai <wenst@chromium.org>
    Signed-off-by: Otto Pflüger <otto.pflueger@abscue.de>
    [Angelo: Fixed dtbs_check issues]
    Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
    Cc: Thorsten Leemhuis <regressions@leemhuis.info>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ASoC: amd: yc: Add ASUS ExpertBook PM1503CDA to quirks list [+ + +]
Author: Anatolii Shirykalov <pipocavsobake@gmail.com>
Date:   Mon Jan 19 15:56:18 2026 +0100

    ASoC: amd: yc: Add ASUS ExpertBook PM1503CDA to quirks list
    
    [ Upstream commit 018b211b1d321a52ed8d8de74ce83ce52a2e1224 ]
    
    Add ASUS ExpertBook PM1503CDA to the DMI quirks table to enable
    internal DMIC support via the ACP6x machine driver.
    
    Signed-off-by: Anatolii Shirykalov <pipocavsobake@gmail.com>
    Link: https://patch.msgid.link/20260119145618.3171435-1-pipocavsobake@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: amd: yc: Add quirk for HP 200 G2a 16 [+ + +]
Author: Dirk Su <dirk.su@canonical.com>
Date:   Thu Jan 29 14:50:19 2026 +0800

    ASoC: amd: yc: Add quirk for HP 200 G2a 16
    
    [ Upstream commit 611c7d2262d5645118e0b3a9a88475d35a8366f2 ]
    
    Fix the missing mic on HP 200 G2a 16 by adding quirk with the
    board ID 8EE4
    
    Signed-off-by: Dirk Su <dirk.su@canonical.com>
    Link: https://patch.msgid.link/20260129065038.39349-1-dirk.su@canonical.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: cs35l45: Corrects ASP_TX5 DAPM widget channel [+ + +]
Author: Ricardo Rivera-Matos <rriveram@opensource.cirrus.com>
Date:   Thu Jan 15 19:25:10 2026 +0000

    ASoC: cs35l45: Corrects ASP_TX5 DAPM widget channel
    
    [ Upstream commit 6dd0fdc908c02318c28ec2c0979661846ee0a9f7 ]
    
    ASP_TX5 was incorrectly mapped to a channel value of 3 corrects,
    the channel value of 4.
    
    Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: Ricardo Rivera-Matos <rriveram@opensource.cirrus.com>
    Link: https://patch.msgid.link/20260115192523.1335742-2-rriveram@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: cs42l43: Correct handling of 3-pole jack load detection [+ + +]
Author: Charles Keepax <ckeepax@opensource.cirrus.com>
Date:   Fri Jan 30 15:09:27 2026 +0000

    ASoC: cs42l43: Correct handling of 3-pole jack load detection
    
    [ Upstream commit e77a4081d7e324dfa876a9560b2a78969446ba82 ]
    
    The load detection process for 3-pole jacks requires slightly
    updated reference values to ensure an accurate result. Update
    the code to apply different tunings for the 3-pole and 4-pole
    cases. This also updates the thresholds overall so update the
    relevant comments to match.
    
    Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
    Link: https://patch.msgid.link/20260130150927.2964664-1-ckeepax@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: fsl_xcvr: fix missing lock in fsl_xcvr_mode_put() [+ + +]
Author: Ziyi Guo <n7l8m4@u.northwestern.edu>
Date:   Mon Feb 2 17:41:12 2026 +0000

    ASoC: fsl_xcvr: fix missing lock in fsl_xcvr_mode_put()
    
    [ Upstream commit f514248727606b9087bc38a284ff686e0093abf1 ]
    
    fsl_xcvr_activate_ctl() has
    lockdep_assert_held(&card->snd_card->controls_rwsem),
    but fsl_xcvr_mode_put() calls it without acquiring this lock.
    
    Other callers of fsl_xcvr_activate_ctl() in fsl_xcvr_startup() and
    fsl_xcvr_shutdown() properly acquire the lock with down_read()/up_read().
    
    Add the missing down_read()/up_read() calls around fsl_xcvr_activate_ctl()
    in fsl_xcvr_mode_put() to fix the lockdep assertion and prevent potential
    race conditions when multiple userspace threads access the control.
    
    Signed-off-by: Ziyi Guo <n7l8m4@u.northwestern.edu>
    Link: https://patch.msgid.link/20260202174112.2018402-1-n7l8m4@u.northwestern.edu
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: Intel: sof_es8336: Add DMI quirk for Huawei BOD-WXX9 [+ + +]
Author: Tagir Garaev <tgaraev653@gmail.com>
Date:   Sun Feb 1 15:17:28 2026 +0300

    ASoC: Intel: sof_es8336: Add DMI quirk for Huawei BOD-WXX9
    
    [ Upstream commit 6b641122d31f9d33e7d60047ee0586d1659f3f54 ]
    
    Add DMI entry for Huawei Matebook D (BOD-WXX9) with HEADPHONE_GPIO
    and DMIC quirks.
    
    This device has ES8336 codec with:
    - GPIO 16 (headphone-enable) for headphone amplifier control
    - GPIO 17 (speakers-enable) for speaker amplifier control
    - GPIO 269 for jack detection IRQ
    - 2-channel DMIC
    
    Hardware investigation shows that both GPIO 16 and 17 are required
    for proper audio routing, as headphones and speakers share the same
    physical output (HPOL/HPOR) and are separated only via amplifier
    enable signals.
    
    RFC: Seeking advice on GPIO control issue:
    
    GPIO values change in driver (gpiod_get_value() shows logical value
    changes) but not physically (debugfs gpio shows no change). The same
    gpiod_set_value_cansleep() calls work correctly in probe context with
    msleep(), but fail when called from DAPM event callbacks.
    
    Context information from diagnostics:
    - in_atomic=0, in_interrupt=0, irqs_disabled=0
    - Process context: pipewire
    - GPIO 17 (speakers): changes in driver, no physical change
    - GPIO 16 (headphone): changes in driver, no physical change
    
    In Windows, audio switching works without visible GPIO changes,
    suggesting possible ACPI/firmware involvement.
    
    Any suggestions on how to properly control these GPIOs from DAPM
    events would be appreciated.
    
    Signed-off-by: Tagir Garaev <tgaraev653@gmail.com>
    Link: https://patch.msgid.link/20260201121728.16597-1-tgaraev653@gmail.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

ASoC: sof_sdw: Add a quirk for Lenovo laptop using sidecar amps with cs42l43 [+ + +]
Author: Maciej Strozek <mstrozek@opensource.cirrus.com>
Date:   Wed Jan 28 09:24:05 2026 +0000

    ASoC: sof_sdw: Add a quirk for Lenovo laptop using sidecar amps with cs42l43
    
    [ Upstream commit 1425900231372acf870dd89e8d3bb4935f7f0c81 ]
    
    Add a quirk for a Lenovo laptop (SSID: 0x17aa3821) to allow using sidecar
    CS35L57 amps with CS42L43 codec.
    
    Signed-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com>
    Reviewed-by: Cezary Rojewski <cezary.rojewski@intel.com>
    Link: https://patch.msgid.link/20260128092410.1540583-1-mstrozek@opensource.cirrus.com
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
cpuset: Fix missing adaptation for cpuset_is_populated [+ + +]
Author: Chen Ridong <chenridong@huawei.com>
Date:   Wed Jan 14 01:51:29 2026 +0000

    cpuset: Fix missing adaptation for cpuset_is_populated
    
    Commit b1bcaed1e39a ("cpuset: Treat cpusets in attaching as populated")
    was backported to the long‑term support (LTS) branches. However, because
    commit d5cf4d34a333 ("cgroup/cpuset: Don't track # of local child
    partitions") was not backported, a corresponding adaptation to the
    backported code is still required.
    
    To ensure correct behavior, replace cgroup_is_populated with
    cpuset_is_populated in the partition_is_populated function.
    
    Cc: stable@vger.kernel.org      # 6.1+
    Fixes: b1bcaed1e39a ("cpuset: Treat cpusets in attaching as populated")
    Cc: Waiman Long <longman@redhat.com>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: Chen Ridong <chenridong@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/amd/display: extend delta clamping logic to CM3 LUT helper [+ + +]
Author: Melissa Wen <mwen@igalia.com>
Date:   Mon Dec 8 22:44:15 2025 -0100

    drm/amd/display: extend delta clamping logic to CM3 LUT helper
    
    [ Upstream commit d25b32aa829a3ed5570138e541a71fb7805faec3 ]
    
    Commit 27fc10d1095f ("drm/amd/display: Fix the delta clamping for shaper
    LUT") fixed banding when using plane shaper LUT in DCN10 CM helper.  The
    problem is also present in DCN30 CM helper, fix banding by extending the
    same bug delta clamping fix to CM3.
    
    Signed-off-by: Melissa Wen <mwen@igalia.com>
    Reviewed-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 0274a54897f356f9c78767c4a2a5863f7dde90c6)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

drm/amd/display: remove assert around dpp_base replacement [+ + +]
Author: Melissa Wen <mwen@igalia.com>
Date:   Fri Jan 16 12:50:49 2026 -0300

    drm/amd/display: remove assert around dpp_base replacement
    
    [ Upstream commit 84962445cd8a83dc5bed4c8ad5bbb2c1cdb249a0 ]
    
    There is nothing wrong if in_shaper_func type is DISTRIBUTED POINTS.
    Remove the assert placed for a TODO to avoid misinterpretations.
    
    Signed-off-by: Melissa Wen <mwen@igalia.com>
    Reviewed-by: Alex Hung <alex.hung@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 1714dcc4c2c53e41190896eba263ed6328bcf415)
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
drm/tegra: hdmi: sor: Fix error: variable ‘j’ set but not used [+ + +]
Author: Brahmajit Das <listout@listout.xyz>
Date:   Tue Sep 2 02:50:20 2025 +0530

    drm/tegra: hdmi: sor: Fix error: variable ‘j’ set but not used
    
    [ Upstream commit 1beee8d0c263b3e239c8d6616e4f8bb700bed658 ]
    
    The variable j is set, however never used in or outside the loop, thus
    resulting in dead code.
    Building with GCC 16 results in a build error due to
    -Werror=unused-but-set-variable= enabled by default.
    This patch clean up the dead code and fixes the build error.
    
    Example build log:
    drivers/gpu/drm/tegra/sor.c:1867:19: error: variable ‘j’ set but not used [-Werror=unused-but-set-variable=]
     1867 |         size_t i, j;
          |                   ^
    
    Signed-off-by: Brahmajit Das <listout@listout.xyz>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Link: https://lore.kernel.org/r/20250901212020.3757519-1-listout@listout.xyz
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
f2fs: fix incomplete block usage in compact SSA summaries [+ + +]
Author: Daeho Jeong <daehojeong@google.com>
Date:   Mon Jan 26 14:28:01 2026 -0800

    f2fs: fix incomplete block usage in compact SSA summaries
    
    commit 91b76f1059b60f453b51877f29f0e35693737383 upstream.
    
    In a previous commit, a bug was introduced where compact SSA summaries
    failed to utilize the entire block space in non-4KB block size
    configurations, leading to inefficient space management.
    
    This patch fixes the calculation logic to ensure that compact SSA
    summaries can fully occupy the block regardless of the block size.
    
    Reported-by: Chris Mason <clm@meta.com>
    Fixes: e48e16f3e37f ("f2fs: support non-4KB block size without packed_ssa feature")
    Signed-off-by: Daeho Jeong <daehojeong@google.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Cc: Jiri Slaby <jirislaby@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix IS_CHECKPOINTED flag inconsistency issue caused by concurrent atomic commit and checkpoint writes [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Tue Jan 6 20:12:11 2026 +0800

    f2fs: fix IS_CHECKPOINTED flag inconsistency issue caused by concurrent atomic commit and checkpoint writes
    
    commit 7633a7387eb4d0259d6bea945e1d3469cd135bbc upstream.
    
    During SPO tests, when mounting F2FS, an -EINVAL error was returned from
    f2fs_recover_inode_page. The issue occurred under the following scenario
    
    Thread A                                     Thread B
    f2fs_ioc_commit_atomic_write
     - f2fs_do_sync_file // atomic = true
      - f2fs_fsync_node_pages
        : last_folio = inode folio
        : schedule before folio_lock(last_folio) f2fs_write_checkpoint
                                                  - block_operations// writeback last_folio
                                                  - schedule before f2fs_flush_nat_entries
        : set_fsync_mark(last_folio, 1)
        : set_dentry_mark(last_folio, 1)
        : folio_mark_dirty(last_folio)
        - __write_node_folio(last_folio)
          : f2fs_down_read(&sbi->node_write)//block
                                                  - f2fs_flush_nat_entries
                                                    : {struct nat_entry}->flag |= BIT(IS_CHECKPOINTED)
                                                  - unblock_operations
                                                    : f2fs_up_write(&sbi->node_write)
                                                 f2fs_write_checkpoint//return
          : f2fs_do_write_node_page()
    f2fs_ioc_commit_atomic_write//return
                                                 SPO
    
    Thread A calls f2fs_need_dentry_mark(sbi, ino), and the last_folio has
    already been written once. However, the {struct nat_entry}->flag did not
    have the IS_CHECKPOINTED set, causing set_dentry_mark(last_folio, 1) and
    write last_folio again after Thread B finishes f2fs_write_checkpoint.
    
    After SPO and reboot, it was detected that {struct node_info}->blk_addr
    was not NULL_ADDR because Thread B successfully write the checkpoint.
    
    This issue only occurs in atomic write scenarios. For regular file
    fsync operations, the folio must be dirty. If
    block_operations->f2fs_sync_node_pages successfully submit the folio
    write, this path will not be executed. Otherwise, the
    f2fs_write_checkpoint will need to wait for the folio write submission
    to complete, as sbi->nr_pages[F2FS_DIRTY_NODES] > 0. Therefore, the
    situation where f2fs_need_dentry_mark checks that the {struct
    nat_entry}->flag /wo the IS_CHECKPOINTED flag, but the folio write has
    already been submitted, will not occur.
    
    Therefore, for atomic file fsync, sbi->node_write should be acquired
    through __write_node_folio to ensure that the IS_CHECKPOINTED flag
    correctly indicates that the checkpoint write has been completed.
    
    Fixes: 608514deba38 ("f2fs: set fsync mark only for the last dnode")
    Cc: stable@kernel.org
    Signed-off-by: Sheng Yong <shengyong1@xiaomi.com>
    Signed-off-by: Jinbao Liu <liujinbao1@xiaomi.com>
    Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix out-of-bounds access in sysfs attribute read/write [+ + +]
Author: Yongpeng Yang <yangyongpeng@xiaomi.com>
Date:   Wed Jan 7 10:33:46 2026 +0800

    f2fs: fix out-of-bounds access in sysfs attribute read/write
    
    commit 98ea0039dbfdd00e5cc1b9a8afa40434476c0955 upstream.
    
    Some f2fs sysfs attributes suffer from out-of-bounds memory access and
    incorrect handling of integer values whose size is not 4 bytes.
    
    For example:
    vm:~# echo 65537 > /sys/fs/f2fs/vde/carve_out
    vm:~# cat /sys/fs/f2fs/vde/carve_out
    65537
    vm:~# echo 4294967297 > /sys/fs/f2fs/vde/atgc_age_threshold
    vm:~# cat /sys/fs/f2fs/vde/atgc_age_threshold
    1
    
    carve_out maps to {struct f2fs_sb_info}->carve_out, which is a 8-bit
    integer. However, the sysfs interface allows setting it to a value
    larger than 255, resulting in an out-of-range update.
    
    atgc_age_threshold maps to {struct atgc_management}->age_threshold,
    which is a 64-bit integer, but its sysfs interface cannot correctly set
    values larger than UINT_MAX.
    
    The root causes are:
    1. __sbi_store() treats all default values as unsigned int, which
    prevents updating integers larger than 4 bytes and causes out-of-bounds
    writes for integers smaller than 4 bytes.
    
    2. f2fs_sbi_show() also assumes all default values are unsigned int,
    leading to out-of-bounds reads and incorrect access to integers larger
    than 4 bytes.
    
    This patch introduces {struct f2fs_attr}->size to record the actual size
    of the integer associated with each sysfs attribute. With this
    information, sysfs read and write operations can correctly access and
    update values according to their real data size, avoiding memory
    corruption and truncation.
    
    Fixes: b59d0bae6ca3 ("f2fs: add sysfs support for controlling the gc_thread")
    Cc: stable@kernel.org
    Signed-off-by: Jinbao Liu <liujinbao1@xiaomi.com>
    Signed-off-by: Yongpeng Yang <yangyongpeng@xiaomi.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to add gc count stat in f2fs_gc_range [+ + +]
Author: Zhiguo Niu <zhiguo.niu@unisoc.com>
Date:   Fri Dec 26 10:56:04 2025 +0800

    f2fs: fix to add gc count stat in f2fs_gc_range
    
    commit 761dac9073cd67d4705a94cd1af674945a117f4c upstream.
    
    It missed the stat count in f2fs_gc_range.
    
    Cc: stable@kernel.org
    Fixes: 9bf1dcbdfdc8 ("f2fs: fix to account gc stats correctly")
    Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to avoid mapping wrong physical block for swapfile [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Jan 13 14:22:29 2026 +0800

    f2fs: fix to avoid mapping wrong physical block for swapfile
    
    commit 5c145c03188bc9ba1c29e0bc4d527a5978fc47f9 upstream.
    
    Xiaolong Guo reported a f2fs bug in bugzilla [1]
    
    [1] https://bugzilla.kernel.org/show_bug.cgi?id=220951
    
    Quoted:
    
    "When using stress-ng's swap stress test on F2FS filesystem with kernel 6.6+,
    the system experiences data corruption leading to either:
    1 dm-verity corruption errors and device reboot
    2 F2FS node corruption errors and boot hangs
    
    The issue occurs specifically when:
    1 Using F2FS filesystem (ext4 is unaffected)
    2 Swapfile size is less than F2FS section size (2MB)
    3 Swapfile has fragmented physical layout (multiple non-contiguous extents)
    4 Kernel version is 6.6+ (6.1 is unaffected)
    
    The root cause is in check_swap_activate() function in fs/f2fs/data.c. When the
    first extent of a small swapfile (< 2MB) is not aligned to section boundaries,
    the function incorrectly treats it as the last extent, failing to map
    subsequent extents. This results in incorrect swap_extent creation where only
    the first extent is mapped, causing subsequent swap writes to overwrite wrong
    physical locations (other files' data).
    
    Steps to Reproduce
    1 Setup a device with F2FS-formatted userdata partition
    2 Compile stress-ng from https://github.com/ColinIanKing/stress-ng
    3 Run swap stress test: (Android devices)
    adb shell "cd /data/stressng; ./stress-ng-64 --metrics-brief --timeout 60
    --swap 0"
    
    Log:
    1 Ftrace shows in kernel 6.6, only first extent is mapped during second
    f2fs_map_blocks call in check_swap_activate():
    stress-ng-swap-8990: f2fs_map_blocks: ino=11002, file offset=0, start
    blkaddr=0x43143, len=0x1
    (Only 4KB mapped, not the full swapfile)
    2 in kernel 6.1, both extents are correctly mapped:
    stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=0, start
    blkaddr=0x13cd4, len=0x1
    stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=1, start
    blkaddr=0x60c84b, len=0xff
    
    The problematic code is in check_swap_activate():
    if ((pblock - SM_I(sbi)->main_blkaddr) % blks_per_sec ||
        nr_pblocks % blks_per_sec ||
        !f2fs_valid_pinned_area(sbi, pblock)) {
        bool last_extent = false;
    
        not_aligned++;
    
        nr_pblocks = roundup(nr_pblocks, blks_per_sec);
        if (cur_lblock + nr_pblocks > sis->max)
            nr_pblocks -= blks_per_sec;
    
        /* this extent is last one */
        if (!nr_pblocks) {
            nr_pblocks = last_lblock - cur_lblock;
            last_extent = true;
        }
    
        ret = f2fs_migrate_blocks(inode, cur_lblock, nr_pblocks);
        if (ret) {
            if (ret == -ENOENT)
                ret = -EINVAL;
            goto out;
        }
    
        if (!last_extent)
            goto retry;
    }
    
    When the first extent is unaligned and roundup(nr_pblocks, blks_per_sec)
    exceeds sis->max, we subtract blks_per_sec resulting in nr_pblocks = 0. The
    code then incorrectly assumes this is the last extent, sets nr_pblocks =
    last_lblock - cur_lblock (entire swapfile), and performs migration. After
    migration, it doesn't retry mapping, so subsequent extents are never processed.
    "
    
    In order to fix this issue, we need to lookup block mapping info after
    we migrate all blocks in the tail of swapfile.
    
    Cc: stable@kernel.org
    Fixes: 9703d69d9d15 ("f2fs: support file pinning for zoned devices")
    Cc: Daeho Jeong <daehojeong@google.com>
    Reported-and-tested-by: Xiaolong Guo <guoxiaolong2008@gmail.com>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220951
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to avoid UAF in f2fs_write_end_io() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Wed Jan 7 19:22:18 2026 +0800

    f2fs: fix to avoid UAF in f2fs_write_end_io()
    
    commit ce2739e482bce8d2c014d76c4531c877f382aa54 upstream.
    
    As syzbot reported an use-after-free issue in f2fs_write_end_io().
    
    It is caused by below race condition:
    
    loop device                             umount
    - worker_thread
     - loop_process_work
      - do_req_filebacked
       - lo_rw_aio
        - lo_rw_aio_complete
         - blk_mq_end_request
          - blk_update_request
           - f2fs_write_end_io
            - dec_page_count
            - folio_end_writeback
                                            - kill_f2fs_super
                                             - kill_block_super
                                              - f2fs_put_super
                                             : free(sbi)
           : get_pages(, F2FS_WB_CP_DATA)
             accessed sbi which is freed
    
    In kill_f2fs_super(), we will drop all page caches of f2fs inodes before
    call free(sbi), it guarantee that all folios should end its writeback, so
    it should be safe to access sbi before last folio_end_writeback().
    
    Let's relocate ckpt thread wakeup flow before folio_end_writeback() to
    resolve this issue.
    
    Cc: stable@kernel.org
    Fixes: e234088758fc ("f2fs: avoid wait if IO end up when do_checkpoint for better performance")
    Reported-by: syzbot+b4444e3c972a7a124187@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=b4444e3c972a7a124187
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to check sysfs filename w/ gc_pin_file_thresh correctly [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Jan 6 14:31:17 2026 +0800

    f2fs: fix to check sysfs filename w/ gc_pin_file_thresh correctly
    
    commit 0eda086de85e140f53c6123a4c00662f4e614ee4 upstream.
    
    Sysfs entry name is gc_pin_file_thresh instead of gc_pin_file_threshold,
    fix it.
    
    Cc: stable@kernel.org
    Fixes: c521a6ab4ad7 ("f2fs: fix to limit gc_pin_file_threshold")
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to do sanity check on node footer in __write_node_folio() [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Feb 17 12:42:37 2026 -0500

    f2fs: fix to do sanity check on node footer in __write_node_folio()
    
    [ Upstream commit 0a736109c9d29de0c26567e42cb99b27861aa8ba ]
    
    Add node footer sanity check during node folio's writeback, if sanity
    check fails, let's shutdown filesystem to avoid looping to redirty
    and writeback in .writepages.
    
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: fix to do sanity check on node footer in {read,write}_end_io [+ + +]
Author: Chao Yu <chao@kernel.org>
Date:   Tue Feb 17 12:42:38 2026 -0500

    f2fs: fix to do sanity check on node footer in {read,write}_end_io
    
    [ Upstream commit 50ac3ecd8e05b6bcc350c71a4307d40c030ec7e4 ]
    
    -----------[ cut here ]------------
    kernel BUG at fs/f2fs/data.c:358!
    Call Trace:
     <IRQ>
     blk_update_request+0x5eb/0xe70 block/blk-mq.c:987
     blk_mq_end_request+0x3e/0x70 block/blk-mq.c:1149
     blk_complete_reqs block/blk-mq.c:1224 [inline]
     blk_done_softirq+0x107/0x160 block/blk-mq.c:1229
     handle_softirqs+0x283/0x870 kernel/softirq.c:579
     __do_softirq kernel/softirq.c:613 [inline]
     invoke_softirq kernel/softirq.c:453 [inline]
     __irq_exit_rcu+0xca/0x1f0 kernel/softirq.c:680
     irq_exit_rcu+0x9/0x30 kernel/softirq.c:696
     instr_sysvec_apic_timer_interrupt arch/x86/kernel/apic/apic.c:1050 [inline]
     sysvec_apic_timer_interrupt+0xa6/0xc0 arch/x86/kernel/apic/apic.c:1050
     </IRQ>
    
    In f2fs_write_end_io(), it detects there is inconsistency in between
    node page index (nid) and footer.nid of node page.
    
    If footer of node page is corrupted in fuzzed image, then we load corrupted
    node page w/ async method, e.g. f2fs_ra_node_pages() or f2fs_ra_node_page(),
    in where we won't do sanity check on node footer, once node page becomes
    dirty, we will encounter this bug after node page writeback.
    
    Cc: stable@kernel.org
    Reported-by: syzbot+803dd716c4310d16ff3a@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=803dd716c4310d16ff3a
    Signed-off-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    [ Context ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: optimize f2fs_overwrite_io() for f2fs_iomap_begin [+ + +]
Author: Yeongjin Gil <youngjin.gil@samsung.com>
Date:   Thu Jan 22 19:45:27 2026 +0900

    f2fs: optimize f2fs_overwrite_io() for f2fs_iomap_begin
    
    commit d860974a7e38d35e9e2c4dc8a9f4223b38b6ad99 upstream.
    
    When overwriting already allocated blocks, f2fs_iomap_begin() calls
    f2fs_overwrite_io() to check block mappings. However,
    f2fs_overwrite_io() iterates through all mapped blocks in the range,
    which can be inefficient for fragmented files with large I/O requests.
    
    This patch optimizes f2fs_overwrite_io() by adding a 'check_first'
    parameter and introducing __f2fs_overwrite_io() helper. When called from
    f2fs_iomap_begin(), we only check the first mapping to determine if the
    range is already allocated, which is sufficient for setting
    map.m_may_create.
    
    This optimization significantly reduces the number of f2fs_map_blocks()
    calls in f2fs_overwrite_io() when called from f2fs_iomap_begin(),
    especially for fragmented files with large I/O requests.
    
    Cc: stable@kernel.org
    Fixes: 351bc761338d ("f2fs: optimize f2fs DIO overwrites")
    Reviewed-by: Sungjong Seo <sj1557.seo@samsung.com>
    Reviewed-by: Sunmin Jeong <s_min.jeong@samsung.com>
    Signed-off-by: Yeongjin Gil <youngjin.gil@samsung.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

f2fs: support non-4KB block size without packed_ssa feature [+ + +]
Author: Daeho Jeong <daehojeong@google.com>
Date:   Sat Jan 10 15:54:05 2026 -0800

    f2fs: support non-4KB block size without packed_ssa feature
    
    commit e48e16f3e37fac76e2f0c14c58df2b0398a323b0 upstream.
    
    Currently, F2FS requires the packed_ssa feature to be enabled when
    utilizing non-4KB block sizes (e.g., 16KB). This restriction limits
    the flexibility of filesystem formatting options.
    
    This patch allows F2FS to support non-4KB block sizes even when the
    packed_ssa feature is disabled. It adjusts the SSA calculation logic to
    correctly handle summary entries in larger blocks without the packed
    layout.
    
    Cc: stable@kernel.org
    Fixes: 7ee8bc3942f2 ("f2fs: revert summary entry count from 2048 to 512 in 16kb block support")
    Signed-off-by: Daeho Jeong <daehojeong@google.com>
    Reviewed-by: Chao Yu <chao@kernel.org>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
fbdev: rivafb: fix divide error in nv3_arb() [+ + +]
Author: Guangshuo Li <lgs201920130244@gmail.com>
Date:   Sun Dec 7 15:25:32 2025 +0800

    fbdev: rivafb: fix divide error in nv3_arb()
    
    commit 0209e21e3c372fa2da04c39214bec0b64e4eb5f4 upstream.
    
    A userspace program can trigger the RIVA NV3 arbitration code by calling
    the FBIOPUT_VSCREENINFO ioctl on /dev/fb*. When doing so, the driver
    recomputes FIFO arbitration parameters in nv3_arb(), using state->mclk_khz
    (derived from the PRAMDAC MCLK PLL) as a divisor without validating it
    first.
    
    In a normal setup, state->mclk_khz is provided by the real hardware and is
    non-zero. However, an attacker can construct a malicious or misconfigured
    device (e.g. a crafted/emulated PCI device) that exposes a bogus PLL
    configuration, causing state->mclk_khz to become zero.  Once
    nv3_get_param() calls nv3_arb(), the division by state->mclk_khz in the gns
    calculation causes a divide error and crashes the kernel.
    
    Fix this by checking whether state->mclk_khz is zero and bailing out before
    doing the division.
    
    The following log reveals it:
    
    rivafb: setting virtual Y resolution to 2184
    divide error: 0000 [#1] PREEMPT SMP KASAN PTI
    CPU: 0 PID: 2187 Comm: syz-executor.0 Not tainted 5.18.0-rc1+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.org 04/01/2014
    RIP: 0010:nv3_arb drivers/video/fbdev/riva/riva_hw.c:439 [inline]
    RIP: 0010:nv3_get_param+0x3ab/0x13b0 drivers/video/fbdev/riva/riva_hw.c:546
    Call Trace:
      nv3CalcArbitration.constprop.0+0x255/0x460 drivers/video/fbdev/riva/riva_hw.c:603
      nv3UpdateArbitrationSettings drivers/video/fbdev/riva/riva_hw.c:637 [inline]
      CalcStateExt+0x447/0x1b90 drivers/video/fbdev/riva/riva_hw.c:1246
      riva_load_video_mode+0x8a9/0xea0 drivers/video/fbdev/riva/fbdev.c:779
      rivafb_set_par+0xc0/0x5f0 drivers/video/fbdev/riva/fbdev.c:1196
      fb_set_var+0x604/0xeb0 drivers/video/fbdev/core/fbmem.c:1033
      do_fb_ioctl+0x234/0x670 drivers/video/fbdev/core/fbmem.c:1109
      fb_ioctl+0xdd/0x130 drivers/video/fbdev/core/fbmem.c:1188
      __x64_sys_ioctl+0x122/0x190 fs/ioctl.c:856
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

fbdev: smscufx: properly copy ioctl memory to kernelspace [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Dec 28 14:17:03 2025 +0100

    fbdev: smscufx: properly copy ioctl memory to kernelspace
    
    commit 120adae7b42faa641179270c067864544a50ab69 upstream.
    
    The UFX_IOCTL_REPORT_DAMAGE ioctl does not properly copy data from
    userspace to kernelspace, and instead directly references the memory,
    which can cause problems if invalid data is passed from userspace.  Fix
    this all up by correctly copying the memory before accessing it within
    the kernel.
    
    Reported-by: Tianchu Chen <flynnnchen@tencent.com>
    Cc: stable <stable@kernel.org>
    Cc: Steve Glendinning <steve.glendinning@shawell.net>
    Cc: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
gpio: sprd: Change sprd_gpio lock to raw_spin_lock [+ + +]
Author: Xuewen Yan <xuewen.yan@unisoc.com>
Date:   Mon Jan 26 17:42:09 2026 +0800

    gpio: sprd: Change sprd_gpio lock to raw_spin_lock
    
    [ Upstream commit 96313fcc1f062ba239f4832c9eff685da6c51c99 ]
    
    There was a lockdep warning in sprd_gpio:
    
    [    6.258269][T329@C6] [ BUG: Invalid wait context ]
    [    6.258270][T329@C6] 6.18.0-android17-0-g30527ad7aaae-ab00009-4k #1 Tainted: G        W  OE
    [    6.258272][T329@C6] -----------------------------
    [    6.258273][T329@C6] modprobe/329 is trying to lock:
    [    6.258275][T329@C6] ffffff8081c91690 (&sprd_gpio->lock){....}-{3:3}, at: sprd_gpio_irq_unmask+0x4c/0xa4 [gpio_sprd]
    [    6.258282][T329@C6] other info that might help us debug this:
    [    6.258283][T329@C6] context-{5:5}
    [    6.258285][T329@C6] 3 locks held by modprobe/329:
    [    6.258286][T329@C6]  #0: ffffff808baca108 (&dev->mutex){....}-{4:4}, at: __driver_attach+0xc4/0x204
    [    6.258295][T329@C6]  #1: ffffff80965e7240 (request_class#4){+.+.}-{4:4}, at: __setup_irq+0x1cc/0x82c
    [    6.258304][T329@C6]  #2: ffffff80965e70c8 (lock_class#4){....}-{2:2}, at: __setup_irq+0x21c/0x82c
    [    6.258313][T329@C6] stack backtrace:
    [    6.258314][T329@C6] CPU: 6 UID: 0 PID: 329 Comm: modprobe Tainted: G        W  OE       6.18.0-android17-0-g30527ad7aaae-ab00009-4k #1 PREEMPT  3ad5b0f45741a16e5838da790706e16ceb6717df
    [    6.258316][T329@C6] Tainted: [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
    [    6.258317][T329@C6] Hardware name: Unisoc UMS9632-base Board (DT)
    [    6.258318][T329@C6] Call trace:
    [    6.258318][T329@C6]  show_stack+0x20/0x30 (C)
    [    6.258321][T329@C6]  __dump_stack+0x28/0x3c
    [    6.258324][T329@C6]  dump_stack_lvl+0xac/0xf0
    [    6.258326][T329@C6]  dump_stack+0x18/0x3c
    [    6.258329][T329@C6]  __lock_acquire+0x824/0x2c28
    [    6.258331][T329@C6]  lock_acquire+0x148/0x2cc
    [    6.258333][T329@C6]  _raw_spin_lock_irqsave+0x6c/0xb4
    [    6.258334][T329@C6]  sprd_gpio_irq_unmask+0x4c/0xa4 [gpio_sprd 814535e93c6d8e0853c45c02eab0fa88a9da6487]
    [    6.258337][T329@C6]  irq_startup+0x238/0x350
    [    6.258340][T329@C6]  __setup_irq+0x504/0x82c
    [    6.258342][T329@C6]  request_threaded_irq+0x118/0x184
    [    6.258344][T329@C6]  devm_request_threaded_irq+0x94/0x120
    [    6.258347][T329@C6]  sc8546_init_irq+0x114/0x170 [sc8546_charger 223586ccafc27439f7db4f95b0c8e6e882349a99]
    [    6.258352][T329@C6]  sc8546_charger_probe+0x53c/0x5a0 [sc8546_charger 223586ccafc27439f7db4f95b0c8e6e882349a99]
    [    6.258358][T329@C6]  i2c_device_probe+0x2c8/0x350
    [    6.258361][T329@C6]  really_probe+0x1a8/0x46c
    [    6.258363][T329@C6]  __driver_probe_device+0xa4/0x10c
    [    6.258366][T329@C6]  driver_probe_device+0x44/0x1b4
    [    6.258369][T329@C6]  __driver_attach+0xd0/0x204
    [    6.258371][T329@C6]  bus_for_each_dev+0x10c/0x168
    [    6.258373][T329@C6]  driver_attach+0x2c/0x3c
    [    6.258376][T329@C6]  bus_add_driver+0x154/0x29c
    [    6.258378][T329@C6]  driver_register+0x70/0x10c
    [    6.258381][T329@C6]  i2c_register_driver+0x48/0xc8
    [    6.258384][T329@C6]  init_module+0x28/0xfd8 [sc8546_charger 223586ccafc27439f7db4f95b0c8e6e882349a99]
    [    6.258389][T329@C6]  do_one_initcall+0x128/0x42c
    [    6.258392][T329@C6]  do_init_module+0x60/0x254
    [    6.258395][T329@C6]  load_module+0x1054/0x1220
    [    6.258397][T329@C6]  __arm64_sys_finit_module+0x240/0x35c
    [    6.258400][T329@C6]  invoke_syscall+0x60/0xec
    [    6.258402][T329@C6]  el0_svc_common+0xb0/0xe4
    [    6.258405][T329@C6]  do_el0_svc+0x24/0x30
    [    6.258407][T329@C6]  el0_svc+0x54/0x1c4
    [    6.258409][T329@C6]  el0t_64_sync_handler+0x68/0xdc
    [    6.258411][T329@C6]  el0t_64_sync+0x1c4/0x1c8
    
    This is because the spin_lock would change to rt_mutex in PREEMPT_RT,
    however the sprd_gpio->lock would use in hard-irq, this is unsafe.
    
    So change the spin_lock_t to raw_spin_lock_t to use the spinlock
    in hard-irq.
    
    Signed-off-by: Xuewen Yan <xuewen.yan@unisoc.com>
    Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
    Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Link: https://lore.kernel.org/r/20260126094209.9855-1-xuewen.yan@unisoc.com
    [Bartosz: tweaked the commit message]
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
gpiolib: acpi: Fix gpio count with string references [+ + +]
Author: Alban Bedel <alban.bedel@lht.dlh.de>
Date:   Thu Jan 29 15:59:44 2026 +0100

    gpiolib: acpi: Fix gpio count with string references
    
    [ Upstream commit c62e0658d458d8f100445445c3ddb106f3824a45 ]
    
    Since commit 9880702d123f2 ("ACPI: property: Support using strings in
    reference properties") it is possible to use strings instead of local
    references. This work fine with single GPIO but not with arrays as
    acpi_gpio_package_count() didn't handle this case. Update it to handle
    strings like local references to cover this case as well.
    
    Signed-off-by: Alban Bedel <alban.bedel@lht.dlh.de>
    Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Link: https://patch.msgid.link/20260129145944.3372777-1-alban.bedel@lht.dlh.de
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
io_uring/fdinfo: be a bit nicer when looping a lot of SQEs/CQEs [+ + +]
Author: Jens Axboe <axboe@kernel.dk>
Date:   Tue Feb 3 09:56:55 2026 -0700

    io_uring/fdinfo: be a bit nicer when looping a lot of SQEs/CQEs
    
    [ Upstream commit 38cfdd9dd279473a73814df9fd7e6e716951d361 ]
    
    Add cond_resched() in those dump loops, just in case a lot of entries
    are being dumped. And detect invalid CQ ring head/tail entries, to avoid
    iterating more than what is necessary. Generally not an issue, but can be
    if things like KASAN or other debugging metrics are enabled.
    
    Reported-by: 是参差 <shicenci@gmail.com>
    Link: https://lore.kernel.org/all/PS1PPF7E1D7501FE5631002D242DD89403FAB9BA@PS1PPF7E1D7501F.apcprd02.prod.outlook.com/
    Reviewed-by: Keith Busch <kbusch@kernel.org>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
iommu/arm-smmu-qcom: do not register driver in probe() [+ + +]
Author: Danilo Krummrich <dakr@kernel.org>
Date:   Wed Jan 21 15:12:01 2026 +0100

    iommu/arm-smmu-qcom: do not register driver in probe()
    
    commit ed1ac3c977dd6b119405fa36dd41f7151bd5b4de upstream.
    
    Commit 0b4eeee2876f ("iommu/arm-smmu-qcom: Register the TBU driver in
    qcom_smmu_impl_init") intended to also probe the TBU driver when
    CONFIG_ARM_SMMU_QCOM_DEBUG is disabled, but also moved the corresponding
    platform_driver_register() call into qcom_smmu_impl_init() which is
    called from arm_smmu_device_probe().
    
    However, it neither makes sense to register drivers from probe()
    callbacks of other drivers, nor does the driver core allow registering
    drivers with a device lock already being held.
    
    The latter was revealed by commit dc23806a7c47 ("driver core: enforce
    device_lock for driver_match_device()") leading to a deadlock condition
    described in [1].
    
    Additionally, it was noted by Robin that the current approach is
    potentially racy with async probe [2].
    
    Hence, fix this by registering the qcom_smmu_tbu_driver from
    module_init(). Unfortunately, due to the vendoring of the driver, this
    requires an indirection through arm-smmu-impl.c.
    
    Reported-by: Mark Brown <broonie@kernel.org>
    Closes: https://lore.kernel.org/lkml/7ae38e31-ef31-43ad-9106-7c76ea0e8596@sirena.org.uk/
    Link: https://lore.kernel.org/lkml/DFU7CEPUSG9A.1KKGVW4HIPMSH@kernel.org/ [1]
    Link: https://lore.kernel.org/lkml/0c0d3707-9ea5-44f9-88a1-a65c62e3df8d@arm.com/ [2]
    Fixes: dc23806a7c47 ("driver core: enforce device_lock for driver_match_device()")
    Fixes: 0b4eeee2876f ("iommu/arm-smmu-qcom: Register the TBU driver in qcom_smmu_impl_init")
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Tested-by: Bjorn Andersson <andersson@kernel.org>
    Reviewed-by: Bjorn Andersson <andersson@kernel.org>
    Acked-by: Konrad Dybcio <konradybcio@kernel.org>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com> #LX2160ARDB
    Tested-by: Wang Jiayue <akaieurus@gmail.com>
    Reviewed-by: Wang Jiayue <akaieurus@gmail.com>
    Tested-by: Mark Brown <broonie@kernel.org>
    Acked-by: Joerg Roedel <joerg.roedel@amd.com>
    Link: https://patch.msgid.link/20260121141215.29658-1-dakr@kernel.org
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Linux: Linux 6.18.13 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu Feb 19 16:31:37 2026 +0100

    Linux 6.18.13
    
    Link: https://lore.kernel.org/r/20260217200006.470920131@linuxfoundation.org
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Luna Jernberg <droidbittin@gmail.com>
    Tested-by: Jeffrin Jose T <jeffrin@rajagiritech.edu.in>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Justin M. Forbes <jforbes@fedoraproject.org>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
LoongArch: Rework KASAN initialization for PTW-enabled systems [+ + +]
Author: Tiezhu Yang <yangtiezhu@loongson.cn>
Date:   Tue Feb 10 19:31:17 2026 +0800

    LoongArch: Rework KASAN initialization for PTW-enabled systems
    
    commit 5ec5ac4ca27e4daa234540ac32f9fc5219377d53 upstream.
    
    kasan_init_generic() indicates that kasan is fully initialized, so it
    should be put at end of kasan_init().
    
    Otherwise bringing up the primary CPU failed when CONFIG_KASAN is set
    on PTW-enabled systems, here are the call chains:
    
        kernel_entry()
          start_kernel()
            setup_arch()
              kasan_init()
                kasan_init_generic()
    
    The reason is PTW-enabled systems have speculative accesses which means
    memory accesses to the shadow memory after kasan_init() may be executed
    by hardware before. However, accessing shadow memory is safe only after
    kasan fully initialized because kasan_init() uses a temporary PGD table
    until we have populated all levels of shadow page tables and writen the
    PGD register. Moving kasan_init_generic() later can defer the occasion
    of kasan_enabled(), so as to avoid speculative accesses on shadow pages.
    
    After moving kasan_init_generic() to the end, kasan_init() can no longer
    call kasan_mem_to_shadow() for shadow address conversion because it will
    always return kasan_early_shadow_page. On the other hand, we should keep
    the current logic of kasan_mem_to_shadow() for both the early and final
    stage because there may be instrumentation before kasan_init().
    
    To solve this, we factor out a new mem_to_shadow() function from current
    kasan_mem_to_shadow() for the shadow address conversion in kasan_init().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
    Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mm/hugetlb: fix excessive IPI broadcasts when unsharing PMD tables using mmu_gather [+ + +]
Author: David Hildenbrand (Red Hat) <david@kernel.org>
Date:   Tue Dec 23 22:40:37 2025 +0100

    mm/hugetlb: fix excessive IPI broadcasts when unsharing PMD tables using mmu_gather
    
    commit 8ce720d5bd91e9dc16db3604aa4b1bf76770a9a1 upstream.
    
    As reported, ever since commit 1013af4f585f ("mm/hugetlb: fix
    huge_pmd_unshare() vs GUP-fast race") we can end up in some situations
    where we perform so many IPI broadcasts when unsharing hugetlb PMD page
    tables that it severely regresses some workloads.
    
    In particular, when we fork()+exit(), or when we munmap() a large
    area backed by many shared PMD tables, we perform one IPI broadcast per
    unshared PMD table.
    
    There are two optimizations to be had:
    
    (1) When we process (unshare) multiple such PMD tables, such as during
        exit(), it is sufficient to send a single IPI broadcast (as long as
        we respect locking rules) instead of one per PMD table.
    
        Locking prevents that any of these PMD tables could get reused before
        we drop the lock.
    
    (2) When we are not the last sharer (> 2 users including us), there is
        no need to send the IPI broadcast. The shared PMD tables cannot
        become exclusive (fully unshared) before an IPI will be broadcasted
        by the last sharer.
    
        Concurrent GUP-fast could walk into a PMD table just before we
        unshared it. It could then succeed in grabbing a page from the
        shared page table even after munmap() etc succeeded (and supressed
        an IPI). But there is not difference compared to GUP-fast just
        sleeping for a while after grabbing the page and re-enabling IRQs.
    
        Most importantly, GUP-fast will never walk into page tables that are
        no-longer shared, because the last sharer will issue an IPI
        broadcast.
    
        (if ever required, checking whether the PUD changed in GUP-fast
         after grabbing the page like we do in the PTE case could handle
         this)
    
    So let's rework PMD sharing TLB flushing + IPI sync to use the mmu_gather
    infrastructure so we can implement these optimizations and demystify the
    code at least a bit. Extend the mmu_gather infrastructure to be able to
    deal with our special hugetlb PMD table sharing implementation.
    
    To make initialization of the mmu_gather easier when working on a single
    VMA (in particular, when dealing with hugetlb), provide
    tlb_gather_mmu_vma().
    
    We'll consolidate the handling for (full) unsharing of PMD tables in
    tlb_unshare_pmd_ptdesc() and tlb_flush_unshared_tables(), and track
    in "struct mmu_gather" whether we had (full) unsharing of PMD tables.
    
    Because locking is very special (concurrent unsharing+reuse must be
    prevented), we disallow deferring flushing to tlb_finish_mmu() and instead
    require an explicit earlier call to tlb_flush_unshared_tables().
    
    From hugetlb code, we call huge_pmd_unshare_flush() where we make sure
    that the expected lock protecting us from concurrent unsharing+reuse is
    still held.
    
    Check with a VM_WARN_ON_ONCE() in tlb_finish_mmu() that
    tlb_flush_unshared_tables() was properly called earlier.
    
    Document it all properly.
    
    Notes about tlb_remove_table_sync_one() interaction with unsharing:
    
    There are two fairly tricky things:
    
    (1) tlb_remove_table_sync_one() is a NOP on architectures without
        CONFIG_MMU_GATHER_RCU_TABLE_FREE.
    
        Here, the assumption is that the previous TLB flush would send an
        IPI to all relevant CPUs. Careful: some architectures like x86 only
        send IPIs to all relevant CPUs when tlb->freed_tables is set.
    
        The relevant architectures should be selecting
        MMU_GATHER_RCU_TABLE_FREE, but x86 might not do that in stable
        kernels and it might have been problematic before this patch.
    
        Also, the arch flushing behavior (independent of IPIs) is different
        when tlb->freed_tables is set. Do we have to enlighten them to also
        take care of tlb->unshared_tables? So far we didn't care, so
        hopefully we are fine. Of course, we could be setting
        tlb->freed_tables as well, but that might then unnecessarily flush
        too much, because the semantics of tlb->freed_tables are a bit
        fuzzy.
    
        This patch changes nothing in this regard.
    
    (2) tlb_remove_table_sync_one() is not a NOP on architectures with
        CONFIG_MMU_GATHER_RCU_TABLE_FREE that actually don't need a sync.
    
        Take x86 as an example: in the common case (!pv, !X86_FEATURE_INVLPGB)
        we still issue IPIs during TLB flushes and don't actually need the
        second tlb_remove_table_sync_one().
    
        This optimized can be implemented on top of this, by checking e.g., in
        tlb_remove_table_sync_one() whether we really need IPIs. But as
        described in (1), it really must honor tlb->freed_tables then to
        send IPIs to all relevant CPUs.
    
    Notes on TLB flushing changes:
    
    (1) Flushing for non-shared PMD tables
    
        We're converting from flush_hugetlb_tlb_range() to
        tlb_remove_huge_tlb_entry(). Given that we properly initialize the
        MMU gather in tlb_gather_mmu_vma() to be hugetlb aware, similar to
        __unmap_hugepage_range(), that should be fine.
    
    (2) Flushing for shared PMD tables
    
        We're converting from various things (flush_hugetlb_tlb_range(),
        tlb_flush_pmd_range(), flush_tlb_range()) to tlb_flush_pmd_range().
    
        tlb_flush_pmd_range() achieves the same that
        tlb_remove_huge_tlb_entry() would achieve in these scenarios.
        Note that tlb_remove_huge_tlb_entry() also calls
        __tlb_remove_tlb_entry(), however that is only implemented on
        powerpc, which does not support PMD table sharing.
    
        Similar to (1), tlb_gather_mmu_vma() should make sure that TLB
        flushing keeps on working as expected.
    
    Further, note that the ptdesc_pmd_pts_dec() in huge_pmd_share() is not a
    concern, as we are holding the i_mmap_lock the whole time, preventing
    concurrent unsharing. That ptdesc_pmd_pts_dec() usage will be removed
    separately as a cleanup later.
    
    There are plenty more cleanups to be had, but they have to wait until
    this is fixed.
    
    [david@kernel.org: fix kerneldoc]
      Link: https://lkml.kernel.org/r/f223dd74-331c-412d-93fc-69e360a5006c@kernel.org
    Link: https://lkml.kernel.org/r/20251223214037.580860-5-david@kernel.org
    Fixes: 1013af4f585f ("mm/hugetlb: fix huge_pmd_unshare() vs GUP-fast race")
    Signed-off-by: David Hildenbrand (Red Hat) <david@kernel.org>
    Reported-by: "Uschakow, Stanislav" <suschako@amazon.de>
    Closes: https://lore.kernel.org/all/4d3878531c76479d9f8ca9789dc6485d@amazon.de/
    Tested-by: Laurence Oberman <loberman@redhat.com>
    Acked-by: Harry Yoo <harry.yoo@oracle.com>
    Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Lance Yang <lance.yang@linux.dev>
    Cc: Liu Shixin <liushixin2@huawei.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Rik van Riel <riel@surriel.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: David Hildenbrand (Arm) <david@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
platform/x86/amd/pmc: Add quirk for MECHREVO Wujie 15X Pro [+ + +]
Author: gongqi <550230171hxy@gmail.com>
Date:   Thu Jan 22 23:55:00 2026 +0800

    platform/x86/amd/pmc: Add quirk for MECHREVO Wujie 15X Pro
    
    [ Upstream commit 2b4e00d8e70ca8736fda82447be6a4e323c6d1f5 ]
    
    The MECHREVO Wujie 15X Pro suffers from spurious IRQ issues related to
    the AMD PMC. Add it to the quirk list to use the spurious_8042 fix.
    
    Signed-off-by: gongqi <550230171hxy@gmail.com>
    Link: https://patch.msgid.link/20260122155501.376199-4-550230171hxy@gmail.com
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
platform/x86: classmate-laptop: Add missing NULL pointer checks [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Mon Jan 26 21:02:40 2026 +0100

    platform/x86: classmate-laptop: Add missing NULL pointer checks
    
    [ Upstream commit fe747d7112283f47169e9c16e751179a9b38611e ]
    
    In a few places in the Classmate laptop driver, code using the accel
    object may run before that object's address is stored in the driver
    data of the input device using it.
    
    For example, cmpc_accel_sensitivity_store_v4() is the "show" method
    of cmpc_accel_sensitivity_attr_v4 which is added in cmpc_accel_add_v4(),
    before calling dev_set_drvdata() for inputdev->dev.  If the sysfs
    attribute is accessed prematurely, the dev_get_drvdata(&inputdev->dev)
    call in in cmpc_accel_sensitivity_store_v4() returns NULL which
    leads to a NULL pointer dereference going forward.
    
    Moreover, sysfs attributes using the input device are added before
    initializing that device by cmpc_add_acpi_notify_device() and if one
    of them is accessed before running that function, a NULL pointer
    dereference will occur.
    
    For example, cmpc_accel_sensitivity_attr_v4 is added before calling
    cmpc_add_acpi_notify_device() and if it is read prematurely, the
    dev_get_drvdata(&acpi->dev) call in cmpc_accel_sensitivity_show_v4()
    returns NULL which leads to a NULL pointer dereference going forward.
    
    Fix this by adding NULL pointer checks in all of the relevant places.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://patch.msgid.link/12825381.O9o76ZdvQC@rafael.j.wysocki
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

platform/x86: panasonic-laptop: Fix sysfs group leak in error path [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Tue Jan 20 16:43:44 2026 +0100

    platform/x86: panasonic-laptop: Fix sysfs group leak in error path
    
    [ Upstream commit 43b0b7eff4b3fb684f257d5a24376782e9663465 ]
    
    The acpi_pcc_hotkey_add() error path leaks sysfs group pcc_attr_group
    if platform_device_register_simple() fails for the "panasonic" platform
    device.
    
    Address this by making it call sysfs_remove_group() in that case for
    the group in question.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://patch.msgid.link/3398370.44csPzL39Z@rafael.j.wysocki
    Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
romfs: check sb_set_blocksize() return value [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Tue Jan 13 14:10:37 2026 +0530

    romfs: check sb_set_blocksize() return value
    
    [ Upstream commit ab7ad7abb3660c58ffffdf07ff3bb976e7e0afa0 ]
    
    romfs_fill_super() ignores the return value of sb_set_blocksize(), which
    can fail if the requested block size is incompatible with the block
    device's configuration.
    
    This can be triggered by setting a loop device's block size larger than
    PAGE_SIZE using ioctl(LOOP_SET_BLOCK_SIZE, 32768), then mounting a romfs
    filesystem on that device.
    
    When sb_set_blocksize(sb, ROMBSIZE) is called with ROMBSIZE=4096 but the
    device has logical_block_size=32768, bdev_validate_blocksize() fails
    because the requested size is smaller than the device's logical block
    size. sb_set_blocksize() returns 0 (failure), but romfs ignores this and
    continues mounting.
    
    The superblock's block size remains at the device's logical block size
    (32768). Later, when sb_bread() attempts I/O with this oversized block
    size, it triggers a kernel BUG in folio_set_bh():
    
        kernel BUG at fs/buffer.c:1582!
        BUG_ON(size > PAGE_SIZE);
    
    Fix by checking the return value of sb_set_blocksize() and failing the
    mount with -EINVAL if it returns 0.
    
    Reported-by: syzbot+9c4e33e12283d9437c25@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=9c4e33e12283d9437c25
    Signed-off-by: Deepanshu Kartikey <kartikey406@gmail.com>
    Link: https://patch.msgid.link/20260113084037.1167887-1-kartikey406@gmail.com
    Signed-off-by: Christian Brauner <brauner@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
rust: device: fix broken intra-doc links [+ + +]
Author: FUJITA Tomonori <fujita.tomonori@gmail.com>
Date:   Wed Dec 31 13:57:28 2025 +0900

    rust: device: fix broken intra-doc links
    
    commit a9a42f0754b6c69525612d678b73da790e28b9fd upstream.
    
    The `pci` module is conditional on CONFIG_PCI. When it's disabled, the
    intra-doc link to `pci::Device` causes rustdoc warnings:
    
    warning: unresolved link to `kernel::pci::Device`
       --> rust/kernel/device.rs:163:22
        |
    163 | /// [`pci::Device`]: kernel::pci::Device
        |                      ^^^^^^^^^^^^^^^^^^^ no item named `pci` in module `kernel`
        |
        = note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
    
    Fix this by making the documentation conditional on CONFIG_PCI.
    
    Fixes: d6e26c1ae4a6 ("device: rust: expand documentation for Device")
    Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
    Reviewed-by: Dirk Behme <dirk.behme@de.bosch.com>
    Link: https://patch.msgid.link/20251231045728.1912024-2-fujita.tomonori@gmail.com
    [ Keep the "such as" part indicating a list of examples; fix typos in
      commit message. - Danilo ]
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: dma: fix broken intra-doc links [+ + +]
Author: FUJITA Tomonori <fujita.tomonori@gmail.com>
Date:   Wed Dec 31 13:57:27 2025 +0900

    rust: dma: fix broken intra-doc links
    
    commit 32cb3840386fd3684fbe8294cfc0a6684417139e upstream.
    
    The `pci` module is conditional on CONFIG_PCI. When it's disabled, the
    intra-doc link to `pci::Device` causes rustdoc warnings:
    
    warning: unresolved link to `::kernel::pci::Device`
      --> rust/kernel/dma.rs:30:70
       |
    30 | /// where the underlying bus is DMA capable, such as [`pci::Device`](::kernel::pci::Device) or
       |                                                                      ^^^^^^^^^^^^^^^^^^^^^ no item named `pci` in module `kernel`
    
    Fix this by making the documentation conditional on CONFIG_PCI.
    
    Fixes: d06d5f66f549 ("rust: dma: implement `dma::Device` trait")
    Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
    Reviewed-by: Dirk Behme <dirk.behme@de.bosch.com>
    Link: https://patch.msgid.link/20251231045728.1912024-1-fujita.tomonori@gmail.com
    [ Keep the "such as" part indicating a list of examples; fix typos in
      commit message. - Danilo ]
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rust: driver: fix broken intra-doc links to example driver types [+ + +]
Author: Alice Ryhl <aliceryhl@google.com>
Date:   Sat Dec 27 15:47:21 2025 +0000

    rust: driver: fix broken intra-doc links to example driver types
    
    commit 4c9f6a782f6078dc94450fcb22e65d520bfa0775 upstream.
    
    The `auxiliary` and `pci` modules are conditional on
    `CONFIG_AUXILIARY_BUS` and `CONFIG_PCI` respectively. When these are
    disabled, the intra-doc links to `auxiliary::Driver` and `pci::Driver`
    break, causing rustdoc warnings (or errors with `-D warnings`).
    
    error: unresolved link to `kernel::auxiliary::Driver`
      --> rust/kernel/driver.rs:82:28
       |
    82 | //! [`auxiliary::Driver`]: kernel::auxiliary::Driver
       |                            ^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `auxiliary` in module `kernel`
    
    Fix this by making the documentation for these examples conditional on
    the corresponding configuration options.
    
    Fixes: 970a7c68788e ("driver: rust: expand documentation for driver infrastructure")
    Signed-off-by: Alice Ryhl <aliceryhl@google.com>
    Reported-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
    Closes: https://lore.kernel.org/rust-for-linux/20251209.151817.744108529426448097.fujita.tomonori@gmail.com/
    Link: https://patch.msgid.link/20251227-driver-types-v1-1-1916154fbe5e@google.com
    Signed-off-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
scsi: qla2xxx: Fix bsg_done() causing double free [+ + +]
Author: Anil Gurumurthy <agurumurthy@marvell.com>
Date:   Wed Dec 10 15:46:03 2025 +0530

    scsi: qla2xxx: Fix bsg_done() causing double free
    
    commit c2c68225b1456f4d0d393b5a8778d51bb0d5b1d0 upstream.
    
    Kernel panic observed on system,
    
    [5353358.825191] BUG: unable to handle page fault for address: ff5f5e897b024000
    [5353358.825194] #PF: supervisor write access in kernel mode
    [5353358.825195] #PF: error_code(0x0002) - not-present page
    [5353358.825196] PGD 100006067 P4D 0
    [5353358.825198] Oops: 0002 [#1] PREEMPT SMP NOPTI
    [5353358.825200] CPU: 5 PID: 2132085 Comm: qlafwupdate.sub Kdump: loaded Tainted: G        W    L    -------  ---  5.14.0-503.34.1.el9_5.x86_64 #1
    [5353358.825203] Hardware name: HPE ProLiant DL360 Gen11/ProLiant DL360 Gen11, BIOS 2.44 01/17/2025
    [5353358.825204] RIP: 0010:memcpy_erms+0x6/0x10
    [5353358.825211] RSP: 0018:ff591da8f4f6b710 EFLAGS: 00010246
    [5353358.825212] RAX: ff5f5e897b024000 RBX: 0000000000007090 RCX: 0000000000001000
    [5353358.825213] RDX: 0000000000001000 RSI: ff591da8f4fed090 RDI: ff5f5e897b024000
    [5353358.825214] RBP: 0000000000010000 R08: ff5f5e897b024000 R09: 0000000000000000
    [5353358.825215] R10: ff46cf8c40517000 R11: 0000000000000001 R12: 0000000000008090
    [5353358.825216] R13: ff591da8f4f6b720 R14: 0000000000001000 R15: 0000000000000000
    [5353358.825218] FS:  00007f1e88d47740(0000) GS:ff46cf935f940000(0000) knlGS:0000000000000000
    [5353358.825219] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [5353358.825220] CR2: ff5f5e897b024000 CR3: 0000000231532004 CR4: 0000000000771ef0
    [5353358.825221] PKRU: 55555554
    [5353358.825222] Call Trace:
    [5353358.825223]  <TASK>
    [5353358.825224]  ? show_trace_log_lvl+0x1c4/0x2df
    [5353358.825229]  ? show_trace_log_lvl+0x1c4/0x2df
    [5353358.825232]  ? sg_copy_buffer+0xc8/0x110
    [5353358.825236]  ? __die_body.cold+0x8/0xd
    [5353358.825238]  ? page_fault_oops+0x134/0x170
    [5353358.825242]  ? kernelmode_fixup_or_oops+0x84/0x110
    [5353358.825244]  ? exc_page_fault+0xa8/0x150
    [5353358.825247]  ? asm_exc_page_fault+0x22/0x30
    [5353358.825252]  ? memcpy_erms+0x6/0x10
    [5353358.825253]  sg_copy_buffer+0xc8/0x110
    [5353358.825259]  qla2x00_process_vendor_specific+0x652/0x1320 [qla2xxx]
    [5353358.825317]  qla24xx_bsg_request+0x1b2/0x2d0 [qla2xxx]
    
    Most routines in qla_bsg.c call bsg_done() only for success cases.
    However a few invoke it for failure case as well leading to a double
    free. Validate before calling bsg_done().
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Anil Gurumurthy <agurumurthy@marvell.com>
    Signed-off-by: Nilesh Javali <njavali@marvell.com>
    Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
    Link: https://patch.msgid.link/20251210101604.431868-12-njavali@marvell.com
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
tracing/dma: Cap dma_map_sg tracepoint arrays to prevent buffer overflow [+ + +]
Author: Deepanshu Kartikey <kartikey406@gmail.com>
Date:   Fri Jan 30 21:22:15 2026 +0530

    tracing/dma: Cap dma_map_sg tracepoint arrays to prevent buffer overflow
    
    [ Upstream commit daafcc0ef0b358d9d622b6e3b7c43767aa3814ee ]
    
    The dma_map_sg tracepoint can trigger a perf buffer overflow when
    tracing large scatter-gather lists. With devices like virtio-gpu
    creating large DRM buffers, nents can exceed 1000 entries, resulting
    in:
    
      phys_addrs: 1000 * 8 bytes = 8,000 bytes
      dma_addrs:  1000 * 8 bytes = 8,000 bytes
      lengths:    1000 * 4 bytes = 4,000 bytes
      Total: ~20,000 bytes
    
    This exceeds PERF_MAX_TRACE_SIZE (8192 bytes), causing:
    
      WARNING: CPU: 0 PID: 5497 at kernel/trace/trace_event_perf.c:405
      perf buffer not large enough, wanted 24620, have 8192
    
    Cap all three dynamic arrays at 128 entries using min() in the array
    size calculation. This ensures arrays are only as large as needed
    (up to the cap), avoiding unnecessary memory allocation for small
    operations while preventing overflow for large ones.
    
    The tracepoint now records the full nents/ents counts and a truncated
    flag so users can see when data has been capped.
    
    Changes in v2:
    - Use min(nents, DMA_TRACE_MAX_ENTRIES) for dynamic array sizing
      instead of fixed DMA_TRACE_MAX_ENTRIES allocation (feedback from
      Steven Rostedt)
    - This allocates only what's needed up to the cap, avoiding waste
      for small operations
    
    Reported-by: syzbot+28cea38c382fd15e751a@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=28cea38c382fd15e751a
    Tested-by: syzbot+28cea38c382fd15e751a@syzkaller.appspotmail.com
    Signed-off-by: Deepanshu Kartikey <Kartikey406@gmail.com>
    Reviwed-by: Sean Anderson <sean.anderson@linux.dev>
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Link: https://lore.kernel.org/r/20260130155215.69737-1-kartikey406@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
USB: serial: option: add Telit FN920C04 RNDIS compositions [+ + +]
Author: Fabio Porcedda <fabio.porcedda@gmail.com>
Date:   Fri Jan 23 16:19:16 2026 +0100

    USB: serial: option: add Telit FN920C04 RNDIS compositions
    
    commit 509f403f3ccec14188036212118651bf23599396 upstream.
    
    Add the following compositions:
    
    0x10a1: RNDIS + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  9 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a1 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=d128dba9
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=60 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10a6: RNDIS + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 10 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10a6 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=d128dba9
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=86(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10ab: RNDIS + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10ab Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FN920
    S:  SerialNumber=d128dba9
    C:  #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
    E:  Ad=82(I) Atr=03(Int.) MxPS=   8 Ivl=32ms
    I:  If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
    E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 4 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=80 Driver=(none)
    E:  Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Fabio Porcedda <fabio.porcedda@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>