aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2024-03-29 11:37:12 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2024-03-29 11:37:12 -0700
commitab317b32cf5b68b1d49110ebef838d112370e55f (patch)
treebd742aa92fb888794f86e1a9417c41b19cd1e500
parent1096bc93df75577d34db66e8b88ae6d0d1e72b1d (diff)
parent6af71633b04036a12d165d03ce6f21145ec5a555 (diff)
downloadwq-ab317b32cf5b68b1d49110ebef838d112370e55f.tar.gz
Merge tag 'acpi-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI fixes from Rafael Wysocki: "These fix two issues that may lead to attempts to use memory that has been freed already. Specifics: - Drop __exit annotation from einj_remove() in the ACPI APEI code because this function can be called during runtime (Arnd Bergmann) - Make acpi_db_walk_for_fields() check acpi_evaluate_object() return value to avoid accessing memory that has been freed (Nikita Kiryushin)" * tag 'acpi-6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPICA: debugger: check status of acpi_evaluate_object() in acpi_db_walk_for_fields() ACPI: APEI: EINJ: mark remove callback as non-__exit
-rw-r--r--drivers/acpi/acpica/dbnames.c8
-rw-r--r--drivers/acpi/apei/einj-core.c2
2 files changed, 7 insertions, 3 deletions
diff --git a/drivers/acpi/acpica/dbnames.c b/drivers/acpi/acpica/dbnames.c
index b91155ea9c343c..c9131259f717b0 100644
--- a/drivers/acpi/acpica/dbnames.c
+++ b/drivers/acpi/acpica/dbnames.c
@@ -550,8 +550,12 @@ acpi_db_walk_for_fields(acpi_handle obj_handle,
ACPI_FREE(buffer.pointer);
buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER;
- acpi_evaluate_object(obj_handle, NULL, NULL, &buffer);
-
+ status = acpi_evaluate_object(obj_handle, NULL, NULL, &buffer);
+ if (ACPI_FAILURE(status)) {
+ acpi_os_printf("Could Not evaluate object %p\n",
+ obj_handle);
+ return (AE_OK);
+ }
/*
* Since this is a field unit, surround the output in braces
*/
diff --git a/drivers/acpi/apei/einj-core.c b/drivers/acpi/apei/einj-core.c
index 66e7f529e92fc2..01faca3a238a3a 100644
--- a/drivers/acpi/apei/einj-core.c
+++ b/drivers/acpi/apei/einj-core.c
@@ -851,7 +851,7 @@ err_put_table:
return rc;
}
-static void __exit einj_remove(struct platform_device *pdev)
+static void einj_remove(struct platform_device *pdev)
{
struct apei_exec_context ctx;