Changelog in Linux kernel 6.18.13

 
ALSA: hda/realtek - fixed speaker no sound [+ + +]
Author: Kailang Yang <[email protected]>
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 <[email protected]>
    Link: https://lore.kernel.org/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Add quirk for Inspur S14-G1 [+ + +]
Author: Zhang Heng <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ALSA: hda/realtek: Enable headset mic for Acer Nitro 5 [+ + +]
Author: Breno Baptista <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
arm64: dts: mediatek: mt8183: Add missing endpoint IDs to display graph [+ + +]
Author: Otto Pflüger <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/linux-mediatek/CAAq5pW9o3itC0G16LnJO7KMAQ_XoqXUpB=cuJ_7e3-H11zKd5Q@mail.gmail.com/
    Tested-by: Chen-Yu Tsai <[email protected]>
    Signed-off-by: Otto Pflüger <[email protected]>
    [Angelo: Fixed dtbs_check issues]
    Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
    Cc: Thorsten Leemhuis <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ASoC: amd: yc: Add ASUS ExpertBook PM1503CDA to quirks list [+ + +]
Author: Anatolii Shirykalov <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: amd: yc: Add quirk for HP 200 G2a 16 [+ + +]
Author: Dirk Su <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: cs35l45: Corrects ASP_TX5 DAPM widget channel [+ + +]
Author: Ricardo Rivera-Matos <[email protected]>
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 <[email protected]>
    Signed-off-by: Ricardo Rivera-Matos <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: cs42l43: Correct handling of 3-pole jack load detection [+ + +]
Author: Charles Keepax <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: fsl_xcvr: fix missing lock in fsl_xcvr_mode_put() [+ + +]
Author: Ziyi Guo <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: Intel: sof_es8336: Add DMI quirk for Huawei BOD-WXX9 [+ + +]
Author: Tagir Garaev <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

ASoC: sof_sdw: Add a quirk for Lenovo laptop using sidecar amps with cs42l43 [+ + +]
Author: Maciej Strozek <[email protected]>
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 <[email protected]>
    Reviewed-by: Cezary Rojewski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
cpuset: Fix missing adaptation for cpuset_is_populated [+ + +]
Author: Chen Ridong <[email protected]>
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: [email protected]      # 6.1+
    Fixes: b1bcaed1e39a ("cpuset: Treat cpusets in attaching as populated")
    Cc: Waiman Long <[email protected]>
    Cc: Tejun Heo <[email protected]>
    Signed-off-by: Chen Ridong <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/display: extend delta clamping logic to CM3 LUT helper [+ + +]
Author: Melissa Wen <[email protected]>
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 <[email protected]>
    Reviewed-by: Harry Wentland <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 0274a54897f356f9c78767c4a2a5863f7dde90c6)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/display: remove assert around dpp_base replacement [+ + +]
Author: Melissa Wen <[email protected]>
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 <[email protected]>
    Reviewed-by: Alex Hung <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 1714dcc4c2c53e41190896eba263ed6328bcf415)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/tegra: hdmi: sor: Fix error: variable ‘j’ set but not used [+ + +]
Author: Brahmajit Das <[email protected]>
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 <[email protected]>
    Signed-off-by: Thierry Reding <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
f2fs: fix incomplete block usage in compact SSA summaries [+ + +]
Author: Daeho Jeong <[email protected]>
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 <[email protected]>
    Fixes: e48e16f3e37f ("f2fs: support non-4KB block size without packed_ssa feature")
    Signed-off-by: Daeho Jeong <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Cc: Jiri Slaby <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix IS_CHECKPOINTED flag inconsistency issue caused by concurrent atomic commit and checkpoint writes [+ + +]
Author: Yongpeng Yang <[email protected]>
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: [email protected]
    Signed-off-by: Sheng Yong <[email protected]>
    Signed-off-by: Jinbao Liu <[email protected]>
    Signed-off-by: Yongpeng Yang <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix out-of-bounds access in sysfs attribute read/write [+ + +]
Author: Yongpeng Yang <[email protected]>
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: [email protected]
    Signed-off-by: Jinbao Liu <[email protected]>
    Signed-off-by: Yongpeng Yang <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to add gc count stat in f2fs_gc_range [+ + +]
Author: Zhiguo Niu <[email protected]>
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: [email protected]
    Fixes: 9bf1dcbdfdc8 ("f2fs: fix to account gc stats correctly")
    Signed-off-by: Zhiguo Niu <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to avoid mapping wrong physical block for swapfile [+ + +]
Author: Chao Yu <[email protected]>
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: [email protected]
    Fixes: 9703d69d9d15 ("f2fs: support file pinning for zoned devices")
    Cc: Daeho Jeong <[email protected]>
    Reported-and-tested-by: Xiaolong Guo <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220951
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to avoid UAF in f2fs_write_end_io() [+ + +]
Author: Chao Yu <[email protected]>
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: [email protected]
    Fixes: e234088758fc ("f2fs: avoid wait if IO end up when do_checkpoint for better performance")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=b4444e3c972a7a124187
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to check sysfs filename w/ gc_pin_file_thresh correctly [+ + +]
Author: Chao Yu <[email protected]>
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: [email protected]
    Fixes: c521a6ab4ad7 ("f2fs: fix to limit gc_pin_file_threshold")
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to do sanity check on node footer in __write_node_folio() [+ + +]
Author: Chao Yu <[email protected]>
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 <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: fix to do sanity check on node footer in {read,write}_end_io [+ + +]
Author: Chao Yu <[email protected]>
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: [email protected]
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=803dd716c4310d16ff3a
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ Context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: optimize f2fs_overwrite_io() for f2fs_iomap_begin [+ + +]
Author: Yeongjin Gil <[email protected]>
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: [email protected]
    Fixes: 351bc761338d ("f2fs: optimize f2fs DIO overwrites")
    Reviewed-by: Sungjong Seo <[email protected]>
    Reviewed-by: Sunmin Jeong <[email protected]>
    Signed-off-by: Yeongjin Gil <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

f2fs: support non-4KB block size without packed_ssa feature [+ + +]
Author: Daeho Jeong <[email protected]>
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: [email protected]
    Fixes: 7ee8bc3942f2 ("f2fs: revert summary entry count from 2048 to 512 in 16kb block support")
    Signed-off-by: Daeho Jeong <[email protected]>
    Reviewed-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fbdev: rivafb: fix divide error in nv3_arb() [+ + +]
Author: Guangshuo Li <[email protected]>
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: [email protected]
    Signed-off-by: Guangshuo Li <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: smscufx: properly copy ioctl memory to kernelspace [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
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 <[email protected]>
    Cc: stable <[email protected]>
    Cc: Steve Glendinning <[email protected]>
    Cc: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
gpio: sprd: Change sprd_gpio lock to raw_spin_lock [+ + +]
Author: Xuewen Yan <[email protected]>
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 <[email protected]>
    Reviewed-by: Baolin Wang <[email protected]>
    Reviewed-by: Sebastian Andrzej Siewior <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    [Bartosz: tweaked the commit message]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gpiolib: acpi: Fix gpio count with string references [+ + +]
Author: Alban Bedel <[email protected]>
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 <[email protected]>
    Reviewed-by: Mika Westerberg <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
io_uring/fdinfo: be a bit nicer when looping a lot of SQEs/CQEs [+ + +]
Author: Jens Axboe <[email protected]>
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: 是参差 <[email protected]>
    Link: https://lore.kernel.org/all/PS1PPF7E1D7501FE5631002D242DD89403FAB9BA@PS1PPF7E1D7501F.apcprd02.prod.outlook.com/
    Reviewed-by: Keith Busch <[email protected]>
    Signed-off-by: Jens Axboe <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iommu/arm-smmu-qcom: do not register driver in probe() [+ + +]
Author: Danilo Krummrich <[email protected]>
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 <[email protected]>
    Closes: https://lore.kernel.org/lkml/[email protected]/
    Link: https://lore.kernel.org/lkml/[email protected]/ [1]
    Link: https://lore.kernel.org/lkml/[email protected]/ [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 <[email protected]>
    Tested-by: Bjorn Andersson <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Acked-by: Konrad Dybcio <[email protected]>
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Tested-by: Ioana Ciornei <[email protected]> #LX2160ARDB
    Tested-by: Wang Jiayue <[email protected]>
    Reviewed-by: Wang Jiayue <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Acked-by: Joerg Roedel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.18.13 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Feb 19 16:31:37 2026 +0100

    Linux 6.18.13
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Luna Jernberg <[email protected]>
    Tested-by: Jeffrin Jose T <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Justin M. Forbes <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Miguel Ojeda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: Rework KASAN initialization for PTW-enabled systems [+ + +]
Author: Tiezhu Yang <[email protected]>
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: [email protected]
    Signed-off-by: Tiezhu Yang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mm/hugetlb: fix excessive IPI broadcasts when unsharing PMD tables using mmu_gather [+ + +]
Author: David Hildenbrand (Red Hat) <[email protected]>
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.
    
    [[email protected]: fix kerneldoc]
      Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 1013af4f585f ("mm/hugetlb: fix huge_pmd_unshare() vs GUP-fast race")
    Signed-off-by: David Hildenbrand (Red Hat) <[email protected]>
    Reported-by: "Uschakow, Stanislav" <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Tested-by: Laurence Oberman <[email protected]>
    Acked-by: Harry Yoo <[email protected]>
    Reviewed-by: Lorenzo Stoakes <[email protected]>
    Cc: Lance Yang <[email protected]>
    Cc: Liu Shixin <[email protected]>
    Cc: Oscar Salvador <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: David Hildenbrand (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
platform/x86/amd/pmc: Add quirk for MECHREVO Wujie 15X Pro [+ + +]
Author: gongqi <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86: classmate-laptop: Add missing NULL pointer checks [+ + +]
Author: Rafael J. Wysocki <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

platform/x86: panasonic-laptop: Fix sysfs group leak in error path [+ + +]
Author: Rafael J. Wysocki <[email protected]>
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 <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Ilpo Järvinen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
romfs: check sb_set_blocksize() return value [+ + +]
Author: Deepanshu Kartikey <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=9c4e33e12283d9437c25
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
rust: device: fix broken intra-doc links [+ + +]
Author: FUJITA Tomonori <[email protected]>
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 <[email protected]>
    Reviewed-by: Dirk Behme <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ Keep the "such as" part indicating a list of examples; fix typos in
      commit message. - Danilo ]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: dma: fix broken intra-doc links [+ + +]
Author: FUJITA Tomonori <[email protected]>
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 <[email protected]>
    Reviewed-by: Dirk Behme <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    [ Keep the "such as" part indicating a list of examples; fix typos in
      commit message. - Danilo ]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

rust: driver: fix broken intra-doc links to example driver types [+ + +]
Author: Alice Ryhl <[email protected]>
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 <[email protected]>
    Reported-by: FUJITA Tomonori <[email protected]>
    Closes: https://lore.kernel.org/rust-for-linux/[email protected]/
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Danilo Krummrich <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
scsi: qla2xxx: Fix bsg_done() causing double free [+ + +]
Author: Anil Gurumurthy <[email protected]>
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: [email protected]
    Signed-off-by: Anil Gurumurthy <[email protected]>
    Signed-off-by: Nilesh Javali <[email protected]>
    Reviewed-by: Himanshu Madhani <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
 
tracing/dma: Cap dma_map_sg tracepoint arrays to prevent buffer overflow [+ + +]
Author: Deepanshu Kartikey <[email protected]>
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: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=28cea38c382fd15e751a
    Tested-by: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Reviwed-by: Sean Anderson <[email protected]>
    Signed-off-by: Marek Szyprowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
USB: serial: option: add Telit FN920C04 RNDIS compositions [+ + +]
Author: Fabio Porcedda <[email protected]>
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: [email protected]
    Signed-off-by: Fabio Porcedda <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>