diff options
author | Lin Ming <ming.m.lin@intel.com> | 2008-09-26 23:29:57 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2008-10-22 23:14:47 -0400 |
commit | cf058bd1c84df9921ecc517d8a8a413f4d6b5b45 (patch) | |
tree | ca9cc1f367f96a13e60047c88a0e41f284274c71 /drivers/acpi/utilities/utdelete.c | |
parent | c35def2118d3d7cceb0f69d6707f613a7473df15 (diff) |
ACPICA: Fix possible memory leak, error exit path
Fixed two possible memory leaks in the error exit paths of
acpi_ut_update_objerct_reference() and
acpi_ut_walk_package_tree()
These functions are similar in that they use a stack of state objects in
order to eliminate recursion. The stack must be fully deallocated
if an error occurs.
http://www.acpica.org/bugzilla/show_bug.cgi?id=383
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/utilities/utdelete.c')
-rw-r--r-- | drivers/acpi/utilities/utdelete.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/acpi/utilities/utdelete.c b/drivers/acpi/utilities/utdelete.c index 5c219758c226..d197c6b29e17 100644 --- a/drivers/acpi/utilities/utdelete.c +++ b/drivers/acpi/utilities/utdelete.c | |||
@@ -585,6 +585,13 @@ acpi_ut_update_object_reference(union acpi_operand_object *object, u16 action) | |||
585 | ACPI_EXCEPTION((AE_INFO, status, | 585 | ACPI_EXCEPTION((AE_INFO, status, |
586 | "Could not update object reference count")); | 586 | "Could not update object reference count")); |
587 | 587 | ||
588 | /* Free any stacked Update State objects */ | ||
589 | |||
590 | while (state_list) { | ||
591 | state = acpi_ut_pop_generic_state(&state_list); | ||
592 | acpi_ut_delete_generic_state(state); | ||
593 | } | ||
594 | |||
588 | return_ACPI_STATUS(status); | 595 | return_ACPI_STATUS(status); |
589 | } | 596 | } |
590 | 597 | ||