projects/linux·commit 46981fa7

ACPI: property: Fix error handling in acpi_init_properties()

46981fa7 · Sakari Ailus <[email protected]> · 2022-08-09 00:12:13 +03:00

buf.pointer, memory for storing _DSD data and nodes, was released if either
parsing properties or, as recently added, attaching data node tags failed.
Alas, properties were still left pointing to this memory if parsing
properties were successful but attaching data node tags failed.

Fix this by separating error handling for the two, and leaving properties
intact if data nodes cannot be tagged for a reason or another.

Reported-by: kernel test robot <[email protected]>
Fixes: 1d52f10917a7 ("ACPI: property: Tie data nodes to acpi handles")
Signed-off-by: Sakari Ailus <[email protected]>
[ rjw: Drop unrelated white space change ]
Signed-off-by: Rafael J. Wysocki <[email protected]>
Commit
46981fa78490e16589559cec8c762e5527d665d2
Parents
369af6bf

Changes

1 files changed · +4 −3

FileStatusAddDelContent
drivers/acpi/property.cmodified+4−3View file

drivers/acpi/property.c

View file
diff --git a/drivers/acpi/property.c b/drivers/acpi/property.c
index d26f630..f649ae9 100644
--- a/drivers/acpi/property.c
+++ b/drivers/acpi/property.c
@@ -566,11 +566,12 @@ void acpi_init_properties(struct acpi_device *adev)
&adev->data, acpi_fwnode_handle(adev)))
adev->data.pointer = buf.pointer;
- if (!adev->data.pointer ||
- !acpi_tie_nondev_subnodes(&adev->data)) {
- acpi_untie_nondev_subnodes(&adev->data);
+ if (!adev->data.pointer) {
acpi_handle_debug(adev->handle, "Invalid _DSD data, skipping\n");
ACPI_FREE(buf.pointer);
+ } else {
+ if (!acpi_tie_nondev_subnodes(&adev->data))
+ acpi_untie_nondev_subnodes(&adev->data);
}
out: