diff options
| author | Lv Zheng <lv.zheng@intel.com> | 2013-10-30 21:30:36 -0400 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2013-10-31 09:37:33 -0400 |
| commit | 130797a6c3f1421c10880a1681d6a9c57b80ef17 (patch) | |
| tree | 707e88e530660a340963b5482b4584324426b81e /drivers/acpi/acpica/utobject.c | |
| parent | 9187a415fd119c1d89a5ad2fd05513cd43699ebf (diff) | |
ACPICA: Fix wrong object length returned by acpi_ut_get_simple_object_size().
The object length returned by acpi_ut_get_simple_object_size() should
be rounded up to the closest word boundary.
This patch ports a fix from ACPICA upstream to Linux.
[rjw: Changelog]
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/utobject.c')
| -rw-r--r-- | drivers/acpi/acpica/utobject.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/acpi/acpica/utobject.c b/drivers/acpi/acpica/utobject.c index aa61f66ee861..cddb0ef5b9b7 100644 --- a/drivers/acpi/acpica/utobject.c +++ b/drivers/acpi/acpica/utobject.c | |||
| @@ -461,25 +461,28 @@ acpi_ut_get_simple_object_size(union acpi_operand_object *internal_object, | |||
| 461 | 461 | ||
| 462 | ACPI_FUNCTION_TRACE_PTR(ut_get_simple_object_size, internal_object); | 462 | ACPI_FUNCTION_TRACE_PTR(ut_get_simple_object_size, internal_object); |
| 463 | 463 | ||
| 464 | /* Start with the length of the (external) Acpi object */ | ||
| 465 | |||
| 466 | length = sizeof(union acpi_object); | ||
| 467 | |||
| 468 | /* A NULL object is allowed, can be a legal uninitialized package element */ | ||
| 469 | |||
| 470 | if (!internal_object) { | ||
| 464 | /* | 471 | /* |
| 465 | * Handle a null object (Could be a uninitialized package | 472 | * Object is NULL, just return the length of union acpi_object |
| 466 | * element -- which is legal) | 473 | * (A NULL union acpi_object is an object of all zeroes.) |
| 467 | */ | 474 | */ |
| 468 | if (!internal_object) { | 475 | *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length); |
| 469 | *obj_length = sizeof(union acpi_object); | ||
| 470 | return_ACPI_STATUS(AE_OK); | 476 | return_ACPI_STATUS(AE_OK); |
| 471 | } | 477 | } |
| 472 | 478 | ||
| 473 | /* Start with the length of the Acpi object */ | 479 | /* A Namespace Node should never appear here */ |
| 474 | |||
| 475 | length = sizeof(union acpi_object); | ||
| 476 | 480 | ||
| 477 | if (ACPI_GET_DESCRIPTOR_TYPE(internal_object) == ACPI_DESC_TYPE_NAMED) { | 481 | if (ACPI_GET_DESCRIPTOR_TYPE(internal_object) == ACPI_DESC_TYPE_NAMED) { |
| 478 | 482 | ||
| 479 | /* Object is a named object (reference), just return the length */ | 483 | /* A namespace node should never get here */ |
| 480 | 484 | ||
| 481 | *obj_length = ACPI_ROUND_UP_TO_NATIVE_WORD(length); | 485 | return_ACPI_STATUS(AE_AML_INTERNAL); |
| 482 | return_ACPI_STATUS(status); | ||
| 483 | } | 486 | } |
| 484 | 487 | ||
| 485 | /* | 488 | /* |
