Changelog in Linux kernel 6.19.3

 
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]>

 
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:30:16 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:30:17 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]>

 
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.19.3 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Thu Feb 19 16:33:27 2026 +0100

    Linux 6.19.3
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Takeshi Ogasawara <[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: Mark Brown <[email protected]>
    Tested-by: Luna Jernberg <[email protected]>
    Tested-by: Ronald Warsow <[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]>

 
Revert "f2fs: block cache/dio write during f2fs_enable_checkpoint()" [+ + +]
Author: Chao Yu <[email protected]>
Date:   Tue Feb 17 11:14:32 2026 -0500

    Revert "f2fs: block cache/dio write during f2fs_enable_checkpoint()"
    
    [ Upstream commit 3996b70209f145bfcf2afc7d05dd92c27b233b48 ]
    
    This reverts commit 196c81fdd438f7ac429d5639090a9816abb9760a.
    
    Original patch may cause below deadlock, revert it.
    
    write                           remount
    - write_begin
     - lock_page  --- lock A
     - prepare_write_begin
      - f2fs_map_lock
                                    - f2fs_enable_checkpoint
                                     - down_write(cp_enable_rwsem)  --- lock B
                                     - sync_inode_sb
                                      - writepages
                                       - lock_page                  --- lock A
       - down_read(cp_enable_rwsem)  --- lock A
    
    Cc: [email protected]
    Fixes: 196c81fdd438 ("f2fs: block cache/dio write during f2fs_enable_checkpoint()")
    Signed-off-by: Chao Yu <[email protected]>
    Signed-off-by: Jaegeuk Kim <[email protected]>
    [ drop tracing bits ]
    Signed-off-by: Sasha Levin <[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]>
 
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]>