Changelog in Linux kernel 6.12.62

 
ALSA: usb-audio: Add native DSD quirks for PureAudio DAC series [+ + +]
Author: Lushih Hsieh <[email protected]>
Date:   Fri Nov 14 13:20:53 2025 +0800

    ALSA: usb-audio: Add native DSD quirks for PureAudio DAC series
    
    [ Upstream commit 21a9ab5b90b3716a631d559e62818029b4e7f5b7 ]
    
    The PureAudio APA DAC and Lotus DAC5 series are USB Audio
    2.0 Class devices that support native Direct Stream Digital (DSD)
    playback via specific vendor protocols.
    
    Without these quirks, the devices may only function in standard
    PCM mode, or fail to correctly report their DSD format capabilities
    to the ALSA framework, preventing native DSD playback under Linux.
    
    This commit adds new quirk entries for the mentioned DAC models
    based on their respective Vendor/Product IDs (VID:PID), for example:
    0x16d0:0x0ab1 (APA DAC), 0x16d0:0xeca1 (DAC5 series), etc.
    
    The quirk ensures correct DSD format handling by setting the required
    SNDRV_PCM_FMTBIT_DSD_U32_BE format bit and defining the DSD-specific
    Audio Class 2.0 (AC2.0) endpoint configurations. This allows the ALSA
    DSD API to correctly address the device for high-bitrate DSD streams,
    bypassing the need for DoP (DSD over PCM).
    
    Test on APA DAC and Lotus DAC5 SE under Arch Linux.
    
    Tested-by: Lushih Hsieh <[email protected]>
    Signed-off-by: Lushih Hsieh <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bfs: Reconstruct file type when loading from disk [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Thu Oct 23 22:25:49 2025 +0900

    bfs: Reconstruct file type when loading from disk
    
    [ Upstream commit 34ab4c75588c07cca12884f2bf6b0347c7a13872 ]
    
    syzbot is reporting that S_IFMT bits of inode->i_mode can become bogus when
    the S_IFMT bits of the 32bits "mode" field loaded from disk are corrupted
    or when the 32bits "attributes" field loaded from disk are corrupted.
    
    A documentation says that BFS uses only lower 9 bits of the "mode" field.
    But I can't find an explicit explanation that the unused upper 23 bits
    (especially, the S_IFMT bits) are initialized with 0.
    
    Therefore, ignore the S_IFMT bits of the "mode" field loaded from disk.
    Also, verify that the value of the "attributes" field loaded from disk is
    either BFS_VREG or BFS_VDIR (because BFS supports only regular files and
    the root directory).
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=895c23f6917da440ed0d
    Signed-off-by: Tetsuo Handa <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Tigran Aivazian <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: btrtl: Avoid loading the config file on security chips [+ + +]
Author: Max Chou <[email protected]>
Date:   Wed Nov 5 20:02:04 2025 +0800

    Bluetooth: btrtl: Avoid loading the config file on security chips
    
    [ Upstream commit cd8dbd9ef600435439bb0e70af0a1d9e2193aecb ]
    
    For chips with security enabled, it's only possible to load firmware
    with a valid signature pattern.
    If key_id is not zero, it indicates a security chip, and the driver will
    not load the config file.
    
    - Example log for a security chip.
    
    Bluetooth: hci0: RTL: examining hci_ver=0c hci_rev=000a
      lmp_ver=0c lmp_subver=8922
    Bluetooth: hci0: RTL: rom_version status=0 version=1
    Bluetooth: hci0: RTL: btrtl_initialize: key id 1
    Bluetooth: hci0: RTL: loading rtl_bt/rtl8922au_fw.bin
    Bluetooth: hci0: RTL: cfg_sz 0, total sz 71301
    Bluetooth: hci0: RTL: fw version 0x41c0c905
    
    - Example log for a normal chip.
    
    Bluetooth: hci0: RTL: examining hci_ver=0c hci_rev=000a
      lmp_ver=0c lmp_subver=8922
    Bluetooth: hci0: RTL: rom_version status=0 version=1
    Bluetooth: hci0: RTL: btrtl_initialize: key id 0
    Bluetooth: hci0: RTL: loading rtl_bt/rtl8922au_fw.bin
    Bluetooth: hci0: RTL: loading rtl_bt/rtl8922au_config.bin
    Bluetooth: hci0: RTL: cfg_sz 6, total sz 71307
    Bluetooth: hci0: RTL: fw version 0x41c0c905
    
    Tested-by: Hilda Wu <[email protected]>
    Signed-off-by: Nial Ni <[email protected]>
    Signed-off-by: Max Chou <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bus: mhi: host: pci_generic: Add Telit FN920C04 modem support [+ + +]
Author: Daniele Palmas <[email protected]>
Date:   Wed Dec 3 14:53:52 2025 +0100

    bus: mhi: host: pci_generic: Add Telit FN920C04 modem support
    
    commit 6348f62ef7ecc5855b710a7d4ea682425c38bb80 upstream.
    
    Add SDX35 based modem Telit FN920C04.
    
    $ lspci -vv
    01:00.0 Unassigned class [ff00]: Qualcomm Device 011a
            Subsystem: Device 1c5d:2020
    
    Signed-off-by: Daniele Palmas <[email protected]>
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Reviewed-by: Manivannan Sadhasivam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Fabio Porcedda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bus: mhi: host: pci_generic: Add Telit FN990B40 modem support [+ + +]
Author: Daniele Palmas <[email protected]>
Date:   Wed Dec 3 14:53:53 2025 +0100

    bus: mhi: host: pci_generic: Add Telit FN990B40 modem support
    
    commit 00559ba3ae740e7544b48fb509b2b97f56615892 upstream.
    
    Add SDX72 based modem Telit FN990B40, reusing FN920C04 configuration.
    
    01:00.0 Unassigned class [ff00]: Qualcomm Device 0309
            Subsystem: Device 1c5d:201a
    
    Signed-off-by: Daniele Palmas <[email protected]>
    [mani: added sdx72 in the comment to identify the chipset]
    Signed-off-by: Manivannan Sadhasivam <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Fabio Porcedda <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
comedi: c6xdigio: Fix invalid PNP driver unregistration [+ + +]
Author: Ian Abbott <[email protected]>
Date:   Thu Oct 23 13:31:41 2025 +0100

    comedi: c6xdigio: Fix invalid PNP driver unregistration
    
    commit 72262330f7b3ad2130e800cecf02adcce3c32c77 upstream.
    
    The Comedi low-level driver "c6xdigio" seems to be for a parallel port
    connected device.  When the Comedi core calls the driver's Comedi
    "attach" handler `c6xdigio_attach()` to configure a Comedi to use this
    driver, it tries to enable the parallel port PNP resources by
    registering a PNP driver with `pnp_register_driver()`, but ignores the
    return value.  (The `struct pnp_driver` it uses has only the `name` and
    `id_table` members filled in.)  The driver's Comedi "detach" handler
    `c6xdigio_detach()` unconditionally unregisters the PNP driver with
    `pnp_unregister_driver()`.
    
    It is possible for `c6xdigio_attach()` to return an error before it
    calls `pnp_register_driver()` and it is possible for the call to
    `pnp_register_driver()` to return an error (that is ignored).  In both
    cases, the driver should not be calling `pnp_unregister_driver()` as it
    does in `c6xdigio_detach()`.  (Note that `c6xdigio_detach()` will be
    called by the Comedi core if `c6xdigio_attach()` returns an error, or if
    the Comedi core decides to detach the Comedi device from the driver for
    some other reason.)
    
    The unconditional call to `pnp_unregister_driver()` without a previous
    successful call to `pnp_register_driver()` will cause
    `driver_unregister()` to issue a warning "Unexpected driver
    unregister!".  This was detected by Syzbot [1].
    
    Also, the PNP driver registration and unregistration should be done at
    module init and exit time, respectively, not when attaching or detaching
    Comedi devices to the driver.  (There might be more than one Comedi
    device being attached to the driver, although that is unlikely.)
    
    Change the driver to do the PNP driver registration at module init time,
    and the unregistration at module exit time.  Since `c6xdigio_detach()`
    now only calls `comedi_legacy_detach()`, remove the function and change
    the Comedi driver "detach" handler to `comedi_legacy_detach`.
    
    -------------------------------------------
    [1] Syzbot sample crash report:
    Unexpected driver unregister!
    WARNING: CPU: 0 PID: 5970 at drivers/base/driver.c:273 driver_unregister drivers/base/driver.c:273 [inline]
    WARNING: CPU: 0 PID: 5970 at drivers/base/driver.c:273 driver_unregister+0x90/0xb0 drivers/base/driver.c:270
    Modules linked in:
    CPU: 0 UID: 0 PID: 5970 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/02/2025
    RIP: 0010:driver_unregister drivers/base/driver.c:273 [inline]
    RIP: 0010:driver_unregister+0x90/0xb0 drivers/base/driver.c:270
    Code: 48 89 ef e8 c2 e6 82 fc 48 89 df e8 3a 93 ff ff 5b 5d e9 c3 6d d9 fb e8 be 6d d9 fb 90 48 c7 c7 e0 f8 1f 8c e8 51 a2 97 fb 90 <0f> 0b 90 90 5b 5d e9 a5 6d d9 fb e8 e0 f4 41 fc eb 94 e8 d9 f4 41
    RSP: 0018:ffffc9000373f9a0 EFLAGS: 00010282
    RAX: 0000000000000000 RBX: ffffffff8ff24720 RCX: ffffffff817b6ee8
    RDX: ffff88807c932480 RSI: ffffffff817b6ef5 RDI: 0000000000000001
    RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000000
    R10: 0000000000000001 R11: 0000000000000001 R12: ffffffff8ff24660
    R13: dffffc0000000000 R14: 0000000000000000 R15: ffff88814cca0000
    FS:  000055556dab1500(0000) GS:ffff8881249d9000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 000055f77f285cd0 CR3: 000000007d871000 CR4: 00000000003526f0
    Call Trace:
     <TASK>
     comedi_device_detach_locked+0x12f/0xa50 drivers/comedi/drivers.c:207
     comedi_device_detach+0x67/0xb0 drivers/comedi/drivers.c:215
     comedi_device_attach+0x43d/0x900 drivers/comedi/drivers.c:1011
     do_devconfig_ioctl+0x1b1/0x710 drivers/comedi/comedi_fops.c:872
     comedi_unlocked_ioctl+0x165d/0x2f00 drivers/comedi/comedi_fops.c:2178
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
     __se_sys_ioctl fs/ioctl.c:583 [inline]
     __x64_sys_ioctl+0x18e/0x210 fs/ioctl.c:583
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xcd/0xfa0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fc05798eec9
    Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007ffcf8184238 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
    RAX: ffffffffffffffda RBX: 00007fc057be5fa0 RCX: 00007fc05798eec9
    RDX: 0000200000000080 RSI: 0000000040946400 RDI: 0000000000000003
    RBP: 00007fc057a11f91 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007fc057be5fa0 R14: 00007fc057be5fa0 R15: 0000000000000003
     </TASK>
    -------------------------------------------
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6616bba359cec7a1def1
    Fixes: 2c89e159cd2f ("Staging: comedi: add c6xdigio driver")
    Cc: stable <[email protected]>
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: check device's attached status in compat ioctls [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Thu Oct 23 16:22:32 2025 +0300

    comedi: check device's attached status in compat ioctls
    
    commit 0de7d9cd07a2671fa6089173bccc0b2afe6b93ee upstream.
    
    Syzbot identified an issue [1] that crashes kernel, seemingly due to
    unexistent callback dev->get_valid_routes(). By all means, this should
    not occur as said callback must always be set to
    get_zero_valid_routes() in __comedi_device_postconfig().
    
    As the crash seems to appear exclusively in i386 kernels, at least,
    judging from [1] reports, the blame lies with compat versions
    of standard IOCTL handlers. Several of them are modified and
    do not use comedi_unlocked_ioctl(). While functionality of these
    ioctls essentially copy their original versions, they do not
    have required sanity check for device's attached status. This,
    in turn, leads to a possibility of calling select IOCTLs on a
    device that has not been properly setup, even via COMEDI_DEVCONFIG.
    
    Doing so on unconfigured devices means that several crucial steps
    are missed, for instance, specifying dev->get_valid_routes()
    callback.
    
    Fix this somewhat crudely by ensuring device's attached status before
    performing any ioctls, improving logic consistency between modern
    and compat functions.
    
    [1] Syzbot report:
    BUG: kernel NULL pointer dereference, address: 0000000000000000
    ...
    CR2: ffffffffffffffd6 CR3: 000000006c717000 CR4: 0000000000352ef0
    Call Trace:
     <TASK>
     get_valid_routes drivers/comedi/comedi_fops.c:1322 [inline]
     parse_insn+0x78c/0x1970 drivers/comedi/comedi_fops.c:1401
     do_insnlist_ioctl+0x272/0x700 drivers/comedi/comedi_fops.c:1594
     compat_insnlist drivers/comedi/comedi_fops.c:3208 [inline]
     comedi_compat_ioctl+0x810/0x990 drivers/comedi/comedi_fops.c:3273
     __do_compat_sys_ioctl fs/ioctl.c:695 [inline]
     __se_compat_sys_ioctl fs/ioctl.c:638 [inline]
     __ia32_compat_sys_ioctl+0x242/0x370 fs/ioctl.c:638
     do_syscall_32_irqs_on arch/x86/entry/syscall_32.c:83 [inline]
    ...
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=ab8008c24e84adee93ff
    Fixes: 3fbfd2223a27 ("comedi: get rid of compat_alloc_user_space() mess in COMEDI_CHANINFO compat")
    Cc: stable <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: multiq3: sanitize config options in multiq3_attach() [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Thu Oct 23 16:22:04 2025 +0300

    comedi: multiq3: sanitize config options in multiq3_attach()
    
    commit f24c6e3a39fa355dabfb684c9ca82db579534e72 upstream.
    
    Syzbot identified an issue [1] in multiq3_attach() that induces a
    task timeout due to open() or COMEDI_DEVCONFIG ioctl operations,
    specifically, in the case of multiq3 driver.
    
    This problem arose when syzkaller managed to craft weird configuration
    options used to specify the number of channels in encoder subdevice.
    If a particularly great number is passed to s->n_chan in
    multiq3_attach() via it->options[2], then multiple calls to
    multiq3_encoder_reset() at the end of driver-specific attach() method
    will be running for minutes, thus blocking tasks and affected devices
    as well.
    
    While this issue is most likely not too dangerous for real-life
    devices, it still makes sense to sanitize configuration inputs. Enable
    a sensible limit on the number of encoder chips (4 chips max, each
    with 2 channels) to stop this behaviour from manifesting.
    
    [1] Syzbot crash:
    INFO: task syz.2.19:6067 blocked for more than 143 seconds.
    ...
    Call Trace:
     <TASK>
     context_switch kernel/sched/core.c:5254 [inline]
     __schedule+0x17c4/0x4d60 kernel/sched/core.c:6862
     __schedule_loop kernel/sched/core.c:6944 [inline]
     schedule+0x165/0x360 kernel/sched/core.c:6959
     schedule_preempt_disabled+0x13/0x30 kernel/sched/core.c:7016
     __mutex_lock_common kernel/locking/mutex.c:676 [inline]
     __mutex_lock+0x7e6/0x1350 kernel/locking/mutex.c:760
     comedi_open+0xc0/0x590 drivers/comedi/comedi_fops.c:2868
     chrdev_open+0x4cc/0x5e0 fs/char_dev.c:414
     do_dentry_open+0x953/0x13f0 fs/open.c:965
     vfs_open+0x3b/0x340 fs/open.c:1097
    ...
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=7811bb68a317954a0347
    Fixes: 77e01cdbad51 ("Staging: comedi: add multiq3 driver")
    Cc: stable <[email protected]>
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

comedi: pcl818: fix null-ptr-deref in pcl818_ai_cancel() [+ + +]
Author: Nikita Zhandarovich <[email protected]>
Date:   Thu Oct 23 17:14:56 2025 +0300

    comedi: pcl818: fix null-ptr-deref in pcl818_ai_cancel()
    
    commit a51f025b5038abd3d22eed2ede4cd46793d89565 upstream.
    
    Syzbot identified an issue [1] in pcl818_ai_cancel(), which stems from
    the fact that in case of early device detach via pcl818_detach(),
    subdevice dev->read_subdev may not have initialized its pointer to
    &struct comedi_async as intended. Thus, any such dereferencing of
    &s->async->cmd will lead to general protection fault and kernel crash.
    
    Mitigate this problem by removing a call to pcl818_ai_cancel() from
    pcl818_detach() altogether. This way, if the subdevice setups its
    support for async commands, everything async-related will be
    handled via subdevice's own ->cancel() function in
    comedi_device_detach_locked() even before pcl818_detach(). If no
    support for asynchronous commands is provided, there is no need
    to cancel anything either.
    
    [1] Syzbot crash:
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000005: 0000 [#1] SMP KASAN PTI
    KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f]
    CPU: 1 UID: 0 PID: 6050 Comm: syz.0.18 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/18/2025
    RIP: 0010:pcl818_ai_cancel+0x69/0x3f0 drivers/comedi/drivers/pcl818.c:762
    ...
    Call Trace:
     <TASK>
     pcl818_detach+0x66/0xd0 drivers/comedi/drivers/pcl818.c:1115
     comedi_device_detach_locked+0x178/0x750 drivers/comedi/drivers.c:207
     do_devconfig_ioctl drivers/comedi/comedi_fops.c:848 [inline]
     comedi_unlocked_ioctl+0xcde/0x1020 drivers/comedi/comedi_fops.c:2178
     vfs_ioctl fs/ioctl.c:51 [inline]
     __do_sys_ioctl fs/ioctl.c:597 [inline]
    ...
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=fce5d9d5bd067d6fbe9b
    Fixes: 00aba6e7b565 ("staging: comedi: pcl818: remove 'neverending_ai' from private data")
    Cc: stable <[email protected]>
    Signed-off-by: Nikita Zhandarovich <[email protected]>
    Reviewed-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Documentation: process: Also mention Sasha Levin as stable tree maintainer [+ + +]
Author: Bagas Sanjaya <[email protected]>
Date:   Wed Oct 22 10:43:35 2025 +0700

    Documentation: process: Also mention Sasha Levin as stable tree maintainer
    
    commit ba2457109d5b47a90fe565b39524f7225fc23e60 upstream.
    
    Sasha has also maintaining stable branch in conjunction with Greg
    since cb5d21946d2a2f ("MAINTAINERS: Add Sasha as a stable branch
    maintainer"). Mention him in 2.Process.rst.
    
    Cc: [email protected]
    Signed-off-by: Bagas Sanjaya <[email protected]>
    Reviewed-by: Randy Dunlap <[email protected]>
    Acked-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Jonathan Corbet <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amdkfd: Fix GPU mappings for APU after prefetch [+ + +]
Author: Harish Kasiviswanathan <[email protected]>
Date:   Tue Oct 28 14:37:07 2025 -0400

    drm/amdkfd: Fix GPU mappings for APU after prefetch
    
    [ Upstream commit eac32ff42393efa6657efc821231b8d802c1d485 ]
    
    Fix the following corner case:-
     Consider a 2M huge page SVM allocation, followed by prefetch call for
    the first 4K page. The whole range is initially mapped with single PTE.
    After the prefetch, this range gets split to first page + rest of the
    pages. Currently, the first page mapping is not updated on MI300A (APU)
    since page hasn't migrated. However, after range split PTE mapping it not
    valid.
    
    Fix this by forcing page table update for the whole range when prefetch
    is called.  Calling prefetch on APU doesn't improve performance. If all
    it deteriotes. However, functionality has to be supported.
    
    v2: Use apu_prefer_gtt as this issue doesn't apply to APUs with carveout
    VRAM
    
    v3: Simplify by setting the flag for all ASICs as it doesn't affect dGPU
    
    v4: Remove v2 and v3 changes. Force update_mapping when range is split
    at a size that is not aligned to prange granularity
    
    Suggested-by: Philip Yang <[email protected]>
    Signed-off-by: Harish Kasiviswanathan <[email protected]>
    Reviewed-by: Philip Yang<[email protected]>
    Reviewed-by: Felix Kuehling <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 076470b9f6f8d9c7c8ca73a9f054942a686f9ba7)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/vmwgfx: Use kref in vmw_bo_dirty [+ + +]
Author: Ian Forbes <[email protected]>
Date:   Thu Oct 30 14:36:40 2025 -0500

    drm/vmwgfx: Use kref in vmw_bo_dirty
    
    [ Upstream commit c1962742ffff7e245f935903a4658eb6f94f6058 ]
    
    Rather than using an ad hoc reference count use kref which is atomic
    and has underflow warnings.
    
    Signed-off-by: Ian Forbes <[email protected]>
    Signed-off-by: Zack Rusin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
ext4: add i_data_sem protection in ext4_destroy_inline_data_nolock() [+ + +]
Author: Alexey Nepomnyashih <[email protected]>
Date:   Tue Nov 4 09:33:25 2025 +0000

    ext4: add i_data_sem protection in ext4_destroy_inline_data_nolock()
    
    commit 0cd8feea8777f8d9b9a862b89c688b049a5c8475 upstream.
    
    Fix a race between inline data destruction and block mapping.
    
    The function ext4_destroy_inline_data_nolock() changes the inode data
    layout by clearing EXT4_INODE_INLINE_DATA and setting EXT4_INODE_EXTENTS.
    At the same time, another thread may execute ext4_map_blocks(), which
    tests EXT4_INODE_EXTENTS to decide whether to call ext4_ext_map_blocks()
    or ext4_ind_map_blocks().
    
    Without i_data_sem protection, ext4_ind_map_blocks() may receive inode
    with EXT4_INODE_EXTENTS flag and triggering assert.
    
    kernel BUG at fs/ext4/indirect.c:546!
    EXT4-fs (loop2): unmounting filesystem.
    invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014
    RIP: 0010:ext4_ind_map_blocks.cold+0x2b/0x5a fs/ext4/indirect.c:546
    
    Call Trace:
     <TASK>
     ext4_map_blocks+0xb9b/0x16f0 fs/ext4/inode.c:681
     _ext4_get_block+0x242/0x590 fs/ext4/inode.c:822
     ext4_block_write_begin+0x48b/0x12c0 fs/ext4/inode.c:1124
     ext4_write_begin+0x598/0xef0 fs/ext4/inode.c:1255
     ext4_da_write_begin+0x21e/0x9c0 fs/ext4/inode.c:3000
     generic_perform_write+0x259/0x5d0 mm/filemap.c:3846
     ext4_buffered_write_iter+0x15b/0x470 fs/ext4/file.c:285
     ext4_file_write_iter+0x8e0/0x17f0 fs/ext4/file.c:679
     call_write_iter include/linux/fs.h:2271 [inline]
     do_iter_readv_writev+0x212/0x3c0 fs/read_write.c:735
     do_iter_write+0x186/0x710 fs/read_write.c:861
     vfs_iter_write+0x70/0xa0 fs/read_write.c:902
     iter_file_splice_write+0x73b/0xc90 fs/splice.c:685
     do_splice_from fs/splice.c:763 [inline]
     direct_splice_actor+0x10f/0x170 fs/splice.c:950
     splice_direct_to_actor+0x33a/0xa10 fs/splice.c:896
     do_splice_direct+0x1a9/0x280 fs/splice.c:1002
     do_sendfile+0xb13/0x12c0 fs/read_write.c:1255
     __do_sys_sendfile64 fs/read_write.c:1323 [inline]
     __se_sys_sendfile64 fs/read_write.c:1309 [inline]
     __x64_sys_sendfile64+0x1cf/0x210 fs/read_write.c:1309
     do_syscall_x64 arch/x86/entry/common.c:51 [inline]
     do_syscall_64+0x35/0x80 arch/x86/entry/common.c:81
     entry_SYSCALL_64_after_hwframe+0x6e/0xd8
    
    Fixes: c755e251357a ("ext4: fix deadlock between inline_data and ext4_expand_extra_isize_ea()")
    Cc: [email protected] # v4.11+
    Signed-off-by: Alexey Nepomnyashih <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ext4: refresh inline data size before write operations [+ + +]
Author: Deepanshu Kartikey <[email protected]>
Date:   Mon Oct 20 11:39:36 2025 +0530

    ext4: refresh inline data size before write operations
    
    commit 892e1cf17555735e9d021ab036c36bc7b58b0e3b upstream.
    
    The cached ei->i_inline_size can become stale between the initial size
    check and when ext4_update_inline_data()/ext4_create_inline_data() use
    it. Although ext4_get_max_inline_size() reads the correct value at the
    time of the check, concurrent xattr operations can modify i_inline_size
    before ext4_write_lock_xattr() is acquired.
    
    This causes ext4_update_inline_data() and ext4_create_inline_data() to
    work with stale capacity values, leading to a BUG_ON() crash in
    ext4_write_inline_data():
    
      kernel BUG at fs/ext4/inline.c:1331!
      BUG_ON(pos + len > EXT4_I(inode)->i_inline_size);
    
    The race window:
    1. ext4_get_max_inline_size() reads i_inline_size = 60 (correct)
    2. Size check passes for 50-byte write
    3. [Another thread adds xattr, i_inline_size changes to 40]
    4. ext4_write_lock_xattr() acquires lock
    5. ext4_update_inline_data() uses stale i_inline_size = 60
    6. Attempts to write 50 bytes but only 40 bytes actually available
    7. BUG_ON() triggers
    
    Fix this by recalculating i_inline_size via ext4_find_inline_data_nolock()
    immediately after acquiring xattr_sem. This ensures ext4_update_inline_data()
    and ext4_create_inline_data() work with current values that are protected
    from concurrent modifications.
    
    This is similar to commit a54c4613dac1 ("ext4: fix race writing to an
    inline_data file while its xattrs are changing") which fixed i_inline_off
    staleness. This patch addresses the related i_inline_size staleness issue.
    
    Reported-by: [email protected]
    Link: https://syzkaller.appspot.com/bug?extid=f3185be57d7e8dda32b8
    Cc: [email protected]
    Signed-off-by: Deepanshu Kartikey <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ftrace: bpf: Fix IPMODIFY + DIRECT in modify_ftrace_direct() [+ + +]
Author: Song Liu <[email protected]>
Date:   Mon Oct 27 10:50:22 2025 -0700

    ftrace: bpf: Fix IPMODIFY + DIRECT in modify_ftrace_direct()
    
    [ Upstream commit 3e9a18e1c3e931abecf501cbb23d28d69f85bb56 ]
    
    ftrace_hash_ipmodify_enable() checks IPMODIFY and DIRECT ftrace_ops on
    the same kernel function. When needed, ftrace_hash_ipmodify_enable()
    calls ops->ops_func() to prepare the direct ftrace (BPF trampoline) to
    share the same function as the IPMODIFY ftrace (livepatch).
    
    ftrace_hash_ipmodify_enable() is called in register_ftrace_direct() path,
    but not called in modify_ftrace_direct() path. As a result, the following
    operations will break livepatch:
    
    1. Load livepatch to a kernel function;
    2. Attach fentry program to the kernel function;
    3. Attach fexit program to the kernel function.
    
    After 3, the kernel function being used will not be the livepatched
    version, but the original version.
    
    Fix this by adding __ftrace_hash_update_ipmodify() to
    __modify_ftrace_direct() and adjust some logic around the call.
    
    Signed-off-by: Song Liu <[email protected]>
    Reviewed-by: Jiri Olsa <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Alexei Starovoitov <[email protected]>
    Acked-by: Steven Rostedt (Google) <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: apple: Add SONiX AK870 PRO to non_apple_keyboards quirk list [+ + +]
Author: April Grimoire <[email protected]>
Date:   Thu Oct 23 00:37:26 2025 +0800

    HID: apple: Add SONiX AK870 PRO to non_apple_keyboards quirk list
    
    [ Upstream commit 743c81cdc98fd4fef62a89eb70efff994112c2d9 ]
    
    SONiX AK870 PRO keyboard pretends to be an apple keyboard by VID:PID,
    rendering function keys not treated properly. Despite being a
    SONiX USB DEVICE, it uses a different name, so adding it to the list.
    
    Signed-off-by: April Grimoire <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: elecom: Add support for ELECOM M-XT3URBK (018F) [+ + +]
Author: Naoki Ueki <[email protected]>
Date:   Mon Nov 3 21:16:45 2025 +0900

    HID: elecom: Add support for ELECOM M-XT3URBK (018F)
    
    [ Upstream commit cdcbb8e8d10f656642380ee13516290437b52b36 ]
    
    The ELECOM M-XT3URBK trackball has an additional device ID (0x018F), which
    shares the same report descriptor as the existing device (0x00FB). However,
    the driver does not currently recognize this new ID, resulting in only five
    buttons being functional.
    
    This patch adds the new device ID so that all six buttons work properly.
    
    Signed-off-by: Naoki Ueki <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

HID: hid-input: Extend Elan ignore battery quirk to USB [+ + +]
Author: Mario Limonciello (AMD) <[email protected]>
Date:   Thu Oct 30 11:06:25 2025 -0500

    HID: hid-input: Extend Elan ignore battery quirk to USB
    
    [ Upstream commit 534ca75e8e3b713514b3f2da85dab96831cf5b2a ]
    
    USB Elan devices have the same problem as the I2C ones with a fake
    battery device showing up.
    
    Reviewed-by: Hans de Goede <[email protected]>
    Reported-by: André Barata <[email protected]>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220722
    Signed-off-by: Mario Limonciello (AMD) <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
jbd2: avoid bug_on in jbd2_journal_get_create_access() when file system corrupted [+ + +]
Author: Ye Bin <[email protected]>
Date:   Sat Oct 25 15:26:57 2025 +0800

    jbd2: avoid bug_on in jbd2_journal_get_create_access() when file system corrupted
    
    commit 986835bf4d11032bba4ab8414d18fce038c61bb4 upstream.
    
    There's issue when file system corrupted:
    ------------[ cut here ]------------
    kernel BUG at fs/jbd2/transaction.c:1289!
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 5 UID: 0 PID: 2031 Comm: mkdir Not tainted 6.18.0-rc1-next
    RIP: 0010:jbd2_journal_get_create_access+0x3b6/0x4d0
    RSP: 0018:ffff888117aafa30 EFLAGS: 00010202
    RAX: 0000000000000000 RBX: ffff88811a86b000 RCX: ffffffff89a63534
    RDX: 1ffff110200ec602 RSI: 0000000000000004 RDI: ffff888100763010
    RBP: ffff888100763000 R08: 0000000000000001 R09: ffff888100763028
    R10: 0000000000000003 R11: 0000000000000000 R12: 0000000000000000
    R13: ffff88812c432000 R14: ffff88812c608000 R15: ffff888120bfc000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f91d6970c99 CR3: 00000001159c4000 CR4: 00000000000006f0
    Call Trace:
     <TASK>
     __ext4_journal_get_create_access+0x42/0x170
     ext4_getblk+0x319/0x6f0
     ext4_bread+0x11/0x100
     ext4_append+0x1e6/0x4a0
     ext4_init_new_dir+0x145/0x1d0
     ext4_mkdir+0x326/0x920
     vfs_mkdir+0x45c/0x740
     do_mkdirat+0x234/0x2f0
     __x64_sys_mkdir+0xd6/0x120
     do_syscall_64+0x5f/0xfa0
     entry_SYSCALL_64_after_hwframe+0x76/0x7e
    
    The above issue occurs with us in errors=continue mode when accompanied by
    storage failures. There have been many inconsistencies in the file system
    data.
    In the case of file system data inconsistency, for example, if the block
    bitmap of a referenced block is not set, it can lead to the situation where
    a block being committed is allocated and used again. As a result, the
    following condition will not be satisfied then trigger BUG_ON. Of course,
    it is entirely possible to construct a problematic image that can trigger
    this BUG_ON through specific operations. In fact, I have constructed such
    an image and easily reproduced this issue.
    Therefore, J_ASSERT() holds true only under ideal conditions, but it may
    not necessarily be satisfied in exceptional scenarios. Using J_ASSERT()
    directly in abnormal situations would cause the system to crash, which is
    clearly not what we want. So here we directly trigger a JBD abort instead
    of immediately invoking BUG_ON.
    
    Fixes: 470decc613ab ("[PATCH] jbd2: initial copy of files from jbd")
    Signed-off-by: Ye Bin <[email protected]>
    Reviewed-by: Jan Kara <[email protected]>
    Message-ID: <[email protected]>
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ksmbd: ipc: fix use-after-free in ipc_msg_send_request [+ + +]
Author: Qianchang Zhao <[email protected]>
Date:   Wed Nov 26 12:24:18 2025 +0900

    ksmbd: ipc: fix use-after-free in ipc_msg_send_request
    
    commit 1fab1fa091f5aa97265648b53ea031deedd26235 upstream.
    
    ipc_msg_send_request() waits for a generic netlink reply using an
    ipc_msg_table_entry on the stack. The generic netlink handler
    (handle_generic_event()/handle_response()) fills entry->response under
    ipc_msg_table_lock, but ipc_msg_send_request() used to validate and free
    entry->response without holding the same lock.
    
    Under high concurrency this allows a race where handle_response() is
    copying data into entry->response while ipc_msg_send_request() has just
    freed it, leading to a slab-use-after-free reported by KASAN in
    handle_generic_event():
    
      BUG: KASAN: slab-use-after-free in handle_generic_event+0x3c4/0x5f0 [ksmbd]
      Write of size 12 at addr ffff888198ee6e20 by task pool/109349
      ...
      Freed by task:
        kvfree
        ipc_msg_send_request [ksmbd]
        ksmbd_rpc_open -> ksmbd_session_rpc_open [ksmbd]
    
    Fix by:
    - Taking ipc_msg_table_lock in ipc_msg_send_request() while validating
      entry->response, freeing it when invalid, and removing the entry from
      ipc_msg_table.
    - Returning the final entry->response pointer to the caller only after
      the hash entry is removed under the lock.
    - Returning NULL in the error path, preserving the original API
      semantics.
    
    This makes all accesses to entry->response consistent with
    handle_response(), which already updates and fills the response buffer
    under ipc_msg_table_lock, and closes the race that allowed the UAF.
    
    Cc: [email protected]
    Reported-by: Qianchang Zhao <[email protected]>
    Reported-by: Zhitong Liu <[email protected]>
    Signed-off-by: Qianchang Zhao <[email protected]>
    Acked-by: Namjae Jeon <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
KVM: SVM: Don't skip unrelated instruction if INT3/INTO is replaced [+ + +]
Author: Omar Sandoval <[email protected]>
Date:   Tue Nov 4 09:55:26 2025 -0800

    KVM: SVM: Don't skip unrelated instruction if INT3/INTO is replaced
    
    commit 4da3768e1820cf15cced390242d8789aed34f54d upstream.
    
    When re-injecting a soft interrupt from an INT3, INT0, or (select) INTn
    instruction, discard the exception and retry the instruction if the code
    stream is changed (e.g. by a different vCPU) between when the CPU
    executes the instruction and when KVM decodes the instruction to get the
    next RIP.
    
    As effectively predicted by commit 6ef88d6e36c2 ("KVM: SVM: Re-inject
    INT3/INTO instead of retrying the instruction"), failure to verify that
    the correct INTn instruction was decoded can effectively clobber guest
    state due to decoding the wrong instruction and thus specifying the
    wrong next RIP.
    
    The bug most often manifests as "Oops: int3" panics on static branch
    checks in Linux guests.  Enabling or disabling a static branch in Linux
    uses the kernel's "text poke" code patching mechanism.  To modify code
    while other CPUs may be executing that code, Linux (temporarily)
    replaces the first byte of the original instruction with an int3 (opcode
    0xcc), then patches in the new code stream except for the first byte,
    and finally replaces the int3 with the first byte of the new code
    stream.  If a CPU hits the int3, i.e. executes the code while it's being
    modified, then the guest kernel must look up the RIP to determine how to
    handle the #BP, e.g. by emulating the new instruction.  If the RIP is
    incorrect, then this lookup fails and the guest kernel panics.
    
    The bug reproduces almost instantly by hacking the guest kernel to
    repeatedly check a static branch[1] while running a drgn script[2] on
    the host to constantly swap out the memory containing the guest's TSS.
    
    [1]: https://gist.github.com/osandov/44d17c51c28c0ac998ea0334edf90b5a
    [2]: https://gist.github.com/osandov/10e45e45afa29b11e0c7209247afc00b
    
    Fixes: 6ef88d6e36c2 ("KVM: SVM: Re-inject INT3/INTO instead of retrying the instruction")
    Cc: [email protected]
    Co-developed-by: Sean Christopherson <[email protected]>
    Signed-off-by: Omar Sandoval <[email protected]>
    Link: https://patch.msgid.link/1cc6dcdf36e3add7ee7c8d90ad58414eeb6c3d34.1762278762.git.osandov@fb.com
    Signed-off-by: Sean Christopherson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 6.12.62 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Dec 12 18:37:22 2025 +0100

    Linux 6.12.62
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Jeffrin Jose T <[email protected]>
    Tested-by: Peter Schneider <[email protected]>
    Tested-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Brett Mastbergen <[email protected]>
    Tested-by: Hardik Garg <[email protected]>
    Tested-by: Ron Economos <[email protected]>
    Tested-by: Linux Kernel Functional Testing <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Dileep Malepu <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
locking/spinlock/debug: Fix data-race in do_raw_write_lock [+ + +]
Author: Alexander Sverdlin <[email protected]>
Date:   Fri Sep 19 11:12:38 2025 +0200

    locking/spinlock/debug: Fix data-race in do_raw_write_lock
    
    commit c14ecb555c3ee80eeb030a4e46d00e679537f03a upstream.
    
    KCSAN reports:
    
    BUG: KCSAN: data-race in do_raw_write_lock / do_raw_write_lock
    
    write (marked) to 0xffff800009cf504c of 4 bytes by task 1102 on cpu 1:
     do_raw_write_lock+0x120/0x204
     _raw_write_lock_irq
     do_exit
     call_usermodehelper_exec_async
     ret_from_fork
    
    read to 0xffff800009cf504c of 4 bytes by task 1103 on cpu 0:
     do_raw_write_lock+0x88/0x204
     _raw_write_lock_irq
     do_exit
     call_usermodehelper_exec_async
     ret_from_fork
    
    value changed: 0xffffffff -> 0x00000001
    
    Reported by Kernel Concurrency Sanitizer on:
    CPU: 0 PID: 1103 Comm: kworker/u4:1 6.1.111
    
    Commit 1a365e822372 ("locking/spinlock/debug: Fix various data races") has
    adressed most of these races, but seems to be not consistent/not complete.
    
    >From do_raw_write_lock() only debug_write_lock_after() part has been
    converted to WRITE_ONCE(), but not debug_write_lock_before() part.
    Do it now.
    
    Fixes: 1a365e822372 ("locking/spinlock/debug: Fix various data races")
    Reported-by: Adrian Freihofer <[email protected]>
    Signed-off-by: Alexander Sverdlin <[email protected]>
    Signed-off-by: Boqun Feng <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Reviewed-by: Paul E. McKenney <[email protected]>
    Acked-by: Waiman Long <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
LoongArch: Mask all interrupts during kexec/kdump [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Thu Nov 20 14:42:05 2025 +0800

    LoongArch: Mask all interrupts during kexec/kdump
    
    [ Upstream commit 863a320dc6fd7c855f47da4bb82a8de2d9102ea2 ]
    
    If the default state of the interrupt controllers in the first kernel
    don't mask any interrupts, it may cause the second kernel to potentially
    receive interrupts (which were previously allocated by the first kernel)
    immediately after a CPU becomes online during its boot process. These
    interrupts cannot be properly routed, leading to bad IRQ issues.
    
    This patch calls machine_kexec_mask_interrupts() to mask all interrupts
    during the kexec/kdump process.
    
    Signed-off-by: Tianyang Zhang <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme: fix admin request_queue lifetime [+ + +]
Author: Keith Busch <[email protected]>
Date:   Tue Nov 4 14:48:30 2025 -0800

    nvme: fix admin request_queue lifetime
    
    [ Upstream commit 03b3bcd319b3ab5182bc9aaa0421351572c78ac0 ]
    
    The namespaces can access the controller's admin request_queue, and
    stale references on the namespaces may exist after tearing down the
    controller. Ensure the admin request_queue is active by moving the
    controller's 'put' to after all controller references have been released
    to ensure no one is can access the request_queue. This fixes a reported
    use-after-free bug:
    
      BUG: KASAN: slab-use-after-free in blk_queue_enter+0x41c/0x4a0
      Read of size 8 at addr ffff88c0a53819f8 by task nvme/3287
      CPU: 67 UID: 0 PID: 3287 Comm: nvme Tainted: G            E       6.13.2-ga1582f1a031e #15
      Tainted: [E]=UNSIGNED_MODULE
      Hardware name: Jabil /EGS 2S MB1, BIOS 1.00 06/18/2025
      Call Trace:
       <TASK>
       dump_stack_lvl+0x4f/0x60
       print_report+0xc4/0x620
       ? _raw_spin_lock_irqsave+0x70/0xb0
       ? _raw_read_unlock_irqrestore+0x30/0x30
       ? blk_queue_enter+0x41c/0x4a0
       kasan_report+0xab/0xe0
       ? blk_queue_enter+0x41c/0x4a0
       blk_queue_enter+0x41c/0x4a0
       ? __irq_work_queue_local+0x75/0x1d0
       ? blk_queue_start_drain+0x70/0x70
       ? irq_work_queue+0x18/0x20
       ? vprintk_emit.part.0+0x1cc/0x350
       ? wake_up_klogd_work_func+0x60/0x60
       blk_mq_alloc_request+0x2b7/0x6b0
       ? __blk_mq_alloc_requests+0x1060/0x1060
       ? __switch_to+0x5b7/0x1060
       nvme_submit_user_cmd+0xa9/0x330
       nvme_user_cmd.isra.0+0x240/0x3f0
       ? force_sigsegv+0xe0/0xe0
       ? nvme_user_cmd64+0x400/0x400
       ? vfs_fileattr_set+0x9b0/0x9b0
       ? cgroup_update_frozen_flag+0x24/0x1c0
       ? cgroup_leave_frozen+0x204/0x330
       ? nvme_ioctl+0x7c/0x2c0
       blkdev_ioctl+0x1a8/0x4d0
       ? blkdev_common_ioctl+0x1930/0x1930
       ? fdget+0x54/0x380
       __x64_sys_ioctl+0x129/0x190
       do_syscall_64+0x5b/0x160
       entry_SYSCALL_64_after_hwframe+0x4b/0x53
      RIP: 0033:0x7f765f703b0b
      Code: ff ff ff 85 c0 79 9b 49 c7 c4 ff ff ff ff 5b 5d 4c 89 e0 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d dd 52 0f 00 f7 d8 64 89 01 48
      RSP: 002b:00007ffe2cefe808 EFLAGS: 00000202 ORIG_RAX: 0000000000000010
      RAX: ffffffffffffffda RBX: 00007ffe2cefe860 RCX: 00007f765f703b0b
      RDX: 00007ffe2cefe860 RSI: 00000000c0484e41 RDI: 0000000000000003
      RBP: 0000000000000000 R08: 0000000000000003 R09: 0000000000000000
      R10: 00007f765f611d50 R11: 0000000000000202 R12: 0000000000000003
      R13: 00000000c0484e41 R14: 0000000000000001 R15: 00007ffe2cefea60
       </TASK>
    
    Reported-by: Casey Chen <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Reviewed-by: Ming Lei <[email protected]>
    Reviewed-by: Chaitanya Kulkarni <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
pinctrl: qcom: msm: Fix deadlock in pinmux configuration [+ + +]
Author: Praveen Talari <[email protected]>
Date:   Mon Nov 10 15:40:41 2025 +0530

    pinctrl: qcom: msm: Fix deadlock in pinmux configuration
    
    [ Upstream commit 1c2e70397b4125022dba80f6111271a37fb36bae ]
    
    Replace disable_irq() with disable_irq_nosync() in msm_pinmux_set_mux()
    to prevent deadlock when wakeup IRQ is triggered on the same
    GPIO being reconfigured.
    
    The issue occurs when a wakeup IRQ is triggered on a GPIO and the IRQ
    handler attempts to reconfigure the same GPIO's pinmux. In this scenario,
    msm_pinmux_set_mux() calls disable_irq() which waits for the currently
    running IRQ handler to complete, creating a circular dependency that
    results in deadlock.
    
    Using disable_irq_nosync() avoids waiting for the IRQ handler to
    complete, preventing the deadlock condition while still properly
    disabling the interrupt during pinmux reconfiguration.
    
    Suggested-by: Prasad Sodagudi <[email protected]>
    Signed-off-by: Praveen Talari <[email protected]>
    Reviewed-by: Bjorn Andersson <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
platform/x86/amd/pmc: Add spurious_8042 to Xbox Ally [+ + +]
Author: Antheas Kapenekakis <[email protected]>
Date:   Fri Oct 24 17:21:51 2025 +0200

    platform/x86/amd/pmc: Add spurious_8042 to Xbox Ally
    
    [ Upstream commit c0ddc54016636dd8dedfaf1a3b482a95058e1db2 ]
    
    The Xbox Ally features a Van Gogh SoC that has spurious interrupts
    during resume. We get the following logs:
    
    atkbd_receive_byte: 20 callbacks suppressed
    atkbd serio0: Spurious ACK on isa0060/serio0. Some program might be trying to access hardware directly.
    
    So, add the spurious_8042 quirk for it. It does not have a keyboard, so
    this does not result in any functional loss.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4659
    Signed-off-by: Antheas Kapenekakis <[email protected]>
    Reviewed-by: Mario Limonciello (AMD) <[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/amd: pmc: Add Lenovo Legion Go 2 to pmc quirk list [+ + +]
Author: Antheas Kapenekakis <[email protected]>
Date:   Wed Oct 8 15:50:57 2025 +0200

    platform/x86/amd: pmc: Add Lenovo Legion Go 2 to pmc quirk list
    
    [ Upstream commit f945afe01c6768dcfed7868c671a26e1164c2284 ]
    
    The Lenovo Legion Go 2 takes a long time to resume from suspend.
    This is due to it having an nvme resume handler that interferes
    with IOMMU mappings. It is a common issue with older Lenovo
    laptops. Adding it to that quirk list fixes this issue.
    
    Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/4618
    Suggested-by: Mario Limonciello <[email protected]>
    Signed-off-by: Antheas Kapenekakis <[email protected]>
    Reviewed-by: Mario Limonciello (AMD) <[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: acer-wmi: Ignore backlight event [+ + +]
Author: Armin Wolf <[email protected]>
Date:   Mon Nov 17 16:59:38 2025 +0100

    platform/x86: acer-wmi: Ignore backlight event
    
    [ Upstream commit 444a9256f8d106e08a6bc2dc8ef28a8699e4b3ba ]
    
    On the Acer Nitro AN515-58, the event 4 - 0 is send by the ACPI
    firmware when the backlight up/down keys are pressed. Ignore this
    event to avoid spamming the kernel log with error messages, as the
    acpi-video driver already handles brightness up/down events.
    
    Reported-by: Bugaddr <[email protected]>
    Closes: https://bugaddr.tech/posts/2025-11-16-debugging-the-acer-nitro-5-an515-58-fn-f10-keyboard-backlight-bug-on-linux/#wmi-interface-issues
    Tested-by: Bugaddr <[email protected]>
    Signed-off-by: Armin Wolf <[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: huawei-wmi: add keys for HONOR models [+ + +]
Author: Jia Ston <[email protected]>
Date:   Wed Oct 29 05:18:38 2025 +0000

    platform/x86: huawei-wmi: add keys for HONOR models
    
    [ Upstream commit 5c72329716d0858621021193330594d5d26bf44d ]
    
    HONOR MagicBook X16/X14 models produced in 2025 cannot use the Print
    Screen and YOYO keys properly, with the system reporting them as
    unknown key presses (codes: 0x028b and 0x028e).
    
    To resolve this, a key_entry is added for both the HONOR Print Screen
    key and the HONOR YOYO key, ensuring they function correctly on these
    models.
    
    Signed-off-by: Ston Jia <[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]>

 
Revert "xfrm: destroy xfrm_state synchronously on net exit path" [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Jul 29 17:11:53 2025 -0400

    Revert "xfrm: destroy xfrm_state synchronously on net exit path"
    
    [ Upstream commit 2a198bbec6913ae1c90ec963750003c6213668c7 ]
    
    This reverts commit f75a2804da391571563c4b6b29e7797787332673.
    
    With all states (whether user or kern) removed from the hashtables
    during deletion, there's no need for synchronous destruction of
    states. xfrm6_tunnel states still need to have been destroyed (which
    will be the case when its last user is deleted (not destroyed)) so
    that xfrm6_tunnel_free_spi removes it from the per-netns hashtable
    before the netns is destroyed.
    
    This has the benefit of skipping one synchronize_rcu per state (in
    __xfrm_state_destroy(sync=true)) when we exit a netns.
    
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
samples: work around glibc redefining some of our defines wrong [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Fri Nov 21 09:29:02 2025 -0800

    samples: work around glibc redefining some of our defines wrong
    
    [ Upstream commit a48f822908982353c3256e35a089e9e7d0d61580 ]
    
    Apparently as of version 2.42, glibc headers define AT_RENAME_NOREPLACE
    and some of the other flags for renameat2() and friends in <stdio.h>.
    
    Which would all be fine, except for inexplicable reasons glibc decided
    to define them _differently_ from the kernel definitions, which then
    makes some of our sample code that includes both kernel headers and user
    space headers unhappy, because the compiler will (correctly) complain
    about redefining things.
    
    Now, mixing kernel headers and user space headers is always a somewhat
    iffy proposition due to namespacing issues, but it's kind of inevitable
    in our sample and selftest code.  And this is just glibc being stupid.
    
    Those defines come from the kernel, glibc is exposing the kernel
    interfaces, and glibc shouldn't make up some random new expressions for
    these values.
    
    It's not like glibc headers changed the actual result values, but they
    arbitrarily just decided to use a different expression to describe those
    values.  The kernel just does
    
        #define AT_RENAME_NOREPLACE  0x0001
    
    while glibc does
    
        # define RENAME_NOREPLACE (1 << 0)
        # define AT_RENAME_NOREPLACE RENAME_NOREPLACE
    
    instead.  Same value in the end, but very different macro definition.
    
    For absolutely no reason.
    
    This has since been fixed in the glibc development tree, so eventually
    we'll end up with the canonical expressions and no clashes.  But in the
    meantime the broken headers are in the glibc-2.42 release and have made
    it out into distributions.
    
    Do a minimal work-around to make the samples build cleanly by just
    undefining the affected macros in between the user space header include
    and the kernel header includes.
    
    Signed-off-by: Linus Torvalds <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
serial: add support of CPCI cards [+ + +]
Author: Magne Bruno <[email protected]>
Date:   Mon Nov 10 17:24:56 2025 +0100

    serial: add support of CPCI cards
    
    commit 0e5a99e0e5f50353b86939ff6e424800d769c818 upstream.
    
    Addi-Data GmbH is manufacturing multi-serial ports cards supporting CompactPCI (known as CPCI).
    Those cards are identified with different DeviceIds. Those cards integrating standard UARTs
    work the same way as PCI/PCIe models already supported in the serial driver.
    
    Signed-off-by: Magne Bruno <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
smb: fix invalid username check in smb3_fs_context_parse_param() [+ + +]
Author: Yiqi Sun <[email protected]>
Date:   Tue Nov 11 15:05:39 2025 +0800

    smb: fix invalid username check in smb3_fs_context_parse_param()
    
    [ Upstream commit ed6612165b74f09db00ef0abaf9831895ab28b7f ]
    
    Since the maximum return value of strnlen(..., CIFS_MAX_USERNAME_LEN)
    is CIFS_MAX_USERNAME_LEN, length check in smb3_fs_context_parse_param()
    is always FALSE and invalid.
    
    Fix the comparison in if statement.
    
    Signed-off-by: Yiqi Sun <[email protected]>
    Signed-off-by: Steve French <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
spi: imx: keep dma request disabled before dma transfer setup [+ + +]
Author: Robin Gong <[email protected]>
Date:   Fri Oct 24 13:53:20 2025 +0800

    spi: imx: keep dma request disabled before dma transfer setup
    
    [ Upstream commit 86d57d9c07d54e8cb385ffe800930816ccdba0c1 ]
    
    Since sdma hardware configure postpone to transfer phase, have to disable
    dma request before dma transfer setup because there is a hardware
    limitation on sdma event enable(ENBLn) as below:
    
    "It is thus essential for the Arm platform to program them before any DMA
     request is triggered to the SDMA, otherwise an unpredictable combination
     of channels may be started."
    
    Signed-off-by: Carlos Song <[email protected]>
    Signed-off-by: Robin Gong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

spi: xilinx: increase number of retries before declaring stall [+ + +]
Author: Alvaro Gamez Machado <[email protected]>
Date:   Thu Nov 6 14:45:35 2025 +0100

    spi: xilinx: increase number of retries before declaring stall
    
    [ Upstream commit 939edfaa10f1d22e6af6a84bf4bd96dc49c67302 ]
    
    SPI devices using a (relative) slow frequency need a larger time.
    
    For instance, microblaze running at 83.25MHz and performing a
    3 bytes transaction using a 10MHz/16 = 625kHz needed this stall
    value increased to at least 20. The SPI device is quite slow, but
    also is the microblaze, so set this value to 32 to give it even
    more margin.
    
    Signed-off-by: Alvaro Gamez Machado <[email protected]>
    Reviewed-by: Ricardo Ribalda <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
staging: rtl8723bs: fix out-of-bounds read in OnBeacon ESR IE parsing [+ + +]
Author: Navaneeth K <[email protected]>
Date:   Thu Nov 20 16:35:20 2025 +0000

    staging: rtl8723bs: fix out-of-bounds read in OnBeacon ESR IE parsing
    
    commit 502ddcc405b69fa92e0add6c1714d654504f6fd7 upstream.
    
    The Extended Supported Rates (ESR) IE handling in OnBeacon accessed
    *(p + 1 + ielen) and *(p + 2 + ielen) without verifying that these
    offsets lie within the received frame buffer. A malformed beacon with
    an ESR IE positioned at the end of the buffer could cause an
    out-of-bounds read, potentially triggering a kernel panic.
    
    Add a boundary check to ensure that the ESR IE body and the subsequent
    bytes are within the limits of the frame before attempting to access
    them.
    
    This prevents OOB reads caused by malformed beacon frames.
    
    Signed-off-by: Navaneeth K <[email protected]>
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: fix out-of-bounds read in rtw_get_ie() parser [+ + +]
Author: Navaneeth K <[email protected]>
Date:   Thu Nov 20 16:23:52 2025 +0000

    staging: rtl8723bs: fix out-of-bounds read in rtw_get_ie() parser
    
    commit 154828bf9559b9c8421fc2f0d7f7f76b3683aaed upstream.
    
    The Information Element (IE) parser rtw_get_ie() trusted the length
    byte of each IE without validating that the IE body (len bytes after
    the 2-byte header) fits inside the remaining frame buffer. A malformed
    frame can advertise an IE length larger than the available data, causing
    the parser to increment its pointer beyond the buffer end. This results
    in out-of-bounds reads or, depending on the pattern, an infinite loop.
    
    Fix by validating that (offset + 2 + len) does not exceed the limit
    before accepting the IE or advancing to the next element.
    
    This prevents OOB reads and ensures the parser terminates safely on
    malformed frames.
    
    Signed-off-by: Navaneeth K <[email protected]>
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing [+ + +]
Author: Navaneeth K <[email protected]>
Date:   Thu Nov 20 16:33:08 2025 +0000

    staging: rtl8723bs: fix stack buffer overflow in OnAssocReq IE parsing
    
    commit 6ef0e1c10455927867cac8f0ed6b49f328f8cf95 upstream.
    
    The Supported Rates IE length from an incoming Association Request frame
    was used directly as the memcpy() length when copying into a fixed-size
    16-byte stack buffer (supportRate). A malicious station can advertise an
    IE length larger than 16 bytes, causing a stack buffer overflow.
    
    Clamp ie_len to the buffer size before copying the Supported Rates IE,
    and correct the bounds check when merging Extended Supported Rates to
    prevent a second potential overflow.
    
    This prevents kernel stack corruption triggered by malformed association
    requests.
    
    Signed-off-by: Navaneeth K <[email protected]>
    Cc: stable <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: serial: belkin_sa: fix TIOCMBIS and TIOCMBIC [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Oct 22 17:26:33 2025 +0200

    USB: serial: belkin_sa: fix TIOCMBIS and TIOCMBIC
    
    commit b6e0b3016187446ddef9edac03cd9d544ac63f11 upstream.
    
    Asserting or deasserting a modem control line using TIOCMBIS or TIOCMBIC
    should not deassert any lines that are not in the mask.
    
    Fix this long-standing regression dating back to 2003 when the
    tiocmset() callback was introduced.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: ftdi_sio: match on interface number for jtag [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 10 12:12:05 2025 +0100

    USB: serial: ftdi_sio: match on interface number for jtag
    
    commit 4e31a5d0a9ee672f708fc993c1d5520643f769fd upstream.
    
    Some FTDI devices have the first port reserved for JTAG and have been
    using a dedicated quirk to prevent binding to it.
    
    As can be inferred directly or indirectly from the commit messages,
    almost all of these devices are dual port devices which means that the
    more recently added macro for matching on interface number can be used
    instead (and some such devices do so already).
    
    This avoids probing interfaces that will never be bound and cleans up
    the match table somewhat.
    
    Note that the JTAG quirk is kept for quad port devices, which would
    otherwise require three match entries.
    
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: kobil_sct: fix TIOCMBIS and TIOCMBIC [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Oct 22 17:26:34 2025 +0200

    USB: serial: kobil_sct: fix TIOCMBIS and TIOCMBIC
    
    commit d432df758f92c4c28aac409bc807fd1716167577 upstream.
    
    Asserting or deasserting a modem control line using TIOCMBIS or TIOCMBIC
    should not deassert any lines that are not in the mask.
    
    Fix this long-standing issue dating back to 2003 when the support for
    these ioctls was added with the introduction of the tiocmset() callback.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: [email protected]
    Reviewed-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Foxconn T99W760 [+ + +]
Author: Slark Xiao <[email protected]>
Date:   Tue Nov 18 14:45:28 2025 +0800

    USB: serial: option: add Foxconn T99W760
    
    commit 7970b4969c4c99bcdaf105f9f39c6d2021f6d244 upstream.
    
    T99W760 is designed based on Qualcomm SDX35 (5G redcap) chip. There are
    three serial ports to be enumerated: Modem, NMEA and Diag.
    
    test evidence as below:
    T:  Bus=03 Lev=01 Prnt=01 Port=03 Cnt=01 Dev#=  4 Spd=5000  MxCh= 0
    D:  Ver= 3.20 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=0489 ProdID=e123 Rev=05.15
    S:  Manufacturer=QCOM
    S:  Product=SDXBAAGHA-IDP _SN:39A8D3E4
    S:  SerialNumber=39a8d3e4
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 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=1024 Ivl=0ms
    E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=84(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 3 Alt= 0 #EPs= 1 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
    E:  Ad=85(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=40 Driver=option
    E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=87(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    E:  Ad=88(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
    
    0&1: MBIM, 2:Modem, 3:GNSS(non-serial port), 4: NMEA, 5:Diag
    
    Signed-off-by: Slark Xiao <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit Cinterion FE910C04 new compositions [+ + +]
Author: Fabio Porcedda <[email protected]>
Date:   Wed Nov 26 15:26:39 2025 +0100

    USB: serial: option: add Telit Cinterion FE910C04 new compositions
    
    commit c908039a29aa70870871f4848125b3d743f929bf upstream.
    
    Add the following Telit Cinterion new compositions:
    
    0x10c1: RNDIS + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c1 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    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
    
    0x10c2: MBIM + tty (AT/NMEA) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  8 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c2 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    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
    
    0x10c3: ECM + 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=10c3 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=06 Prot=00 Driver=cdc_ether
    E:  Ad=82(I) Atr=03(Int.) MxPS=  16 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=cdc_ether
    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
    
    0x10c5: RNDIS + tty (AT) + 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=10c5 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    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
    
    0x10c6: MBIM + tty (AT) + tty (AT) + tty (diag)
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 11 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c6 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 5 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    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
    
    0x10c9: MBIM + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 13 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=10c9 Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    C:  #Ifs= 6 Cfg#= 1 Atr=e0 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 1 Cls=02(commc) Sub=0e Prot=00 Driver=cdc_mbim
    E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=32ms
    I:  If#= 1 Alt= 1 #EPs= 2 Cls=0a(data ) Sub=00 Prot=02 Driver=cdc_mbim
    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=usbfs
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    
    0x10cb: RNDIS + tty (AT) + tty (diag) + DPL (Data Packet Logging) + adb
    T:  Bus=01 Lev=01 Prnt=01 Port=09 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=10cb Rev=05.15
    S:  Manufacturer=Telit Cinterion
    S:  Product=FE910
    S:  SerialNumber=f71b8b32
    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]>

USB: serial: option: move Telit 0x10c7 composition in the right place [+ + +]
Author: Fabio Porcedda <[email protected]>
Date:   Wed Nov 26 15:26:40 2025 +0100

    USB: serial: option: move Telit 0x10c7 composition in the right place
    
    commit 072f2c49572547f4b0776fe2da6b8f61e4b34699 upstream.
    
    Move Telit 0x10c7 composition right after 0x10c6 composition and
    before 0x10c8 composition.
    
    Signed-off-by: Fabio Porcedda <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: rtl8xxxu: Add USB ID 2001:3328 for D-Link AN3U rev. A1 [+ + +]
Author: Zenm Chen <[email protected]>
Date:   Mon Sep 29 11:57:18 2025 +0800

    wifi: rtl8xxxu: Add USB ID 2001:3328 for D-Link AN3U rev. A1
    
    commit 3f9553f65d0b77b724565bbe42c4daa3fab57d5c upstream.
    
    Add USB ID 2001:3328 for D-Link AN3U rev. A1 which is a RTL8192FU-based
    Wi-Fi adapter.
    
    Compile tested only.
    
    Cc: [email protected] # 6.6.x
    Signed-off-by: Zenm Chen <[email protected]>
    Reviewed-by: Ping-Ke Shih <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: rtw88: Add USB ID 2001:3329 for D-Link AC13U rev. A1 [+ + +]
Author: Zenm Chen <[email protected]>
Date:   Mon Sep 29 11:57:19 2025 +0800

    wifi: rtw88: Add USB ID 2001:3329 for D-Link AC13U rev. A1
    
    commit b377dcd9a286a6f81922ae442cd1c743bc4a2b35 upstream.
    
    Add USB ID 2001:3329 for D-Link AC13U rev. A1 which is a RTL8812CU-based
    Wi-Fi adapter.
    
    Compile tested only.
    
    Cc: [email protected] # 6.6.x
    Signed-off-by: Zenm Chen <[email protected]>
    Acked-by: Ping-Ke Shih <[email protected]>
    Signed-off-by: Ping-Ke Shih <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfrm: also call xfrm_state_delete_tunnel at destroy time for states that were never added [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Thu Dec 4 17:43:27 2025 -0500

    xfrm: also call xfrm_state_delete_tunnel at destroy time for states that were never added
    
    [ Upstream commit 10deb69864840ccf96b00ac2ab3a2055c0c04721 ]
    
    In commit b441cf3f8c4b ("xfrm: delete x->tunnel as we delete x"), I
    missed the case where state creation fails between full
    initialization (->init_state has been called) and being inserted on
    the lists.
    
    In this situation, ->init_state has been called, so for IPcomp
    tunnels, the fallback tunnel has been created and added onto the
    lists, but the user state never gets added, because we fail before
    that. The user state doesn't go through __xfrm_state_delete, so we
    don't call xfrm_state_delete_tunnel for those states, and we end up
    leaking the FB tunnel.
    
    There are several codepaths affected by this: the add/update paths, in
    both net/key and xfrm, and the migrate code (xfrm_migrate,
    xfrm_state_migrate). A "proper" rollback of the init_state work would
    probably be doable in the add/update code, but for migrate it gets
    more complicated as multiple states may be involved.
    
    At some point, the new (not-inserted) state will be destroyed, so call
    xfrm_state_delete_tunnel during xfrm_state_gc_destroy. Most states
    will have their fallback tunnel cleaned up during __xfrm_state_delete,
    which solves the issue that b441cf3f8c4b (and other patches before it)
    aimed at. All states (including FB tunnels) will be removed from the
    lists once xfrm_state_fini has called flush_work(&xfrm_state_gc_work).
    
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=999eb23467f83f9bf9bf
    Fixes: b441cf3f8c4b ("xfrm: delete x->tunnel as we delete x")
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

xfrm: delete x->tunnel as we delete x [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Tue Jul 29 17:11:52 2025 -0400

    xfrm: delete x->tunnel as we delete x
    
    [ Upstream commit b441cf3f8c4b8576639d20c8eb4aa32917602ecd ]
    
    The ipcomp fallback tunnels currently get deleted (from the various
    lists and hashtables) as the last user state that needed that fallback
    is destroyed (not deleted). If a reference to that user state still
    exists, the fallback state will remain on the hashtables/lists,
    triggering the WARN in xfrm_state_fini. Because of those remaining
    references, the fix in commit f75a2804da39 ("xfrm: destroy xfrm_state
    synchronously on net exit path") is not complete.
    
    We recently fixed one such situation in TCP due to defered freeing of
    skbs (commit 9b6412e6979f ("tcp: drop secpath at the same time as we
    currently drop dst")). This can also happen due to IP reassembly: skbs
    with a secpath remain on the reassembly queue until netns
    destruction. If we can't guarantee that the queues are flushed by the
    time xfrm_state_fini runs, there may still be references to a (user)
    xfrm_state, preventing the timely deletion of the corresponding
    fallback state.
    
    Instead of chasing each instance of skbs holding a secpath one by one,
    this patch fixes the issue directly within xfrm, by deleting the
    fallback state as soon as the last user state depending on it has been
    deleted. Destruction will still happen when the final reference is
    dropped.
    
    A separate lockdep class for the fallback state is required since
    we're going to lock x->tunnel while x is locked.
    
    Fixes: 9d4139c76905 ("netns xfrm: per-netns xfrm_state_all list")
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
xfrm: flush all states in xfrm_state_fini [+ + +]
Author: Sabrina Dubroca <[email protected]>
Date:   Mon Aug 4 11:05:43 2025 +0200

    xfrm: flush all states in xfrm_state_fini
    
    [ Upstream commit 42e42562c9cfcdacf000f1b42284a4fad24f8546 ]
    
    While reverting commit f75a2804da39 ("xfrm: destroy xfrm_state
    synchronously on net exit path"), I incorrectly changed
    xfrm_state_flush's "proto" argument back to IPSEC_PROTO_ANY. This
    reverts some of the changes in commit dbb2483b2a46 ("xfrm: clean up
    xfrm protocol checks"), and leads to some states not being removed
    when we exit the netns.
    
    Pass 0 instead of IPSEC_PROTO_ANY from both xfrm_state_fini
    xfrm6_tunnel_net_exit, so that xfrm_state_flush deletes all states.
    
    Fixes: 2a198bbec691 ("Revert "xfrm: destroy xfrm_state synchronously on net exit path"")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=6641a61fe0e2e89ae8c5
    Tested-by: [email protected]
    Signed-off-by: Sabrina Dubroca <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Signed-off-by: Steffen Klassert <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>