CVE-2026-97993

vhost-vdpa: don't install the eventfd_ctx_fdget() error in config_ctx

State
Published
Severity
Not scored
Published
Sep 25, 2026
Updated
Oct 19, 2026
Reserved
Sep 25, 2026

Read the record on cve.org

Description

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

vhost-vdpa: don't install the eventfd_ctx_fdget() error in config_ctx

vhost_vdpa_set_config_call() swaps the eventfd_ctx_fdget() return value into v->config_ctx before checking it, so on failure the field briefly holds an ERR_PTR:

ctx = fd == VHOST_FILE_UNBIND ? NULL : eventfd_ctx_fdget(fd); swap(ctx, v->config_ctx);

if (!IS_ERR_OR_NULL(ctx)) eventfd_ctx_put(ctx);

if (IS_ERR(v->config_ctx)) { long ret = PTR_ERR(v->config_ctx);

v->config_ctx = NULL; return ret; }

Commit 0bde59c1723a ("vhost-vdpa: set v->config_ctx to NULL if eventfd_ctx_fdget() fails") added that clearing, and spelled out the invariant the rest of the file relies on: "we consider 'v->config_ctx' valid if it is not NULL". The window between the swap and the clearing still breaks it. vhost_vdpa_config_cb() only tests for NULL, so a config interrupt delivered inside the window hands the ERR_PTR to eventfd_signal().

Check the fd before installing it instead. That closes the window and matches how vhost_vring_ioctl() handles the same failure for the vq call fd.

It also stops a rejected fd from tearing down a config interrupt that was working: until now the swap replaced the live context and put it, so after an EBADF the device silently stopped delivering config interrupts until userspace installed a new fd.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before e260dc9fbfdae0978e7a8698f977fbb463a657beAffected
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before 66e73fa18910b39fea0941dea5fe091122240855Affected
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before 4fde085eb839fbb39c25cbba5d2a091ded394877Affected
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before 59fc7c1c6b4d325194ca45352180340092d95098Affected
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before 388c678639a0cebfd936b3e56c64ac6a371efec2Affected
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before 65faf9eaa00e408e1406fbcf675c8c8d0e27ff2aAffected
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before 6b20b40f020bde236f6b8a08ff88d8653261ec2bAffected
  • 776f395004d829bbbf18c159ed9beb517a208c71 to before e74a9fa50749b9940b4fb13199652325e08d3c4aAffected
LinuxLinux
  • 5.8Affected
  • before 5.8Not affected
  • 5.10.271 through 5.10.*Not affected
  • 5.15.222 through 5.15.*Not affected
  • 6.1.189 through 6.1.*Not affected
  • 6.6.158 through 6.6.*Not affected
  • 6.12.111 through 6.12.*Not affected
  • 6.18.53 through 6.18.*Not affected
  • 7.2.7 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.