Skip to content

Commit

Permalink
ACPICA: Fixes for parameter validation.
Browse files Browse the repository at this point in the history
Extra checks for valid handle/path combinations, BZ 478

Signed-off-by: Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
Bob Moore authored and Len Brown committed Feb 3, 2007
1 parent c101462 commit f1c2b1d
Showing 1 changed file with 24 additions and 21 deletions.
45 changes: 24 additions & 21 deletions drivers/acpi/namespace/nsxfname.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,38 +84,41 @@ acpi_get_handle(acpi_handle parent,
/* Convert a parent handle to a prefix node */

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);
if (!prefix_node) {
(void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE);
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);
if (ACPI_FAILURE(status)) {
return (status);
/* Pathname is fully qualified (starts with '\') */

/* 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) {
*ret_handle =
acpi_ns_convert_entry_to_handle(acpi_gbl_root_node);
return (AE_OK);
return (AE_BAD_PARAMETER);
}

/*
* Find the Node and convert to a handle
*/
status = acpi_ns_get_node(prefix_node, pathname, ACPI_NS_NO_UPSEARCH,
&node);
/* Find the Node and convert to a handle */

*ret_handle = NULL;
status =
acpi_ns_get_node(prefix_node, pathname, ACPI_NS_NO_UPSEARCH, &node);
if (ACPI_SUCCESS(status)) {
*ret_handle = acpi_ns_convert_entry_to_handle(node);
}
Expand Down

0 comments on commit f1c2b1d

Please sign in to comment.