data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-98357 in the interactive tracker

CVE-2026-98357

IB/isert: wait for deferred control PDU completions before releasing the connection

8.1 EPSS 0.4% AV:N

Published 2026-10-06 (13 days ago) by the Linux kernel CNA. Subsystem drivers/infiniband. Debian urgency: not yet assigned.

What to do, per Debian release

Debian's own status for CVE-2026-98357 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormfixedDLA-4841-1 · 2026-10-17 · text6.1.190-1Update the kernel and reboot. DLA-4841-1 shipped the fix on 2026-10-17, in 6.1.190-1. A running kernel keeps the old code until the machine restarts.
Debian 13trixiefixedDSA-6568-1 · 2026-10-16 · text6.12.113-1Update the kernel and reboot. DSA-6568-1 shipped the fix on 2026-10-16, in 6.12.113-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed7.2.8-1Update the kernel and reboot. Fixed in 7.2.8-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.2.8-1Update the kernel and reboot. Fixed in 7.2.8-1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

isert_send_done() hands ISTATE_SEND_TASKMGTRSP, ISTATE_SEND_REJECT and ISTATE_SEND_TEXTRSP completions off to isert_comp_wq and returns. The work item then runs isert_completion_put() -> isert_put_cmd(), which reads isert_conn->conn and takes conn->cmd_lock. Nothing orders that work item against teardown. isert_wait_conn() queues isert_release_work, which frees isert_conn, and iscsit_close_connection() frees the iscsit_conn right after it returns, so the queued work can run against freed memory. Count the deferred control PDU completions per connection and let isert_wait_conn() wait for them before the release work is queued. ISTATE_SEND_LOGOUTRSP is deliberately not counted: that branch runs iscsit_logout_post_handler(), which ends up waiting for conn->conn_wait_comp, and that completion is only sent by iscsit_close_connection() after it has called iscsit_wait_conn(). Waiting for it here would deadlock. Its wait stays the existing isert_wait4logout(). The splat below is from a kernel with tracing printk()s and an msleep(200) injected into isert_do_control_comp() to widen the window: BUG: KASAN: slab-use-after-free in isert_put_cmd+0x53d/0x620 Read of size 8 at addr ffff8881054f1038 by task kworker/u17:1/182 CPU: 0 UID: 0 PID: 182 Comm: kworker/u17:1 Tainted: G B 7.2.0-rc5-TWIDE-gb8babf08acc7 #1 PREEMPT(lazy) Tainted: [B]=BAD_PAGE Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 Workqueue: isert_comp_wq isert_do_control_comp Call Trace: <TASK> dump_stack_lvl+0x53/0x70 print_report+0xd0/0x630 ? __pfx__raw_spin_lock_irqsave+0x10/0x10 ? _raw_spin_unlock_irqrestore+0x3e/0x70 ? isert_put_cmd+0x53d/0x620 kasan_report+0xce/0x100 ? isert_put_cmd+0x53d/0x620 isert_put_cmd+0x53d/0x620 ? isert_completion_put+0x305/0x330 ? isert_do_control_comp+0x2ef/0x310 process_one_work+0x633/0x1030 ? assign_work+0x11d/0x370 worker_thread+0x45b/0xd10 ? __pfx_worker_thread+0x10/0x10 ? __pfx_worker_thread+0x10/0x10 kthread+0x2c6/0x3b0 ? recalc_sigpending+0x15c/0x1e0 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x36e/0x5a0 ? __pfx_ret_from_fork+0x10/0x10 ? __switch_to+0x572/0xdd0 ? __pfx_kthread+0x10/0x10 ret_from_fork_asm+0x1a/0x30 </TASK> Allocated by task 48: kasan_save_stack+0x33/0x60 kasan_save_track+0x14/0x30 __kasan_kmalloc+0x8f/0xa0 __kmalloc_cache_noprof+0x158/0x370 isert_cma_handler+0x1e3/0x2ae0 cma_cm_event_handler+0x3e/0x240 cma_ib_req_handler+0x17d9/0x4490 cm_process_work+0x41/0x330 cm_work_handler+0x5727/0xc160 process_one_work+0x633/0x1030 worker_thread+0x45b/0xd10 kthread+0x2c6/0x3b0 ret_from_fork+0x36e/0x5a0 ret_from_fork_asm+0x1a/0x30 Freed by task 184: kasan_save_stack+0x33/0x60 kasan_save_track+0x14/0x30 kasan_save_free_info+0x3b/0x60 __kasan_slab_free+0x43/0x70 kfree+0x121/0x380 iscsit_close_connection+0x7cf/0x1e60 iscsit_take_action_for_connection_exit+0x1b6/0x360 iscsi_target_tx_thread+0x472/0x690 kthread+0x2c6/0x3b0 ret_from_fork+0x36e/0x5a0 ret_from_fork_asm+0x1a/0x30

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

drivers/infiniband/ulp/isert/ib_isert.c
drivers/infiniband/ulp/isert/ib_isert.h

What this is
ISCSI EXTENSIONS FOR RDMA (ISER) TARGETMAINTAINERS section matched on drivers/infiniband/ulp/isert · linux-rdma@vger.kernel.org · Supported
Kernel module
ib_isert

Check it on the machine

grep -wE 'CONFIG_INFINIBAND|CONFIG_INFINIBAND_ISERT' /boot/config-$(uname -r)

Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.

lsmod | grep -w ib_isert

Prints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.

Show whether Debian builds this, per release

Debian builds this, but not on every flavour. At least one release below builds the code on some of its kernel flavours and not on others, so the answer depends on the architecture and flavour installed.

  • bookworm, trixie, forky, sidMnot built on amd64/cloud-amd64, arm64/cloud-arm64
M
a module where it is built at all; some flavours do not build it
Build switches
CONFIG_INFINIBAND, CONFIG_INFINIBAND_ISERT
Reads as
all on means the file is compiled; any one off means it is not.

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages

Signals

Published
2026-10-06 (13 days ago)source
CVSS
8.1 high
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.36%, higher than 28.0% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
not yet assignedsource
Subsystem
drivers/infiniband

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
3.105.10.271f5613acbe2e3
3.105.15.222ccdb1523f12b
3.106.1.1890e230917670c
3.106.6.158505b242d9351
3.106.12.1127edb8a88d6c7
3.106.18.54b96b8b3e41c3
3.107.2.87908fbc597a6
3.107.3a8fe3dfce8c0

Debian advisories

AdvisoryDateShipped toDebian
DLA-4841-12026-10-17bookworm 6.1.190-1tracker
DSA-6568-12026-10-16trixie 6.12.113-1tracker

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:NAttack vector, network
The iSER initiator triggers it remotely over RDMA (iWARP/RoCEv2 are IP-routable). Its iSCSI Text Request (or a TMF or a malformed PDU that draws a Reject) makes isert_send_done() queue isert_do_control_comp(); an RDMA CM disconnect from the same initiator then starts teardown via iscsit_close_connection().
AC:HAttack complexity, high
The attacker sends both the request and the disconnect, but the free only wins if the already-queued isert_comp_wq work stays delayed through ib_drain_qp, isert_wait4cmds and the release work. The attacker can't control that scheduling; the reporter needed an injected msleep(200) to reproduce it.
PR:NPrivileges required, none
The attacker only needs a full-feature iSCSI session, and LIO allows login with AuthMethod=None, where the initiator IQN is merely asserted. No credentials are checked before the Text/TMF/Reject paths that queue the deferred completion.
UI:NUser interaction, none
The initiator triggers the response PDU and the connection teardown entirely through its own iSCSI PDUs and RDMA CM disconnect; no action by a target administrator is needed.
S:UScope, unchanged
The use-after-free is in the target host's own kernel memory (isert_conn and iscsit_conn), so the impact stays within the same kernel security authority.
C:HConfidentiality impact, high
isert_put_cmd() dereferences the freed isert_conn->conn and reads the freed iscsit_conn and cmd structures. Reclaiming those slab objects lets attacker-shaped data steer kernel pointer reads.
I:HIntegrity impact, high
On the freed iscsit_conn, isert_put_cmd() takes spin_lock_bh(&conn->cmd_lock), runs list_del_init(&cmd->i_conn_node) and calls iscsit_release_cmd()/transport_generic_free_cmd(). These are writes and frees through freed memory, which can corrupt the heap.
A:HAvailability impact, high
The isert_comp_wq worker hits a slab use-after-free in isert_put_cmd() (KASAN splat in the fix commit), which on production kernels can crash or oops the iSCSI target host.