[Skiboot] [PATCH] OCC: Fix possible memory leak in error path

Vasant Hegde hegdevasant at linux.vnet.ibm.com
Sun Mar 8 20:46:42 AEDT 2015


free fsp_msg if fsp_queue_msg fails.

Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
---
 hw/occ.c |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/hw/occ.c b/hw/occ.c
index 657f2ad..b523a42 100644
--- a/hw/occ.c
+++ b/hw/occ.c
@@ -409,6 +409,7 @@ static void __occ_do_load(u8 scope, u32 dbob_id __unused, u32 seq_id)
 	if (rc) {
 		log_simple_error(&e_info(OPAL_RC_OCC_LOAD),
 			"OCC: Error %d queueing FSP OCC LOAD STATUS msg", rc);
+		free(stat);
 	}
 }
 
@@ -446,6 +447,7 @@ static void occ_do_load(u8 scope, u32 dbob_id __unused, u32 seq_id)
 	if (rc) {
 		log_simple_error(&e_info(OPAL_RC_OCC_LOAD),
 			"OCC: Error %d queueing FSP OCC LOAD reply\n", rc);
+		free(rsp);
 		return;
 	}
 
@@ -481,6 +483,7 @@ static void occ_do_reset(u8 scope, u32 dbob_id, u32 seq_id)
 	if (rsp)
 		rc = fsp_queue_msg(rsp, fsp_freemsg);
 	if (rc) {
+		free(rsp);
 		log_simple_error(&e_info(OPAL_RC_OCC_RESET),
 			"OCC: Error %d queueing FSP OCC RESET reply\n", rc);
 		return;
@@ -509,6 +512,7 @@ static void occ_do_reset(u8 scope, u32 dbob_id, u32 seq_id)
 		if (stat)
 			rc = fsp_queue_msg(stat, fsp_freemsg);
 		if (rc) {
+			free(stat);
 			log_simple_error(&e_info(OPAL_RC_OCC_RESET),
 				"OCC: Error %d queueing FSP OCC RESET"
 					" STATUS message\n", rc);
@@ -528,6 +532,7 @@ static void occ_do_reset(u8 scope, u32 dbob_id, u32 seq_id)
 			if (stat)
 				rc = fsp_queue_msg(stat, fsp_freemsg);
 			if (rc) {
+				free(stat);
 				log_simple_error(&e_info(OPAL_RC_OCC_RESET),
 					"OCC: Error %d queueing FSP OCC RESET"
 						" STATUS message\n", rc);



More information about the Skiboot mailing list