forked from Minki/linux
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=814 Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
2263576cfc
commit
419a909dd1
@ -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
|
||||
* 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 */
|
||||
|
||||
@ -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_elements;
|
||||
acpi_status status;
|
||||
u8 non_trailing_null = FALSE;
|
||||
u32 expected_count;
|
||||
u32 i;
|
||||
u32 j;
|
||||
@ -680,6 +682,45 @@ acpi_ns_check_package_list(struct acpi_predefined_data *data,
|
||||
/* Validate each sub-Package in the parent Package */
|
||||
|
||||
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_elements = sub_package->package.elements;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user