[2/2] ACPI / ACPICA: Fix potential memory leak in acpi_evaluate_object()

Message ID 1390580407-14525-2-git-send-email-hanjun.guo@linaro.org
State New
Headers show

Commit Message

Hanjun Guo Jan. 24, 2014, 4:20 p.m.
There is a potential memory leak when acpi_ut_copy_iobject_to_eobject()
failed, because return_buffer was allocated in acpi_ut_initialize_buffer()
when buffer type is ACPI_ALLOCATE_BUFFER or ACPI_ALLOCATE_LOCAL_BUFFER,
and will not be freed outside when the return value is not AE_OK for
acpi_evaluate_object(), fix it.

Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
Signed-off-by: Yijing Wang <wangyijing@huawei.com>
---
 drivers/acpi/acpica/nsxfeval.c |    5 +++++
 1 file changed, 5 insertions(+)

Patch

diff --git a/drivers/acpi/acpica/nsxfeval.c b/drivers/acpi/acpica/nsxfeval.c
index a1b0b88..8ad792b 100644
--- a/drivers/acpi/acpica/nsxfeval.c
+++ b/drivers/acpi/acpica/nsxfeval.c
@@ -424,6 +424,11 @@  acpi_evaluate_object(acpi_handle handle,
 
 			status = acpi_ut_copy_iobject_to_eobject(
 					info->return_object, return_buffer);
+			if (ACPI_FAILURE(status) &&
+				(buffer_space_needed == ACPI_ALLOCATE_BUFFER ||
+				buffer_space_needed == ACPI_ALLOCATE_LOCAL_BUFFER)) {
+				ACPI_FREE(return_buffer);
+			}
 		}
 	}