[PATCH] acpi: madt: fix memory leak on return paths

Colin King colin.king at canonical.com
Fri Jul 29 15:47:15 UTC 2016


From: Colin Ian King <colin.king at canonical.com>

several error return paths are not freeing allocatd resources
leading to a memory leak. Fix this by free'ing the allocation
before returning.

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/acpi/madt/madt.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/acpi/madt/madt.c b/src/acpi/madt/madt.c
index 257d7d9..3505f62 100644
--- a/src/acpi/madt/madt.c
+++ b/src/acpi/madt/madt.c
@@ -265,23 +265,30 @@ static ACPI_STATUS madt_processor_handler(ACPI_HANDLE ObjHandle, uint32_t level,
 		return (!AE_OK);
 
 	status = AcpiGetType(ObjHandle, &acpi_type);
-	if (ACPI_FAILURE(status))
+	if (ACPI_FAILURE(status)) {
+		free(listint);
 		return (!AE_OK);
+	}
 
 	switch(acpi_type) {
 	case ACPI_TYPE_PROCESSOR:
 		status = AcpiEvaluateObject(ObjHandle, NULL, NULL, &pbuf);
-		if (ACPI_FAILURE(status))
+		if (ACPI_FAILURE(status)) {
+			free(listint);
 			return status;
+		}
 		listint->value = processor.proc_id;
 		break;
 	case ACPI_TYPE_DEVICE:
 		status = AcpiEvaluateObject(ObjHandle, "_UID", NULL, &ibuf);
-		if (ACPI_FAILURE(status))
+		if (ACPI_FAILURE(status)) {
+			free(listint);
 			return status;
+		}
 		listint->value = integer.value;
 		break;
 	default:
+		free(listint);
 		return (!AE_OK);
 	}
 	listint->type = acpi_type;
-- 
2.8.1




More information about the fwts-devel mailing list