From: Anton Moryakov <ant.v.morya...@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.morya...@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

Reply via email to