← All Advisories
Reported from OT-Advisories.com as of

CVE-2026-89974

Last refreshed2026-10-19

Status: UPDATED  |  Advisory ID: CVE-2026-89974

Key Details

CVECVE-2026-89974
CVSS Score / Version
7.5 (High) / CVSS v3.1
Updated2026-10-19
CVSS Vector
CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Prose
attack vector is adjacent; attack complexity is high; privileges required is none; user interaction is none; scope is unchanged; confidentiality impact is high; integrity impact is high; availability impact is high.
Affected products
Linux Kernel

Affected Products, Subsystems & Sectors

VendorProductAffected VersionsPatch Status
LinuxLinux Kernel
SubsystemsOT Supporting Infrastructure
SectorsAll Sectors

What to Know

In the Linux kernel, the following vulnerability has been resolved:

nvme-fc: fix double free of fabrics options when nvme_add_ctrl() fails

nvmf_create_ctrl() owns the fabrics options and frees them whenever

->create_ctrl() returns an error, so a transport must not free them on

its own error paths. nvme-fc tracks this by testing ctrl->ctrl.opts in

nvme_fc_ctrl_free(), which requires nvme_fc_init_ctrl() to clear that

pointer on every error exit.

The coupling is implicit, and commit 1a9e218195a5 ("nvme: split device

add from initialization") broke it by adding a second error exit. When

nvme_add_ctrl() fails, nvme_fc_init_ctrl() jumps to out_put_ctrl:, past

the "ctrl->ctrl.opts = NULL" that only sits on the fail_ctrl: path, so

nvme_fc_ctrl_free() frees the options and nvmf_create_ctrl() frees them

a second time:

BUG: KASAN: slab-use-after-free in nvmf_free_options+0x30/0x190

nvmf_free_options+0x30/0x190 drivers/nvme/host/fabrics.c:1284

nvmf_create_ctrl drivers/nvme/host/fabrics.c:1374 [inline]

Freed by task 5534:

nvme_fc_ctrl_free drivers/nvme/host/fc.c:2374 [inline]

nvme_fc_init_ctrl+0xe17/0x1450 drivers/nvme/host/fc.c:3605

nvme_add_ctrl() fails when dev_set_name() cannot allocate, so this is

reachable under memory pressure or fault injection. Without KASAN the

options are freed twice.

Rather than clear the pointer on the second exit as well, derive

ownership the way nvme-tcp, nvme-rdma and nvme-loop do, from list

membership: their free_ctrl leaves the options alone unless the

controller made it onto the transport list.

The list cannot simply be populated on the success path as it is there.

nvme-fc runs the initial connect synchronously via flush_delayed_work(),

and the controller has to be reachable on rport->ctrl_list for the whole

of it: nvme_fc_unregister_remoteport() needs to find it to signal

connectivity loss, nvme_fc_match_disconn_ls() matches an incoming

Disconnect Association LS against ctrl->association_id, which is only

assigned during that window, nvme_fc_resume_controller() needs it on

remoteport re-registration, and nvme_fc_existing_controller() uses it to

reject a duplicate connect racing the one in flight.

Keep the insertion where it is and add a fail_unlist: label, falling

into fail_ctrl:, for the error paths that run after it. The earlier

error paths never reach the insertion and keep using fail_ctrl:

directly, so the list is only touched where the controller is actually

on it.

nvme_fc_ctrl_free() cannot use the plain "goto free_ctrl" the other

transports use, because it still has to put_device(), release the rport

reference and free the ida entry for resources taken before the

insertion. Sample list_empty() under rport->lock instead.

ctrl->ctrl.opts also stays valid for the whole teardown now. That is

not the bug being fixed, but it removes some fragility around the old

idiom: nvme_free_ctrl() calls nvme_auth_free() before ->free_ctrl(), and

ctrl_max_dhchaps() dereferences ctrl->opts without a NULL check when

ctrl->dhchap_ctxs is set, which nvme-fc permits since NVMF_ALLOWED_OPTS

allows the dhchap options. The nvme sysfs attributes that dereference

ctrl->opts, such as hostnqn and address, evaluate their is_visible()

test once at device_add() time and stay readable until

cdev_device_del(). (NVD)

What to Do

Monitor Linux's web page for any future patch releases.

References

SourceReference
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-89974
CVEhttps://www.cve.org/CVERecord?id=CVE-2026-89974
Report compilation © 2026 OT-Advisories.com  ·  CC BY 4.0  ·  Source materials remain the property of their respective publishers as cited.