CVE-2026-89970 PUBLISHED

nvmet-auth: Synchronize timeout work during SQ teardown

Assigner: Linux
Reserved: 11.09.2026 Published: 16.09.2026 Updated: 16.09.2026

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

nvmet-auth: Synchronize timeout work during SQ teardown

nvmet_auth_sq_free() cancels auth_expired_work with cancel_delayed_work(). If the work has already started, cancellation does not wait for the callback. Transport teardown can consequently free or reuse the queue containing struct nvmet_sq while nvmet_auth_expired_work() still accesses that SQ.

Add a teardown-specific helper that synchronously drains the delayed work before freeing authentication state, and use it from nvmet_sq_destroy(). Keep the non-synchronous helper for in-band authentication state cleanup, where the SQ owner remains alive.

Metrics

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 9.8

AV:N - The UAF is in nvmet-auth timeout work reached via AUTH_SEND on NVMe-oF targets; nvmet-tcp (and nvmet-rdma) accept remote connections, so a network initiator can arm the timer and tear down the queue over TCP/RDMA. AC:L - The attacker controls both sides of the race: AUTH_SEND schedules auth_expired_work with an attacker-chosen KATO delay, and closing the connection runs nvmet_sq_destroy(); cancel_delayed_work() does not wait, so the race is repeatable. PR:N - AUTH_SEND is dispatched as a Fabrics command before nvmet_check_auth_status() and before DH-HMAC-CHAP credentials are verified; discovery accepts any host NQN, so no Linux privileges or verified secrets are required. UI:N - No victim user action is required; the attacker connects to an already-deployed NVMe-oF target, sends AUTH_SEND to arm the timeout, and disconnects when the work is due. S:U - The use-after-free corrupts the in-kernel nvmet_sq/queue object on the target host and does not cross a VM, hypervisor, or IOMMU security boundary. C:H - Transport teardown can free or reuse the queue containing struct nvmet_sq while nvmet_auth_expired_work() still accesses it; that UAF can be leveraged for kernel information disclosure via heap reuse. I:H - The delayed work writes dhchap_step and dhchap_tid into a potentially freed or reused queue object, giving a kernel UAF write primitive exploitable for memory corruption and control-flow hijacking. A:H - Racing the timeout callback against SQ teardown is a kernel UAF of the queue and can oops or panic; the work may also dereference sq->ctrl after teardown has already cleared it.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 1a70200f404ae210b4f0334e3936e84f8edb6bc8 to 664022fa1c93f4eba09ef5ee02411b9709dd7a93 (excl.)
  • affected from 1a70200f404ae210b4f0334e3936e84f8edb6bc8 to c3c126a6142a1335bc8c34a5607c39cf01daf295 (excl.)
  • affected from 1a70200f404ae210b4f0334e3936e84f8edb6bc8 to c17c87bde6d6f5252a6a6f0a94b2430164aa28d5 (excl.)
  • affected from 1a70200f404ae210b4f0334e3936e84f8edb6bc8 to 7555ddd60af72df2862dd8f9b730a9848577edda (excl.)
  • affected from 1a70200f404ae210b4f0334e3936e84f8edb6bc8 to eb4f9127a2b8a152743f1ee597627e2f69cb54fe (excl.)
  • affected from 1a70200f404ae210b4f0334e3936e84f8edb6bc8 to eaa948c0e19b1bb2d93262207bca0c3d19cc3406 (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 6.0 is affected
  • unaffected from 0 to 6.0 (excl.)
  • unaffected from 6.1.188 to 6.1.* (incl.)
  • unaffected from 6.6.157 to 6.6.* (incl.)
  • unaffected from 6.12.110 to 6.12.* (incl.)
  • unaffected from 6.18.51 to 6.18.* (incl.)
  • unaffected from 7.2.5 to 7.2.* (incl.)
  • unaffected from 7.3-rc2 to * (incl.)

References