CVE-2026-45982
Description
In the Linux kernel, the following vulnerability has been resolved:
ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
Cover a missed execution path with a new check.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
A NULL pointer dereference in acpi_ev_address_space_dispatch() of the Linux kernel's ACPICA may be exploited to cause a denial of service.
Vulnerability
A NULL pointer dereference vulnerability exists in the acpi_ev_address_space_dispatch() function within the Linux kernel's ACPI Component Architecture (ACPICA) subsystem. The issue arises from an unhandled execution path that results in a NULL pointer being dereferenced. The affected versions include Linux kernel versions prior to the fix introduced in commit [1]. Specific version ranges are not publicly detailed.
Exploitation
Exploitation requires an attacker to trigger the specific ACPI control method or hardware event that reaches the missed execution path. This could be achieved through local access to the system, potentially via crafted ACPI tables or by interacting with ACPI-defined hardware interfaces. User interaction or specific system configuration may be necessary.
Impact
Successful exploitation leads to a kernel NULL pointer dereference, which typically results in a system crash (denial of service). In some configurations, it might be leveraged for code execution, though the public disclosure does not confirm this.
Mitigation
The vulnerability is fixed in the Linux stable kernel tree via commit [1]. Users should apply the patch or update to a kernel version containing this commit. No workaround is available if the patch cannot be applied.
AI Insight generated on May 27, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
1Patches
12cce354524da4ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index cf53b9535f18e0..7788c27ccf4610 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
b24595b86920ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index fa3475da7ea9b6..b6198f73c81dfa 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
56024dbe8c76ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index fa3475da7ea9b6..b6198f73c81dfa 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
f2cf475d23b8ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index cf53b9535f18e0..7788c27ccf4610 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
7d99cbe717c1ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index b96b3a7e78e50a..fd6471e764f1a1 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -162,7 +162,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
f851e03bce96ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index fa3475da7ea9b6..b6198f73c81dfa 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
cce354524da4ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index cf53b9535f18e0..7788c27ccf4610 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
f851e03bce96ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index fa3475da7ea9b6..b6198f73c81dfa 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
56024dbe8c76ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index fa3475da7ea9b6..b6198f73c81dfa 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
7d99cbe717c1ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index b96b3a7e78e50a..fd6471e764f1a1 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -162,7 +162,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
f2cf475d23b8ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index cf53b9535f18e0..7788c27ccf4610 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
b24595b86920ACPICA: Fix NULL pointer dereference in acpi_ev_address_space_dispatch()
1 file changed · +3 −2
drivers/acpi/acpica/evregion.c+3 −2 modifieddiff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index fa3475da7ea9b6..b6198f73c81dfa 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c @@ -163,7 +163,9 @@ acpi_ev_address_space_dispatch(union acpi_operand_object *region_obj, return_ACPI_STATUS(AE_NOT_EXIST); } - if (region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM) { + if (field_obj + && region_obj->region.space_id == + ACPI_ADR_SPACE_PLATFORM_COMM) { struct acpi_pcc_info *ctx = handler_desc->address_space.context; -- cgit 1.3-korg
Vulnerability mechanics
Root cause
"Missing NULL pointer check on field_obj before dereferencing it in the PCC Opregion code path of acpi_ev_address_space_dispatch()."
Attack vector
An attacker who can trigger ACPI address space dispatch for a PCC Opregion without a valid `field_obj` can cause a NULL pointer dereference. The function `acpi_ev_address_space_dispatch()` previously checked `region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM` without verifying that `field_obj` is non-NULL, leading to a crash when `field_obj` is NULL. This can be triggered locally by crafting ACPI tables or AML that invoke dispatch on a PCC region without a corresponding field object.
Affected code
The vulnerability resides in `drivers/acpi/acpica/evregion.c` in the function `acpi_ev_address_space_dispatch()`. The code path that checks for `ACPI_ADR_SPACE_PLATFORM_COMM` (PCC Opregion) was missing a NULL check on `field_obj` before dereferencing it.
What the fix does
The patch adds a `field_obj` NULL check to the condition guarding the PCC Opregion special context handling. Before the fix, the code unconditionally checked `region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM` and then dereferenced `handler_desc->address_space.context` without ensuring `field_obj` was valid. The fix changes the condition to `if (field_obj && region_obj->region.space_id == ACPI_ADR_SPACE_PLATFORM_COMM)`, preventing the NULL pointer dereference on the missed execution path. This addresses the issue introduced by commit 0acf24ad7e10 ("ACPICA: Add support for PCC Opregion special context data") [patch_id=2660738].
Preconditions
- configThe system must have ACPI support enabled and the kernel must process PCC Opregion address space dispatch.
- inputAn attacker must be able to supply or trigger ACPI tables/AML that cause acpi_ev_address_space_dispatch() to be called for a PCC region with field_obj == NULL.
Generated on May 27, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
6- git.kernel.org/stable/c/56024dbe8c76cff22f53ba81a95d9efd4d0c9c44nvd
- git.kernel.org/stable/c/7d99cbe717c1b15a66559215df32312d8cf7e525nvd
- git.kernel.org/stable/c/b24595b86920911d2b04f862422b896a0620e9adnvd
- git.kernel.org/stable/c/cce354524da4d10fd2c7eb835e2e4e8ab8c0ce97nvd
- git.kernel.org/stable/c/f2cf475d23b8486dfa414f7ac09f918ffd3c32a5nvd
- git.kernel.org/stable/c/f851e03bce968ff9b3faad1b616062e1244fd38dnvd
News mentions
0No linked articles in our index yet.