[PATCH] boot: fix memory leaks by freeing token.val in pxe_utils.c

ant.v.moryakov at gmail.com ant.v.moryakov at gmail.com
Fri May 16 18:05:42 CEST 2025


From: Anton Moryakov <ant.v.moryakov at gmail.com>

 Added free(t.val) for T_STRING case
- Added free(t.val) in T_EOL and T_EOF cases
- Added free(t.val) in default case
- Added free(t.val) on error conditions
- Prevents memory leaks from get_token() allocations

Signed-off-by: Anton Moryakov <ant.v.moryakov at gmail.com>

---
 boot/pxe_utils.c | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)

diff --git a/boot/pxe_utils.c b/boot/pxe_utils.c
index 82f217aaf86..81b7602387b 100644
--- a/boot/pxe_utils.c
+++ b/boot/pxe_utils.c
@@ -1277,6 +1277,11 @@ static int parse_label(char **c, struct pxe_menu *cfg)
 			break;
 
 		case T_EOL:
+			free(t.val);	
+			break;
+
+		case T_STRING:
+			free(t.val);	
 			break;
 
 		default:
@@ -1285,12 +1290,15 @@ static int parse_label(char **c, struct pxe_menu *cfg)
 			 * of a label and whatever token this is, it's
 			 * something for the menu level context to handle.
 			 */
+			free(t.val);
 			*c = s;
 			return 1;
 		}
 
-		if (err < 0)
+		if (err < 0) {
+			free(t.val);
 			return err;
+		}
 	}
 }
 
@@ -1383,19 +1391,28 @@ static int parse_pxefile_top(struct pxe_context *ctx, char *p, unsigned long bas
 			break;
 
 		case T_EOL:
+			free(t.val);
 			break;
 
 		case T_EOF:
+			free(t.val);
 			return 1;
+		
+		case T_STRING:
+            free(t.val);
+            break;
 
 		default:
 			printf("Ignoring unknown command: %.*s\n",
 			       (int)(p - s), s);
+			free(t.val);
 			eol_or_eof(&p);
 		}
 
-		if (err < 0)
+		if (err < 0) {
+			free(t.val);
 			return err;
+		}
 	}
 }
 
-- 
2.30.2



More information about the U-Boot mailing list