aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/utobject.c
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2013-10-30 21:30:36 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-10-31 09:37:33 -0400
commit130797a6c3f1421c10880a1681d6a9c57b80ef17 (patch)
tree707e88e530660a340963b5482b4584324426b81e /drivers/acpi/acpica/utobject.c
parent9187a415fd119c1d89a5ad2fd05513cd43699ebf (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.c23
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 /*