grub2/0419-grub-core-normal-main.c-Fix-freed-memory-dereference.patch
2013-06-07 14:03:56 -04:00

68 lines
1.8 KiB
Diff

From c62405b0f7b966a7efb3642b3db14469d9b82ba8 Mon Sep 17 00:00:00 2001
From: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Date: Sat, 4 May 2013 13:50:16 +0200
Subject: [PATCH 419/471] * grub-core/normal/main.c: Fix freed memory
dereference.
---
ChangeLog | 4 ++++
grub-core/normal/main.c | 13 ++++++++++---
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 47f06fd..16456f0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2013-05-04 Vladimir Serbinenko <phcoder@gmail.com>
+ * grub-core/normal/main.c: Fix freed memory dereference.
+
+2013-05-04 Vladimir Serbinenko <phcoder@gmail.com>
+
Fix several memory leaks.
2013-05-04 Vladimir Serbinenko <phcoder@gmail.com>
diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c
index f7a815f..ffc2cd2 100644
--- a/grub-core/normal/main.c
+++ b/grub-core/normal/main.c
@@ -163,8 +163,9 @@ static grub_menu_t
read_config_file (const char *config)
{
grub_file_t file;
- const char *old_file, *old_dir;
+ char *old_file = 0, *old_dir = 0;
char *config_dir, *ptr = 0;
+ const char *ctmp;
grub_menu_t newmenu;
@@ -183,8 +184,12 @@ read_config_file (const char *config)
if (! file)
return 0;
- old_file = grub_env_get ("config_file");
- old_dir = grub_env_get ("config_directory");
+ ctmp = grub_env_get ("config_file");
+ if (ctmp)
+ old_file = grub_strdup (ctmp);
+ ctmp = grub_env_get ("config_directory");
+ if (ctmp)
+ old_dir = grub_strdup (ctmp);
grub_env_set ("config_file", config);
config_dir = grub_strdup (config);
if (config_dir)
@@ -220,6 +225,8 @@ read_config_file (const char *config)
grub_env_set ("config_directory", old_dir);
else
grub_env_unset ("config_directory");
+ grub_free (old_file);
+ grub_free (old_dir);
grub_file_close (file);
--
1.8.2.1