Changelog in Linux kernel 5.10.249

 
ALSA: ctxfi: Fix potential OOB access in audio mixer handling [+ + +]
Author: Takashi Iwai <[email protected]>
Date:   Mon Jan 19 14:32:07 2026 +0100

    ALSA: ctxfi: Fix potential OOB access in audio mixer handling
    
    commit 61006c540cbdedea83b05577dc7fb7fa18fe1276 upstream.
    
    In the audio mixer handling code of ctxfi driver, the conf field is
    used as a kind of loop index, and it's referred in the index callbacks
    (amixer_index() and sum_index()).
    
    As spotted recently by fuzzers, the current code causes OOB access at
    those functions.
    | UBSAN: array-index-out-of-bounds in /build/reproducible-path/linux-6.17.8/sound/pci/ctxfi/ctamixer.c:347:48
    | index 8 is out of range for type 'unsigned char [8]'
    
    After the analysis, the cause was found to be the lack of the proper
    (re-)initialization of conj field.
    
    This patch addresses those OOB accesses by adding the proper
    initializations of the loop indices.
    
    Reported-by: Salvatore Bonaccorso <[email protected]>
    Tested-by: Karsten Hohmeier <[email protected]>
    Closes: https://bugs.debian.org/1121535
    Cc: <[email protected]>
    Link: https://lore.kernel.org/all/[email protected]/
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer [+ + +]
Author: Jaroslav Kysela <[email protected]>
Date:   Wed Jan 7 22:36:42 2026 +0100

    ALSA: pcm: Improve the fix for race of buffer access at PCM OSS layer
    
    commit 47c27c9c9c720bc93fdc69605d0ecd9382e99047 upstream.
    
    Handle the error code from snd_pcm_buffer_access_lock() in
    snd_pcm_runtime_buffer_set_silence() function.
    
    Found by Alexandros Panagiotou <[email protected]>
    
    Fixes: 93a81ca06577 ("ALSA: pcm: Fix race of buffer access at PCM OSS layer")
    Cc: [email protected] # 6.15
    Signed-off-by: Jaroslav Kysela <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb-audio: Fix use-after-free in snd_usb_mixer_free() [+ + +]
Author: Berk Cem Goksel <[email protected]>
Date:   Tue Jan 20 13:28:55 2026 +0300

    ALSA: usb-audio: Fix use-after-free in snd_usb_mixer_free()
    
    commit 930e69757b74c3ae083b0c3c7419bfe7f0edc7b2 upstream.
    
    When snd_usb_create_mixer() fails, snd_usb_mixer_free() frees
    mixer->id_elems but the controls already added to the card still
    reference the freed memory. Later when snd_card_register() runs,
    the OSS mixer layer calls their callbacks and hits a use-after-free read.
    
    Call trace:
      get_ctl_value+0x63f/0x820 sound/usb/mixer.c:411
      get_min_max_with_quirks.isra.0+0x240/0x1f40 sound/usb/mixer.c:1241
      mixer_ctl_feature_info+0x26b/0x490 sound/usb/mixer.c:1381
      snd_mixer_oss_build_test+0x174/0x3a0 sound/core/oss/mixer_oss.c:887
      ...
      snd_card_register+0x4ed/0x6d0 sound/core/init.c:923
      usb_audio_probe+0x5ef/0x2a90 sound/usb/card.c:1025
    
    Fix by calling snd_ctl_remove() for all mixer controls before freeing
    id_elems. We save the next pointer first because snd_ctl_remove()
    frees the current element.
    
    Fixes: 6639b6c2367f ("[ALSA] usb-audio - add mixer control notifications")
    Cc: [email protected]
    Cc: Andrey Konovalov <[email protected]>
    Signed-off-by: Berk Cem Goksel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

ALSA: usb: Increase volume range that triggers a warning [+ + +]
Author: Arun Raghavan <[email protected]>
Date:   Fri Jan 16 14:58:04 2026 -0800

    ALSA: usb: Increase volume range that triggers a warning
    
    [ Upstream commit 6b971191fcfc9e3c2c0143eea22534f1f48dbb62 ]
    
    On at least the HyperX Cloud III, the range is 18944 (-18944 -> 0 in
    steps of 1), so the original check for 255 steps is definitely obsolete.
    Let's give ourselves a little more headroom before we emit a warning.
    
    Fixes: 80acefff3bc7 ("ALSA: usb-audio - Add volume range check and warn if it too big")
    Cc: Jaroslav Kysela <[email protected]>
    Cc: Takashi Iwai <[email protected]>
    Cc: [email protected]
    Signed-off-by: Arun Raghavan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Takashi Iwai <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
amd-xgbe: avoid misleading per-packet error log [+ + +]
Author: Raju Rangoju <[email protected]>
Date:   Wed Jan 14 22:00:37 2026 +0530

    amd-xgbe: avoid misleading per-packet error log
    
    [ Upstream commit c158f985cf6c2c36c99c4f67af2ff3f5ebe09f8f ]
    
    On the receive path, packet can be damaged because of buffer
    overflow in Rx FIFO. Avoid misleading per-packet error log when
    packet->errors is set, this can flood the log. Instead, rely on the
    standard rtnl_link_stats64 stats.
    
    Fixes: c5aa9e3b8156 ("amd-xgbe: Initial AMD 10GbE platform driver")
    Signed-off-by: Raju Rangoju <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ASoC: tlv320adcx140: fix word length [+ + +]
Author: Emil Svendsen <[email protected]>
Date:   Tue Jan 13 11:58:47 2026 +0100

    ASoC: tlv320adcx140: fix word length
    
    [ Upstream commit 46378ab9fcb796dca46b51e10646f636e2c661f9 ]
    
    The word length is the physical width of the channel slots. So the
    hw_params would misconfigure when format width and physical width
    doesn't match. Like S24_LE which has data width of 24 bits but physical
    width of 32 bits. So if using asymmetric formats you will get a lot of
    noise.
    
    Fixes: 689c7655b50c5 ("ASoC: tlv320adcx140: Add the tlv320adcx140 codec driver family")
    Signed-off-by: Emil Svendsen <[email protected]>
    Signed-off-by: Sascha Hauer <[email protected]>
    Link: https://patch.msgid.link/20260113-sound-soc-codecs-tvl320adcx140-v4-4-8f7ecec525c8@pengutronix.de
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
be2net: Fix NULL pointer dereference in be_cmd_get_mac_from_list [+ + +]
Author: Andrey Vatoropin <[email protected]>
Date:   Tue Jan 20 11:37:47 2026 +0000

    be2net: Fix NULL pointer dereference in be_cmd_get_mac_from_list
    
    [ Upstream commit 8215794403d264739cc676668087512950b2ff31 ]
    
    When the parameter pmac_id_valid argument of be_cmd_get_mac_from_list() is
    set to false, the driver may request the PMAC_ID from the firmware of the
    network card, and this function will store that PMAC_ID at the provided
    address pmac_id. This is the contract of this function.
    
    However, there is a location within the driver where both
    pmac_id_valid == false and pmac_id == NULL are being passed. This could
    result in dereferencing a NULL pointer.
    
    To resolve this issue, it is necessary to pass the address of a stub
    variable to the function.
    
    Fixes: 95046b927a54 ("be2net: refactor MAC-addr setup code")
    Signed-off-by: Andrey Vatoropin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work [+ + +]
Author: Jia-Hong Su <[email protected]>
Date:   Sun Jan 18 20:08:59 2026 +0800

    Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work
    
    [ Upstream commit 0c3cd7a0b862c37acbee6d9502107146cc944398 ]
    
    hci_uart_set_proto() sets HCI_UART_PROTO_INIT before calling
    hci_uart_register_dev(), which calls proto->open() to initialize
    hu->priv. However, if a TTY write wakeup occurs during this window,
    hci_uart_tx_wakeup() may schedule write_work before hu->priv is
    initialized, leading to a NULL pointer dereference in
    hci_uart_write_work() when proto->dequeue() accesses hu->priv.
    
    The race condition is:
    
      CPU0                              CPU1
      ----                              ----
      hci_uart_set_proto()
        set_bit(HCI_UART_PROTO_INIT)
        hci_uart_register_dev()
                                        tty write wakeup
                                          hci_uart_tty_wakeup()
                                            hci_uart_tx_wakeup()
                                              schedule_work(&hu->write_work)
          proto->open(hu)
            // initializes hu->priv
                                        hci_uart_write_work()
                                          hci_uart_dequeue()
                                            proto->dequeue(hu)
                                              // accesses hu->priv (NULL!)
    
    Fix this by moving set_bit(HCI_UART_PROTO_INIT) after proto->open()
    succeeds, ensuring hu->priv is initialized before any work can be
    scheduled.
    
    Fixes: 5df5dafc171b ("Bluetooth: hci_uart: Fix another race during initialization")
    Link: https://lore.kernel.org/linux-bluetooth/[email protected]/
    
    Signed-off-by: Jia-Hong Su <[email protected]>
    Signed-off-by: Luiz Augusto von Dentz <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
bonding: provide a net pointer to __skb_flow_dissect() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Tue Jan 20 16:17:44 2026 +0000

    bonding: provide a net pointer to __skb_flow_dissect()
    
    commit 5f9b329096596b7e53e07d041d7fca4cbe1be752 upstream.
    
    After 3cbf4ffba5ee ("net: plumb network namespace into __skb_flow_dissect")
    we have to provide a net pointer to __skb_flow_dissect(),
    either via skb->dev, skb->sk, or a user provided pointer.
    
    In the following case, syzbot was able to cook a bare skb.
    
    WARNING: net/core/flow_dissector.c:1131 at __skb_flow_dissect+0xb57/0x68b0 net/core/flow_dissector.c:1131, CPU#1: syz.2.1418/11053
    Call Trace:
     <TASK>
      bond_flow_dissect drivers/net/bonding/bond_main.c:4093 [inline]
      __bond_xmit_hash+0x2d7/0xba0 drivers/net/bonding/bond_main.c:4157
      bond_xmit_hash_xdp drivers/net/bonding/bond_main.c:4208 [inline]
      bond_xdp_xmit_3ad_xor_slave_get drivers/net/bonding/bond_main.c:5139 [inline]
      bond_xdp_get_xmit_slave+0x1fd/0x710 drivers/net/bonding/bond_main.c:5515
      xdp_master_redirect+0x13f/0x2c0 net/core/filter.c:4388
      bpf_prog_run_xdp include/net/xdp.h:700 [inline]
      bpf_test_run+0x6b2/0x7d0 net/bpf/test_run.c:421
      bpf_prog_test_run_xdp+0x795/0x10e0 net/bpf/test_run.c:1390
      bpf_prog_test_run+0x2c7/0x340 kernel/bpf/syscall.c:4703
      __sys_bpf+0x562/0x860 kernel/bpf/syscall.c:6182
      __do_sys_bpf kernel/bpf/syscall.c:6274 [inline]
      __se_sys_bpf kernel/bpf/syscall.c:6272 [inline]
      __x64_sys_bpf+0x7c/0x90 kernel/bpf/syscall.c:6272
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xec/0xf80 arch/x86/entry/syscall_64.c:94
    
    Fixes: 58deb77cc52d ("bonding: balance ICMP echoes in layer3+4 mode")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Matteo Croce <[email protected]>
    Acked-by: Stanislav Fomichev <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
bpf: Do not let BPF test infra emit invalid GSO types to stack [+ + +]
Author: Daniel Borkmann <[email protected]>
Date:   Mon Oct 20 09:54:41 2025 +0200

    bpf: Do not let BPF test infra emit invalid GSO types to stack
    
    commit 04a899573fb87273a656f178b5f920c505f68875 upstream.
    
    Yinhao et al. reported that their fuzzer tool was able to trigger a
    skb_warn_bad_offload() from netif_skb_features() -> gso_features_check().
    When a BPF program - triggered via BPF test infra - pushes the packet
    to the loopback device via bpf_clone_redirect() then mentioned offload
    warning can be seen. GSO-related features are then rightfully disabled.
    
    We get into this situation due to convert___skb_to_skb() setting
    gso_segs and gso_size but not gso_type. Technically, it makes sense
    that this warning triggers since the GSO properties are malformed due
    to the gso_type. Potentially, the gso_type could be marked non-trustworthy
    through setting it at least to SKB_GSO_DODGY without any other specific
    assumptions, but that also feels wrong given we should not go further
    into the GSO engine in the first place.
    
    The checks were added in 121d57af308d ("gso: validate gso_type in GSO
    handlers") because there were malicious (syzbot) senders that combine
    a protocol with a non-matching gso_type. If we would want to drop such
    packets, gso_features_check() currently only returns feature flags via
    netif_skb_features(), so one location for potentially dropping such skbs
    could be validate_xmit_unreadable_skb(), but then otoh it would be
    an additional check in the fast-path for a very corner case. Given
    bpf_clone_redirect() is the only place where BPF test infra could emit
    such packets, lets reject them right there.
    
    Fixes: 850a88cc4096 ("bpf: Expose __sk_buff wire_len/gso_segs to BPF_PROG_TEST_RUN")
    Fixes: cf62089b0edd ("bpf: Add gso_size to __sk_buff")
    Reported-by: Yinhao Hu <[email protected]>
    Reported-by: Kaiyan Mei <[email protected]>
    Reported-by: Dongliang Mu <[email protected]>
    Signed-off-by: Daniel Borkmann <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

bpf: Reject narrower access to pointer ctx fields [+ + +]
Author: Paul Chaignon <[email protected]>
Date:   Tue Jul 22 16:32:32 2025 +0200

    bpf: Reject narrower access to pointer ctx fields
    
    commit e09299225d5ba3916c91ef70565f7d2187e4cca0 upstream.
    
    The following BPF program, simplified from a syzkaller repro, causes a
    kernel warning:
    
        r0 = *(u8 *)(r1 + 169);
        exit;
    
    With pointer field sk being at offset 168 in __sk_buff. This access is
    detected as a narrower read in bpf_skb_is_valid_access because it
    doesn't match offsetof(struct __sk_buff, sk). It is therefore allowed
    and later proceeds to bpf_convert_ctx_access. Note that for the
    "is_narrower_load" case in the convert_ctx_accesses(), the insn->off
    is aligned, so the cnt may not be 0 because it matches the
    offsetof(struct __sk_buff, sk) in the bpf_convert_ctx_access. However,
    the target_size stays 0 and the verifier errors with a kernel warning:
    
        verifier bug: error during ctx access conversion(1)
    
    This patch fixes that to return a proper "invalid bpf_context access
    off=X size=Y" error on the load instruction.
    
    The same issue affects multiple other fields in context structures that
    allow narrow access. Some other non-affected fields (for sk_msg,
    sk_lookup, and sockopt) were also changed to use bpf_ctx_range_ptr for
    consistency.
    
    Note this syzkaller crash was reported in the "Closes" link below, which
    used to be about a different bug, fixed in
    commit fce7bd8e385a ("bpf/verifier: Handle BPF_LOAD_ACQ instructions
    in insn_def_regno()"). Because syzbot somehow confused the two bugs,
    the new crash and repro didn't get reported to the mailing list.
    
    Fixes: f96da09473b52 ("bpf: simplify narrower ctx access")
    Fixes: 0df1a55afa832 ("bpf: Warn on internal verifier errors")
    Reported-by: [email protected]
    Closes: https://syzkaller.appspot.com/bug?extid=0ef84a7bdf5301d4cbec
    Signed-off-by: Paul Chaignon <[email protected]>
    Signed-off-by: Martin KaFai Lau <[email protected]>
    Acked-by: Eduard Zingerman <[email protected]>
    Link: https://patch.msgid.link/3b8dcee67ff4296903351a974ddd9c4dca768b64.1753194596.git.paul.chaignon@gmail.com
    [shung-hsi.yu: offset(struct bpf_sock_ops, skb_hwtstamp) case was
    dropped becasuse it was only added in v6.2 with commit 9bb053490f1a
    ("bpf: Add hwtstamp field for the sockops prog")]
    Signed-off-by: Shung-Hsi Yu <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
btrfs: fix deadlock in wait_current_trans() due to ignored transaction type [+ + +]
Author: Robbie Ko <[email protected]>
Date:   Thu Dec 11 13:30:33 2025 +0800

    btrfs: fix deadlock in wait_current_trans() due to ignored transaction type
    
    commit 5037b342825df7094a4906d1e2a9674baab50cb2 upstream.
    
    When wait_current_trans() is called during start_transaction(), it
    currently waits for a blocked transaction without considering whether
    the given transaction type actually needs to wait for that particular
    transaction state. The btrfs_blocked_trans_types[] array already defines
    which transaction types should wait for which transaction states, but
    this check was missing in wait_current_trans().
    
    This can lead to a deadlock scenario involving two transactions and
    pending ordered extents:
    
      1. Transaction A is in TRANS_STATE_COMMIT_DOING state
    
      2. A worker processing an ordered extent calls start_transaction()
         with TRANS_JOIN
    
      3. join_transaction() returns -EBUSY because Transaction A is in
         TRANS_STATE_COMMIT_DOING
    
      4. Transaction A moves to TRANS_STATE_UNBLOCKED and completes
    
      5. A new Transaction B is created (TRANS_STATE_RUNNING)
    
      6. The ordered extent from step 2 is added to Transaction B's
         pending ordered extents
    
      7. Transaction B immediately starts commit by another task and
         enters TRANS_STATE_COMMIT_START
    
      8. The worker finally reaches wait_current_trans(), sees Transaction B
         in TRANS_STATE_COMMIT_START (a blocked state), and waits
         unconditionally
    
      9. However, TRANS_JOIN should NOT wait for TRANS_STATE_COMMIT_START
         according to btrfs_blocked_trans_types[]
    
      10. Transaction B is waiting for pending ordered extents to complete
    
      11. Deadlock: Transaction B waits for ordered extent, ordered extent
          waits for Transaction B
    
    This can be illustrated by the following call stacks:
      CPU0                              CPU1
                                        btrfs_finish_ordered_io()
                                          start_transaction(TRANS_JOIN)
                                            join_transaction()
                                              # -EBUSY (Transaction A is
                                              # TRANS_STATE_COMMIT_DOING)
      # Transaction A completes
      # Transaction B created
      # ordered extent added to
      # Transaction B's pending list
      btrfs_commit_transaction()
        # Transaction B enters
        # TRANS_STATE_COMMIT_START
        # waiting for pending ordered
        # extents
                                            wait_current_trans()
                                              # waits for Transaction B
                                              # (should not wait!)
    
    Task bstore_kv_sync in btrfs_commit_transaction waiting for ordered
    extents:
    
      __schedule+0x2e7/0x8a0
      schedule+0x64/0xe0
      btrfs_commit_transaction+0xbf7/0xda0 [btrfs]
      btrfs_sync_file+0x342/0x4d0 [btrfs]
      __x64_sys_fdatasync+0x4b/0x80
      do_syscall_64+0x33/0x40
      entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Task kworker in wait_current_trans waiting for transaction commit:
    
      Workqueue: btrfs-syno_nocow btrfs_work_helper [btrfs]
      __schedule+0x2e7/0x8a0
      schedule+0x64/0xe0
      wait_current_trans+0xb0/0x110 [btrfs]
      start_transaction+0x346/0x5b0 [btrfs]
      btrfs_finish_ordered_io.isra.0+0x49b/0x9c0 [btrfs]
      btrfs_work_helper+0xe8/0x350 [btrfs]
      process_one_work+0x1d3/0x3c0
      worker_thread+0x4d/0x3e0
      kthread+0x12d/0x150
      ret_from_fork+0x1f/0x30
    
    Fix this by passing the transaction type to wait_current_trans() and
    checking btrfs_blocked_trans_types[cur_trans->state] against the given
    type before deciding to wait. This ensures that transaction types which
    are allowed to join during certain blocked states will not unnecessarily
    wait and cause deadlocks.
    
    Reviewed-by: Filipe Manana <[email protected]>
    Signed-off-by: Robbie Ko <[email protected]>
    Signed-off-by: Filipe Manana <[email protected]>
    Reviewed-by: David Sterba <[email protected]>
    Signed-off-by: David Sterba <[email protected]>
    Cc: Motiejus Jakštys <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
can: ems_usb: ems_usb_read_bulk_callback(): fix URB memory leak [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Sat Jan 10 12:52:27 2026 +0100

    can: ems_usb: ems_usb_read_bulk_callback(): fix URB memory leak
    
    commit 0ce73a0eb5a27070957b67fd74059b6da89cc516 upstream.
    
    Fix similar memory leak as in commit 7352e1d5932a ("can: gs_usb:
    gs_usb_receive_bulk_callback(): fix URB memory leak").
    
    In ems_usb_open(), the URBs for USB-in transfers are allocated, added to
    the dev->rx_submitted anchor and submitted. In the complete callback
    ems_usb_read_bulk_callback(), the URBs are processed and resubmitted. In
    ems_usb_close() the URBs are freed by calling
    usb_kill_anchored_urbs(&dev->rx_submitted).
    
    However, this does not take into account that the USB framework unanchors
    the URB before the complete function is called. This means that once an
    in-URB has been completed, it is no longer anchored and is ultimately not
    released in ems_usb_close().
    
    Fix the memory leak by anchoring the URB in the
    ems_usb_read_bulk_callback() to the dev->rx_submitted anchor.
    
    Fixes: 702171adeed3 ("ems_usb: Added support for EMS CPC-USB/ARM7 CAN/USB interface")
    Cc: [email protected]
    Link: https://patch.msgid.link/20260116-can_usb-fix-memory-leak-v2-1-4b8cb2915571@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: esd_usb: esd_usb_read_bulk_callback(): fix URB memory leak [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Sat Jan 10 12:52:27 2026 +0100

    can: esd_usb: esd_usb_read_bulk_callback(): fix URB memory leak
    
    commit 5a4391bdc6c8357242f62f22069c865b792406b3 upstream.
    
    Fix similar memory leak as in commit 7352e1d5932a ("can: gs_usb:
    gs_usb_receive_bulk_callback(): fix URB memory leak").
    
    In esd_usb_open(), the URBs for USB-in transfers are allocated, added to
    the dev->rx_submitted anchor and submitted. In the complete callback
    esd_usb_read_bulk_callback(), the URBs are processed and resubmitted. In
    esd_usb_close() the URBs are freed by calling
    usb_kill_anchored_urbs(&dev->rx_submitted).
    
    However, this does not take into account that the USB framework unanchors
    the URB before the complete function is called. This means that once an
    in-URB has been completed, it is no longer anchored and is ultimately not
    released in esd_usb_close().
    
    Fix the memory leak by anchoring the URB in the
    esd_usb_read_bulk_callback() to the dev->rx_submitted anchor.
    
    Fixes: 96d8e90382dc ("can: Add driver for esd CAN-USB/2 device")
    Cc: [email protected]
    Link: https://patch.msgid.link/20260116-can_usb-fix-memory-leak-v2-2-4b8cb2915571@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: kvaser_usb: kvaser_usb_read_bulk_callback(): fix URB memory leak [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Sat Jan 10 12:52:27 2026 +0100

    can: kvaser_usb: kvaser_usb_read_bulk_callback(): fix URB memory leak
    
    commit 248e8e1a125fa875158df521b30f2cc7e27eeeaa upstream.
    
    Fix similar memory leak as in commit 7352e1d5932a ("can: gs_usb:
    gs_usb_receive_bulk_callback(): fix URB memory leak").
    
    In kvaser_usb_set_{,data_}bittiming() -> kvaser_usb_setup_rx_urbs(), the
    URBs for USB-in transfers are allocated, added to the dev->rx_submitted
    anchor and submitted. In the complete callback
    kvaser_usb_read_bulk_callback(), the URBs are processed and resubmitted. In
    kvaser_usb_remove_interfaces() the URBs are freed by calling
    usb_kill_anchored_urbs(&dev->rx_submitted).
    
    However, this does not take into account that the USB framework unanchors
    the URB before the complete function is called. This means that once an
    in-URB has been completed, it is no longer anchored and is ultimately not
    released in usb_kill_anchored_urbs().
    
    Fix the memory leak by anchoring the URB in the
    kvaser_usb_read_bulk_callback() to the dev->rx_submitted anchor.
    
    Fixes: 080f40a6fa28 ("can: kvaser_usb: Add support for Kvaser CAN/USB devices")
    Cc: [email protected]
    Link: https://patch.msgid.link/20260116-can_usb-fix-memory-leak-v2-3-4b8cb2915571@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: mcba_usb: mcba_usb_read_bulk_callback(): fix URB memory leak [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Sat Jan 10 12:52:27 2026 +0100

    can: mcba_usb: mcba_usb_read_bulk_callback(): fix URB memory leak
    
    commit 710a7529fb13c5a470258ff5508ed3c498d54729 upstream.
    
    Fix similar memory leak as in commit 7352e1d5932a ("can: gs_usb:
    gs_usb_receive_bulk_callback(): fix URB memory leak").
    
    In mcba_usb_probe() -> mcba_usb_start(), the URBs for USB-in transfers are
    allocated, added to the priv->rx_submitted anchor and submitted. In the
    complete callback mcba_usb_read_bulk_callback(), the URBs are processed and
    resubmitted. In mcba_usb_close() -> mcba_urb_unlink() the URBs are freed by
    calling usb_kill_anchored_urbs(&priv->rx_submitted).
    
    However, this does not take into account that the USB framework unanchors
    the URB before the complete function is called. This means that once an
    in-URB has been completed, it is no longer anchored and is ultimately not
    released in usb_kill_anchored_urbs().
    
    Fix the memory leak by anchoring the URB in the
    mcba_usb_read_bulk_callback()to the priv->rx_submitted anchor.
    
    Fixes: 51f3baad7de9 ("can: mcba_usb: Add support for Microchip CAN BUS Analyzer")
    Cc: [email protected]
    Link: https://patch.msgid.link/20260116-can_usb-fix-memory-leak-v2-4-4b8cb2915571@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

can: usb_8dev: usb_8dev_read_bulk_callback(): fix URB memory leak [+ + +]
Author: Marc Kleine-Budde <[email protected]>
Date:   Sat Jan 10 12:52:27 2026 +0100

    can: usb_8dev: usb_8dev_read_bulk_callback(): fix URB memory leak
    
    commit f7a980b3b8f80fe367f679da376cf76e800f9480 upstream.
    
    Fix similar memory leak as in commit 7352e1d5932a ("can: gs_usb:
    gs_usb_receive_bulk_callback(): fix URB memory leak").
    
    In usb_8dev_open() -> usb_8dev_start(), the URBs for USB-in transfers are
    allocated, added to the priv->rx_submitted anchor and submitted. In the
    complete callback usb_8dev_read_bulk_callback(), the URBs are processed and
    resubmitted. In usb_8dev_close() -> unlink_all_urbs() the URBs are freed by
    calling usb_kill_anchored_urbs(&priv->rx_submitted).
    
    However, this does not take into account that the USB framework unanchors
    the URB before the complete function is called. This means that once an
    in-URB has been completed, it is no longer anchored and is ultimately not
    released in usb_kill_anchored_urbs().
    
    Fix the memory leak by anchoring the URB in the
    usb_8dev_read_bulk_callback() to the priv->rx_submitted anchor.
    
    Fixes: 0024d8ad1639 ("can: usb_8dev: Add support for USB2CAN interface from 8 devices")
    Cc: [email protected]
    Link: https://patch.msgid.link/20260116-can_usb-fix-memory-leak-v2-5-4b8cb2915571@pengutronix.de
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
comedi: dmm32at: serialize use of paged registers [+ + +]
Author: Ian Abbott <[email protected]>
Date:   Mon Jan 12 16:28:35 2026 +0000

    comedi: dmm32at: serialize use of paged registers
    
    commit e03b29b55f2b7c345a919a6ee36633b06bf3fb56 upstream.
    
    Some of the hardware registers of the DMM-32-AT board are multiplexed,
    using the least significant two bits of the Miscellaneous Control
    register to select the function of registers at offsets 12 to 15:
    
     00 => 8254 timer/counter registers are accessible
     01 => 8255 digital I/O registers are accessible
     10 => Reserved
     11 => Calibration registers are accessible
    
    The interrupt service routine (`dmm32at_isr()`) clobbers the bottom two
    bits of the register with value 00, which would interfere with access to
    the 8255 registers by the `dm32at_8255_io()` function (used for Comedi
    instruction handling on the digital I/O subdevice).
    
    Make use of the generic Comedi device spin-lock `dev->spinlock` (which
    is otherwise unused by this driver) to serialize access to the
    miscellaneous control register and paged registers.
    
    Fixes: 3c501880ac44 ("Staging: comedi: add dmm32at driver")
    Cc: [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: Fix getting range information for subdevices 16 to 255 [+ + +]
Author: Ian Abbott <[email protected]>
Date:   Wed Dec 3 16:24:38 2025 +0000

    comedi: Fix getting range information for subdevices 16 to 255
    
    commit 10d28cffb3f6ec7ad67f0a4cd32c2afa92909452 upstream.
    
    The `COMEDI_RANGEINFO` ioctl does not work properly for subdevice
    indices above 15.  Currently, the only in-tree COMEDI drivers that
    support more than 16 subdevices are the "8255" driver and the
    "comedi_bond" driver.  Making the ioctl work for subdevice indices up to
    255 is achievable.  It needs minor changes to the handling of the
    `COMEDI_RANGEINFO` and `COMEDI_CHANINFO` ioctls that should be mostly
    harmless to user-space, apart from making them less broken.  Details
    follow...
    
    The `COMEDI_RANGEINFO` ioctl command gets the list of supported ranges
    (usually with units of volts or milliamps) for a COMEDI subdevice or
    channel.  (Only some subdevices have per-channel range tables, indicated
    by the `SDF_RANGETYPE` flag in the subdevice information.)  It uses a
    `range_type` value and a user-space pointer, both supplied by
    user-space, but the `range_type` value should match what was obtained
    using the `COMEDI_CHANINFO` ioctl (if the subdevice has per-channel
    range tables)  or `COMEDI_SUBDINFO` ioctl (if the subdevice uses a
    single range table for all channels).  Bits 15 to 0 of the `range_type`
    value contain the length of the range table, which is the only part that
    user-space should care about (so it can use a suitably sized buffer to
    fetch the range table).  Bits 23 to 16 store the channel index, which is
    assumed to be no more than 255 if the subdevice has per-channel range
    tables, and is set to 0 if the subdevice has a single range table.  For
    `range_type` values produced by the `COMEDI_SUBDINFO` ioctl, bits 31 to
    24 contain the subdevice index, which is assumed to be no more than 255.
    But for `range_type` values produced by the `COMEDI_CHANINFO` ioctl,
    bits 27 to 24 contain the subdevice index, which is assumed to be no
    more than 15, and bits 31 to 28 contain the COMEDI device's minor device
    number for some unknown reason lost in the mists of time.  The
    `COMEDI_RANGEINFO` ioctl extract the length from bits 15 to 0 of the
    user-supplied `range_type` value, extracts the channel index from bits
    23 to 16 (only used if the subdevice has per-channel range tables),
    extracts the subdevice index from bits 27 to 24, and ignores bits 31 to
    28.  So for subdevice indices 16 to 255, the `COMEDI_SUBDINFO` or
    `COMEDI_CHANINFO` ioctl will report a `range_type` value that doesn't
    work with the `COMEDI_RANGEINFO` ioctl.  It will either get the range
    table for the subdevice index modulo 16, or will fail with `-EINVAL`.
    
    To fix this, always use bits 31 to 24 of the `range_type` value to hold
    the subdevice index (assumed to be no more than 255).  This affects the
    `COMEDI_CHANINFO` and `COMEDI_RANGEINFO` ioctls.  There should not be
    anything in user-space that depends on the old, broken usage, although
    it may now see different values in bits 31 to 28 of the `range_type`
    values reported by the `COMEDI_CHANINFO` ioctl for subdevices that have
    per-channel subdevices.  User-space should not be trying to decode bits
    31 to 16 of the `range_type` values anyway.
    
    Fixes: ed9eccbe8970 ("Staging: add comedi core")
    Cc: [email protected] #5.17+
    Signed-off-by: Ian Abbott <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
crypto: authencesn - reject too-short AAD (assoclen<8) to match ESP/ESN spec [+ + +]
Author: Taeyang Lee <[email protected]>
Date:   Fri Jan 16 16:03:58 2026 +0900

    crypto: authencesn - reject too-short AAD (assoclen<8) to match ESP/ESN spec
    
    [ Upstream commit 2397e9264676be7794f8f7f1e9763d90bd3c7335 ]
    
    authencesn assumes an ESP/ESN-formatted AAD. When assoclen is shorter than
    the minimum expected length, crypto_authenc_esn_decrypt() can advance past
    the end of the destination scatterlist and trigger a NULL pointer dereference
    in scatterwalk_map_and_copy(), leading to a kernel panic (DoS).
    
    Add a minimum AAD length check to fail fast on invalid inputs.
    
    Fixes: 104880a6b470 ("crypto: authencesn - Convert to new AEAD interface")
    Reported-By: Taeyang Lee <[email protected]>
    Signed-off-by: Taeyang Lee <[email protected]>
    Signed-off-by: Herbert Xu <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
dma/pool: distinguish between missing and exhausted atomic pools [+ + +]
Author: Sai Sree Kartheek Adivi <[email protected]>
Date:   Wed Jan 28 19:05:54 2026 +0530

    dma/pool: distinguish between missing and exhausted atomic pools
    
    [ Upstream commit 56c430c7f06d838fe3b2077dbbc4cc0bf992312b ]
    
    Currently, dma_alloc_from_pool() unconditionally warns and dumps a stack
    trace when an allocation fails, with the message "Failed to get suitable
    pool".
    
    This conflates two distinct failure modes:
    1. Configuration error: No atomic pool is available for the requested
       DMA mask (a fundamental system setup issue)
    2. Resource Exhaustion: A suitable pool exists but is currently full (a
       recoverable runtime state)
    
    This lack of distinction prevents drivers from using __GFP_NOWARN to
    suppress error messages during temporary pressure spikes, such as when
    awaiting synchronous reclaim of descriptors.
    
    Refactor the error handling to distinguish these cases:
    - If no suitable pool is found, keep the unconditional WARN regarding
      the missing pool.
    - If a pool was found but is exhausted, respect __GFP_NOWARN and update
      the warning message to explicitly state "DMA pool exhausted".
    
    Fixes: 9420139f516d ("dma-pool: fix coherent pool allocations for IOMMU mappings")
    Signed-off-by: Sai Sree Kartheek Adivi <[email protected]>
    Reviewed-by: Robin Murphy <[email protected]>
    Signed-off-by: Marek Szyprowski <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Sasha Levin <[email protected]>

 
dmaengine: at_hdmac: fix device leak on of_dma_xlate() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:43 2025 +0100

    dmaengine: at_hdmac: fix device leak on of_dma_xlate()
    
    commit b9074b2d7a230b6e28caa23165e9d8bc0677d333 upstream.
    
    Make sure to drop the reference taken when looking up the DMA platform
    device during of_dma_xlate() when releasing channel resources.
    
    Note that commit 3832b78b3ec2 ("dmaengine: at_hdmac: add missing
    put_device() call in at_dma_xlate()") fixed the leak in a couple of
    error paths but the reference is still leaking on successful allocation.
    
    Fixes: bbe89c8e3d59 ("at_hdmac: move to generic DMA binding")
    Fixes: 3832b78b3ec2 ("dmaengine: at_hdmac: add missing put_device() call in at_dma_xlate()")
    Cc: [email protected]      # 3.10: 3832b78b3ec2
    Cc: Yu Kuai <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: bcm-sba-raid: fix device leak on probe [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:45 2025 +0100

    dmaengine: bcm-sba-raid: fix device leak on probe
    
    commit 7c3a46ebf15a9796b763a54272407fdbf945bed8 upstream.
    
    Make sure to drop the reference taken when looking up the mailbox device
    during probe on probe failures and on driver unbind.
    
    Fixes: 743e1c8ffe4e ("dmaengine: Add Broadcom SBA RAID driver")
    Cc: [email protected]      # 4.13
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: lpc18xx-dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:49 2025 +0100

    dmaengine: lpc18xx-dmamux: fix device leak on route allocation
    
    commit d4d63059dee7e7cae0c4d9a532ed558bc90efb55 upstream.
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: e5f4ae84be74 ("dmaengine: add driver for lpc18xx dmamux")
    Cc: [email protected]      # 4.3
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Vladimir Zapolskiy <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: omap-dma: fix dma_pool resource leak in error paths [+ + +]
Author: Haotian Zhang <[email protected]>
Date:   Mon Nov 3 15:30:18 2025 +0800

    dmaengine: omap-dma: fix dma_pool resource leak in error paths
    
    [ Upstream commit 2e1136acf8a8887c29f52e35a77b537309af321f ]
    
    The dma_pool created by dma_pool_create() is not destroyed when
    dma_async_device_register() or of_dma_controller_register() fails,
    causing a resource leak in the probe error paths.
    
    Add dma_pool_destroy() in both error paths to properly release the
    allocated dma_pool resource.
    
    Fixes: 7bedaa553760 ("dmaengine: add OMAP DMA engine driver")
    Signed-off-by: Haotian Zhang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dmaengine: stm32: dmamux: fix device leak on route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Jan 21 07:29:51 2026 -0500

    dmaengine: stm32: dmamux: fix device leak on route allocation
    
    [ Upstream commit dd6e4943889fb354efa3f700e42739da9bddb6ef ]
    
    Make sure to drop the reference taken when looking up the DMA mux
    platform device during route allocation.
    
    Note that holding a reference to a device does not prevent its driver
    data from going away so there is no point in keeping the reference.
    
    Fixes: df7e762db5f6 ("dmaengine: Add STM32 DMAMUX driver")
    Cc: [email protected]      # 4.15
    Cc: Pierre-Yves MORDRET <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Amelie Delaunay <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: stm32: dmamux: fix OF node leak on route allocation failure [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Jan 21 07:40:36 2026 -0500

    dmaengine: stm32: dmamux: fix OF node leak on route allocation failure
    
    [ Upstream commit b1b590a590af13ded598e70f0b72bc1e515787a1 ]
    
    Make sure to drop the reference taken to the DMA master OF node also on
    late route allocation failures.
    
    Fixes: df7e762db5f6 ("dmaengine: Add STM32 DMAMUX driver")
    Cc: [email protected]      # 4.15
    Cc: Pierre-Yves MORDRET <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Amelie Delaunay <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: tegra-adma: Fix use-after-free [+ + +]
Author: Sheetal <[email protected]>
Date:   Mon Nov 10 19:54:45 2025 +0530

    dmaengine: tegra-adma: Fix use-after-free
    
    [ Upstream commit 2efd07a7c36949e6fa36a69183df24d368bf9e96 ]
    
    A use-after-free bug exists in the Tegra ADMA driver when audio streams
    are terminated, particularly during XRUN conditions. The issue occurs
    when the DMA buffer is freed by tegra_adma_terminate_all() before the
    vchan completion tasklet finishes accessing it.
    
    The race condition follows this sequence:
    
      1. DMA transfer completes, triggering an interrupt that schedules the
         completion tasklet (tasklet has not executed yet)
      2. Audio playback stops, calling tegra_adma_terminate_all() which
         frees the DMA buffer memory via kfree()
      3. The scheduled tasklet finally executes, calling vchan_complete()
         which attempts to access the already-freed memory
    
    Since tasklets can execute at any time after being scheduled, there is
    no guarantee that the buffer will remain valid when vchan_complete()
    runs.
    
    Fix this by properly synchronizing the virtual channel completion:
     - Calling vchan_terminate_vdesc() in tegra_adma_stop() to mark the
       descriptors as terminated instead of freeing the descriptor.
     - Add the callback tegra_adma_synchronize() that calls
       vchan_synchronize() which kills any pending tasklets and frees any
       terminated descriptors.
    
    Crash logs:
    [  337.427523] BUG: KASAN: use-after-free in vchan_complete+0x124/0x3b0
    [  337.427544] Read of size 8 at addr ffff000132055428 by task swapper/0/0
    
    [  337.427562] Call trace:
    [  337.427564]  dump_backtrace+0x0/0x320
    [  337.427571]  show_stack+0x20/0x30
    [  337.427575]  dump_stack_lvl+0x68/0x84
    [  337.427584]  print_address_description.constprop.0+0x74/0x2b8
    [  337.427590]  kasan_report+0x1f4/0x210
    [  337.427598]  __asan_load8+0xa0/0xd0
    [  337.427603]  vchan_complete+0x124/0x3b0
    [  337.427609]  tasklet_action_common.constprop.0+0x190/0x1d0
    [  337.427617]  tasklet_action+0x30/0x40
    [  337.427623]  __do_softirq+0x1a0/0x5c4
    [  337.427628]  irq_exit+0x110/0x140
    [  337.427633]  handle_domain_irq+0xa4/0xe0
    [  337.427640]  gic_handle_irq+0x64/0x160
    [  337.427644]  call_on_irq_stack+0x20/0x4c
    [  337.427649]  do_interrupt_handler+0x7c/0x90
    [  337.427654]  el1_interrupt+0x30/0x80
    [  337.427659]  el1h_64_irq_handler+0x18/0x30
    [  337.427663]  el1h_64_irq+0x7c/0x80
    [  337.427667]  cpuidle_enter_state+0xe4/0x540
    [  337.427674]  cpuidle_enter+0x54/0x80
    [  337.427679]  do_idle+0x2e0/0x380
    [  337.427685]  cpu_startup_entry+0x2c/0x70
    [  337.427690]  rest_init+0x114/0x130
    [  337.427695]  arch_call_rest_init+0x18/0x24
    [  337.427702]  start_kernel+0x380/0x3b4
    [  337.427706]  __primary_switched+0xc0/0xc8
    
    Fixes: f46b195799b5 ("dmaengine: tegra-adma: Add support for Tegra210 ADMA")
    Signed-off-by: Sheetal <[email protected]>
    Acked-by: Thierry Reding <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:56 2025 +0100

    dmaengine: ti: dma-crossbar: fix device leak on am335x route allocation
    
    commit 4fc17b1c6d2e04ad13fd6c21cfbac68043ec03f9 upstream.
    
    Make sure to drop the reference taken when looking up the crossbar
    platform device during am335x route allocation.
    
    Fixes: 42dbdcc6bf96 ("dmaengine: ti-dma-crossbar: Add support for crossbar on AM33xx/AM43xx")
    Cc: [email protected]      # 4.4
    Cc: Peter Ujfalusi <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:55 2025 +0100

    dmaengine: ti: dma-crossbar: fix device leak on dra7x route allocation
    
    commit dc7e44db01fc2498644e3106db3e62a9883a93d5 upstream.
    
    Make sure to drop the reference taken when looking up the crossbar
    platform device during dra7x route allocation.
    
    Note that commit 615a4bfc426e ("dmaengine: ti: Add missing put_device in
    ti_dra7_xbar_route_allocate") fixed the leak in the error paths but the
    reference is still leaking on successful allocation.
    
    Fixes: a074ae38f859 ("dmaengine: Add driver for TI DMA crossbar on DRA7x")
    Fixes: 615a4bfc426e ("dmaengine: ti: Add missing put_device in ti_dra7_xbar_route_allocate")
    Cc: [email protected]      # 4.2: 615a4bfc426e
    Cc: Peter Ujfalusi <[email protected]>
    Cc: Miaoqian Lin <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: ti: k3-udma: fix device leak on udma lookup [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Nov 17 17:12:58 2025 +0100

    dmaengine: ti: k3-udma: fix device leak on udma lookup
    
    commit 430f7803b69cd5e5694e5dfc884c6628870af36e upstream.
    
    Make sure to drop the reference taken when looking up the UDMA platform
    device.
    
    Note that holding a reference to a platform device does not prevent its
    driver data from going away so there is no point in keeping the
    reference after the lookup helper returns.
    
    Fixes: d70241913413 ("dmaengine: ti: k3-udma: Add glue layer for non DMAengine users")
    Fixes: 1438cde8fe9c ("dmaengine: ti: k3-udma: add missing put_device() call in of_xudma_dev_get()")
    Cc: [email protected]      # 5.6: 1438cde8fe9c
    Cc: Grygorii Strashko <[email protected]>
    Cc: Yu Kuai <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing [+ + +]
Author: Suraj Gupta <[email protected]>
Date:   Wed Oct 22 00:00:06 2025 +0530

    dmaengine: xilinx_dma: Fix uninitialized addr_width when "xlnx,addrwidth" property is missing
    
    [ Upstream commit c0732fe78728718c853ef8e7af5bbb05262acbd1 ]
    
    When device tree lacks optional "xlnx,addrwidth" property, the addr_width
    variable remained uninitialized with garbage values, causing incorrect
    DMA mask configuration and subsequent probe failure. The fix ensures a
    fallback to the default 32-bit address width when this property is missing.
    
    Signed-off-by: Suraj Gupta <[email protected]>
    Fixes: b72db4005fe4 ("dmaengine: vdma: Add 64 bit addressing support to the driver")
    Reviewed-by: Radhey Shyam Pandey <[email protected]>
    Reviewed-by: Folker Schwesinger <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
driver core: fix potential null-ptr-deref in device_add() [+ + +]
Author: Yang Yingliang <[email protected]>
Date:   Thu Jan 22 12:51:05 2026 +0000

    driver core: fix potential null-ptr-deref in device_add()
    
    [ Upstream commit f6837f34a34973ef6600c08195ed300e24e97317 ]
    
    I got the following null-ptr-deref report while doing fault injection test:
    
    BUG: kernel NULL pointer dereference, address: 0000000000000058
    CPU: 2 PID: 278 Comm: 37-i2c-ds2482 Tainted: G    B   W        N 6.1.0-rc3+
    RIP: 0010:klist_put+0x2d/0xd0
    Call Trace:
     <TASK>
     klist_remove+0xf1/0x1c0
     device_release_driver_internal+0x196/0x210
     bus_remove_device+0x1bd/0x240
     device_add+0xd3d/0x1100
     w1_add_master_device+0x476/0x490 [wire]
     ds2482_probe+0x303/0x3e0 [ds2482]
    
    This is how it happened:
    
    w1_alloc_dev()
      // The dev->driver is set to w1_master_driver.
      memcpy(&dev->dev, device, sizeof(struct device));
      device_add()
        bus_add_device()
        dpm_sysfs_add() // It fails, calls bus_remove_device.
    
        // error path
        bus_remove_device()
          // The dev->driver is not null, but driver is not bound.
          __device_release_driver()
            klist_remove(&dev->p->knode_driver) <-- It causes null-ptr-deref.
    
        // normal path
        bus_probe_device() // It's not called yet.
          device_bind_driver()
    
    If dev->driver is set, in the error path after calling bus_add_device()
    in device_add(), bus_remove_device() is called, then the device will be
    detached from driver. But device_bind_driver() is not called yet, so it
    causes null-ptr-deref while access the 'knode_driver'. To fix this, set
    dev->driver to null in the error path before calling bus_remove_device().
    
    Fixes: 57eee3d23e88 ("Driver core: Call device_pm_add() after bus_add_device() in device_add()")
    Signed-off-by: Yang Yingliang <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/amd/pm: Don't clear SI SMC table when setting power limit [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Mon Jan 19 21:36:23 2026 +0100

    drm/amd/pm: Don't clear SI SMC table when setting power limit
    
    [ Upstream commit d5077426e1a76d269e518e048bde2e9fc49b32ad ]
    
    There is no reason to clear the SMC table.
    We also don't need to recalculate the power limit then.
    
    Fixes: 841686df9f7d ("drm/amdgpu: add SI DPM support (v4)")
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit e214d626253f5b180db10dedab161b7caa41f5e9)
    Signed-off-by: Sasha Levin <[email protected]>

drm/amd/pm: Workaround SI powertune issue on Radeon 430 (v2) [+ + +]
Author: Timur Kristóf <[email protected]>
Date:   Mon Jan 19 21:36:24 2026 +0100

    drm/amd/pm: Workaround SI powertune issue on Radeon 430 (v2)
    
    [ Upstream commit 764a90eb02268a23b1bb98be5f4a13671346804a ]
    
    Radeon 430 and 520 are OEM GPUs from 2016~2017
    They have the same device id: 0x6611 and revision: 0x87
    
    On the Radeon 430, powertune is buggy and throttles the GPU,
    never allowing it to reach its maximum SCLK. Work around this
    bug by raising the TDP limits we program to the SMC from
    24W (specified by the VBIOS on Radeon 430) to 32W.
    
    Disabling powertune entirely is not a viable workaround,
    because it causes the Radeon 520 to heat up above 100 C,
    which I prefer to avoid.
    
    Additionally, revise the maximum SCLK limit. Considering the
    above issue, these GPUs never reached a high SCLK on Linux,
    and the workarounds were added before the GPUs were released,
    so the workaround likely didn't target these specifically.
    Use 780 MHz (the maximum SCLK according to the VBIOS on the
    Radeon 430). Note that the Radeon 520 VBIOS has a higher
    maximum SCLK: 905 MHz, but in practice it doesn't seem to
    perform better with the higher clock, only heats up more.
    
    v2:
    Move the workaround to si_populate_smc_tdp_limits.
    
    Fixes: 841686df9f7d ("drm/amdgpu: add SI DPM support (v4)")
    Reviewed-by: Alex Deucher <[email protected]>
    Signed-off-by: Timur Kristóf <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit 966d70f1e160bdfdecaf7ff2b3f22ad088516e9f)
    Signed-off-by: Sasha Levin <[email protected]>

 
drm/amdkfd: fix a memory leak in device_queue_manager_init() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Jan 8 15:18:22 2026 +0800

    drm/amdkfd: fix a memory leak in device_queue_manager_init()
    
    commit 80614c509810fc051312d1a7ccac8d0012d6b8d0 upstream.
    
    If dqm->ops.initialize() fails, add deallocate_hiq_sdma_mqd()
    to release the memory allocated by allocate_hiq_sdma_mqd().
    Move deallocate_hiq_sdma_mqd() up to ensure proper function
    visibility at the point of use.
    
    Fixes: 11614c36bc8f ("drm/amdkfd: Allocate MQD trunk for HIQ and SDMA")
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Felix Kuehling <[email protected]>
    Reviewed-by: Oak Zeng <[email protected]>
    Reviewed-by: Felix Kuehling <[email protected]>
    Signed-off-by: Alex Deucher <[email protected]>
    (cherry picked from commit b7cccc8286bb9919a0952c812872da1dcfe9d390)
    Cc: [email protected]
    Signed-off-by: Felix Kuehling <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/imx/tve: fix probe device leak [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Tue Feb 3 19:39:33 2026 -0500

    drm/imx/tve: fix probe device leak
    
    [ Upstream commit e535c23513c63f02f67e3e09e0787907029efeaf ]
    
    Make sure to drop the reference taken to the DDC device during probe on
    probe failure (e.g. probe deferral) and on driver unbind.
    
    Fixes: fcbc51e54d2a ("staging: drm/imx: Add support for Television Encoder (TVEv2)")
    Cc: [email protected]      # 3.10
    Cc: Philipp Zabel <[email protected]>
    Reviewed-by: Frank Li <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Maxime Ripard <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/imx: imx-tve: move initialization into probe [+ + +]
Author: Philipp Zabel <[email protected]>
Date:   Tue Feb 3 19:39:32 2026 -0500

    drm/imx: imx-tve: move initialization into probe
    
    [ Upstream commit a91cfaf6e6503150ed1ef08454f2c03e1f95a4ec ]
    
    Parts of the initialization that do not require the drm device can be
    done once during probe instead of possibly multiple times during bind.
    The bind function only creates the encoder.
    
    Signed-off-by: Philipp Zabel <[email protected]>
    Acked-by: Daniel Vetter <[email protected]>
    Stable-dep-of: e535c23513c6 ("drm/imx/tve: fix probe device leak")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

drm/imx: imx-tve: use local encoder and connector variables [+ + +]
Author: Philipp Zabel <[email protected]>
Date:   Tue Feb 3 19:39:31 2026 -0500

    drm/imx: imx-tve: use local encoder and connector variables
    
    [ Upstream commit 396852df02b9ff49fe256ba459605fc680fe8d89 ]
    
    Introduce local variables for encoder and connector.
    This simplifies the following commits.
    
    Signed-off-by: Philipp Zabel <[email protected]>
    Acked-by: Daniel Vetter <[email protected]>
    Stable-dep-of: e535c23513c6 ("drm/imx/tve: fix probe device leak")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare [+ + +]
Author: Lyude Paul <[email protected]>
Date:   Fri Dec 19 16:52:02 2025 -0500

    drm/nouveau/disp/nv50-: Set lock_core in curs507a_prepare
    
    commit 9e9bc6be0fa0b6b6b73f4f831f3b77716d0a8d9e upstream.
    
    For a while, I've been seeing a strange issue where some (usually not all)
    of the display DMA channels will suddenly hang, particularly when there is
    a visible cursor on the screen that is being frequently updated, and
    especially when said cursor happens to go between two screens. While this
    brings back lovely memories of fixing Intel Skylake bugs, I would quite
    like to fix it :).
    
    It turns out the problem that's happening here is that we're managing to
    reach nv50_head_flush_set() in our atomic commit path without actually
    holding nv50_disp->mutex. This means that cursor updates happening in
    parallel (along with any other atomic updates that need to use the core
    channel) will race with eachother, which eventually causes us to corrupt
    the pushbuffer - leading to a plethora of various GSP errors, usually:
    
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 00000218 00102680 00000004 00800003
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 0000021c 00040509 00000004 00000001
      nouveau 0000:c1:00.0: gsp: Xid:56 CMDre 00000000 00000000 00000000 00000001 00000001
    
    The reason this is happening is because generally we check whether we need
    to set nv50_atom->lock_core at the end of nv50_head_atomic_check().
    However, curs507a_prepare is called from the fb_prepare callback, which
    happens after the atomic check phase. As a result, this can lead to commits
    that both touch the core channel but also don't grab nv50_disp->mutex.
    
    So, fix this by making sure that we set nv50_atom->lock_core in
    cus507a_prepare().
    
    Reviewed-by: Dave Airlie <[email protected]>
    Signed-off-by: Lyude Paul <[email protected]>
    Fixes: 1590700d94ac ("drm/nouveau/kms/nv50-: split each resource type into their own source files")
    Cc: <[email protected]> # v4.18+
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Sat Jan 10 16:27:28 2026 +0100

    drm/panel-simple: fix connector type for DataImage SCF0700C48GGU18 panel
    
    commit 6ab3d4353bf75005eaa375677c9fed31148154d6 upstream.
    
    The connector type for the DataImage SCF0700C48GGU18 panel is missing and
    devm_drm_panel_bridge_add() requires connector type to be set. This leads
    to a warning and a backtrace in the kernel log and panel does not work:
    "
    WARNING: CPU: 3 PID: 38 at drivers/gpu/drm/bridge/panel.c:379 devm_drm_of_get_bridge+0xac/0xb8
    "
    The warning is triggered by a check for valid connector type in
    devm_drm_panel_bridge_add(). If there is no valid connector type
    set for a panel, the warning is printed and panel is not added.
    Fill in the missing connector type to fix the warning and make
    the panel operational once again.
    
    Cc: [email protected]
    Fixes: 97ceb1fb08b6 ("drm/panel: simple: Add support for DataImage SCF0700C48GGU18")
    Signed-off-by: Marek Vasut <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Neil Armstrong <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
drm/vmwgfx: Fix an error return check in vmw_compat_shader_add() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Wed Dec 24 17:11:05 2025 +0800

    drm/vmwgfx: Fix an error return check in vmw_compat_shader_add()
    
    commit bf72b4b7bb7dbb643d204fa41e7463894a95999f upstream.
    
    In vmw_compat_shader_add(), the return value check of vmw_shader_alloc()
    is not proper. Modify the check for the return pointer 'res'.
    
    Found by code review and compiled on ubuntu 20.04.
    
    Fixes: 18e4a4669c50 ("drm/vmwgfx: Fix compat shader namespace")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Zack Rusin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
EDAC/i3200: Fix a resource leak in i3200_probe1() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Dec 23 20:32:02 2025 +0800

    EDAC/i3200: Fix a resource leak in i3200_probe1()
    
    commit d42d5715dcb559342ff356327b241c53a67584d9 upstream.
    
    If edac_mc_alloc() fails, also unmap the window.
    
      [ bp: Use separate labels, turning it into the classic unwind pattern. ]
    
    Fixes: dd8ef1db87a4 ("edac: i3200 memory controller driver")
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
EDAC/x38: Fix a resource leak in x38_probe1() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Tue Dec 23 20:43:50 2025 +0800

    EDAC/x38: Fix a resource leak in x38_probe1()
    
    commit 0ff7c44106b4715fc27a2e455d9f57f1dfcfd54f upstream.
    
    If edac_mc_alloc() fails, also unmap the window.
    
      [ bp: Use separate labels, turning it into the classic unwind pattern. ]
    
    Fixes: df8bc08c192f ("edac x38: new MC driver module")
    Signed-off-by: Haoxiang Li <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref [+ + +]
Author: Yang Erkun <[email protected]>
Date:   Sat Dec 13 13:57:06 2025 +0800

    ext4: fix iloc.bh leak in ext4_xattr_inode_update_ref
    
    commit d250bdf531d9cd4096fedbb9f172bb2ca660c868 upstream.
    
    The error branch for ext4_xattr_inode_update_ref forget to release the
    refcount for iloc.bh. Find this when review code.
    
    Fixes: 57295e835408 ("ext4: guard against EA inode refcount underflow in xattr update")
    Signed-off-by: Yang Erkun <[email protected]>
    Reviewed-by: Baokun Li <[email protected]>
    Reviewed-by: Zhang Yi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Theodore Ts'o <[email protected]>
    Cc: [email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fbcon: always restore the old font data in fbcon_do_set_font() [+ + +]
Author: Jiri Slaby (SUSE) <[email protected]>
Date:   Thu Feb 8 12:44:11 2024 +0100

    fbcon: always restore the old font data in fbcon_do_set_font()
    
    commit 00d6a284fcf3fad1b7e1b5bc3cd87cbfb60ce03f upstream.
    
    Commit a5a923038d70 (fbdev: fbcon: Properly revert changes when
    vc_resize() failed) started restoring old font data upon failure (of
    vc_resize()). But it performs so only for user fonts. It means that the
    "system"/internal fonts are not restored at all. So in result, the very
    first call to fbcon_do_set_font() performs no restore at all upon
    failing vc_resize().
    
    This can be reproduced by Syzkaller to crash the system on the next
    invocation of font_get(). It's rather hard to hit the allocation failure
    in vc_resize() on the first font_set(), but not impossible. Esp. if
    fault injection is used to aid the execution/failure. It was
    demonstrated by Sirius:
      BUG: unable to handle page fault for address: fffffffffffffff8
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD cb7b067 P4D cb7b067 PUD cb7d067 PMD 0
      Oops: 0000 [#1] PREEMPT SMP KASAN
      CPU: 1 PID: 8007 Comm: poc Not tainted 6.7.0-g9d1694dc91ce #20
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      RIP: 0010:fbcon_get_font+0x229/0x800 drivers/video/fbdev/core/fbcon.c:2286
      Call Trace:
       <TASK>
       con_font_get drivers/tty/vt/vt.c:4558 [inline]
       con_font_op+0x1fc/0xf20 drivers/tty/vt/vt.c:4673
       vt_k_ioctl drivers/tty/vt/vt_ioctl.c:474 [inline]
       vt_ioctl+0x632/0x2ec0 drivers/tty/vt/vt_ioctl.c:752
       tty_ioctl+0x6f8/0x1570 drivers/tty/tty_io.c:2803
       vfs_ioctl fs/ioctl.c:51 [inline]
      ...
    
    So restore the font data in any case, not only for user fonts. Note the
    later 'if' is now protected by 'old_userfont' and not 'old_data' as the
    latter is always set now. (And it is supposed to be non-NULL. Otherwise
    we would see the bug above again.)
    
    Signed-off-by: Jiri Slaby (SUSE) <[email protected]>
    Fixes: a5a923038d70 ("fbdev: fbcon: Properly revert changes when vc_resize() failed")
    Reported-and-tested-by: Ubisectech Sirius <[email protected]>
    Cc: Ubisectech Sirius <[email protected]>
    Cc: Daniel Vetter <[email protected]>
    Cc: Helge Deller <[email protected]>
    Cc: [email protected]
    Cc: [email protected]
    Signed-off-by: Daniel Vetter <[email protected]>
    Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
fbdev: fbcon: Properly revert changes when vc_resize() failed [+ + +]
Author: Shigeru Yoshida <[email protected]>
Date:   Fri Aug 19 03:13:36 2022 +0900

    fbdev: fbcon: Properly revert changes when vc_resize() failed
    
    commit a5a923038d70d2d4a86cb4e3f32625a5ee6e7e24 upstream.
    
    fbcon_do_set_font() calls vc_resize() when font size is changed.
    However, if if vc_resize() failed, current implementation doesn't
    revert changes for font size, and this causes inconsistent state.
    
    syzbot reported unable to handle page fault due to this issue [1].
    syzbot's repro uses fault injection which cause failure for memory
    allocation, so vc_resize() failed.
    
    This patch fixes this issue by properly revert changes for font
    related date when vc_resize() failed.
    
    Link: https://syzkaller.appspot.com/bug?id=3443d3a1fa6d964dd7310a0cb1696d165a3e07c4 [1]
    Reported-by: [email protected]
    Signed-off-by: Shigeru Yoshida <[email protected]>
    Signed-off-by: Helge Deller <[email protected]>
    Cc: "Barry K. Nathan" <[email protected]>
    CC: [email protected] # 5.15+
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

fbdev: fbcon: release buffer when fbcon_do_set_font() failed [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Tue Dec 6 07:10:31 2022 +0900

    fbdev: fbcon: release buffer when fbcon_do_set_font() failed
    
    commit 3c3bfb8586f848317ceba5d777e11204ba3e5758 upstream.
    
    syzbot is reporting memory leak at fbcon_do_set_font() [1], for
    commit a5a923038d70 ("fbdev: fbcon: Properly revert changes when
    vc_resize() failed") missed that the buffer might be newly allocated
    by fbcon_set_font().
    
    Link: https://syzkaller.appspot.com/bug?extid=25bdb7b1703639abd498 [1]
    Reported-by: syzbot <[email protected]>
    Signed-off-by: Tetsuo Handa <[email protected]>
    Tested-by: syzbot <[email protected]>
    Fixes: a5a923038d70 ("fbdev: fbcon: Properly revert changes when vc_resize() failed")
    Cc: "Barry K. Nathan" <[email protected]>
    CC: [email protected] # 5.15+
    Signed-off-by: Helge Deller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Fix memory leak in posix_clock_open() [+ + +]
Author: Linus Torvalds <[email protected]>
Date:   Tue Mar 26 14:59:48 2024 -0700

    Fix memory leak in posix_clock_open()
    
    [ Upstream commit 5b4cdd9c5676559b8a7c944ac5269b914b8c0bb8 ]
    
    If the clk ops.open() function returns an error, we don't release the
    pccontext we allocated for this clock.
    
    Re-organize the code slightly to make it all more obvious.
    
    Reported-by: Rohit Keshri <[email protected]>
    Acked-by: Oleg Nesterov <[email protected]>
    Fixes: 60c6946675fc ("posix-clock: introduce posix_clock_context concept")
    Cc: Jakub Kicinski <[email protected]>
    Cc: David S. Miller <[email protected]>
    Cc: Thomas Gleixner <[email protected]>
    Signed-off-by: Linus Torvalds <[email protected]>
    Stable-dep-of: e859d375d169 ("posix-clock: Store file pointer in struct posix_clock_context")
    Signed-off-by: Sasha Levin <[email protected]>

 
fou: Don't allow 0 for FOU_ATTR_IPPROTO. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Thu Jan 15 17:24:48 2026 +0000

    fou: Don't allow 0 for FOU_ATTR_IPPROTO.
    
    [ Upstream commit 7a9bc9e3f42391e4c187e099263cf7a1c4b69ff5 ]
    
    fou_udp_recv() has the same problem mentioned in the previous
    patch.
    
    If FOU_ATTR_IPPROTO is set to 0, skb is not freed by
    fou_udp_recv() nor "resubmit"-ted in ip_protocol_deliver_rcu().
    
    Let's forbid 0 for FOU_ATTR_IPPROTO.
    
    Fixes: 23461551c0062 ("fou: Support for foo-over-udp RX path")
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
gue: Fix skb memleak with inner IP protocol 0. [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Thu Jan 15 17:24:46 2026 +0000

    gue: Fix skb memleak with inner IP protocol 0.
    
    [ Upstream commit 9a56796ad258786d3624eef5aefba394fc9bdded ]
    
    syzbot reported skb memleak below. [0]
    
    The repro generated a GUE packet with its inner protocol 0.
    
    gue_udp_recv() returns -guehdr->proto_ctype for "resubmit"
    in ip_protocol_deliver_rcu(), but this only works with
    non-zero protocol number.
    
    Let's drop such packets.
    
    Note that 0 is a valid number (IPv6 Hop-by-Hop Option).
    
    I think it is not practical to encap HOPOPT in GUE, so once
    someone starts to complain, we could pass down a resubmit
    flag pointer to distinguish two zeros from the upper layer:
    
      * no error
      * resubmit HOPOPT
    
    [0]
    BUG: memory leak
    unreferenced object 0xffff888109695a00 (size 240):
      comm "syz.0.17", pid 6088, jiffies 4294943096
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        00 40 c2 10 81 88 ff ff 00 00 00 00 00 00 00 00  .@..............
      backtrace (crc a84b336f):
        kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
        slab_post_alloc_hook mm/slub.c:4958 [inline]
        slab_alloc_node mm/slub.c:5263 [inline]
        kmem_cache_alloc_noprof+0x3b4/0x590 mm/slub.c:5270
        __build_skb+0x23/0x60 net/core/skbuff.c:474
        build_skb+0x20/0x190 net/core/skbuff.c:490
        __tun_build_skb drivers/net/tun.c:1541 [inline]
        tun_build_skb+0x4a1/0xa40 drivers/net/tun.c:1636
        tun_get_user+0xc12/0x2030 drivers/net/tun.c:1770
        tun_chr_write_iter+0x71/0x120 drivers/net/tun.c:1999
        new_sync_write fs/read_write.c:593 [inline]
        vfs_write+0x45d/0x710 fs/read_write.c:686
        ksys_write+0xa7/0x170 fs/read_write.c:738
        do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
        do_syscall_64+0xa4/0xf80 arch/x86/entry/syscall_64.c:94
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 37dd0247797b1 ("gue: Receive side for Generic UDP Encapsulation")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
HID: uclogic: Add NULL check in uclogic_input_configured() [+ + +]
Author: Henry Martin <[email protected]>
Date:   Tue Feb 3 02:29:25 2026 +0000

    HID: uclogic: Add NULL check in uclogic_input_configured()
    
    [ Upstream commit bd07f751208ba190f9b0db5e5b7f35d5bb4a8a1e ]
    
    devm_kasprintf() returns NULL when memory allocation fails. Currently,
    uclogic_input_configured() does not check for this case, which results
    in a NULL pointer dereference.
    
    Add NULL check after devm_kasprintf() to prevent this issue.
    
    Fixes: dd613a4e45f8 ("HID: uclogic: Correct devm device reference for hidinput input_dev name")
    Signed-off-by: Henry Martin <[email protected]>
    Signed-off-by: Jiri Kosina <[email protected]>
    [ Adjust context ]
    Signed-off-by: Wenshan Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: uclogic: Correct devm device reference for hidinput input_dev name [+ + +]
Author: Rahul Rameshbabu <[email protected]>
Date:   Tue Feb 3 02:29:24 2026 +0000

    HID: uclogic: Correct devm device reference for hidinput input_dev name
    
    [ Upstream commit dd613a4e45f8d35f49a63a2064e5308fa5619e29 ]
    
    Reference the HID device rather than the input device for the devm
    allocation of the input_dev name. Referencing the input_dev would lead to a
    use-after-free when the input_dev was unregistered and subsequently fires a
    uevent that depends on the name. At the point of firing the uevent, the
    name would be freed by devres management.
    
    Use devm_kasprintf to simplify the logic for allocating memory and
    formatting the input_dev name string.
    
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/linux-input/ZOZIZCND+L0P1wJc@penguin/T/
    Reported-by: Maxime Ripard <[email protected]>
    Closes: https://lore.kernel.org/linux-input/ZOZIZCND+L0P1wJc@penguin/T/#m443f3dce92520f74b6cf6ffa8653f9c92643d4ae
    Fixes: cce2dbdf258e ("HID: uclogic: name the input nodes based on their tool")
    Suggested-by: Maxime Ripard <[email protected]>
    Suggested-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Rahul Rameshbabu <[email protected]>
    Reviewed-by: Maxime Ripard <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Benjamin Tissoires <[email protected]>
    [ Adjust context ]
    Signed-off-by: Wenshan Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

HID: usbhid: paper over wrong bNumDescriptor field [+ + +]
Author: Benjamin Tissoires <[email protected]>
Date:   Mon Dec 15 12:57:21 2025 +0100

    HID: usbhid: paper over wrong bNumDescriptor field
    
    commit f28beb69c51517aec7067dfb2074e7c751542384 upstream.
    
    Some faulty devices (ZWO EFWmini) have a wrong optional HID class
    descriptor count compared to the provided length.
    
    Given that we plainly ignore those optional descriptor, we can attempt
    to fix the provided number so we do not lock out those devices.
    
    Signed-off-by: Benjamin Tissoires <[email protected]>
    Cc: Salvatore Bonaccorso <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ice: stop counting UDP csum mismatch as rx_errors [+ + +]
Author: Jesse Brandeburg <[email protected]>
Date:   Mon Dec 1 15:38:52 2025 -0800

    ice: stop counting UDP csum mismatch as rx_errors
    
    [ Upstream commit 05faf2c0a76581d0a7fdbb8ec46477ba183df95b ]
    
    Since the beginning, the Intel ice driver has counted receive checksum
    offload mismatches into the rx_errors member of the rtnl_link_stats64
    struct. In ethtool -S these show up as rx_csum_bad.nic.
    
    I believe counting these in rx_errors is fundamentally wrong, as it's
    pretty clear from the comments in if_link.h and from every other statistic
    the driver is summing into rx_errors, that all of them would cause a
    "hardware drop" except for the UDP checksum mismatch, as well as the fact
    that all the other causes for rx_errors are L2 reasons, and this L4 UDP
    "mismatch" is an outlier.
    
    A last nail in the coffin is that rx_errors is monitored in production and
    can indicate a bad NIC/cable/Switch port, but instead some random series of
    UDP packets with bad checksums will now trigger this alert. This false
    positive makes the alert useless and affects us as well as other companies.
    
    This packet with presumably a bad UDP checksum is *already* passed to the
    stack, just not marked as offloaded by the hardware/driver. If it is
    dropped by the stack it will show up as UDP_MIB_CSUMERRORS.
    
    And one more thing, none of the other Intel drivers, and at least bnxt_en
    and mlx5 both don't appear to count UDP offload mismatches as rx_errors.
    
    Here is a related customer complaint:
    https://community.intel.com/t5/Ethernet-Products/ice-rx-errros-is-too-sensitive-to-IP-TCP-attack-packets-Intel/td-p/1662125
    
    Fixes: 4f1fe43c920b ("ice: Add more Rx errors to netdev's rx_error counter")
    Cc: Tony Nguyen <[email protected]>
    Cc: Jake Keller <[email protected]>
    Cc: IWL <[email protected]>
    Signed-off-by: Jesse Brandeburg <[email protected]>
    Acked-by: Jacob Keller <[email protected]>
    Signed-off-by: Tony Nguyen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
iio: adc: ad7280a: handle spi_setup() errors in probe() [+ + +]
Author: Pavel Zhigulin <[email protected]>
Date:   Fri Nov 14 18:13:01 2025 +0300

    iio: adc: ad7280a: handle spi_setup() errors in probe()
    
    [ Upstream commit 6b39824ac4c15783787e6434449772bfb2e31214 ]
    
    The probe() function ignored the return value of spi_setup(), leaving SPI
    configuration failures undetected. If spi_setup() fails, the driver should
    stop initialization and propagate the error to the caller.
    
    Add proper error handling: check the return value of spi_setup() and return
    it on failure.
    
    Found by Linux Verification Center (linuxtesting.org) with SVACE.
    
    Fixes: 2051f25d2a26 ("iio: adc: New driver for AD7280A Lithium Ion Battery Monitoring System")
    Signed-off-by: Pavel Zhigulin <[email protected]>
    Reviewed-by: Marcelo Schmitt <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

iio: adc: ad9467: fix ad9434 vref mask [+ + +]
Author: Tomas Melin <[email protected]>
Date:   Wed Dec 3 09:28:11 2025 +0000

    iio: adc: ad9467: fix ad9434 vref mask
    
    commit 92452b1760ff2d1d411414965d4d06f75e1bda9a upstream.
    
    The mask setting is 5 bits wide for the ad9434
    (ref. data sheet register 0x18 FLEX_VREF). Apparently the settings
    from ad9265 were copied by mistake when support for the device was added
    to the driver.
    
    Fixes: 4606d0f4b05f ("iio: adc: ad9467: add support for AD9434 high-speed ADC")
    Reviewed-by: Andy Shevchenko <[email protected]>
    Reviewed-by: Nuno Sá <[email protected]>
    Reviewed-by: David Lechner <[email protected]>
    Signed-off-by: Tomas Melin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: at91-sama5d2_adc: Fix potential use-after-free in sama5d2_adc driver [+ + +]
Author: Pei Xiao <[email protected]>
Date:   Wed Oct 29 10:40:16 2025 +0800

    iio: adc: at91-sama5d2_adc: Fix potential use-after-free in sama5d2_adc driver
    
    commit dbdb442218cd9d613adeab31a88ac973f22c4873 upstream.
    
    at91_adc_interrupt can call at91_adc_touch_data_handler function
    to start the work by schedule_work(&st->touch_st.workq).
    
    If we remove the module which will call at91_adc_remove to
    make cleanup, it will free indio_dev through iio_device_unregister but
    quite a bit later. While the work mentioned above will be used. The
    sequence of operations that may lead to a UAF bug is as follows:
    
    CPU0                                      CPU1
    
                                         | at91_adc_workq_handler
    at91_adc_remove                      |
    iio_device_unregister(indio_dev)     |
    //free indio_dev a bit later         |
                                         | iio_push_to_buffers(indio_dev)
                                         | //use indio_dev
    
    Fix it by ensuring that the work is canceled before proceeding with
    the cleanup in at91_adc_remove.
    
    Fixes: 23ec2774f1cc ("iio: adc: at91-sama5d2_adc: add support for position and pressure channels")
    Signed-off-by: Pei Xiao <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: adc: exynos_adc: fix OF populate on driver rebind [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Jan 28 12:42:23 2026 -0500

    iio: adc: exynos_adc: fix OF populate on driver rebind
    
    [ Upstream commit ea6b4feba85e996e840e0b661bc42793df6eb701 ]
    
    Since commit c6e126de43e7 ("of: Keep track of populated platform
    devices") child devices will not be created by of_platform_populate()
    if the devices had previously been deregistered individually so that the
    OF_POPULATED flag is still set in the corresponding OF nodes.
    
    Switch to using of_platform_depopulate() instead of open coding so that
    the child devices are created if the driver is rebound.
    
    Fixes: c6e126de43e7 ("of: Keep track of populated platform devices")
    Cc: [email protected]      # 3.16
    Signed-off-by: Johan Hovold <[email protected]>
    Reviewed-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Jonathan Cameron <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

iio: dac: ad5686: add AD5695R to ad5686_chip_info_tbl [+ + +]
Author: Kübrich, Andreas <[email protected]>
Date:   Mon Nov 17 12:35:13 2025 +0000

    iio: dac: ad5686: add AD5695R to ad5686_chip_info_tbl
    
    commit 441ac29923c9172bc5e4b2c4f52ae756192f5715 upstream.
    
    The chip info for this variant (I2C, four channels, 14 bit, internal
    reference) seems to have been left out due to oversight, so
    ad5686_chip_info_tbl[ID_AD5695R] is all zeroes. Initialisation of an
    AD5695R still succeeds, but the resulting IIO device has no channels and no
    /dev/iio:device* node.
    
    Add the missing chip info to the table.
    
    Fixes: 4177381b4401 ("iio:dac:ad5686: Add AD5671R/75R/94/94R/95R/96/96R support")
    Signed-off-by: Andreas Kübrich <[email protected]>
    Cc: [email protected]
    Signed-off-by: Jonathan Cameron <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Input: i8042 - add quirk for ASUS Zenbook UX425QA_UM425QA [+ + +]
Author: feng <[email protected]>
Date:   Sat Jan 24 21:44:12 2026 -0800

    Input: i8042 - add quirk for ASUS Zenbook UX425QA_UM425QA
    
    commit 2934325f56150ad8dab8ab92cbe2997242831396 upstream.
    
    The ASUS Zenbook UX425QA_UM425QA fails to initialize the keyboard after
    a cold boot.
    
    A quirk already exists for "ZenBook UX425", but some Zenbooks report
    "Zenbook" with a lowercase 'b'. Since DMI matching is case-sensitive,
    the existing quirk is not applied to these "extra special" Zenbooks.
    
    Testing confirms that this model needs the same quirks as the ZenBook
    UX425 variants.
    
    Signed-off-by: feng <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

Input: i8042 - add quirks for MECHREVO Wujie 15X Pro [+ + +]
Author: gongqi <[email protected]>
Date:   Thu Jan 22 23:54:59 2026 +0800

    Input: i8042 - add quirks for MECHREVO Wujie 15X Pro
    
    commit 19a5d9ba6208e9006a2a9d5962aea4d6e427d8ab upstream.
    
    The MECHREVO Wujie 15X Pro requires several i8042 quirks to function
    correctly. Specifically, NOMUX, RESET_ALWAYS, NOLOOP, and NOPNP are
    needed to ensure the keyboard and touchpad work reliably.
    
    Signed-off-by: gongqi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Dmitry Torokhov <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
intel_th: fix device leak on output open() [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Mon Dec 8 16:35:23 2025 +0100

    intel_th: fix device leak on output open()
    
    commit 95fc36a234da24bbc5f476f8104a5a15f99ed3e3 upstream.
    
    Make sure to drop the reference taken when looking up the th device
    during output device open() on errors and on close().
    
    Note that a recent commit fixed the leak in a couple of open() error
    paths but not all of them, and the reference is still leaking on
    successful open().
    
    Fixes: 39f4034693b7 ("intel_th: Add driver infrastructure for Intel(R) Trace Hub devices")
    Fixes: 6d5925b667e4 ("intel_th: Fix error handling in intel_th_output_open")
    Cc: [email protected]      # 4.4: 6d5925b667e4
    Cc: Alexander Shishkin <[email protected]>
    Cc: Ma Ke <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Jan 7 16:31:09 2026 +0000

    ip6_tunnel: use skb_vlan_inet_prepare() in __ip6_tnl_rcv()
    
    [ Upstream commit 81c734dae203757fb3c9eee6f9896386940776bd ]
    
    Blamed commit did not take care of VLAN encapsulations
    as spotted by syzbot [1].
    
    Use skb_vlan_inet_prepare() instead of pskb_inet_may_pull().
    
    [1]
     BUG: KMSAN: uninit-value in __INET_ECN_decapsulate include/net/inet_ecn.h:253 [inline]
     BUG: KMSAN: uninit-value in INET_ECN_decapsulate include/net/inet_ecn.h:275 [inline]
     BUG: KMSAN: uninit-value in IP6_ECN_decapsulate+0x7a8/0x1fa0 include/net/inet_ecn.h:321
      __INET_ECN_decapsulate include/net/inet_ecn.h:253 [inline]
      INET_ECN_decapsulate include/net/inet_ecn.h:275 [inline]
      IP6_ECN_decapsulate+0x7a8/0x1fa0 include/net/inet_ecn.h:321
      ip6ip6_dscp_ecn_decapsulate+0x16f/0x1b0 net/ipv6/ip6_tunnel.c:729
      __ip6_tnl_rcv+0xed9/0x1b50 net/ipv6/ip6_tunnel.c:860
      ip6_tnl_rcv+0xc3/0x100 net/ipv6/ip6_tunnel.c:903
     gre_rcv+0x1529/0x1b90 net/ipv6/ip6_gre.c:-1
      ip6_protocol_deliver_rcu+0x1c89/0x2c60 net/ipv6/ip6_input.c:438
      ip6_input_finish+0x1f4/0x4a0 net/ipv6/ip6_input.c:489
      NF_HOOK include/linux/netfilter.h:318 [inline]
      ip6_input+0x9c/0x330 net/ipv6/ip6_input.c:500
      ip6_mc_input+0x7ca/0xc10 net/ipv6/ip6_input.c:590
      dst_input include/net/dst.h:474 [inline]
      ip6_rcv_finish+0x958/0x990 net/ipv6/ip6_input.c:79
      NF_HOOK include/linux/netfilter.h:318 [inline]
      ipv6_rcv+0xf1/0x3c0 net/ipv6/ip6_input.c:311
      __netif_receive_skb_one_core net/core/dev.c:6139 [inline]
      __netif_receive_skb+0x1df/0xac0 net/core/dev.c:6252
      netif_receive_skb_internal net/core/dev.c:6338 [inline]
      netif_receive_skb+0x57/0x630 net/core/dev.c:6397
      tun_rx_batched+0x1df/0x980 drivers/net/tun.c:1485
      tun_get_user+0x5c0e/0x6c60 drivers/net/tun.c:1953
      tun_chr_write_iter+0x3e9/0x5c0 drivers/net/tun.c:1999
      new_sync_write fs/read_write.c:593 [inline]
      vfs_write+0xbe2/0x15d0 fs/read_write.c:686
      ksys_write fs/read_write.c:738 [inline]
      __do_sys_write fs/read_write.c:749 [inline]
      __se_sys_write fs/read_write.c:746 [inline]
      __x64_sys_write+0x1fb/0x4d0 fs/read_write.c:746
      x64_sys_call+0x30ab/0x3e70 arch/x86/include/generated/asm/syscalls_64.h:2
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd3/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Uninit was created at:
      slab_post_alloc_hook mm/slub.c:4960 [inline]
      slab_alloc_node mm/slub.c:5263 [inline]
      kmem_cache_alloc_node_noprof+0x9e7/0x17a0 mm/slub.c:5315
      kmalloc_reserve+0x13c/0x4b0 net/core/skbuff.c:586
      __alloc_skb+0x805/0x1040 net/core/skbuff.c:690
      alloc_skb include/linux/skbuff.h:1383 [inline]
      alloc_skb_with_frags+0xc5/0xa60 net/core/skbuff.c:6712
      sock_alloc_send_pskb+0xacc/0xc60 net/core/sock.c:2995
      tun_alloc_skb drivers/net/tun.c:1461 [inline]
      tun_get_user+0x1142/0x6c60 drivers/net/tun.c:1794
      tun_chr_write_iter+0x3e9/0x5c0 drivers/net/tun.c:1999
      new_sync_write fs/read_write.c:593 [inline]
      vfs_write+0xbe2/0x15d0 fs/read_write.c:686
      ksys_write fs/read_write.c:738 [inline]
      __do_sys_write fs/read_write.c:749 [inline]
      __se_sys_write fs/read_write.c:746 [inline]
      __x64_sys_write+0x1fb/0x4d0 fs/read_write.c:746
      x64_sys_call+0x30ab/0x3e70 arch/x86/include/generated/asm/syscalls_64.h:2
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd3/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    CPU: 0 UID: 0 PID: 6465 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(none)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    
    Fixes: 8d975c15c0cd ("ip6_tunnel: make sure to pull inner header in __ip6_tnl_rcv()")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv4: ip_gre: make ipgre_header() robust [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 8 19:02:14 2026 +0000

    ipv4: ip_gre: make ipgre_header() robust
    
    [ Upstream commit e67c577d89894811ce4dcd1a9ed29d8b63476667 ]
    
    Analog to commit db5b4e39c4e6 ("ip6_gre: make ip6gre_header() robust")
    
    Over the years, syzbot found many ways to crash the kernel
    in ipgre_header() [1].
    
    This involves team or bonding drivers ability to dynamically
    change their dev->needed_headroom and/or dev->hard_header_len
    
    In this particular crash mld_newpack() allocated an skb
    with a too small reserve/headroom, and by the time mld_sendpack()
    was called, syzbot managed to attach an ipgre device.
    
    [1]
    skbuff: skb_under_panic: text:ffffffff89ea3cb7 len:2030915468 put:2030915372 head:ffff888058b43000 data:ffff887fdfa6e194 tail:0x120 end:0x6c0 dev:team0
     kernel BUG at net/core/skbuff.c:213 !
    Oops: invalid opcode: 0000 [#1] SMP KASAN PTI
    CPU: 1 UID: 0 PID: 1322 Comm: kworker/1:9 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/25/2025
    Workqueue: mld mld_ifc_work
     RIP: 0010:skb_panic+0x157/0x160 net/core/skbuff.c:213
    Call Trace:
     <TASK>
      skb_under_panic net/core/skbuff.c:223 [inline]
      skb_push+0xc3/0xe0 net/core/skbuff.c:2641
      ipgre_header+0x67/0x290 net/ipv4/ip_gre.c:897
      dev_hard_header include/linux/netdevice.h:3436 [inline]
      neigh_connected_output+0x286/0x460 net/core/neighbour.c:1618
      NF_HOOK_COND include/linux/netfilter.h:307 [inline]
      ip6_output+0x340/0x550 net/ipv6/ip6_output.c:247
      NF_HOOK+0x9e/0x380 include/linux/netfilter.h:318
      mld_sendpack+0x8d4/0xe60 net/ipv6/mcast.c:1855
      mld_send_cr net/ipv6/mcast.c:2154 [inline]
      mld_ifc_work+0x83e/0xd60 net/ipv6/mcast.c:2693
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0xad1/0x1770 kernel/workqueue.c:3340
      worker_thread+0x8a0/0xda0 kernel/workqueue.c:3421
      kthread+0x711/0x8a0 kernel/kthread.c:463
      ret_from_fork+0x510/0xa50 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    Fixes: c54419321455 ("GRE: Refactor GRE tunneling code.")
    Reported-by: [email protected]
    Closes: https://www.spinics.net/lists/netdev/msg1147302.html
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ipv6: sr: Fix MAC comparison to be constant-time [+ + +]
Author: Eric Biggers <[email protected]>
Date:   Mon Aug 18 13:27:24 2025 -0700

    ipv6: sr: Fix MAC comparison to be constant-time
    
    commit a458b2902115b26a25d67393b12ddd57d1216aaa upstream.
    
    To prevent timing attacks, MACs need to be compared in constant time.
    Use the appropriate helper function for this.
    
    Fixes: bf355b8d2c30 ("ipv6: sr: add core files for SR HMAC support")
    Cc: [email protected]
    Signed-off-by: Eric Biggers <[email protected]>
    Reviewed-by: Andrea Mayer <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    [ Include crypto/algapi.h instead of crypto/utils.h in v5.10.y. ]
    Signed-off-by: Alva Lan <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ipvlan: Make the addrs_lock be per port [+ + +]
Author: Dmitry Skorodumov <[email protected]>
Date:   Mon Jan 12 17:24:06 2026 +0300

    ipvlan: Make the addrs_lock be per port
    
    [ Upstream commit d3ba32162488283c0a4c5bedd8817aec91748802 ]
    
    Make the addrs_lock be per port, not per ipvlan dev.
    
    Initial code seems to be written in the assumption,
    that any address change must occur under RTNL.
    But it is not so for the case of IPv6. So
    
    1) Introduce per-port addrs_lock.
    
    2) It was needed to fix places where it was forgotten
    to take lock (ipvlan_open/ipvlan_close)
    
    This appears to be a very minor problem though.
    Since it's highly unlikely that ipvlan_add_addr() will
    be called on 2 CPU simultaneously. But nevertheless,
    this could cause:
    
    1) False-negative of ipvlan_addr_busy(): one interface
    iterated through all port->ipvlans + ipvlan->addrs
    under some ipvlan spinlock, and another added IP
    under its own lock. Though this is only possible
    for IPv6, since looks like only ipvlan_addr6_event() can be
    called without rtnl_lock.
    
    2) Race since ipvlan_ht_addr_add(port) is called under
    different ipvlan->addrs_lock locks
    
    This should not affect performance, since add/remove IP
    is a rare situation and spinlock is not taken on fast
    paths.
    
    Fixes: 8230819494b3 ("ipvlan: use per device spinlock to protect addrs list updates")
    Signed-off-by: Dmitry Skorodumov <[email protected]>
    Reviewed-by: Paolo Abeni <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
irqchip/gic-v3-its: Avoid truncating memory addresses [+ + +]
Author: Arnd Bergmann <[email protected]>
Date:   Mon Jan 19 21:15:12 2026 +0100

    irqchip/gic-v3-its: Avoid truncating memory addresses
    
    commit 8d76a7d89c12d08382b66e2f21f20d0627d14859 upstream.
    
    On 32-bit machines with CONFIG_ARM_LPAE, it is possible for lowmem
    allocations to be backed by addresses physical memory above the 32-bit
    address limit, as found while experimenting with larger VMSPLIT
    configurations.
    
    This caused the qemu virt model to crash in the GICv3 driver, which
    allocates the 'itt' object using GFP_KERNEL. Since all memory below
    the 4GB physical address limit is in ZONE_DMA in this configuration,
    kmalloc() defaults to higher addresses for ZONE_NORMAL, and the
    ITS driver stores the physical address in a 32-bit 'unsigned long'
    variable.
    
    Change the itt_addr variable to the correct phys_addr_t type instead,
    along with all other variables in this driver that hold a physical
    address.
    
    The gicv5 driver correctly uses u64 variables, while all other irqchip
    drivers don't call virt_to_phys or similar interfaces. It's expected that
    other device drivers have similar issues, but fixing this one is
    sufficient for booting a virtio based guest.
    
    Fixes: cc2d3216f53c ("irqchip: GICv3: ITS command queue")
    Signed-off-by: Arnd Bergmann <[email protected]>
    Signed-off-by: Thomas Gleixner <[email protected]>
    Reviewed-by: Marc Zyngier <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
ksm: use range-walk function to jump over holes in scan_get_next_rmap_item [+ + +]
Author: Pedro Demarchi Gomes <[email protected]>
Date:   Sat Jan 17 20:38:01 2026 -0300

    ksm: use range-walk function to jump over holes in scan_get_next_rmap_item
    
    [ Upstream commit f5548c318d6520d4fa3c5ed6003eeb710763cbc5 ]
    
    Currently, scan_get_next_rmap_item() walks every page address in a VMA to
    locate mergeable pages.  This becomes highly inefficient when scanning
    large virtual memory areas that contain mostly unmapped regions, causing
    ksmd to use large amount of cpu without deduplicating much pages.
    
    This patch replaces the per-address lookup with a range walk using
    walk_page_range().  The range walker allows KSM to skip over entire
    unmapped holes in a VMA, avoiding unnecessary lookups.  This problem was
    previously discussed in [1].
    
    Consider the following test program which creates a 32 TiB mapping in the
    virtual address space but only populates a single page:
    
    /* 32 TiB */
    const size_t size = 32ul * 1024 * 1024 * 1024 * 1024;
    
    int main() {
            char *area = mmap(NULL, size, PROT_READ | PROT_WRITE,
                              MAP_NORESERVE | MAP_PRIVATE | MAP_ANON, -1, 0);
    
            if (area == MAP_FAILED) {
                    perror("mmap() failed\n");
                    return -1;
            }
    
            /* Populate a single page such that we get an anon_vma. */
            *area = 0;
    
            /* Enable KSM. */
            madvise(area, size, MADV_MERGEABLE);
            pause();
            return 0;
    }
    
    $ ./ksm-sparse  &
    $ echo 1 > /sys/kernel/mm/ksm/run
    
    Without this patch ksmd uses 100% of the cpu for a long time (more then 1
    hour in my test machine) scanning all the 32 TiB virtual address space
    that contain only one mapped page.  This makes ksmd essentially deadlocked
    not able to deduplicate anything of value.  With this patch ksmd walks
    only the one mapped page and skips the rest of the 32 TiB virtual address
    space, making the scan fast using little cpu.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lkml.kernel.org/r/[email protected]
    Link: https://lore.kernel.org/linux-mm/[email protected]/ [1]
    Fixes: 31dbd01f3143 ("ksm: Kernel SamePage Merging")
    Signed-off-by: Pedro Demarchi Gomes <[email protected]>
    Co-developed-by: David Hildenbrand <[email protected]>
    Signed-off-by: David Hildenbrand <[email protected]>
    Reported-by: craftfever <[email protected]>
    Closes: https://lkml.kernel.org/r/[email protected]
    Suggested-by: David Hildenbrand <[email protected]>
    Acked-by: David Hildenbrand <[email protected]>
    Cc: Chengming Zhou <[email protected]>
    Cc: xu xin <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    [ change folio to page, replace pmdp_get_lockless with pmd_read_atomic and pmdp_get with
     READ_ONCE(*pmdp) ]
    Signed-off-by: Pedro Demarchi Gomes <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
l2tp: avoid one data-race in l2tp_tunnel_del_work() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 15 09:21:39 2026 +0000

    l2tp: avoid one data-race in l2tp_tunnel_del_work()
    
    [ Upstream commit 7a29f6bf60f2590fe5e9c4decb451e19afad2bcf ]
    
    We should read sk->sk_socket only when dealing with kernel sockets.
    
    syzbot reported the following data-race:
    
    BUG: KCSAN: data-race in l2tp_tunnel_del_work / sk_common_release
    
    write to 0xffff88811c182b20 of 8 bytes by task 5365 on cpu 0:
      sk_set_socket include/net/sock.h:2092 [inline]
      sock_orphan include/net/sock.h:2118 [inline]
      sk_common_release+0xae/0x230 net/core/sock.c:4003
      udp_lib_close+0x15/0x20 include/net/udp.h:325
      inet_release+0xce/0xf0 net/ipv4/af_inet.c:437
      __sock_release net/socket.c:662 [inline]
      sock_close+0x6b/0x150 net/socket.c:1455
      __fput+0x29b/0x650 fs/file_table.c:468
      ____fput+0x1c/0x30 fs/file_table.c:496
      task_work_run+0x131/0x1a0 kernel/task_work.c:233
      resume_user_mode_work include/linux/resume_user_mode.h:50 [inline]
      __exit_to_user_mode_loop kernel/entry/common.c:44 [inline]
      exit_to_user_mode_loop+0x1fe/0x740 kernel/entry/common.c:75
      __exit_to_user_mode_prepare include/linux/irq-entry-common.h:226 [inline]
      syscall_exit_to_user_mode_prepare include/linux/irq-entry-common.h:256 [inline]
      syscall_exit_to_user_mode_work include/linux/entry-common.h:159 [inline]
      syscall_exit_to_user_mode include/linux/entry-common.h:194 [inline]
      do_syscall_64+0x1e1/0x2b0 arch/x86/entry/syscall_64.c:100
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    read to 0xffff88811c182b20 of 8 bytes by task 827 on cpu 1:
      l2tp_tunnel_del_work+0x2f/0x1a0 net/l2tp/l2tp_core.c:1418
      process_one_work kernel/workqueue.c:3257 [inline]
      process_scheduled_works+0x4ce/0x9d0 kernel/workqueue.c:3340
      worker_thread+0x582/0x770 kernel/workqueue.c:3421
      kthread+0x489/0x510 kernel/kthread.c:463
      ret_from_fork+0x149/0x290 arch/x86/kernel/process.c:158
      ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:246
    
    value changed: 0xffff88811b818000 -> 0x0000000000000000
    
    Fixes: d00fa9adc528 ("l2tp: fix races with tunnel socket close")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: James Chapman <[email protected]>
    Reviewed-by: Guillaume Nault <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
leds: led-class: Only Add LED to leds_list when it is fully ready [+ + +]
Author: Hans de Goede <[email protected]>
Date:   Thu Dec 11 17:37:27 2025 +0100

    leds: led-class: Only Add LED to leds_list when it is fully ready
    
    commit d1883cefd31752f0504b94c3bcfa1f6d511d6e87 upstream.
    
    Before this change the LED was added to leds_list before led_init_core()
    gets called adding it the list before led_classdev.set_brightness_work gets
    initialized.
    
    This leaves a window where led_trigger_register() of a LED's default
    trigger will call led_trigger_set() which calls led_set_brightness()
    which in turn will end up queueing the *uninitialized*
    led_classdev.set_brightness_work.
    
    This race gets hit by the lenovo-thinkpad-t14s EC driver which registers
    2 LEDs with a default trigger provided by snd_ctl_led.ko in quick
    succession. The first led_classdev_register() causes an async modprobe of
    snd_ctl_led to run and that async modprobe manages to exactly hit
    the window where the second LED is on the leds_list without led_init_core()
    being called for it, resulting in:
    
     ------------[ cut here ]------------
     WARNING: CPU: 11 PID: 5608 at kernel/workqueue.c:4234 __flush_work+0x344/0x390
     Hardware name: LENOVO 21N2S01F0B/21N2S01F0B, BIOS N42ET93W (2.23 ) 09/01/2025
     ...
     Call trace:
      __flush_work+0x344/0x390 (P)
      flush_work+0x2c/0x50
      led_trigger_set+0x1c8/0x340
      led_trigger_register+0x17c/0x1c0
      led_trigger_register_simple+0x84/0xe8
      snd_ctl_led_init+0x40/0xf88 [snd_ctl_led]
      do_one_initcall+0x5c/0x318
      do_init_module+0x9c/0x2b8
      load_module+0x7e0/0x998
    
    Close the race window by moving the adding of the LED to leds_list to
    after the led_init_core() call.
    
    Cc: [email protected]
    Fixes: d23a22a74fde ("leds: delay led_set_brightness if stopping soft-blink")
    Signed-off-by: Hans de Goede <[email protected]>
    Reviewed-by: Sebastian Reichel <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Lee Jones <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: Linux 5.10.249 [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Fri Feb 6 16:40:15 2026 +0100

    Linux 5.10.249
    
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Dominique Martinet <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Tested-by: Brett A C Sheffield <[email protected]>
    Tested-by: Florian Fainelli <[email protected]>
    Tested-by: Mark Brown <[email protected]>
    Tested-by: Woody Suwalski <[email protected]>
    Tested-by: Barry K. Nathan <[email protected]>
    Tested-by: Jon Hunter <[email protected]>
    Tested-by: Jeffrin Jose T <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
macvlan: Add nodst option to macvlan type source [+ + +]
Author: Jethro Beekman <[email protected]>
Date:   Sun Apr 25 11:22:03 2021 +0200

    macvlan: Add nodst option to macvlan type source
    
    [ Upstream commit 427f0c8c194b22edcafef1b0a42995ddc5c2227d ]
    
    The default behavior for source MACVLAN is to duplicate packets to
    appropriate type source devices, and then do the normal destination MACVLAN
    flow. This patch adds an option to skip destination MACVLAN processing if
    any matching source MACVLAN device has the option set.
    
    This allows setting up a "catch all" device for source MACVLAN: create one
    or more devices with type source nodst, and one device with e.g. type vepa,
    and incoming traffic will be received on exactly one device.
    
    v2: netdev wants non-standard line length
    
    Signed-off-by: Jethro Beekman <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 7470a7a63dc1 ("macvlan: fix possible UAF in macvlan_forward_source()")
    Signed-off-by: Sasha Levin <[email protected]>

macvlan: Fix leaking skb in source mode with nodst option [+ + +]
Author: Martin Willi <[email protected]>
Date:   Tue Apr 12 11:34:57 2022 +0200

    macvlan: Fix leaking skb in source mode with nodst option
    
    commit e16b859872b87650bb55b12cca5a5fcdc49c1442 upstream.
    
    The MACVLAN receive handler clones skbs to all matching source MACVLAN
    interfaces, before it passes the packet along to match on destination
    based MACVLANs.
    
    When using the MACVLAN nodst mode, passing the packet to destination based
    MACVLANs is omitted and the handler returns with RX_HANDLER_CONSUMED.
    However, the passed skb is not freed, leaking for any packet processed
    with the nodst option.
    
    Properly free the skb when consuming packets to fix that leak.
    
    Fixes: 427f0c8c194b ("macvlan: Add nodst option to macvlan type source")
    Signed-off-by: Martin Willi <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

macvlan: fix possible UAF in macvlan_forward_source() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Thu Jan 8 13:36:51 2026 +0000

    macvlan: fix possible UAF in macvlan_forward_source()
    
    [ Upstream commit 7470a7a63dc162f07c26dbf960e41ee1e248d80e ]
    
    Add RCU protection on (struct macvlan_source_entry)->vlan.
    
    Whenever macvlan_hash_del_source() is called, we must clear
    entry->vlan pointer before RCU grace period starts.
    
    This allows macvlan_forward_source() to skip over
    entries queued for freeing.
    
    Note that macvlan_dev are already RCU protected, as they
    are embedded in a standard netdev (netdev_priv(ndev)).
    
    Fixes: 79cf79abce71 ("macvlan: add source mode")
    Reported-by: [email protected]
    https: //lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

macvlan: Use 'hash' iterators to simplify code [+ + +]
Author: Christophe JAILLET <[email protected]>
Date:   Sun Apr 25 18:14:10 2021 +0200

    macvlan: Use 'hash' iterators to simplify code
    
    [ Upstream commit bb23ffa1015cb57e0c9ec3c6135275b38d66a780 ]
    
    Use 'hash_for_each_rcu' and 'hash_for_each_safe' instead of hand writing
    them. This saves some lines of code, reduce indentation and improve
    readability.
    
    Signed-off-by: Christophe JAILLET <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: 7470a7a63dc1 ("macvlan: fix possible UAF in macvlan_forward_source()")
    Signed-off-by: Sasha Levin <[email protected]>

 
mei: trace: treat reg parameter as string [+ + +]
Author: Alexander Usyskin <[email protected]>
Date:   Wed Jan 28 19:09:29 2026 -0500

    mei: trace: treat reg parameter as string
    
    [ Upstream commit 06d5a7afe1d0b47102936d8fba568572c2b4b941 ]
    
    The commit
    afd2627f727b ("tracing: Check "%s" dereference via the field and not the TP_printk format")
    forbids to emit event with a plain char* without a wrapper.
    
    The reg parameter always passed as static string and wrapper
    is not strictly required, contrary to dev parameter.
    Use the string wrapper anyway to check sanity of the reg parameters,
    store it value independently and prevent internal kernel data leaks.
    
    Since some code refactoring has taken place, explicit backporting may
    be needed for kernels older than 6.10.
    
    Cc: [email protected]  # v6.11+
    Fixes: a0a927d06d79 ("mei: me: add io register tracing")
    Signed-off-by: Alexander Usyskin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    [ adapted single-argument __assign_str() calls to two-argument form ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
migrate: correct lock ordering for hugetlb file folios [+ + +]
Author: Matthew Wilcox (Oracle) <[email protected]>
Date:   Fri Jan 9 04:13:42 2026 +0000

    migrate: correct lock ordering for hugetlb file folios
    
    commit b7880cb166ab62c2409046b2347261abf701530e upstream.
    
    Syzbot has found a deadlock (analyzed by Lance Yang):
    
    1) Task (5749): Holds folio_lock, then tries to acquire i_mmap_rwsem(read lock).
    2) Task (5754): Holds i_mmap_rwsem(write lock), then tries to acquire
    folio_lock.
    
    migrate_pages()
      -> migrate_hugetlbs()
        -> unmap_and_move_huge_page()     <- Takes folio_lock!
          -> remove_migration_ptes()
            -> __rmap_walk_file()
              -> i_mmap_lock_read()       <- Waits for i_mmap_rwsem(read lock)!
    
    hugetlbfs_fallocate()
      -> hugetlbfs_punch_hole()           <- Takes i_mmap_rwsem(write lock)!
        -> hugetlbfs_zero_partial_page()
         -> filemap_lock_hugetlb_folio()
          -> filemap_lock_folio()
            -> __filemap_get_folio        <- Waits for folio_lock!
    
    The migration path is the one taking locks in the wrong order according to
    the documentation at the top of mm/rmap.c.  So expand the scope of the
    existing i_mmap_lock to cover the calls to remove_migration_ptes() too.
    
    This is (mostly) how it used to be after commit c0d0381ade79.  That was
    removed by 336bf30eb765 for both file & anon hugetlb pages when it should
    only have been removed for anon hugetlb pages.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>
    Fixes: 336bf30eb765 ("hugetlbfs: fix anon huge page migration race")
    Reported-by: [email protected]
    Link: https://lore.kernel.org/all/[email protected]
    Debugged-by: Lance Yang <[email protected]>
    Acked-by: David Hildenbrand (Red Hat) <[email protected]>
    Acked-by: Zi Yan <[email protected]>
    Cc: Alistair Popple <[email protected]>
    Cc: Byungchul Park <[email protected]>
    Cc: Gregory Price <[email protected]>
    Cc: Jann Horn <[email protected]>
    Cc: Joshua Hahn <[email protected]>
    Cc: Liam Howlett <[email protected]>
    Cc: Lorenzo Stoakes <[email protected]>
    Cc: Matthew Brost <[email protected]>
    Cc: Rakie Kim <[email protected]>
    Cc: Rik van Riel <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Cc: Ying Huang <[email protected]>
    Cc: <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mISDN: annotate data-race around dev->work [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Sun Jan 18 13:25:28 2026 +0000

    mISDN: annotate data-race around dev->work
    
    [ Upstream commit 8175dbf174d487afab81e936a862a8d9b8a1ccb6 ]
    
    dev->work can re read locklessly in mISDN_read()
    and mISDN_poll(). Add READ_ONCE()/WRITE_ONCE() annotations.
    
    BUG: KCSAN: data-race in mISDN_ioctl / mISDN_read
    
    write to 0xffff88812d848280 of 4 bytes by task 10864 on cpu 1:
      misdn_add_timer drivers/isdn/mISDN/timerdev.c:175 [inline]
      mISDN_ioctl+0x2fb/0x550 drivers/isdn/mISDN/timerdev.c:233
      vfs_ioctl fs/ioctl.c:51 [inline]
      __do_sys_ioctl fs/ioctl.c:597 [inline]
      __se_sys_ioctl+0xce/0x140 fs/ioctl.c:583
      __x64_sys_ioctl+0x43/0x50 fs/ioctl.c:583
      x64_sys_call+0x14b0/0x3000 arch/x86/include/generated/asm/syscalls_64.h:17
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd8/0x2c0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    read to 0xffff88812d848280 of 4 bytes by task 10857 on cpu 0:
      mISDN_read+0x1f2/0x470 drivers/isdn/mISDN/timerdev.c:112
      do_loop_readv_writev fs/read_write.c:847 [inline]
      vfs_readv+0x3fb/0x690 fs/read_write.c:1020
      do_readv+0xe7/0x210 fs/read_write.c:1080
      __do_sys_readv fs/read_write.c:1165 [inline]
      __se_sys_readv fs/read_write.c:1162 [inline]
      __x64_sys_readv+0x45/0x50 fs/read_write.c:1162
      x64_sys_call+0x2831/0x3000 arch/x86/include/generated/asm/syscalls_64.h:20
      do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
      do_syscall_64+0xd8/0x2c0 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    value changed: 0x00000000 -> 0x00000001
    
    Fixes: 1b2b03f8e514 ("Add mISDN core files")
    Reported-by: syzbot <[email protected]>
    Signed-off-by: Eric Dumazet <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
mm/pagewalk: add walk_page_range_vma() [+ + +]
Author: David Hildenbrand <[email protected]>
Date:   Sat Jan 17 20:38:00 2026 -0300

    mm/pagewalk: add walk_page_range_vma()
    
    [ Upstream commit e07cda5f232fac4de0925d8a4c92e51e41fa2f6e ]
    
    Let's add walk_page_range_vma(), which is similar to walk_page_vma(),
    however, is only interested in a subset of the VMA range.
    
    To be used in KSM code to stop using follow_page() next.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Signed-off-by: David Hildenbrand <[email protected]>
    Cc: Andrea Arcangeli <[email protected]>
    Cc: Hugh Dickins <[email protected]>
    Cc: Jason Gunthorpe <[email protected]>
    Cc: John Hubbard <[email protected]>
    Cc: Matthew Wilcox (Oracle) <[email protected]>
    Cc: Peter Xu <[email protected]>
    Cc: Shuah Khan <[email protected]>
    Cc: Vlastimil Babka <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Stable-dep-of: f5548c318d6 ("ksm: use range-walk function to jump over holes in scan_get_next_rmap_item")
    Signed-off-by: Pedro Demarchi Gomes <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
mmc: rtsx_pci_sdmmc: implement sdmmc_card_busy function [+ + +]
Author: Matthew Schwartz <[email protected]>
Date:   Mon Dec 29 12:45:26 2025 -0800

    mmc: rtsx_pci_sdmmc: implement sdmmc_card_busy function
    
    commit 122610220134b32c742cc056eaf64f7017ac8cd9 upstream.
    
    rtsx_pci_sdmmc does not have an sdmmc_card_busy function, so any voltage
    switches cause a kernel warning, "mmc0: cannot verify signal voltage
    switch."
    
    Copy the sdmmc_card_busy function from rtsx_pci_usb to rtsx_pci_sdmmc to
    fix this.
    
    Fixes: ff984e57d36e ("mmc: Add realtek pcie sdmmc host driver")
    Signed-off-by: Matthew Schwartz <[email protected]>
    Tested-by: Ricky WU <[email protected]>
    Reviewed-by: Ricky WU <[email protected]>
    Cc: [email protected]
    Signed-off-by: Ulf Hansson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
net/mlx5: Add HW definitions of vport debug counters [+ + +]
Author: Saeed Mahameed <[email protected]>
Date:   Wed Jun 8 13:04:48 2022 -0700

    net/mlx5: Add HW definitions of vport debug counters
    
    [ Upstream commit 3e94e61bd44d90070dcda53b647fdc826097ef26 ]
    
    total_q_under_processor_handle - number of queues in error state due to an
    async error or errored command.
    
    send_queue_priority_update_flow - number of QP/SQ priority/SL update
    events.
    
    cq_overrun - number of times CQ entered an error state due to an
    overflow.
    
    async_eq_overrun -number of time an EQ mapped to async events was
    overrun.
    
    comp_eq_overrun - number of time an EQ mapped to completion events was
    overrun.
    
    quota_exceeded_command - number of commands issued and failed due to quota
    exceeded.
    
    invalid_command - number of commands issued and failed dues to any reason
    other than quota exceeded.
    
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Michael Guralnik <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Stable-dep-of: 476681f10cc1 ("net/mlx5e: Account for netdev stats in ndo_get_stats64")
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Tue Jan 20 13:46:40 2026 +0000

    net/mlx5: Fix memory leak in esw_acl_ingress_lgcy_setup()
    
    [ Upstream commit 108948f723b13874b7ebf6b3f1cc598a7de38622 ]
    
    In esw_acl_ingress_lgcy_setup(), if esw_acl_table_create() fails,
    the function returns directly without releasing the previously
    created counter, leading to a memory leak.
    
    Fix this by jumping to the out label instead of returning directly,
    which aligns with the error handling logic of other paths in this
    function.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: 07bab9502641 ("net/mlx5: E-Switch, Refactor eswitch ingress acl codes")
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net/mlx5e: Account for netdev stats in ndo_get_stats64 [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Mon Jan 26 09:14:55 2026 +0200

    net/mlx5e: Account for netdev stats in ndo_get_stats64
    
    [ Upstream commit 476681f10cc1e0e56e26856684e75d4678b072b2 ]
    
    The driver's ndo_get_stats64 callback is only reporting mlx5 counters,
    without accounting for the netdev stats, causing errors from the network
    stack to be invisible in statistics.
    
    Add netdev_stats_to_stats64() call to first populate the counters, then
    add mlx5 counters on top, ensuring both are accounted for (where
    appropriate).
    
    Fixes: f62b8bb8f2d3 ("net/mlx5: Extend mlx5_core to support ConnectX-4 Ethernet functionality")
    Signed-off-by: Gal Pressman <[email protected]>
    Signed-off-by: Tariq Toukan <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Expose rx_oversize_pkts_buffer counter [+ + +]
Author: Gal Pressman <[email protected]>
Date:   Sat Oct 1 21:56:27 2022 -0700

    net/mlx5e: Expose rx_oversize_pkts_buffer counter
    
    [ Upstream commit 16ab85e78439bab1201ff26ba430231d1574b4ae ]
    
    Add the rx_oversize_pkts_buffer counter to ethtool statistics.
    This counter exposes the number of dropped received packets due to
    length which arrived to RQ and exceed software buffer size allocated by
    the device for incoming traffic. It might imply that the device MTU is
    larger than the software buffers size.
    
    Signed-off-by: Gal Pressman <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Signed-off-by: Saeed Mahameed <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 476681f10cc1 ("net/mlx5e: Account for netdev stats in ndo_get_stats64")
    Signed-off-by: Sasha Levin <[email protected]>

net/mlx5e: Report rx_discards_phy via rx_dropped [+ + +]
Author: Yafang Shao <[email protected]>
Date:   Tue Dec 10 10:27:06 2024 +0800

    net/mlx5e: Report rx_discards_phy via rx_dropped
    
    [ Upstream commit c9cfced17365b1df8c6ae6cd5db56aebd7ed9b57 ]
    
    We noticed a high number of rx_discards_phy events on certain servers while
    running `ethtool -S`. However, this critical counter is not currently
    included in the standard /proc/net/dev statistics file, making it difficult
    to monitor effectively—especially given the diversity of vendors across a
    large fleet of servers.
    
    Let's report it via the standard rx_dropped metric.
    
    Suggested-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Yafang Shao <[email protected]>
    Cc: Saeed Mahameed <[email protected]>
    Cc: Leon Romanovsky <[email protected]>
    Cc: Gal Pressman <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Reviewed-by: Tariq Toukan <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: 476681f10cc1 ("net/mlx5e: Account for netdev stats in ndo_get_stats64")
    Signed-off-by: Sasha Levin <[email protected]>

 
net/sched: act_ife: avoid possible NULL deref [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Wed Jan 21 13:37:24 2026 +0000

    net/sched: act_ife: avoid possible NULL deref
    
    [ Upstream commit 27880b0b0d35ad1c98863d09788254e36f874968 ]
    
    tcf_ife_encode() must make sure ife_encode() does not return NULL.
    
    syzbot reported:
    
    Oops: general protection fault, probably for non-canonical address 0xdffffc0000000000: 0000 [#1] SMP KASAN NOPTI
    KASAN: null-ptr-deref in range [0x0000000000000000-0x0000000000000007]
     RIP: 0010:ife_tlv_meta_encode+0x41/0xa0 net/ife/ife.c:166
    CPU: 3 UID: 0 PID: 8990 Comm: syz.0.696 Not tainted syzkaller #0 PREEMPT(full)
    Call Trace:
     <TASK>
      ife_encode_meta_u32+0x153/0x180 net/sched/act_ife.c:101
      tcf_ife_encode net/sched/act_ife.c:841 [inline]
      tcf_ife_act+0x1022/0x1de0 net/sched/act_ife.c:877
      tc_act include/net/tc_wrapper.h:130 [inline]
      tcf_action_exec+0x1c0/0xa20 net/sched/act_api.c:1152
      tcf_exts_exec include/net/pkt_cls.h:349 [inline]
      mall_classify+0x1a0/0x2a0 net/sched/cls_matchall.c:42
      tc_classify include/net/tc_wrapper.h:197 [inline]
      __tcf_classify net/sched/cls_api.c:1764 [inline]
      tcf_classify+0x7f2/0x1380 net/sched/cls_api.c:1860
      multiq_classify net/sched/sch_multiq.c:39 [inline]
      multiq_enqueue+0xe0/0x510 net/sched/sch_multiq.c:66
      dev_qdisc_enqueue+0x45/0x250 net/core/dev.c:4147
      __dev_xmit_skb net/core/dev.c:4262 [inline]
      __dev_queue_xmit+0x2998/0x46c0 net/core/dev.c:4798
    
    Fixes: 295a6e06d21e ("net/sched: act_ife: Change to use ife module")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Cc: Yotam Gigi <[email protected]>
    Reviewed-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: act_ife: convert comma to semicolon [+ + +]
Author: Chen Ni <[email protected]>
Date:   Wed Nov 12 15:27:09 2025 +0800

    net/sched: act_ife: convert comma to semicolon
    
    commit 205305c028ad986d0649b8b100bab6032dcd1bb5 upstream.
    
    Replace comma between expressions with semicolons.
    
    Using a ',' in place of a ';' can have unintended side effects.
    Although that is not the case here, it is seems best to use ';'
    unless ',' is intended.
    
    Found by inspection.
    No functional change intended.
    Compile tested only.
    
    Signed-off-by: Chen Ni <[email protected]>
    Reviewed-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Cc: Ben Hutchings <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net/sched: Enforce that teql can only be used as root qdisc [+ + +]
Author: Jamal Hadi Salim <[email protected]>
Date:   Wed Jan 14 11:02:41 2026 -0500

    net/sched: Enforce that teql can only be used as root qdisc
    
    [ Upstream commit 50da4b9d07a7a463e2cfb738f3ad4cff6b2c9c3b ]
    
    Design intent of teql is that it is only supposed to be used as root qdisc.
    We need to check for that constraint.
    
    Although not important, I will describe the scenario that unearthed this
    issue for the curious.
    
    GangMin Kim <[email protected]> managed to concot a scenario as follows:
    
    ROOT qdisc 1:0 (QFQ)
      ├── class 1:1 (weight=15, lmax=16384) netem with delay 6.4s
      └── class 1:2 (weight=1, lmax=1514) teql
    
    GangMin sends a packet which is enqueued to 1:1 (netem).
    Any invocation of dequeue by QFQ from this class will not return a packet
    until after 6.4s. In the meantime, a second packet is sent and it lands on
    1:2. teql's enqueue will return success and this will activate class 1:2.
    Main issue is that teql only updates the parent visible qlen (sch->q.qlen)
    at dequeue. Since QFQ will only call dequeue if peek succeeds (and teql's
    peek always returns NULL), dequeue will never be called and thus the qlen
    will remain as 0. With that in mind, when GangMin updates 1:2's lmax value,
    the qfq_change_class calls qfq_deact_rm_from_agg. Since the child qdisc's
    qlen was not incremented, qfq fails to deactivate the class, but still
    frees its pointers from the aggregate. So when the first packet is
    rescheduled after 6.4 seconds (netem's delay), a dangling pointer is
    accessed causing GangMin's causing a UAF.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reported-by: GangMin Kim <[email protected]>
    Tested-by: Victor Nogueira <[email protected]>
    Signed-off-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: qfq: Use cl_is_active to determine whether class is active in qfq_rm_from_ag [+ + +]
Author: Jamal Hadi Salim <[email protected]>
Date:   Wed Jan 14 11:02:42 2026 -0500

    net/sched: qfq: Use cl_is_active to determine whether class is active in qfq_rm_from_ag
    
    [ Upstream commit d837fbee92453fbb829f950c8e7cf76207d73f33 ]
    
    This is more of a preventive patch to make the code more consistent and
    to prevent possible exploits that employ child qlen manipulations on qfq.
    use cl_is_active instead of relying on the child qdisc's qlen to determine
    class activation.
    
    Fixes: 462dbc9101acd ("pkt_sched: QFQ Plus: fair-queueing service at DRR cost")
    Signed-off-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net/sched: sch_qfq: do not free existing class in qfq_change_class() [+ + +]
Author: Eric Dumazet <[email protected]>
Date:   Mon Jan 12 17:56:56 2026 +0000

    net/sched: sch_qfq: do not free existing class in qfq_change_class()
    
    [ Upstream commit 3879cffd9d07aa0377c4b8835c4f64b4fb24ac78 ]
    
    Fixes qfq_change_class() error case.
    
    cl->qdisc and cl should only be freed if a new class and qdisc
    were allocated, or we risk various UAF.
    
    Fixes: 462dbc9101ac ("pkt_sched: QFQ Plus: fair-queueing service at DRR cost")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Eric Dumazet <[email protected]>
    Reviewed-by: Jamal Hadi Salim <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
net: bridge: fix static key check [+ + +]
Author: Martin Kaiser <[email protected]>
Date:   Tue Jan 27 11:19:23 2026 +0100

    net: bridge: fix static key check
    
    [ Upstream commit cc0cf10fdaeadf5542d64a55b5b4120d3df90b7d ]
    
    Fix the check if netfilter's static keys are available. netfilter defines
    and exports static keys if CONFIG_JUMP_LABEL is enabled. (HAVE_JUMP_LABEL
    is never defined.)
    
    Fixes: 971502d77faa ("bridge: netfilter: unroll NF_HOOK helper in bridge input path")
    Signed-off-by: Martin Kaiser <[email protected]>
    Reviewed-by: Florian Westphal <[email protected]>
    Reviewed-by: Nikolay Aleksandrov <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts [+ + +]
Author: Tetsuo Handa <[email protected]>
Date:   Wed Jan 14 00:28:47 2026 +0900

    net: can: j1939: j1939_xtp_rx_rts_session_active(): deactivate session upon receiving the second rts
    
    commit 1809c82aa073a11b7d335ae932d81ce51a588a4a upstream.
    
    Since j1939_session_deactivate_activate_next() in j1939_tp_rxtimer() is
    called only when the timer is enabled, we need to call
    j1939_session_deactivate_activate_next() if we cancelled the timer.
    Otherwise, refcount for j1939_session leaks, which will later appear as
    
    | unregister_netdevice: waiting for vcan0 to become free. Usage count = 2.
    
    problem.
    
    Reported-by: syzbot <[email protected]>
    Closes: https://syzkaller.appspot.com/bug?extid=881d65229ca4f9ae8c84
    Signed-off-by: Tetsuo Handa <[email protected]>
    Tested-by: Oleksij Rempel <[email protected]>
    Acked-by: Oleksij Rempel <[email protected]>
    Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol")
    Link: https://patch.msgid.link/[email protected]
    Cc: [email protected]
    Signed-off-by: Marc Kleine-Budde <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

net: fou: rename the source for linking [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Fri Jan 20 09:50:39 2023 -0800

    net: fou: rename the source for linking
    
    [ Upstream commit 08d323234d10eab077cbf0093eeb5991478a261a ]
    
    We'll need to link two objects together to form the fou module.
    This means the source can't be called fou, the build system expects
    fou.o to be the combined object.
    
    Acked-by: Stanislav Fomichev <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: 7a9bc9e3f423 ("fou: Don't allow 0 for FOU_ATTR_IPPROTO.")
    Signed-off-by: Sasha Levin <[email protected]>

net: fou: use policy and operation tables generated from the spec [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Fri Jan 20 09:50:40 2023 -0800

    net: fou: use policy and operation tables generated from the spec
    
    [ Upstream commit 1d562c32e4392cc091c940918ee1ffd7bfcb9e96 ]
    
    Generate and plug in the spec-based tables.
    
    A little bit of renaming is needed in the FOU code.
    
    Acked-by: Stanislav Fomichev <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: 7a9bc9e3f423 ("fou: Don't allow 0 for FOU_ATTR_IPPROTO.")
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: fix the HCLGE_FD_AD_NXT_KEY error setting issue [+ + +]
Author: Jijie Shao <[email protected]>
Date:   Mon Jan 19 21:28:40 2026 +0800

    net: hns3: fix the HCLGE_FD_AD_NXT_KEY error setting issue
    
    [ Upstream commit f87e034d16e43af984380a95c32c25201b7759a7 ]
    
    Use next_input_key instead of counter_id to set HCLGE_FD_AD_NXT_KEY.
    
    Fixes: 117328680288 ("net: hns3: Add input key and action config support for flow director")
    Signed-off-by: Jijie Shao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: hns3: fix wrong GENMASK() for HCLGE_FD_AD_COUNTER_NUM_M [+ + +]
Author: Jijie Shao <[email protected]>
Date:   Mon Jan 19 21:28:39 2026 +0800

    net: hns3: fix wrong GENMASK() for HCLGE_FD_AD_COUNTER_NUM_M
    
    [ Upstream commit d57c67c956a1bad15115eba6e59d77a6dfeba01d ]
    
    HCLGE_FD_AD_COUNTER_NUM_M should be at GENMASK(19, 13),
    rather than at GENMASK(20, 13), because bit 20 is
    HCLGE_FD_AD_NXT_STEP_B.
    
    This patch corrects the wrong definition.
    
    Fixes: 117328680288 ("net: hns3: Add input key and action config support for flow director")
    Signed-off-by: Jijie Shao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Fri Jan 23 06:57:16 2026 +0000

    net: mvpp2: cls: Fix memory leak in mvpp2_ethtool_cls_rule_ins()
    
    [ Upstream commit 09f979d1f312627b31d2ee1e46f9692e442610cd ]
    
    In mvpp2_ethtool_cls_rule_ins(), the ethtool_rule is allocated by
    ethtool_rx_flow_rule_create(). If the subsequent conversion to flow
    type fails, the function jumps to the clean_rule label.
    
    However, the clean_rule label only frees efs, skipping the cleanup
    of ethtool_rule, which leads to a memory leak.
    
    Fix this by jumping to the clean_eth_rule label, which properly calls
    ethtool_rx_flow_rule_destroy() before freeing efs.
    
    Compile tested only. Issue found using a prototype static analysis tool
    and code review.
    
    Fixes: f4f1ba18195d ("net: mvpp2: cls: Report an error for unsupported flow types")
    Signed-off-by: Zilin Guan <[email protected]>
    Reviewed-by: Maxime Chevallier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

net: usb: dm9601: remove broken SR9700 support [+ + +]
Author: Ethan Nelson-Moore <[email protected]>
Date:   Mon Jan 12 22:39:24 2026 -0800

    net: usb: dm9601: remove broken SR9700 support
    
    [ Upstream commit 7d7dbafefbe74f5a25efc4807af093b857a7612e ]
    
    The SR9700 chip sends more than one packet in a USB transaction,
    like the DM962x chips can optionally do, but the dm9601 driver does not
    support this mode, and the hardware does not have the DM962x
    MODE_CTL register to disable it, so this driver drops packets on SR9700
    devices. The sr9700 driver correctly handles receiving more than one
    packet per transaction.
    
    While the dm9601 driver could be improved to handle this, the easiest
    way to fix this issue in the short term is to remove the SR9700 device
    ID from the dm9601 driver so the sr9700 driver is always used. This
    device ID should not have been in more than one driver to begin with.
    
    The "Fixes" commit was chosen so that the patch is automatically
    included in all kernels that have the sr9700 driver, even though the
    issue affects dm9601.
    
    Fixes: c9b37458e956 ("USB2NET : SR9700 : One chip USB 1.1 USB2NET SR9700Device Driver Support")
    Signed-off-by: Ethan Nelson-Moore <[email protected]>
    Acked-by: Peter Korsgaard <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
netfilter: nf_tables: typo NULL check in _clone() function [+ + +]
Author: Pablo Neira Ayuso <[email protected]>
Date:   Mon Jan 10 20:48:17 2022 +0100

    netfilter: nf_tables: typo NULL check in _clone() function
    
    commit 51edb2ff1c6fc27d3fa73f0773a31597ecd8e230 upstream.
    
    This should check for NULL in case memory allocation fails.
    
    Reported-by: Julian Wiedmann <[email protected]>
    Fixes: 3b9e2ea6c11b ("netfilter: nft_limit: move stateful fields out of expression data")
    Fixes: 37f319f37d90 ("netfilter: nft_connlimit: move stateful fields out of expression data")
    Fixes: 33a24de37e81 ("netfilter: nft_last: move stateful fields out of expression data")
    Fixes: ed0a0c60f0e5 ("netfilter: nft_quota: move stateful fields out of expression data")
    Signed-off-by: Pablo Neira Ayuso <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Cc: Ben Hutchings <[email protected]>
    [ Portion of this patch applied - gregkh ]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
netlink: add a proto specification for FOU [+ + +]
Author: Jakub Kicinski <[email protected]>
Date:   Fri Jan 20 09:50:37 2023 -0800

    netlink: add a proto specification for FOU
    
    [ Upstream commit 4eb77b4ecd3c5eaab83adf76e67e0a7ed2a24418 ]
    
    FOU has a reasonably modern Genetlink family. Add a spec.
    
    Acked-by: Stanislav Fomichev <[email protected]>
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Paolo Abeni <[email protected]>
    Stable-dep-of: 7a9bc9e3f423 ("fou: Don't allow 0 for FOU_ATTR_IPPROTO.")
    Signed-off-by: Sasha Levin <[email protected]>

 
netrom: fix double-free in nr_route_frame() [+ + +]
Author: Jeongjun Park <[email protected]>
Date:   Mon Jan 19 15:33:59 2026 +0900

    netrom: fix double-free in nr_route_frame()
    
    commit ba1096c315283ee3292765f6aea4cca15816c4f7 upstream.
    
    In nr_route_frame(), old_skb is immediately freed without checking if
    nr_neigh->ax25 pointer is NULL. Therefore, if nr_neigh->ax25 is NULL,
    the caller function will free old_skb again, causing a double-free bug.
    
    Therefore, to prevent this, we need to modify it to check whether
    nr_neigh->ax25 is NULL before freeing old_skb.
    
    Cc: <[email protected]>
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Jeongjun Park <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Sun Jan 25 00:59:28 2026 +0000

    nfc: llcp: Fix memleak in nfc_llcp_send_ui_frame().
    
    [ Upstream commit 165c34fb6068ff153e3fc99a932a80a9d5755709 ]
    
    syzbot reported various memory leaks related to NFC, struct
    nfc_llcp_sock, sk_buff, nfc_dev, etc. [0]
    
    The leading log hinted that nfc_llcp_send_ui_frame() failed
    to allocate skb due to sock_error(sk) being -ENXIO.
    
    ENXIO is set by nfc_llcp_socket_release() when struct
    nfc_llcp_local is destroyed by local_cleanup().
    
    The problem is that there is no synchronisation between
    nfc_llcp_send_ui_frame() and local_cleanup(), and skb
    could be put into local->tx_queue after it was purged in
    local_cleanup():
    
      CPU1                          CPU2
      ----                          ----
      nfc_llcp_send_ui_frame()      local_cleanup()
      |- do {                       '
         |- pdu = nfc_alloc_send_skb(..., &err)
         |                          .
         |                          |- nfc_llcp_socket_release(local, false, ENXIO);
         |                          |- skb_queue_purge(&local->tx_queue);      |
         |                          '                                          |
         |- skb_queue_tail(&local->tx_queue, pdu);                             |
        ...                                                                    |
         |- pdu = nfc_alloc_send_skb(..., &err)                                |
                                           ^._________________________________.'
    
    local_cleanup() is called for struct nfc_llcp_local only
    after nfc_llcp_remove_local() unlinks it from llcp_devices.
    
    If we hold local->tx_queue.lock then, we can synchronise
    the thread and nfc_llcp_send_ui_frame().
    
    Let's do that and check list_empty(&local->list) before
    queuing skb to local->tx_queue in nfc_llcp_send_ui_frame().
    
    [0]:
    [   56.074943][ T6096] llcp: nfc_llcp_send_ui_frame: Could not allocate PDU (error=-6)
    [   64.318868][ T5813] kmemleak: 6 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
    BUG: memory leak
    unreferenced object 0xffff8881272f6800 (size 1024):
      comm "syz.0.17", pid 6096, jiffies 4294942766
      hex dump (first 32 bytes):
        00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        27 00 03 40 00 00 00 00 00 00 00 00 00 00 00 00  '..@............
      backtrace (crc da58d84d):
        kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
        slab_post_alloc_hook mm/slub.c:4979 [inline]
        slab_alloc_node mm/slub.c:5284 [inline]
        __do_kmalloc_node mm/slub.c:5645 [inline]
        __kmalloc_noprof+0x3e3/0x6b0 mm/slub.c:5658
        kmalloc_noprof include/linux/slab.h:961 [inline]
        sk_prot_alloc+0x11a/0x1b0 net/core/sock.c:2239
        sk_alloc+0x36/0x360 net/core/sock.c:2295
        nfc_llcp_sock_alloc+0x37/0x130 net/nfc/llcp_sock.c:979
        llcp_sock_create+0x71/0xd0 net/nfc/llcp_sock.c:1044
        nfc_sock_create+0xc9/0xf0 net/nfc/af_nfc.c:31
        __sock_create+0x1a9/0x340 net/socket.c:1605
        sock_create net/socket.c:1663 [inline]
        __sys_socket_create net/socket.c:1700 [inline]
        __sys_socket+0xb9/0x1a0 net/socket.c:1747
        __do_sys_socket net/socket.c:1761 [inline]
        __se_sys_socket net/socket.c:1759 [inline]
        __x64_sys_socket+0x1b/0x30 net/socket.c:1759
        do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
        do_syscall_64+0xa4/0xfa0 arch/x86/entry/syscall_64.c:94
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    BUG: memory leak
    unreferenced object 0xffff88810fbd9800 (size 240):
      comm "syz.0.17", pid 6096, jiffies 4294942850
      hex dump (first 32 bytes):
        68 f0 ff 08 81 88 ff ff 68 f0 ff 08 81 88 ff ff  h.......h.......
        00 00 00 00 00 00 00 00 00 68 2f 27 81 88 ff ff  .........h/'....
      backtrace (crc 6cc652b1):
        kmemleak_alloc_recursive include/linux/kmemleak.h:44 [inline]
        slab_post_alloc_hook mm/slub.c:4979 [inline]
        slab_alloc_node mm/slub.c:5284 [inline]
        kmem_cache_alloc_node_noprof+0x36f/0x5e0 mm/slub.c:5336
        __alloc_skb+0x203/0x240 net/core/skbuff.c:660
        alloc_skb include/linux/skbuff.h:1383 [inline]
        alloc_skb_with_frags+0x69/0x3f0 net/core/skbuff.c:6671
        sock_alloc_send_pskb+0x379/0x3e0 net/core/sock.c:2965
        sock_alloc_send_skb include/net/sock.h:1859 [inline]
        nfc_alloc_send_skb+0x45/0x80 net/nfc/core.c:724
        nfc_llcp_send_ui_frame+0x162/0x360 net/nfc/llcp_commands.c:766
        llcp_sock_sendmsg+0x14c/0x1d0 net/nfc/llcp_sock.c:814
        sock_sendmsg_nosec net/socket.c:727 [inline]
        __sock_sendmsg net/socket.c:742 [inline]
        __sys_sendto+0x2d8/0x2f0 net/socket.c:2244
        __do_sys_sendto net/socket.c:2251 [inline]
        __se_sys_sendto net/socket.c:2247 [inline]
        __x64_sys_sendto+0x28/0x30 net/socket.c:2247
        do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
        do_syscall_64+0xa4/0xfa0 arch/x86/entry/syscall_64.c:94
        entry_SYSCALL_64_after_hwframe+0x77/0x7f
    
    Fixes: 94f418a20664 ("NFC: UI frame sending routine implementation")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/netdev/[email protected]/T/#u
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

nfc: nci: Fix race between rfkill and nci_unregister_device(). [+ + +]
Author: Kuniyuki Iwashima <[email protected]>
Date:   Tue Jan 27 04:03:59 2026 +0000

    nfc: nci: Fix race between rfkill and nci_unregister_device().
    
    [ Upstream commit d2492688bb9fed6ab6e313682c387ae71a66ebae ]
    
    syzbot reported the splat below [0] without a repro.
    
    It indicates that struct nci_dev.cmd_wq had been destroyed before
    nci_close_device() was called via rfkill.
    
    nci_dev.cmd_wq is only destroyed in nci_unregister_device(), which
    (I think) was called from virtual_ncidev_close() when syzbot close()d
    an fd of virtual_ncidev.
    
    The problem is that nci_unregister_device() destroys nci_dev.cmd_wq
    first and then calls nfc_unregister_device(), which removes the
    device from rfkill by rfkill_unregister().
    
    So, the device is still visible via rfkill even after nci_dev.cmd_wq
    is destroyed.
    
    Let's unregister the device from rfkill first in nci_unregister_device().
    
    Note that we cannot call nfc_unregister_device() before
    nci_close_device() because
    
      1) nfc_unregister_device() calls device_del() which frees
         all memory allocated by devm_kzalloc() and linked to
         ndev->conn_info_list
    
      2) nci_rx_work() could try to queue nci_conn_info to
         ndev->conn_info_list which could be leaked
    
    Thus, nfc_unregister_device() is split into two functions so we
    can remove rfkill interfaces only before nci_close_device().
    
    [0]:
    DEBUG_LOCKS_WARN_ON(1)
    WARNING: kernel/locking/lockdep.c:238 at hlock_class kernel/locking/lockdep.c:238 [inline], CPU#0: syz.0.8675/6349
    WARNING: kernel/locking/lockdep.c:238 at check_wait_context kernel/locking/lockdep.c:4854 [inline], CPU#0: syz.0.8675/6349
    WARNING: kernel/locking/lockdep.c:238 at __lock_acquire+0x39d/0x2cf0 kernel/locking/lockdep.c:5187, CPU#0: syz.0.8675/6349
    Modules linked in:
    CPU: 0 UID: 0 PID: 6349 Comm: syz.0.8675 Not tainted syzkaller #0 PREEMPT(full)
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/13/2026
    RIP: 0010:hlock_class kernel/locking/lockdep.c:238 [inline]
    RIP: 0010:check_wait_context kernel/locking/lockdep.c:4854 [inline]
    RIP: 0010:__lock_acquire+0x3a4/0x2cf0 kernel/locking/lockdep.c:5187
    Code: 18 00 4c 8b 74 24 08 75 27 90 e8 17 f2 fc 02 85 c0 74 1c 83 3d 50 e0 4e 0e 00 75 13 48 8d 3d 43 f7 51 0e 48 c7 c6 8b 3a de 8d <67> 48 0f b9 3a 90 31 c0 0f b6 98 c4 00 00 00 41 8b 45 20 25 ff 1f
    RSP: 0018:ffffc9000c767680 EFLAGS: 00010046
    RAX: 0000000000000001 RBX: 0000000000040000 RCX: 0000000000080000
    RDX: ffffc90013080000 RSI: ffffffff8dde3a8b RDI: ffffffff8ff24ca0
    RBP: 0000000000000003 R08: ffffffff8fef35a3 R09: 1ffffffff1fde6b4
    R10: dffffc0000000000 R11: fffffbfff1fde6b5 R12: 00000000000012a2
    R13: ffff888030338ba8 R14: ffff888030338000 R15: ffff888030338b30
    FS:  00007fa5995f66c0(0000) GS:ffff8881256f8000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00007f7e72f842d0 CR3: 00000000485a0000 CR4: 00000000003526f0
    Call Trace:
     <TASK>
     lock_acquire+0x106/0x330 kernel/locking/lockdep.c:5868
     touch_wq_lockdep_map+0xcb/0x180 kernel/workqueue.c:3940
     __flush_workqueue+0x14b/0x14f0 kernel/workqueue.c:3982
     nci_close_device+0x302/0x630 net/nfc/nci/core.c:567
     nci_dev_down+0x3b/0x50 net/nfc/nci/core.c:639
     nfc_dev_down+0x152/0x290 net/nfc/core.c:161
     nfc_rfkill_set_block+0x2d/0x100 net/nfc/core.c:179
     rfkill_set_block+0x1d2/0x440 net/rfkill/core.c:346
     rfkill_fop_write+0x461/0x5a0 net/rfkill/core.c:1301
     vfs_write+0x29a/0xb90 fs/read_write.c:684
     ksys_write+0x150/0x270 fs/read_write.c:738
     do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
     do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94
     entry_SYSCALL_64_after_hwframe+0x77/0x7f
    RIP: 0033:0x7fa59b39acb9
    Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 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 e8 ff ff ff f7 d8 64 89 01 48
    RSP: 002b:00007fa5995f6028 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 00007fa59b615fa0 RCX: 00007fa59b39acb9
    RDX: 0000000000000008 RSI: 0000200000000080 RDI: 0000000000000007
    RBP: 00007fa59b408bf7 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
    R13: 00007fa59b616038 R14: 00007fa59b615fa0 R15: 00007ffc82218788
     </TASK>
    
    Fixes: 6a2968aaf50c ("NFC: basic NCI protocol implementation")
    Reported-by: [email protected]
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Kuniyuki Iwashima <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme-fc: rename free_ctrl callback to match name pattern [+ + +]
Author: Daniel Wagner <[email protected]>
Date:   Tue Jan 20 22:06:17 2026 -0500

    nvme-fc: rename free_ctrl callback to match name pattern
    
    [ Upstream commit 205fb5fa6fde1b5b426015eb1ff69f2ff25ef5bb ]
    
    Rename nvme_fc_nvme_ctrl_freed to nvme_fc_free_ctrl to match the name
    pattern for the callback.
    
    Reviewed-by: Christoph Hellwig <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Reviewed-by: Hannes Reinecke <[email protected]>
    Signed-off-by: Daniel Wagner <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Stable-dep-of: 0edb475ac0a7 ("nvme: fix PCIe subsystem reset controller state transition")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-pci: do not directly handle subsys reset fallout [+ + +]
Author: Keith Busch <[email protected]>
Date:   Tue Jan 20 22:06:18 2026 -0500

    nvme-pci: do not directly handle subsys reset fallout
    
    [ Upstream commit 210b1f6576e8b367907e7ff51ef425062e1468e4 ]
    
    Scheduling reset_work after a nvme subsystem reset is expected to fail
    on pcie, but this also prevents potential handling the platform's pcie
    services may provide that might successfully recovering the link without
    re-enumeration. Such examples include AER, DPC, and power's EEH.
    
    Provide a pci specific operation that safely initiates a subsystem
    reset, and instead of scheduling reset work, read back the status
    register to trigger a pcie read error.
    
    Since this only affects pci, the other fabrics drivers subscribe to a
    generic nvmf subsystem reset that is exactly the same as before. The
    loop fabric doesn't use it because nvmet doesn't support setting that
    property anyway.
    
    And since we're using the magic NSSR value in two places now, provide a
    symbolic define for it.
    
    Reported-by: Nilay Shroff <[email protected]>
    Reviewed-by: Christoph Hellwig <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Stable-dep-of: 0edb475ac0a7 ("nvme: fix PCIe subsystem reset controller state transition")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec [+ + +]
Author: Shivam Kumar <[email protected]>
Date:   Sat Dec 13 13:57:48 2025 -0500

    nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec
    
    [ Upstream commit 32b63acd78f577b332d976aa06b56e70d054cbba ]
    
    Commit efa56305908b ("nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length")
    added ttag bounds checking and data_offset
    validation in nvmet_tcp_handle_h2c_data_pdu(), but it did not validate
    whether the command's data structures (cmd->req.sg and cmd->iov) have
    been properly initialized before processing H2C_DATA PDUs.
    
    The nvmet_tcp_build_pdu_iovec() function dereferences these pointers
    without NULL checks. This can be triggered by sending H2C_DATA PDU
    immediately after the ICREQ/ICRESP handshake, before
    sending a CONNECT command or NVMe write command.
    
    Attack vectors that trigger NULL pointer dereferences:
    1. H2C_DATA PDU sent before CONNECT → both pointers NULL
    2. H2C_DATA PDU for READ command → cmd->req.sg allocated, cmd->iov NULL
    3. H2C_DATA PDU for uninitialized command slot → both pointers NULL
    
    The fix validates both cmd->req.sg and cmd->iov before calling
    nvmet_tcp_build_pdu_iovec(). Both checks are required because:
    - Uninitialized commands: both NULL
    - READ commands: cmd->req.sg allocated, cmd->iov NULL
    - WRITE commands: both allocated
    
    Fixes: efa56305908b ("nvmet-tcp: Fix a kernel panic when host sends an invalid H2C PDU length")
    Reviewed-by: Sagi Grimberg <[email protected]>
    Signed-off-by: Shivam Kumar <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
nvme: fix PCIe subsystem reset controller state transition [+ + +]
Author: Nilay Shroff <[email protected]>
Date:   Tue Jan 20 22:06:19 2026 -0500

    nvme: fix PCIe subsystem reset controller state transition
    
    [ Upstream commit 0edb475ac0a7d153318a24d4dca175a270a5cc4f ]
    
    The commit d2fe192348f9 (“nvme: only allow entering LIVE from CONNECTING
    state”) disallows controller state transitions directly from RESETTING
    to LIVE. However, the NVMe PCIe subsystem reset path relies on this
    transition to recover the controller on PowerPC (PPC) systems.
    
    On PPC systems, issuing a subsystem reset causes a temporary loss of
    communication with the NVMe adapter. A subsequent PCIe MMIO read then
    triggers EEH recovery, which restores the PCIe link and brings the
    controller back online. For EEH recovery to proceed correctly, the
    controller must transition back to the LIVE state.
    
    Due to the changes introduced by commit d2fe192348f9 (“nvme: only allow
    entering LIVE from CONNECTING state”), the controller can no longer
    transition directly from RESETTING to LIVE. As a result, EEH recovery
    exits prematurely, leaving the controller stuck in the RESETTING state.
    
    Fix this by explicitly transitioning the controller state from RESETTING
    to CONNECTING and then to LIVE. This satisfies the updated state
    transition rules and allows the controller to be successfully recovered
    on PPC systems following a PCIe subsystem reset.
    
    Cc: [email protected]
    Fixes: d2fe192348f9 ("nvme: only allow entering LIVE from CONNECTING state")
    Reviewed-by: Daniel Wagner <[email protected]>
    Signed-off-by: Nilay Shroff <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
nvmet-tcp: remove boilerplate code [+ + +]
Author: Maurizio Lombardi <[email protected]>
Date:   Fri Dec 22 16:17:50 2023 +0100

    nvmet-tcp: remove boilerplate code
    
    [ Upstream commit 75011bd0f9c55db523242f9f9a0b0b826165f14b ]
    
    Simplify the nvmet_tcp_handle_h2c_data_pdu() function by removing
    boilerplate code.
    
    Signed-off-by: Maurizio Lombardi <[email protected]>
    Reviewed-by: Sagi Grimberg <[email protected]>
    Signed-off-by: Keith Busch <[email protected]>
    Stable-dep-of: 32b63acd78f5 ("nvme-tcp: fix NULL pointer dereferences in nvmet_tcp_build_pdu_iovec")
    Signed-off-by: Sasha Levin <[email protected]>

 
octeontx2-af: Fix error handling [+ + +]
Author: Ratheesh Kannoth <[email protected]>
Date:   Wed Jan 21 09:09:34 2026 +0530

    octeontx2-af: Fix error handling
    
    [ Upstream commit 19e4175e997a5b85eab97d522f00cc99abd1873c ]
    
    This commit adds error handling and rollback logic to
    rvu_mbox_handler_attach_resources() to properly clean up partially
    attached resources when rvu_attach_block() fails.
    
    Fixes: 746ea74241fa0 ("octeontx2-af: Add RVU block LF provisioning support")
    Signed-off-by: Ratheesh Kannoth <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
octeontx2: Fix otx2_dma_map_page() error return code [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Wed Jan 14 13:31:06 2026 +0100

    octeontx2: Fix otx2_dma_map_page() error return code
    
    commit d998b0e5afffa90d0f03770bad31083767079858 upstream.
    
    0 is a valid DMA address [1] so using it as the error value can lead to
    errors.  The error value of dma_map_XXX() functions is DMA_MAPPING_ERROR
    which is ~0.  The callers of otx2_dma_map_page() use dma_mapping_error()
    to test the return value of otx2_dma_map_page(). This means that they
    would not detect an error in otx2_dma_map_page().
    
    Make otx2_dma_map_page() return the raw value of dma_map_page_attrs().
    
    [1] https://lore.kernel.org/all/[email protected]
    
    Fixes: caa2da34fd25 ("octeontx2-pf: Initialize and config queues")
    Cc: <[email protected]>
    Signed-off-by: Thomas Fourier <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
of: fix reference count leak in of_alias_scan() [+ + +]
Author: Weigang He <[email protected]>
Date:   Sat Jan 17 09:12:38 2026 +0000

    of: fix reference count leak in of_alias_scan()
    
    commit 81122fba08fa3ccafab6ed272a5c6f2203923a7e upstream.
    
    of_find_node_by_path() returns a device_node with its refcount
    incremented. When kstrtoint() fails or dt_alloc() fails, the function
    continues to the next iteration without calling of_node_put(), causing
    a reference count leak.
    
    Add of_node_put(np) before continue on both error paths to properly
    release the device_node reference.
    
    Fixes: 611cad720148 ("dt: add of_alias_scan and of_alias_get_id")
    Cc: [email protected]
    Signed-off-by: Weigang He <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

of: platform: Use default match table for /firmware [+ + +]
Author: Rob Herring (Arm) <[email protected]>
Date:   Tue Jan 13 19:51:58 2026 -0600

    of: platform: Use default match table for /firmware
    
    commit 48e6a9c4a20870e09f85ff1a3628275d6bce31c0 upstream.
    
    Calling of_platform_populate() without a match table will only populate
    the immediate child nodes under /firmware. This is usually fine, but in
    the case of something like a "simple-mfd" node such as
    "raspberrypi,bcm2835-firmware", those child nodes will not be populated.
    And subsequent calls won't work either because the /firmware node is
    marked as processed already.
    
    Switch the call to of_platform_default_populate() to solve this problem.
    It should be a nop for existing cases.
    
    Fixes: 3aa0582fdb82 ("of: platform: populate /firmware/ node from of_platform_default_populate_init()")
    Cc: [email protected]
    Reviewed-by: Sudeep Holla <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Rob Herring (Arm) <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
perf/x86/intel: Do not enable BTS for guests [+ + +]
Author: Fernand Sieber <[email protected]>
Date:   Thu Dec 11 20:36:04 2025 +0200

    perf/x86/intel: Do not enable BTS for guests
    
    commit 91dcfae0ff2b9b9ab03c1ec95babaceefbffb9f4 upstream.
    
    By default when users program perf to sample branch instructions
    (PERF_COUNT_HW_BRANCH_INSTRUCTIONS) with a sample period of 1, perf
    interprets this as a special case and enables BTS (Branch Trace Store)
    as an optimization to avoid taking an interrupt on every branch.
    
    Since BTS doesn't virtualize, this optimization doesn't make sense when
    the request originates from a guest. Add an additional check that
    prevents this optimization for virtualized events (exclude_host).
    
    Reported-by: Jan H. Schönherr <[email protected]>
    Suggested-by: Peter Zijlstra <[email protected]>
    Signed-off-by: Fernand Sieber <[email protected]>
    Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
    Cc: <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again) [+ + +]
Author: Krzysztof Kozlowski <[email protected]>
Date:   Wed Dec 24 12:55:34 2025 +0100

    phy: broadcom: ns-usb3: Fix Wvoid-pointer-to-enum-cast warning (again)
    
    [ Upstream commit fb21116099bbea1fc59efa9207e63c4be390ab72 ]
    
    "family" is an enum, thus cast of pointer on 64-bit compile test with
    clang W=1 causes:
    
      phy-bcm-ns-usb3.c:206:17: error: cast to smaller integer type 'enum bcm_ns_family' from 'const void *' [-Werror,-Wvoid-pointer-to-enum-cast]
    
    This was already fixed in commit bd6e74a2f0a0 ("phy: broadcom: ns-usb3:
    fix Wvoid-pointer-to-enum-cast warning") but then got bad in commit
    21bf6fc47a1e ("phy: Use device_get_match_data()").
    
    Note that after various discussions the preferred cast is via "unsigned
    long", not "uintptr_t".
    
    Fixes: 21bf6fc47a1e ("phy: Use device_get_match_data()")
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: rockchip: inno-usb2: fix communication disruption in gadget mode [+ + +]
Author: Luca Ceresoli <[email protected]>
Date:   Thu Nov 27 11:26:17 2025 +0100

    phy: rockchip: inno-usb2: fix communication disruption in gadget mode
    
    commit 7d8f725b79e35fa47e42c88716aad8711e1168d8 upstream.
    
    When the OTG USB port is used to power to SoC, configured as peripheral and
    used in gadget mode, communication stops without notice about 6 seconds
    after the gadget is configured and enumerated.
    
    The problem was observed on a Radxa Rock Pi S board, which can only be
    powered by the only USB-C connector. That connector is the only one usable
    in gadget mode. This implies the USB cable is connected from before boot
    and never disconnects while the kernel runs.
    
    The related code flow in the PHY driver code can be summarized as:
    
     * the first time chg_detect_work starts (6 seconds after gadget is
       configured and enumerated)
       -> rockchip_chg_detect_work():
           if chg_state is UNDEFINED:
              property_enable(base, &rphy->phy_cfg->chg_det.opmode, false); [Y]
    
     * rockchip_chg_detect_work() changes state and re-triggers itself a few
       times until it reaches the DETECTED state:
       -> rockchip_chg_detect_work():
           if chg_state is DETECTED:
              property_enable(base, &rphy->phy_cfg->chg_det.opmode, true); [Z]
    
    At [Y] all existing communications stop. E.g. using a CDC serial gadget,
    the /dev/tty* devices are still present on both host and device, but no
    data is transferred anymore. The later call with a 'true' argument at [Z]
    does not restore it.
    
    Due to the lack of documentation, what chg_det.opmode does exactly is not
    clear, however by code inspection it seems reasonable that is disables
    something needed to keep the communication working, and testing proves that
    disabling these lines lets gadget mode keep working. So prevent changes to
    chg_det.opmode when there is a cable connected (VBUS present).
    
    Fixes: 98898f3bc83c ("phy: rockchip-inno-usb2: support otg-port for rk3399")
    Cc: [email protected]
    Closes: https://lore.kernel.org/lkml/20250414185458.7767aabc@booty/
    Signed-off-by: Luca Ceresoli <[email protected]>
    Reviewed-by: Théo Lebrun <[email protected]>
    Link: https://patch.msgid.link/20251127-rk3308-fix-usb-gadget-phy-disconnect-v2-2-dac8a02cd2ca@bootlin.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: rockchip: inno-usb2: fix disconnection in gadget mode [+ + +]
Author: Louis Chauvet <[email protected]>
Date:   Thu Nov 27 11:26:16 2025 +0100

    phy: rockchip: inno-usb2: fix disconnection in gadget mode
    
    commit 028e8ca7b20fb7324f3e5db34ba8bd366d9d3acc upstream.
    
    When the OTG USB port is used to power the SoC, configured as peripheral
    and used in gadget mode, there is a disconnection about 6 seconds after the
    gadget is configured and enumerated.
    
    The problem was observed on a Radxa Rock Pi S board, which can only be
    powered by the only USB-C connector. That connector is the only one usable
    in gadget mode. This implies the USB cable is connected from before boot
    and never disconnects while the kernel runs.
    
    The problem happens because of the PHY driver code flow, summarized as:
    
     * UDC start code (triggered via configfs at any time after boot)
       -> phy_init
           -> rockchip_usb2phy_init
               -> schedule_delayed_work(otg_sm_work [A], 6 sec)
       -> phy_power_on
           -> rockchip_usb2phy_power_on
               -> enable clock
               -> rockchip_usb2phy_reset
    
     * Now the gadget interface is up and running.
    
     * 6 seconds later otg_sm_work starts [A]
       -> rockchip_usb2phy_otg_sm_work():
           if (B_IDLE state && VBUS present && ...):
               schedule_delayed_work(&rport->chg_work [B], 0);
    
     * immediately the chg_detect_work starts [B]
       -> rockchip_chg_detect_work():
           if chg_state is UNDEFINED:
               if (!rport->suspended):
                   rockchip_usb2phy_power_off() <--- [X]
    
    At [X], the PHY is powered off, causing a disconnection. This quickly
    triggers a new connection and following re-enumeration, but any connection
    that had been established during the 6 seconds is broken.
    
    The code already checks for !rport->suspended (which, somewhat
    counter-intuitively, means the PHY is powered on), so add a guard for VBUS
    as well to avoid a disconnection when a cable is connected.
    
    Fixes: 98898f3bc83c ("phy: rockchip-inno-usb2: support otg-port for rk3399")
    Cc: [email protected]
    Closes: https://lore.kernel.org/lkml/20250414185458.7767aabc@booty/
    Signed-off-by: Louis Chauvet <[email protected]>
    Co-developed-by: Luca Ceresoli <[email protected]>
    Signed-off-by: Luca Ceresoli <[email protected]>
    Reviewed-by: Théo Lebrun <[email protected]>
    Link: https://patch.msgid.link/20251127-rk3308-fix-usb-gadget-phy-disconnect-v2-1-dac8a02cd2ca@bootlin.com
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

phy: stm32-usphyc: Fix off by one in probe() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Tue Dec 9 09:53:36 2025 +0300

    phy: stm32-usphyc: Fix off by one in probe()
    
    [ Upstream commit cabd25b57216ddc132efbcc31f972baa03aad15a ]
    
    The "index" variable is used as an index into the usbphyc->phys[] array
    which has usbphyc->nphys elements.  So if it is equal to usbphyc->nphys
    then it is one element out of bounds.  The "index" comes from the
    device tree so it's data that we trust and it's unlikely to be wrong,
    however it's obviously still worth fixing the bug.  Change the > to >=.
    
    Fixes: 94c358da3a05 ("phy: stm32: add support for STM32 USB PHY Controller (USBPHYC)")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Amelie Delaunay <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7 [+ + +]
Author: Wayne Chang <[email protected]>
Date:   Fri Dec 12 11:21:16 2025 +0800

    phy: tegra: xusb: Explicitly configure HS_DISCON_LEVEL to 0x7
    
    commit b246caa68037aa495390a60d080acaeb84f45fff upstream.
    
    The USB2 Bias Pad Control register manages analog parameters for signal
    detection. Previously, the HS_DISCON_LEVEL relied on hardware reset
    values, which may lead to the detection failure.
    
    Explicitly configure HS_DISCON_LEVEL to 0x7. This ensures the disconnect
    threshold is sufficient to guarantee reliable detection.
    
    Fixes: bbf711682cd5 ("phy: tegra: xusb: Add Tegra186 support")
    Cc: [email protected]
    Signed-off-by: Wayne Chang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Vinod Koul <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pinctrl: meson: mark the GPIO controller as sleeping [+ + +]
Author: Bartosz Golaszewski <[email protected]>
Date:   Tue Feb 3 11:24:15 2026 -0500

    pinctrl: meson: mark the GPIO controller as sleeping
    
    [ Upstream commit 28f24068387169722b508bba6b5257cb68b86e74 ]
    
    The GPIO controller is configured as non-sleeping but it uses generic
    pinctrl helpers which use a mutex for synchronization.
    
    This can cause the following lockdep splat with shared GPIOs enabled on
    boards which have multiple devices using the same GPIO:
    
    BUG: sleeping function called from invalid context at
    kernel/locking/mutex.c:591
    in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 142, name:
    kworker/u25:3
    preempt_count: 1, expected: 0
    RCU nest depth: 0, expected: 0
    INFO: lockdep is turned off.
    irq event stamp: 46379
    hardirqs last  enabled at (46379): [<ffff8000813acb24>]
    _raw_spin_unlock_irqrestore+0x74/0x78
    hardirqs last disabled at (46378): [<ffff8000813abf38>]
    _raw_spin_lock_irqsave+0x84/0x88
    softirqs last  enabled at (46330): [<ffff8000800c71b4>]
    handle_softirqs+0x4c4/0x4dc
    softirqs last disabled at (46295): [<ffff800080010674>]
    __do_softirq+0x14/0x20
    CPU: 1 UID: 0 PID: 142 Comm: kworker/u25:3 Tainted: G C
    6.19.0-rc4-next-20260105+ #11963 PREEMPT
    Tainted: [C]=CRAP
    Hardware name: Khadas VIM3 (DT)
    Workqueue: events_unbound deferred_probe_work_func
    Call trace:
      show_stack+0x18/0x24 (C)
      dump_stack_lvl+0x90/0xd0
      dump_stack+0x18/0x24
      __might_resched+0x144/0x248
      __might_sleep+0x48/0x98
      __mutex_lock+0x5c/0x894
      mutex_lock_nested+0x24/0x30
      pinctrl_get_device_gpio_range+0x44/0x128
      pinctrl_gpio_set_config+0x40/0xdc
      gpiochip_generic_config+0x28/0x3c
      gpio_do_set_config+0xa8/0x194
      gpiod_set_config+0x34/0xfc
      gpio_shared_proxy_set_config+0x6c/0xfc [gpio_shared_proxy]
      gpio_do_set_config+0xa8/0x194
      gpiod_set_transitory+0x4c/0xf0
      gpiod_configure_flags+0xa4/0x480
      gpiod_find_and_request+0x1a0/0x574
      gpiod_get_index+0x58/0x84
      devm_gpiod_get_index+0x20/0xb4
      devm_gpiod_get+0x18/0x24
      mmc_pwrseq_emmc_probe+0x40/0xb8
      platform_probe+0x5c/0xac
      really_probe+0xbc/0x298
      __driver_probe_device+0x78/0x12c
      driver_probe_device+0xdc/0x164
      __device_attach_driver+0xb8/0x138
      bus_for_each_drv+0x80/0xdc
      __device_attach+0xa8/0x1b0
    
    Fixes: 6ac730951104 ("pinctrl: add driver for Amlogic Meson SoCs")
    Cc: [email protected]
    Reported-by: Marek Szyprowski <[email protected]>
    Closes: https://lore.kernel.org/all/[email protected]/
    Signed-off-by: Bartosz Golaszewski <[email protected]>
    Reviewed-by: Martin Blumenstingl <[email protected]>
    Reviewed-by: Neil Armstrong <[email protected]>
    Signed-off-by: Linus Walleij <[email protected]>
    [ Adjust context ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node() [+ + +]
Author: Zilin Guan <[email protected]>
Date:   Thu Dec 25 07:41:03 2025 +0000

    pnfs/flexfiles: Fix memory leak in nfs4_ff_alloc_deviceid_node()
    
    [ Upstream commit 0c728083654f0066f5e10a1d2b0bd0907af19a58 ]
    
    In nfs4_ff_alloc_deviceid_node(), if the allocation for ds_versions fails,
    the function jumps to the out_scratch label without freeing the already
    allocated dsaddrs list, leading to a memory leak.
    
    Fix this by jumping to the out_err_drain_dsaddrs label, which properly
    frees the dsaddrs list before cleaning up other resources.
    
    Fixes: d67ae825a59d6 ("pnfs/flexfiles: Add the FlexFile Layout Driver")
    Signed-off-by: Zilin Guan <[email protected]>
    Signed-off-by: Trond Myklebust <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
 
posix-clock: introduce posix_clock_context concept [+ + +]
Author: Xabier Marquiegui <[email protected]>
Date:   Thu Oct 12 00:39:53 2023 +0200

    posix-clock: introduce posix_clock_context concept
    
    [ Upstream commit 60c6946675fc06dd2fd2b7a4b6fd1c1f046f1056 ]
    
    Add the necessary structure to support custom private-data per
    posix-clock user.
    
    The previous implementation of posix-clock assumed all file open
    instances need access to the same clock structure on private_data.
    
    The need for individual data structures per file open instance has been
    identified when developing support for multiple timestamp event queue
    users for ptp_clock.
    
    Signed-off-by: Xabier Marquiegui <[email protected]>
    Suggested-by: Richard Cochran <[email protected]>
    Suggested-by: Vinicius Costa Gomes <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Stable-dep-of: e859d375d169 ("posix-clock: Store file pointer in struct posix_clock_context")
    Signed-off-by: Sasha Levin <[email protected]>

posix-clock: Store file pointer in struct posix_clock_context [+ + +]
Author: Wojtek Wasko <[email protected]>
Date:   Mon Mar 3 18:13:43 2025 +0200

    posix-clock: Store file pointer in struct posix_clock_context
    
    [ Upstream commit e859d375d1694488015e6804bfeea527a0b25b9f ]
    
    File descriptor based pc_clock_*() operations of dynamic posix clocks
    have access to the file pointer and implement permission checks in the
    generic code before invoking the relevant dynamic clock callback.
    
    Character device operations (open, read, poll, ioctl) do not implement a
    generic permission control and the dynamic clock callbacks have no
    access to the file pointer to implement them.
    
    Extend struct posix_clock_context with a struct file pointer and
    initialize it in posix_clock_open(), so that all dynamic clock callbacks
    can access it.
    
    Acked-by: Richard Cochran <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Reviewed-by: Thomas Gleixner <[email protected]>
    Signed-off-by: Wojtek Wasko <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
ptp: Add PHC file mode checks. Allow RO adjtime() without FMODE_WRITE. [+ + +]
Author: Wojtek Wasko <[email protected]>
Date:   Mon Mar 3 18:13:44 2025 +0200

    ptp: Add PHC file mode checks. Allow RO adjtime() without FMODE_WRITE.
    
    [ Upstream commit b4e53b15c04e3852949003752f48f7a14ae39e86 ]
    
    Many devices implement highly accurate clocks, which the kernel manages
    as PTP Hardware Clocks (PHCs). Userspace applications rely on these
    clocks to timestamp events, trace workload execution, correlate
    timescales across devices, and keep various clocks in sync.
    
    The kernel’s current implementation of PTP clocks does not enforce file
    permissions checks for most device operations except for POSIX clock
    operations, where file mode is verified in the POSIX layer before
    forwarding the call to the PTP subsystem. Consequently, it is common
    practice to not give unprivileged userspace applications any access to
    PTP clocks whatsoever by giving the PTP chardevs 600 permissions. An
    example of users running into this limitation is documented in [1].
    Additionally, POSIX layer requires WRITE permission even for readonly
    adjtime() calls which are used in PTP layer to return current frequency
    offset applied to the PHC.
    
    Add permission checks for functions that modify the state of a PTP
    device. Continue enforcing permission checks for POSIX clock operations
    (settime, adjtime) in the POSIX layer. Only require WRITE access for
    dynamic clocks adjtime() if any flags are set in the modes field.
    
    [1] https://lists.nwtime.org/sympa/arc/linuxptp-users/2024-01/msg00036.html
    
    Changes in v4:
    - Require FMODE_WRITE in ajtime() only for calls modifying the clock in
      any way.
    
    Acked-by: Richard Cochran <[email protected]>
    Reviewed-by: Vadim Fedorenko <[email protected]>
    Signed-off-by: Wojtek Wasko <[email protected]>
    Reviewed-by: Thomas Gleixner <[email protected]>
    Signed-off-by: David S. Miller <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
regmap: Fix race condition in hwspinlock irqsave routine [+ + +]
Author: Cheng-Yu Lee <[email protected]>
Date:   Fri Jan 9 11:26:33 2026 +0800

    regmap: Fix race condition in hwspinlock irqsave routine
    
    [ Upstream commit 4b58aac989c1e3fafb1c68a733811859df388250 ]
    
    Previously, the address of the shared member '&map->spinlock_flags' was
    passed directly to 'hwspin_lock_timeout_irqsave'. This creates a race
    condition where multiple contexts contending for the lock could overwrite
    the shared flags variable, potentially corrupting the state for the
    current lock owner.
    
    Fix this by using a local stack variable 'flags' to store the IRQ state
    temporarily.
    
    Fixes: 8698b9364710 ("regmap: Add hardware spinlock support")
    Signed-off-by: Cheng-Yu Lee <[email protected]>
    Co-developed-by: Yu-Chun Lin <[email protected]>
    Signed-off-by: Yu-Chun Lin <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Mark Brown <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
Revert "selftests: Replace sleep with slowwait" [+ + +]
Author: Greg Kroah-Hartman <[email protected]>
Date:   Wed Feb 4 15:02:58 2026 +0100

    Revert "selftests: Replace sleep with slowwait"
    
    This reverts commit 780095c51e34ec7cdf6f651b4c4f2b35680779e4 which is
    commit 2f186dd5585c3afb415df80e52f71af16c9d3655 upstream.
    
    To quote Ben:
            The slowwait function isn't defined in 5.10 (or any stable
            branch older than 6.9).
    
    Link: https://lore.kernel.org/r/[email protected]
    Reported-by: Ben Hutchings <[email protected]>
    Cc: David Ahern <[email protected]>
    Cc: Simon Horman <[email protected]>
    Cc: Jakub Kicinski <[email protected]>
    Cc: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
rocker: fix memory leak in rocker_world_port_post_fini() [+ + +]
Author: Kery Qi <[email protected]>
Date:   Sat Jan 24 05:10:31 2026 +0800

    rocker: fix memory leak in rocker_world_port_post_fini()
    
    [ Upstream commit 8d7ba71e46216b8657a82ca2ec118bc93812a4d0 ]
    
    In rocker_world_port_pre_init(), rocker_port->wpriv is allocated with
    kzalloc(wops->port_priv_size, GFP_KERNEL). However, in
    rocker_world_port_post_fini(), the memory is only freed when
    wops->port_post_fini callback is set:
    
        if (!wops->port_post_fini)
            return;
        wops->port_post_fini(rocker_port);
        kfree(rocker_port->wpriv);
    
    Since rocker_ofdpa_ops does not implement port_post_fini callback
    (it is NULL), the wpriv memory allocated for each port is never freed
    when ports are removed. This leads to a memory leak of
    sizeof(struct ofdpa_port) bytes per port on every device removal.
    
    Fix this by always calling kfree(rocker_port->wpriv) regardless of
    whether the port_post_fini callback exists.
    
    Fixes: e420114eef4a ("rocker: introduce worlds infrastructure")
    Signed-off-by: Kery Qi <[email protected]>
    Reviewed-by: Simon Horman <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Sat Dec 13 16:36:43 2025 +0800

    scsi: be2iscsi: Fix a memory leak in beiscsi_boot_get_sinfo()
    
    commit 4747bafaa50115d9667ece446b1d2d4aba83dc7f upstream.
    
    If nonemb_cmd->va fails to be allocated, free the allocation previously
    made by alloc_mcc_wrb().
    
    Fixes: 50a4b824be9e ("scsi: be2iscsi: Fix to make boot discovery non-blocking")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: core: Wake up the error handler when final completions race against each other [+ + +]
Author: David Jeffery <[email protected]>
Date:   Tue Jan 13 11:08:13 2026 -0500

    scsi: core: Wake up the error handler when final completions race against each other
    
    [ Upstream commit fe2f8ad6f0999db3b318359a01ee0108c703a8c3 ]
    
    The fragile ordering between marking commands completed or failed so
    that the error handler only wakes when the last running command
    completes or times out has race conditions. These race conditions can
    cause the SCSI layer to fail to wake the error handler, leaving I/O
    through the SCSI host stuck as the error state cannot advance.
    
    First, there is an memory ordering issue within scsi_dec_host_busy().
    The write which clears SCMD_STATE_INFLIGHT may be reordered with reads
    counting in scsi_host_busy(). While the local CPU will see its own
    write, reordering can allow other CPUs in scsi_dec_host_busy() or
    scsi_eh_inc_host_failed() to see a raised busy count, causing no CPU to
    see a host busy equal to the host_failed count.
    
    This race condition can be prevented with a memory barrier on the error
    path to force the write to be visible before counting host busy
    commands.
    
    Second, there is a general ordering issue with scsi_eh_inc_host_failed(). By
    counting busy commands before incrementing host_failed, it can race with a
    final command in scsi_dec_host_busy(), such that scsi_dec_host_busy() does
    not see host_failed incremented but scsi_eh_inc_host_failed() counts busy
    commands before SCMD_STATE_INFLIGHT is cleared by scsi_dec_host_busy(),
    resulting in neither waking the error handler task.
    
    This needs the call to scsi_host_busy() to be moved after host_failed is
    incremented to close the race condition.
    
    Fixes: 6eb045e092ef ("scsi: core: avoid host-wide host_busy counter for scsi_mq")
    Signed-off-by: David Jeffery <[email protected]>
    Reviewed-by: Bart Van Assche <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg() [+ + +]
Author: Kery Qi <[email protected]>
Date:   Wed Jan 21 19:45:15 2026 +0800

    scsi: firewire: sbp-target: Fix overflow in sbp_make_tpg()
    
    [ Upstream commit b2d6b1d443009ed4da2d69f5423ab38e5780505a ]
    
    The code in sbp_make_tpg() limits "tpgt" to UINT_MAX but the data type of
    "tpg->tport_tpgt" is u16. This causes a type truncation issue.
    
    When a user creates a TPG via configfs mkdir, for example:
    
        mkdir /sys/kernel/config/target/sbp/<wwn>/tpgt_70000
    
    The value 70000 passes the "tpgt > UINT_MAX" check since 70000 is far less
    than 4294967295. However, when assigned to the u16 field tpg->tport_tpgt,
    the value is silently truncated to 4464 (70000 & 0xFFFF). This causes the
    value the user specified to differ from what is actually stored, leading to
    confusion and potential unexpected behavior.
    
    Fix this by changing the type of "tpgt" to u16 and using kstrtou16() which
    will properly reject values outside the u16 range.
    
    Fixes: a511ce339780 ("sbp-target: Initial merge of firewire/ieee-1394 target mode support")
    Signed-off-by: Kery Qi <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

scsi: storvsc: Process unsupported MODE_SENSE_10 [+ + +]
Author: Long Li <[email protected]>
Date:   Fri Jan 16 17:03:02 2026 -0800

    scsi: storvsc: Process unsupported MODE_SENSE_10
    
    commit 9eacec5d18f98f89be520eeeef4b377acee3e4b8 upstream.
    
    The Hyper-V host does not support MODE_SENSE_10 and MODE_SENSE.  The
    driver handles MODE_SENSE as unsupported command, but not for
    MODE_SENSE_10. Add MODE_SENSE_10 to the same handling logic and return
    correct code to SCSI layer.
    
    Fixes: 89ae7d709357 ("Staging: hv: storvsc: Move the storage driver out of the staging area")
    Cc: [email protected]
    Signed-off-by: Long Li <[email protected]>
    Reviewed-by: Michael Kelley <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

scsi: xen: scsiback: Fix potential memory leak in scsiback_remove() [+ + +]
Author: Abdun Nihaal <[email protected]>
Date:   Mon Jan 26 12:46:54 2026 -0500

    scsi: xen: scsiback: Fix potential memory leak in scsiback_remove()
    
    [ Upstream commit 901a5f309daba412e2a30364d7ec1492fa11c32c ]
    
    Memory allocated for struct vscsiblk_info in scsiback_probe() is not
    freed in scsiback_remove() leading to potential memory leaks on remove,
    as well as in the scsiback_probe() error paths. Fix that by freeing it
    in scsiback_remove().
    
    Cc: [email protected]
    Fixes: d9d660f6e562 ("xen-scsiback: Add Xen PV SCSI backend driver")
    Signed-off-by: Abdun Nihaal <[email protected]>
    Reviewed-by: Juergen Gross <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Martin K. Petersen <[email protected]>
    [ adapted void scsiback_remove() to int return type with return 0 statement ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
sctp: move SCTP_CMD_ASSOC_SHKEY right after SCTP_CMD_PEER_INIT [+ + +]
Author: Xin Long <[email protected]>
Date:   Tue Jan 13 12:10:26 2026 -0500

    sctp: move SCTP_CMD_ASSOC_SHKEY right after SCTP_CMD_PEER_INIT
    
    [ Upstream commit a80c9d945aef55b23b54838334345f20251dad83 ]
    
    A null-ptr-deref was reported in the SCTP transmit path when SCTP-AUTH key
    initialization fails:
    
      ==================================================================
      KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f]
      CPU: 0 PID: 16 Comm: ksoftirqd/0 Tainted: G W 6.6.0 #2
      RIP: 0010:sctp_packet_bundle_auth net/sctp/output.c:264 [inline]
      RIP: 0010:sctp_packet_append_chunk+0xb36/0x1260 net/sctp/output.c:401
      Call Trace:
    
      sctp_packet_transmit_chunk+0x31/0x250 net/sctp/output.c:189
      sctp_outq_flush_data+0xa29/0x26d0 net/sctp/outqueue.c:1111
      sctp_outq_flush+0xc80/0x1240 net/sctp/outqueue.c:1217
      sctp_cmd_interpreter.isra.0+0x19a5/0x62c0 net/sctp/sm_sideeffect.c:1787
      sctp_side_effects net/sctp/sm_sideeffect.c:1198 [inline]
      sctp_do_sm+0x1a3/0x670 net/sctp/sm_sideeffect.c:1169
      sctp_assoc_bh_rcv+0x33e/0x640 net/sctp/associola.c:1052
      sctp_inq_push+0x1dd/0x280 net/sctp/inqueue.c:88
      sctp_rcv+0x11ae/0x3100 net/sctp/input.c:243
      sctp6_rcv+0x3d/0x60 net/sctp/ipv6.c:1127
    
    The issue is triggered when sctp_auth_asoc_init_active_key() fails in
    sctp_sf_do_5_1C_ack() while processing an INIT_ACK. In this case, the
    command sequence is currently:
    
    - SCTP_CMD_PEER_INIT
    - SCTP_CMD_TIMER_STOP (T1_INIT)
    - SCTP_CMD_TIMER_START (T1_COOKIE)
    - SCTP_CMD_NEW_STATE (COOKIE_ECHOED)
    - SCTP_CMD_ASSOC_SHKEY
    - SCTP_CMD_GEN_COOKIE_ECHO
    
    If SCTP_CMD_ASSOC_SHKEY fails, asoc->shkey remains NULL, while
    asoc->peer.auth_capable and asoc->peer.peer_chunks have already been set by
    SCTP_CMD_PEER_INIT. This allows a DATA chunk with auth = 1 and shkey = NULL
    to be queued by sctp_datamsg_from_user().
    
    Since command interpretation stops on failure, no COOKIE_ECHO should been
    sent via SCTP_CMD_GEN_COOKIE_ECHO. However, the T1_COOKIE timer has already
    been started, and it may enqueue a COOKIE_ECHO into the outqueue later. As
    a result, the DATA chunk can be transmitted together with the COOKIE_ECHO
    in sctp_outq_flush_data(), leading to the observed issue.
    
    Similar to the other places where it calls sctp_auth_asoc_init_active_key()
    right after sctp_process_init(), this patch moves the SCTP_CMD_ASSOC_SHKEY
    immediately after SCTP_CMD_PEER_INIT, before stopping T1_INIT and starting
    T1_COOKIE. This ensures that if shared key generation fails, authenticated
    DATA cannot be sent. It also allows the T1_INIT timer to retransmit INIT,
    giving the client another chance to process INIT_ACK and retry key setup.
    
    Fixes: 730fc3d05cd4 ("[SCTP]: Implete SCTP-AUTH parameter processing")
    Reported-by: Zhen Chen <[email protected]>
    Tested-by: Zhen Chen <[email protected]>
    Signed-off-by: Xin Long <[email protected]>
    Link: https://patch.msgid.link/44881224b375aa8853f5e19b4055a1a56d895813.1768324226.git.lucien.xin@gmail.com
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

sctp: sm_statefuns: Fix spelling mistakes [+ + +]
Author: Zheng Yongjun <[email protected]>
Date:   Tue Jun 1 10:08:01 2021 +0800

    sctp: sm_statefuns: Fix spelling mistakes
    
    [ Upstream commit 0c2c366e0ec55533decb00d0f1ea1cbc42247e7b ]
    
    Fix some spelling mistakes in comments:
    genereate ==> generate
    correclty ==> correctly
    boundries ==> boundaries
    failes ==> fails
    isses ==> issues
    assocition ==> association
    signe ==> sign
    assocaition ==> association
    managemement ==> management
    restransmissions ==> retransmission
    sideffect ==> sideeffect
    bomming ==> booming
    chukns ==> chunks
    SHUDOWN ==> SHUTDOWN
    violationg ==> violating
    explcitly ==> explicitly
    CHunk ==> Chunk
    
    Signed-off-by: Zheng Yongjun <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Stable-dep-of: a80c9d945aef ("sctp: move SCTP_CMD_ASSOC_SHKEY right after SCTP_CMD_PEER_INIT")
    Signed-off-by: Sasha Levin <[email protected]>

 
slimbus: core: fix device reference leak on report present [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Nov 26 15:53:26 2025 +0100

    slimbus: core: fix device reference leak on report present
    
    commit 9391380eb91ea5ac792aae9273535c8da5b9aa01 upstream.
    
    Slimbus devices can be allocated dynamically upon reception of
    report-present messages.
    
    Make sure to drop the reference taken when looking up already registered
    devices.
    
    Note that this requires taking an extra reference in case the device has
    not yet been registered and has to be allocated.
    
    Fixes: 46a2bb5a7f7e ("slimbus: core: Add slim controllers support")
    Cc: [email protected]      # 4.16
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

slimbus: core: fix runtime PM imbalance on report present [+ + +]
Author: Johan Hovold <[email protected]>
Date:   Wed Nov 26 15:53:25 2025 +0100

    slimbus: core: fix runtime PM imbalance on report present
    
    commit 0eb4ff6596114aabba1070a66afa2c2f5593739f upstream.
    
    Make sure to balance the runtime PM usage count in case slimbus device
    or address allocation fails on report present, which would otherwise
    prevent the controller from suspending.
    
    Fixes: 4b14e62ad3c9 ("slimbus: Add support for 'clock-pause' feature")
    Cc: [email protected]      # 4.16
    Signed-off-by: Johan Hovold <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
Linux: staging:iio:adc:ad7280a: Register define cleanup. [+ + +]
Author: Jonathan Cameron <[email protected]>
Date:   Sun Feb 6 19:03:10 2022 +0000

    staging:iio:adc:ad7280a: Register define cleanup.
    
    [ Upstream commit 4c59aabd9a93d8f867d9f6aa0407cc6a7db47fa5 ]
    
    1. Postfix register addresses with _REG to distinguish them from
       fields within the registers
    2. Switch to using FIELD_PREP and masks to aid readability.
    3. Shorten a few defines to make the lines remain a sensible length.
    4. Fix an issue whether where an CTRL_LB field is set in CTRL_HB.
    5. Fix wrong AUX1_3_4 which should be AUX_1_3_5 according to
       table 14 in the datasheet.
    
    Signed-off-by: Jonathan Cameron <[email protected]>
    Reviewed-by: Marcelo Schmitt <[email protected]>
    Link: https://lore.kernel.org/r/[email protected]
    Stable-dep-of: 6b39824ac4c1 ("iio: adc: ad7280a: handle spi_setup() errors in probe()")
    Signed-off-by: Sasha Levin <[email protected]>

 
textsearch: describe @list member in ts_ops search [+ + +]
Author: Bagas Sanjaya <[email protected]>
Date:   Fri Dec 19 08:40:05 2025 +0700

    textsearch: describe @list member in ts_ops search
    
    [ Upstream commit f26528478bb102c28e7ac0cbfc8ec8185afdafc7 ]
    
    Sphinx reports kernel-doc warning:
    
    WARNING: ./include/linux/textsearch.h:49 struct member 'list' not described in 'ts_ops'
    
    Describe @list member to fix it.
    
    Link: https://lkml.kernel.org/r/[email protected]
    Fixes: 2de4ff7bd658 ("[LIB]: Textsearch infrastructure.")
    Signed-off-by: Bagas Sanjaya <[email protected]>
    Cc: Thomas Graf <[email protected]>
    Cc: "David S. Miller" <[email protected]>
    Signed-off-by: Andrew Morton <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
uacce: ensure safe queue release with state management [+ + +]
Author: Chenghai Huang <[email protected]>
Date:   Tue Dec 2 14:12:56 2025 +0800

    uacce: ensure safe queue release with state management
    
    commit 26c08dabe5475d99a13f353d8dd70e518de45663 upstream.
    
    Directly calling `put_queue` carries risks since it cannot
    guarantee that resources of `uacce_queue` have been fully released
    beforehand. So adding a `stop_queue` operation for the
    UACCE_CMD_PUT_Q command and leaving the `put_queue` operation to
    the final resource release ensures safety.
    
    Queue states are defined as follows:
    - UACCE_Q_ZOMBIE: Initial state
    - UACCE_Q_INIT: After opening `uacce`
    - UACCE_Q_STARTED: After `start` is issued via `ioctl`
    
    When executing `poweroff -f` in virt while accelerator are still
    working, `uacce_fops_release` and `uacce_remove` may execute
    concurrently. This can cause `uacce_put_queue` within
    `uacce_fops_release` to access a NULL `ops` pointer. Therefore, add
    state checks to prevent accessing freed pointers.
    
    Fixes: 015d239ac014 ("uacce: add uacce driver")
    Cc: [email protected]
    Signed-off-by: Chenghai Huang <[email protected]>
    Signed-off-by: Yang Shen <[email protected]>
    Acked-by: Zhangfei Gao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

uacce: fix cdev handling in the cleanup path [+ + +]
Author: Wenkai Lin <[email protected]>
Date:   Tue Dec 2 14:12:53 2025 +0800

    uacce: fix cdev handling in the cleanup path
    
    commit a3bece3678f6c88db1f44c602b2a63e84b4040ac upstream.
    
    When cdev_device_add fails, it internally releases the cdev memory,
    and if cdev_device_del is then executed, it will cause a hang error.
    To fix it, we check the return value of cdev_device_add() and clear
    uacce->cdev to avoid calling cdev_device_del in the uacce_remove.
    
    Fixes: 015d239ac014 ("uacce: add uacce driver")
    Cc: [email protected]
    Signed-off-by: Wenkai Lin <[email protected]>
    Signed-off-by: Chenghai Huang <[email protected]>
    Acked-by: Zhangfei Gao <[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]>

uacce: implement mremap in uacce_vm_ops to return -EPERM [+ + +]
Author: Yang Shen <[email protected]>
Date:   Tue Dec 2 14:12:55 2025 +0800

    uacce: implement mremap in uacce_vm_ops to return -EPERM
    
    commit 02695347be532b628f22488300d40c4eba48b9b7 upstream.
    
    The current uacce_vm_ops does not support the mremap operation of
    vm_operations_struct. Implement .mremap to return -EPERM to remind
    users.
    
    The reason we need to explicitly disable mremap is that when the
    driver does not implement .mremap, it uses the default mremap
    method. This could lead to a risk scenario:
    
    An application might first mmap address p1, then mremap to p2,
    followed by munmap(p1), and finally munmap(p2). Since the default
    mremap copies the original vma's vm_private_data (i.e., q) to the
    new vma, both munmap operations would trigger vma_close, causing
    q->qfr to be freed twice(qfr will be set to null here, so repeated
    release is ok).
    
    Fixes: 015d239ac014 ("uacce: add uacce driver")
    Cc: [email protected]
    Signed-off-by: Yang Shen <[email protected]>
    Signed-off-by: Chenghai Huang <[email protected]>
    Acked-by: Zhangfei Gao <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usb: dwc3: Check for USB4 IP_NAME [+ + +]
Author: Thinh Nguyen <[email protected]>
Date:   Fri Jan 2 21:53:46 2026 +0000

    usb: dwc3: Check for USB4 IP_NAME
    
    commit 0ed91d47959cb7573c17e06487f0fb891d59dfb3 upstream.
    
    Synopsys renamed DWC_usb32 IP to DWC_usb4 as of IP version 1.30. No
    functional change except checking for the IP_NAME here. The driver will
    treat the new IP_NAME as if it's DWC_usb32. Additional features for USB4
    will be introduced and checked separately.
    
    Cc: [email protected]
    Signed-off-by: Thinh Nguyen <[email protected]>
    Link: https://patch.msgid.link/e6f1827754c7a7ddc5eb7382add20bfe3a9b312f.1767390747.git.Thinh.Nguyen@synopsys.com
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
USB: OHCI/UHCI: Add soft dependencies on ehci_platform [+ + +]
Author: Huacai Chen <[email protected]>
Date:   Mon Jan 12 16:48:02 2026 +0800

    USB: OHCI/UHCI: Add soft dependencies on ehci_platform
    
    commit 01ef7f1b8713a78ab1a9512cf8096d2474c70633 upstream.
    
    Commit 9beeee6584b9aa4f ("USB: EHCI: log a warning if ehci-hcd is not
    loaded first") said that ehci-hcd should be loaded before ohci-hcd and
    uhci-hcd. However, commit 05c92da0c52494ca ("usb: ohci/uhci - add soft
    dependencies on ehci_pci") only makes ohci-pci/uhci-pci depend on ehci-
    pci, which is not enough and we may still see the warnings in boot log.
    
    To eliminate the warnings we should make ohci-hcd/uhci-hcd depend on
    ehci-hcd. But Alan said that the warning introduced by 9beeee6584b9aa4f
    is bogus, we only need the soft dependencies in the PCI level rather
    than the HCD level.
    
    However, there is really another neccessary soft dependencies between
    ohci-platform/uhci-platform and ehci-platform, which is added by this
    patch. The boot logs are below.
    
    1. ohci-platform loaded before ehci-platform:
    
     ohci-platform 1f058000.usb: Generic Platform OHCI controller
     ohci-platform 1f058000.usb: new USB bus registered, assigned bus number 1
     ohci-platform 1f058000.usb: irq 28, io mem 0x1f058000
     hub 1-0:1.0: USB hub found
     hub 1-0:1.0: 4 ports detected
     Warning! ehci_hcd should always be loaded before uhci_hcd and ohci_hcd, not after
     usb 1-4: new low-speed USB device number 2 using ohci-platform
     ehci-platform 1f050000.usb: EHCI Host Controller
     ehci-platform 1f050000.usb: new USB bus registered, assigned bus number 2
     ehci-platform 1f050000.usb: irq 29, io mem 0x1f050000
     ehci-platform 1f050000.usb: USB 2.0 started, EHCI 1.00
     usb 1-4: device descriptor read/all, error -62
     hub 2-0:1.0: USB hub found
     hub 2-0:1.0: 4 ports detected
     usb 1-4: new low-speed USB device number 3 using ohci-platform
     input: YSPRINGTECH USB OPTICAL MOUSE as /devices/platform/bus@10000000/1f058000.usb/usb1/1-4/1-4:1.0/0003:10C4:8105.0001/input/input0
     hid-generic 0003:10C4:8105.0001: input,hidraw0: USB HID v1.11 Mouse [YSPRINGTECH USB OPTICAL MOUSE] on usb-1f058000.usb-4/input0
    
    2. ehci-platform loaded before ohci-platform:
    
     ehci-platform 1f050000.usb: EHCI Host Controller
     ehci-platform 1f050000.usb: new USB bus registered, assigned bus number 1
     ehci-platform 1f050000.usb: irq 28, io mem 0x1f050000
     ehci-platform 1f050000.usb: USB 2.0 started, EHCI 1.00
     hub 1-0:1.0: USB hub found
     hub 1-0:1.0: 4 ports detected
     ohci-platform 1f058000.usb: Generic Platform OHCI controller
     ohci-platform 1f058000.usb: new USB bus registered, assigned bus number 2
     ohci-platform 1f058000.usb: irq 29, io mem 0x1f058000
     hub 2-0:1.0: USB hub found
     hub 2-0:1.0: 4 ports detected
     usb 2-4: new low-speed USB device number 2 using ohci-platform
     input: YSPRINGTECH USB OPTICAL MOUSE as /devices/platform/bus@10000000/1f058000.usb/usb2/2-4/2-4:1.0/0003:10C4:8105.0001/input/input0
     hid-generic 0003:10C4:8105.0001: input,hidraw0: USB HID v1.11 Mouse [YSPRINGTECH USB OPTICAL MOUSE] on usb-1f058000.usb-4/input0
    
    In the later case, there is no re-connection for USB-1.0/1.1 devices,
    which is expected.
    
    Cc: stable <[email protected]>
    Reported-by: Shengwen Xiao <[email protected]>
    Signed-off-by: Huacai Chen <[email protected]>
    Reviewed-by: Alan Stern <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: ftdi_sio: add support for PICAXE AXE027 cable [+ + +]
Author: Ethan Nelson-Moore <[email protected]>
Date:   Wed Dec 10 18:01:17 2025 -0800

    USB: serial: ftdi_sio: add support for PICAXE AXE027 cable
    
    commit c0afe95e62984ceea171c3ea319beaf84a21181c upstream.
    
    The vendor provides instructions to write "0403 bd90" to
    /sys/bus/usb-serial/drivers/ftdi_sio/new_id; see:
    https://picaxe.com/docs/picaxe_linux_instructions.pdf
    
    Cc: [email protected]
    Signed-off-by: Ethan Nelson-Moore <[email protected]>
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

USB: serial: option: add Telit LE910 MBIM composition [+ + +]
Author: Ulrich Mohr <[email protected]>
Date:   Tue Dec 9 21:08:41 2025 +0100

    USB: serial: option: add Telit LE910 MBIM composition
    
    commit 8af4274ab5999831f4757dfd5bd11665ba3b1569 upstream.
    
    Add support for Telit LE910 module when operating in MBIM composition
    with additional ttys. This USB product ID is used by the module
    when AT#USBCFG is set to 7.
    
    0x1252: MBIM + tty(NMEA) + tty(MODEM) + tty(MODEM) + SAP
    
    T:  Bus=01 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
    D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
    P:  Vendor=1bc7 ProdID=1252 Rev=03.18
    S:  Manufacturer=Android
    S:  Product=LE910C1-EU
    S:  SerialNumber=0123456789ABCDEF
    C:  #Ifs= 6 Cfg#= 1 Atr=a0 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=00 Prot=00 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=00 Prot=00 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= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=87(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=88(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    I:  If#= 5 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
    E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=89(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
    E:  Ad=8a(I) Atr=03(Int.) MxPS=  10 Ivl=32ms
    
    Signed-off-by: Ulrich Mohr <[email protected]>
    Cc: [email protected]
    Signed-off-by: Johan Hovold <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
usbnet: limit max_mtu based on device's hard_mtu [+ + +]
Author: Laurent Vivier <[email protected]>
Date:   Mon Jan 19 08:55:18 2026 +0100

    usbnet: limit max_mtu based on device's hard_mtu
    
    [ Upstream commit c7159e960f1472a5493ac99aff0086ab1d683594 ]
    
    The usbnet driver initializes net->max_mtu to ETH_MAX_MTU before calling
    the device's bind() callback. When the bind() callback sets
    dev->hard_mtu based the device's actual capability (from CDC Ethernet's
    wMaxSegmentSize descriptor), max_mtu is never updated to reflect this
    hardware limitation).
    
    This allows userspace (DHCP or IPv6 RA) to configure MTU larger than the
    device can handle, leading to silent packet drops when the backend sends
    packet exceeding the device's buffer size.
    
    Fix this by limiting net->max_mtu to the device's hard_mtu after the
    bind callback returns.
    
    See https://gitlab.com/qemu-project/qemu/-/issues/3268 and
        https://bugs.passt.top/attachment.cgi?bugid=189
    
    Fixes: f77f0aee4da4 ("net: use core MTU range checking in USB NIC drivers")
    Signed-off-by: Laurent Vivier <[email protected]>
    Link: https://bugs.passt.top/show_bug.cgi?id=189
    Reviewed-by: Stefano Brivio <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
vsock/test: add a final full barrier after run all tests [+ + +]
Author: Stefano Garzarella <[email protected]>
Date:   Thu Jan 8 12:44:19 2026 +0100

    vsock/test: add a final full barrier after run all tests
    
    [ Upstream commit c39a6a277e0e67ffff6a8efcbbf7e7e23ce9e38c ]
    
    If the last test fails, the other side still completes correctly,
    which could lead to false positives.
    
    Let's add a final barrier that ensures that the last test has finished
    correctly on both sides, but also that the two sides agree on the
    number of tests to be performed.
    
    Fixes: 2f65b44e199c ("VSOCK: add full barrier between test cases")
    Reviewed-by: Luigi Leonardi <[email protected]>
    Signed-off-by: Stefano Garzarella <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jakub Kicinski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>

 
w1: fix redundant counter decrement in w1_attach_slave_device() [+ + +]
Author: Haoxiang Li <[email protected]>
Date:   Thu Dec 18 19:14:14 2025 +0800

    w1: fix redundant counter decrement in w1_attach_slave_device()
    
    commit cc8f92e41eb76f450f05234fef2054afc3633100 upstream.
    
    In w1_attach_slave_device(), if __w1_attach_slave_device() fails,
    put_device() -> w1_slave_release() is called to do the cleanup job.
    In w1_slave_release(), sl->family->refcnt and sl->master->slave_count
    have already been decremented. There is no need to decrement twice
    in w1_attach_slave_device().
    
    Fixes: 2c927c0c73fd ("w1: Fix slave count on 1-Wire bus (resend)")
    Cc: [email protected]
    Signed-off-by: Haoxiang Li <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

w1: therm: Fix off-by-one buffer overflow in alarms_store [+ + +]
Author: Thorsten Blum <[email protected]>
Date:   Mon Jan 26 10:59:29 2026 -0500

    w1: therm: Fix off-by-one buffer overflow in alarms_store
    
    [ Upstream commit 761fcf46a1bd797bd32d23f3ea0141ffd437668a ]
    
    The sysfs buffer passed to alarms_store() is allocated with 'size + 1'
    bytes and a NUL terminator is appended. However, the 'size' argument
    does not account for this extra byte. The original code then allocated
    'size' bytes and used strcpy() to copy 'buf', which always writes one
    byte past the allocated buffer since strcpy() copies until the NUL
    terminator at index 'size'.
    
    Fix this by parsing the 'buf' parameter directly using simple_strtoll()
    without allocating any intermediate memory or string copying. This
    removes the overflow while simplifying the code.
    
    Cc: [email protected]
    Fixes: e2c94d6f5720 ("w1_therm: adding alarm sysfs entry")
    Signed-off-by: Thorsten Blum <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Krzysztof Kozlowski <[email protected]>
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

w1: w1_therm: use swap() to make code cleaner [+ + +]
Author: Yang Guang <[email protected]>
Date:   Mon Jan 26 10:59:28 2026 -0500

    w1: w1_therm: use swap() to make code cleaner
    
    [ Upstream commit e233897b1f7a859092bd20b10bfd412013381a10 ]
    
    Use the macro 'swap()' defined in 'include/linux/minmax.h' to avoid
    opencoding it.
    
    Reported-by: Zeal Robot <[email protected]>
    Signed-off-by: David Yang <[email protected]>
    Signed-off-by: Yang Guang <[email protected]>
    Link: https://lore.kernel.org/r/cb14f9e6e86cf8494ed2ddce6eec8ebd988908d9.1640077704.git.yang.guang5@zte.com.cn
    Signed-off-by: Greg Kroah-Hartman <[email protected]>
    Stable-dep-of: 761fcf46a1bd ("w1: therm: Fix off-by-one buffer overflow in alarms_store")
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
wifi: ath10k: fix dma_free_coherent() pointer [+ + +]
Author: Thomas Fourier <[email protected]>
Date:   Mon Jan 5 22:04:38 2026 +0100

    wifi: ath10k: fix dma_free_coherent() pointer
    
    commit 9282a1e171ad8d2205067e8ec3bbe4e3cef4f29f upstream.
    
    dma_alloc_coherent() allocates a DMA mapped buffer and stores the
    addresses in XXX_unaligned fields.  Those should be reused when freeing
    the buffer rather than the aligned addresses.
    
    Fixes: 2a1e1ad3fd37 ("ath10k: Add support for 64 bit ce descriptor")
    Cc: [email protected]
    Signed-off-by: Thomas Fourier <[email protected]>
    Reviewed-by: Baochen Qiang <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Jeff Johnson <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: mwifiex: Fix a loop in mwifiex_update_ampdu_rxwinsize() [+ + +]
Author: Dan Carpenter <[email protected]>
Date:   Thu Jan 8 23:00:24 2026 +0300

    wifi: mwifiex: Fix a loop in mwifiex_update_ampdu_rxwinsize()
    
    commit 2120f3a3738a65730c81bf10447b1ff776078915 upstream.
    
    The "i" iterator variable is used to count two different things but
    unfortunately we can't store two different numbers in the same variable.
    Use "i" for the outside loop and "j" for the inside loop.
    
    Cc: [email protected]
    Fixes: d219b7eb3792 ("mwifiex: handle BT coex event to adjust Rx BA window size")
    Signed-off-by: Dan Carpenter <[email protected]>
    Reviewed-by: Jeff Chen <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

wifi: rsi: Fix memory corruption due to not set vif driver data size [+ + +]
Author: Marek Vasut <[email protected]>
Date:   Sat Jan 10 00:56:29 2026 +0100

    wifi: rsi: Fix memory corruption due to not set vif driver data size
    
    commit 4f431d88ea8093afc7ba55edf4652978c5a68f33 upstream.
    
    The struct ieee80211_vif contains trailing space for vif driver data,
    when struct ieee80211_vif is allocated, the total memory size that is
    allocated is sizeof(struct ieee80211_vif) + size of vif driver data.
    The size of vif driver data is set by each WiFi driver as needed.
    
    The RSI911x driver does not set vif driver data size, no trailing space
    for vif driver data is therefore allocated past struct ieee80211_vif .
    The RSI911x driver does however use the vif driver data to store its
    vif driver data structure "struct vif_priv". An access to vif->drv_priv
    leads to access out of struct ieee80211_vif bounds and corruption of
    some memory.
    
    In case of the failure observed locally, rsi_mac80211_add_interface()
    would write struct vif_priv *vif_info = (struct vif_priv *)vif->drv_priv;
    vif_info->vap_id = vap_idx. This write corrupts struct fq_tin member
    struct list_head new_flows . The flow = list_first_entry(head, struct
    fq_flow, flowchain); in fq_tin_reset() then reports non-NULL bogus
    address, which when accessed causes a crash.
    
    The trigger is very simple, boot the machine with init=/bin/sh , mount
    devtmpfs, sysfs, procfs, and then do "ip link set wlan0 up", "sleep 1",
    "ip link set wlan0 down" and the crash occurs.
    
    Fix this by setting the correct size of vif driver data, which is the
    size of "struct vif_priv", so that memory is allocated and the driver
    can store its driver data in it, instead of corrupting memory around
    it.
    
    Cc: [email protected]
    Fixes: dad0d04fa7ba ("rsi: Add RS9113 wireless driver")
    Signed-off-by: Marek Vasut <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Johannes Berg <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
writeback: fix 100% CPU usage when dirtytime_expire_interval is 0 [+ + +]
Author: Laveesh Bansal <[email protected]>
Date:   Tue Feb 3 15:32:17 2026 -0500

    writeback: fix 100% CPU usage when dirtytime_expire_interval is 0
    
    [ Upstream commit 543467d6fe97e27e22a26e367fda972dbefebbff ]
    
    When vm.dirtytime_expire_seconds is set to 0, wakeup_dirtytime_writeback()
    schedules delayed work with a delay of 0, causing immediate execution.
    The function then reschedules itself with 0 delay again, creating an
    infinite busy loop that causes 100% kworker CPU usage.
    
    Fix by:
    - Only scheduling delayed work in wakeup_dirtytime_writeback() when
      dirtytime_expire_interval is non-zero
    - Cancelling the delayed work in dirtytime_interval_handler() when
      the interval is set to 0
    - Adding a guard in start_dirtytime_writeback() for defensive coding
    
    Tested by booting kernel in QEMU with virtme-ng:
    - Before fix: kworker CPU spikes to ~73%
    - After fix: CPU remains at normal levels
    - Setting interval back to non-zero correctly resumes writeback
    
    Fixes: a2f4870697a5 ("fs: make sure the timestamps for lazytime inodes eventually get written")
    Cc: [email protected]
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=220227
    Signed-off-by: Laveesh Bansal <[email protected]>
    Link: https://patch.msgid.link/[email protected]
    Reviewed-by: Jan Kara <[email protected]>
    Signed-off-by: Christian Brauner <[email protected]>
    [ adapted system_percpu_wq to system_wq for the workqueue used in dirtytime_interval_handler() ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
x86/resctrl: Add missing resctrl initialization for Hygon [+ + +]
Author: Xiaochen Shen <[email protected]>
Date:   Tue Dec 9 14:26:49 2025 +0800

    x86/resctrl: Add missing resctrl initialization for Hygon
    
    commit 6ee98aabdc700b5705e4f1833e2edc82a826b53b upstream.
    
    Hygon CPUs supporting Platform QoS features currently undergo partial resctrl
    initialization through resctrl_cpu_detect() in the Hygon BSP init helper and
    AMD/Hygon common initialization code. However, several critical data
    structures remain uninitialized for Hygon CPUs in the following paths:
    
     - get_mem_config()-> __rdt_get_mem_config_amd():
         rdt_resource::membw,alloc_capable
         hw_res::num_closid
    
     - rdt_init_res_defs()->rdt_init_res_defs_amd():
         rdt_resource::cache
         hw_res::msr_base,msr_update
    
    Add the missing AMD/Hygon common initialization to ensure proper Platform QoS
    functionality on Hygon CPUs.
    
    Fixes: d8df126349da ("x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper")
    Signed-off-by: Xiaochen Shen <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Reinette Chatre <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

x86/resctrl: Fix memory bandwidth counter width for Hygon [+ + +]
Author: Xiaochen Shen <[email protected]>
Date:   Tue Dec 9 14:26:50 2025 +0800

    x86/resctrl: Fix memory bandwidth counter width for Hygon
    
    commit 7517e899e1b87b4c22a92c7e40d8733c48e4ec3c upstream.
    
    The memory bandwidth calculation relies on reading the hardware counter
    and measuring the delta between samples. To ensure accurate measurement,
    the software reads the counter frequently enough to prevent it from
    rolling over twice between reads.
    
    The default Memory Bandwidth Monitoring (MBM) counter width is 24 bits.
    Hygon CPUs provide a 32-bit width counter, but they do not support the
    MBM capability CPUID leaf (0xF.[ECX=1]:EAX) to report the width offset
    (from 24 bits).
    
    Consequently, the kernel falls back to the 24-bit default counter width,
    which causes incorrect overflow handling on Hygon CPUs.
    
    Fix this by explicitly setting the counter width offset to 8 bits (resulting
    in a 32-bit total counter width) for Hygon CPUs.
    
    Fixes: d8df126349da ("x86/cpu/hygon: Add missing resctrl_cpu_detect() in bsp_init helper")
    Signed-off-by: Xiaochen Shen <[email protected]>
    Signed-off-by: Borislav Petkov (AMD) <[email protected]>
    Reviewed-by: Tony Luck <[email protected]>
    Reviewed-by: Reinette Chatre <[email protected]>
    Cc: [email protected]
    Link: https://patch.msgid.link/[email protected]
    Signed-off-by: Greg Kroah-Hartman <[email protected]>

 
xfs: set max_agbno to allow sparse alloc of last full inode chunk [+ + +]
Author: Brian Foster <[email protected]>
Date:   Tue Jan 20 21:42:42 2026 -0500

    xfs: set max_agbno to allow sparse alloc of last full inode chunk
    
    [ Upstream commit c360004c0160dbe345870f59f24595519008926f ]
    
    Sparse inode cluster allocation sets min/max agbno values to avoid
    allocating an inode cluster that might map to an invalid inode
    chunk. For example, we can't have an inode record mapped to agbno 0
    or that extends past the end of a runt AG of misaligned size.
    
    The initial calculation of max_agbno is unnecessarily conservative,
    however. This has triggered a corner case allocation failure where a
    small runt AG (i.e. 2063 blocks) is mostly full save for an extent
    to the EOFS boundary: [2050,13]. max_agbno is set to 2048 in this
    case, which happens to be the offset of the last possible valid
    inode chunk in the AG. In practice, we should be able to allocate
    the 4-block cluster at agbno 2052 to map to the parent inode record
    at agbno 2048, but the max_agbno value precludes it.
    
    Note that this can result in filesystem shutdown via dirty trans
    cancel on stable kernels prior to commit 9eb775968b68 ("xfs: walk
    all AGs if TRYLOCK passed to xfs_alloc_vextent_iterate_ags") because
    the tail AG selection by the allocator sets t_highest_agno on the
    transaction. If the inode allocator spins around and finds an inode
    chunk with free inodes in an earlier AG, the subsequent dir name
    creation path may still fail to allocate due to the AG restriction
    and cancel.
    
    To avoid this problem, update the max_agbno calculation to the agbno
    prior to the last chunk aligned agbno in the AG. This is not
    necessarily the last valid allocation target for a sparse chunk, but
    since inode chunks (i.e. records) are chunk aligned and sparse
    allocs are cluster sized/aligned, this allows the sb_spino_align
    alignment restriction to take over and round down the max effective
    agbno to within the last valid inode chunk in the AG.
    
    Note that even though the allocator improvements in the
    aforementioned commit seem to avoid this particular dirty trans
    cancel situation, the max_agbno logic improvement still applies as
    we should be able to allocate from an AG that has been appropriately
    selected. The more important target for this patch however are
    older/stable kernels prior to this allocator rework/improvement.
    
    Cc: [email protected] # v4.2
    Fixes: 56d1115c9bc7 ("xfs: allocate sparse inode chunks on full chunk allocation failure")
    Signed-off-by: Brian Foster <[email protected]>
    Reviewed-by: Darrick J. Wong <[email protected]>
    Signed-off-by: Carlos Maiolino <[email protected]>
    [ xfs_ag_block_count(args.mp, pag_agno(pag)) => args.mp->m_sb.sb_agblocks ]
    Signed-off-by: Sasha Levin <[email protected]>
    Signed-off-by: Greg Kroah-Hartman <[email protected]>