CVE-2026-64510 PUBLISHED

ACPI: NFIT: core: Fix acpi_nfit_init() error cleanup

Assigner: Linux
Reserved: 19.07.2026 Published: 25.07.2026 Updated: 25.07.2026

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

ACPI: NFIT: core: Fix acpi_nfit_init() error cleanup

If acpi_nfit_init() fails after adding the acpi_desc object to the acpi_descs list, that object is never removed from that list because the acpi_nfit_shutdown() devm action is not added for the NFIT device in that case. Next, the acpi_nfit_init() failure causes acpi_nfit_probe() to fail, the acpi_desc object is freed, and a dangling pointer is left behind in the acpi_descs. Any subsequent ACPI Machine Check Exception will trigger nfit_handle_mce() which iterates over acpi_descs and so a use-after-free will occur.

Moreover, if acpi_nfit_probe() returns 0 after installing a notify handler for the NFIT device and without allocating the acpi_desc object and setting the NFIT device's driver data pointer, the acpi_desc object will be allocated by acpi_nfit_update_notify() and acpi_nfit_init() will be called to initialize it. Regardless of whether or not acpi_nfit_init() fails in that case, the acpi_nfit_shutdown() devm action is not added for the NFIT device and acpi_desc is never removed from the acpi_descs list. If the acpi_desc object is freed subsequently on driver removal, any subsequent ACPI MCE will lead to a use-after-free like in the previous case.

To address the first issue mentioned above, make acpi_nfit_probe() call acpi_nfit_shutdown() directly on acpi_nfit_init() failures and to address the other one, add a remove callback to the driver and make it call acpi_nfit_shutdown(). Also, since it is now possible to pass NULL to acpi_nfit_shutdown() or the acpi_desc object passed to it may not have been initialized, add checks against NULL for acpi_desc and its nvdimm_bus field to that function and make acpi_nfit_unregister() clear the latter after unregistering the NVDIMM bus.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to ee82078e776ae31266cc70fdf62ac17c3c6f100a (excl.)
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to 6ff054cc02a763914773b026cacb429e5fbf64fa (excl.)
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to b07d22a2d17ad6465c87bd5752bc70e4c16e0ee4 (excl.)
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to c127dbd832bd4b9aef8a749d9f491b74042f9b47 (excl.)
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to df7c92216a1583a76cb0cbf2f21cd68870609b05 (excl.)
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to 3b2628f7682aea8d9ce09ad4b9a3bd144b451eaa (excl.)
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to 7d69235bdc581a4346e9bcd6a8bea37d3e1abd25 (excl.)
  • affected from a61fe6f7902ecaa89d5e6c709490fc4324927134 to 38bf27511ef41bffebd157ec3eba41fc89ba59cd (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 4.6 is affected
  • unaffected from 0 to 4.6 (excl.)
  • unaffected from 5.10.261 to 5.10.* (incl.)
  • unaffected from 5.15.212 to 5.15.* (incl.)
  • unaffected from 6.1.178 to 6.1.* (incl.)
  • unaffected from 6.6.145 to 6.6.* (incl.)
  • unaffected from 6.12.97 to 6.12.* (incl.)
  • unaffected from 6.18.40 to 6.18.* (incl.)
  • unaffected from 7.1.4 to 7.1.* (incl.)
  • unaffected from 7.2-rc1 to * (incl.)

References