Commit f1c2b1da authored by Bob Moore's avatar Bob Moore Committed by Len Brown

ACPICA: Fixes for parameter validation.

Extra checks for valid handle/path combinations, BZ 478
Signed-off-by: default avatarAlexey Starikovskiy <alexey.y.starikovskiy@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent c1014629
...@@ -84,38 +84,41 @@ acpi_get_handle(acpi_handle parent, ...@@ -84,38 +84,41 @@ acpi_get_handle(acpi_handle parent,
/* Convert a parent handle to a prefix node */ /* Convert a parent handle to a prefix node */
if (parent) { if (parent) {
status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE);
if (ACPI_FAILURE(status)) {
return (status);
}
prefix_node = acpi_ns_map_handle_to_node(parent); prefix_node = acpi_ns_map_handle_to_node(parent);
if (!prefix_node) { if (!prefix_node) {
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
return (AE_BAD_PARAMETER); return (AE_BAD_PARAMETER);
} }
}
/*
* Valid cases are:
* 1) Fully qualified pathname
* 2) Parent + Relative pathname
*
* Error for <null Parent + relative path>
*/
if (acpi_ns_valid_root_prefix(pathname[0])) {
status = acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); /* Pathname is fully qualified (starts with '\') */
if (ACPI_FAILURE(status)) {
return (status); /* Special case for root-only, since we can't search for it */
if (!ACPI_STRCMP(pathname, ACPI_NS_ROOT_PATH)) {
*ret_handle =
acpi_ns_convert_entry_to_handle(acpi_gbl_root_node);
return (AE_OK);
} }
} } else if (!prefix_node) {
/* Special case for root, since we can't search for it */ /* Relative path with null prefix is disallowed */
if (ACPI_STRCMP(pathname, ACPI_NS_ROOT_PATH) == 0) { return (AE_BAD_PARAMETER);
*ret_handle =
acpi_ns_convert_entry_to_handle(acpi_gbl_root_node);
return (AE_OK);
} }
/* /* Find the Node and convert to a handle */
* Find the Node and convert to a handle
*/
status = acpi_ns_get_node(prefix_node, pathname, ACPI_NS_NO_UPSEARCH,
&node);
*ret_handle = NULL; status =
acpi_ns_get_node(prefix_node, pathname, ACPI_NS_NO_UPSEARCH, &node);
if (ACPI_SUCCESS(status)) { if (ACPI_SUCCESS(status)) {
*ret_handle = acpi_ns_convert_entry_to_handle(node); *ret_handle = acpi_ns_convert_entry_to_handle(node);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment