aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/parser/psparse.c
diff options
context:
space:
mode:
authorLin Ming <ming.m.lin@intel.com>2008-11-12 01:56:59 -0500
committerLen Brown <len.brown@intel.com>2008-12-29 22:38:36 -0500
commit84d4db7c528e23f8c9ae0be12960549347003eeb (patch)
tree8ad549c186b40b85a59565974d6c2cac0cd78a31 /drivers/acpi/parser/psparse.c
parentd85988fa0205b18459071e4bd709e48e695b952d (diff)
ACPICA: Fix possible memory leak on error in parser
Fixes a possible memory leak if an allocation failure happens in the parse loop. Must terminate an executing control method. Lin Ming, Bob Moore. ACPICA BZ 489. http://www.acpica.org/bugzilla/show_bug.cgi?id=489 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/parser/psparse.c')
-rw-r--r--drivers/acpi/parser/psparse.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/acpi/parser/psparse.c b/drivers/acpi/parser/psparse.c
index 68e932f215ea..dfd3d9028018 100644
--- a/drivers/acpi/parser/psparse.c
+++ b/drivers/acpi/parser/psparse.c
@@ -451,6 +451,14 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state)
451 451
452 thread = acpi_ut_create_thread_state(); 452 thread = acpi_ut_create_thread_state();
453 if (!thread) { 453 if (!thread) {
454 if (walk_state->method_desc) {
455
456 /* Executing a control method - additional cleanup */
457
458 acpi_ds_terminate_control_method(
459 walk_state->method_desc, walk_state);
460 }
461
454 acpi_ds_delete_walk_state(walk_state); 462 acpi_ds_delete_walk_state(walk_state);
455 return_ACPI_STATUS(AE_NO_MEMORY); 463 return_ACPI_STATUS(AE_NO_MEMORY);
456 } 464 }