Commit 419a909d authored by Bob Moore's avatar Bob Moore Committed by Len Brown

ACPICA: Fix possible fault if return Package objects contain NULL elements

For predefined name validation. Also adds a warning if a NULL
element is followed by any non-null elements.  ACPICA BZ 813, 814.

http://www.acpica.org/bugzilla/show_bug.cgi?id=813
http://www.acpica.org/bugzilla/show_bug.cgi?id=814Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarLin Ming <ming.m.lin@intel.com>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 2263576c
...@@ -601,7 +601,8 @@ acpi_ns_check_package(struct acpi_predefined_data *data, ...@@ -601,7 +601,8 @@ acpi_ns_check_package(struct acpi_predefined_data *data,
* there is only one entry). We may be able to repair this by * there is only one entry). We may be able to repair this by
* wrapping the returned Package with a new outer Package. * wrapping the returned Package with a new outer Package.
*/ */
if ((*elements)->common.type != ACPI_TYPE_PACKAGE) { if (*elements
&& ((*elements)->common.type != ACPI_TYPE_PACKAGE)) {
/* Create the new outer package and populate it */ /* Create the new outer package and populate it */
...@@ -673,6 +674,7 @@ acpi_ns_check_package_list(struct acpi_predefined_data *data, ...@@ -673,6 +674,7 @@ acpi_ns_check_package_list(struct acpi_predefined_data *data,
union acpi_operand_object *sub_package; union acpi_operand_object *sub_package;
union acpi_operand_object **sub_elements; union acpi_operand_object **sub_elements;
acpi_status status; acpi_status status;
u8 non_trailing_null = FALSE;
u32 expected_count; u32 expected_count;
u32 i; u32 i;
u32 j; u32 j;
...@@ -680,6 +682,45 @@ acpi_ns_check_package_list(struct acpi_predefined_data *data, ...@@ -680,6 +682,45 @@ acpi_ns_check_package_list(struct acpi_predefined_data *data,
/* Validate each sub-Package in the parent Package */ /* Validate each sub-Package in the parent Package */
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
/*
* Handling for NULL package elements. For now, we will simply allow
* a parent package with trailing NULL elements. This can happen if
* the package was defined to be longer than the initializer list.
* This is legal as per the ACPI specification. It is often used
* to allow for dynamic initialization of a Package.
*
* A future enhancement may be to simply truncate the package to
* remove the trailing NULL elements.
*/
if (!(*elements)) {
if (!non_trailing_null) {
/* Ensure the remaining elements are all NULL */
for (j = 1; j < (count - i + 1); j++) {
if (elements[j]) {
non_trailing_null = TRUE;
}
}
if (!non_trailing_null) {
/* Ignore the trailing NULL elements */
return (AE_OK);
}
}
/* There are trailing non-null elements, issue warning */
ACPI_WARN_PREDEFINED((AE_INFO, data->pathname,
data->node_flags,
"Found NULL element at package index %u",
i));
elements++;
continue;
}
sub_package = *elements; sub_package = *elements;
sub_elements = sub_package->package.elements; sub_elements = sub_package->package.elements;
......
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