diff options
| author | Lin Ming <ming.m.lin@intel.com> | 2008-11-12 01:56:59 -0500 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2008-12-29 22:38:36 -0500 |
| commit | 84d4db7c528e23f8c9ae0be12960549347003eeb (patch) | |
| tree | 8ad549c186b40b85a59565974d6c2cac0cd78a31 /drivers/acpi/parser | |
| parent | d85988fa0205b18459071e4bd709e48e695b952d (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')
| -rw-r--r-- | drivers/acpi/parser/psparse.c | 8 |
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 | } |
