diff options
author | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-08-22 16:44:13 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2017-08-22 16:44:13 -0400 |
commit | 9b40eebcd339c47921ff8b04c77af7c762b74216 (patch) | |
tree | d9c83e571554f5524794343286144cf99e157e30 | |
parent | 14ccee78fc82f5512908f4424f541549a5705b89 (diff) |
ACPICA: Fix acpi_evaluate_object_typed()
Commit 2d2a954375a0 (ACPICA: Update two error messages to emit
control method name) causes acpi_evaluate_object_typed() to fail
if its pathname argument is NULL, but some callers of that function
in the kernel, particularly acpi_nondev_subnode_data_ok(), pass
NULL as pathname to it and expect it to work.
For this reason, make acpi_evaluate_object_typed() check if its
pathname argument is NULL and fall back to using the pathname of
its handle argument if that is the case.
Reported-by: Sakari Ailus <sakari.ailus@intel.com>
Tested-by: Yang, Hyungwoo <hyungwoo.yang@intel.com>
Fixes: 2d2a954375a0 (ACPICA: Update two error messages to emit control method name)
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r-- | drivers/acpi/acpica/nsxfeval.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/acpi/acpica/nsxfeval.c b/drivers/acpi/acpica/nsxfeval.c index 538c61677c10..783f4c838aee 100644 --- a/drivers/acpi/acpica/nsxfeval.c +++ b/drivers/acpi/acpica/nsxfeval.c | |||
@@ -100,9 +100,13 @@ acpi_evaluate_object_typed(acpi_handle handle, | |||
100 | free_buffer_on_error = TRUE; | 100 | free_buffer_on_error = TRUE; |
101 | } | 101 | } |
102 | 102 | ||
103 | status = acpi_get_handle(handle, pathname, &target_handle); | 103 | if (pathname) { |
104 | if (ACPI_FAILURE(status)) { | 104 | status = acpi_get_handle(handle, pathname, &target_handle); |
105 | return_ACPI_STATUS(status); | 105 | if (ACPI_FAILURE(status)) { |
106 | return_ACPI_STATUS(status); | ||
107 | } | ||
108 | } else { | ||
109 | target_handle = handle; | ||
106 | } | 110 | } |
107 | 111 | ||
108 | full_pathname = acpi_ns_get_external_pathname(target_handle); | 112 | full_pathname = acpi_ns_get_external_pathname(target_handle); |