kexec-tools/kexec-tools-2.0.4-makedumpfile-Fix-free-bitmap_buffer_cyclic-error.patch

112 lines
2.8 KiB
Diff
Raw Normal View History

From 0e7b1a6e3c1919c9222b662d458637ddf802dd04 Mon Sep 17 00:00:00 2001
From: Arthur Zou <zzou@redhat.com>
Date: Wed, 7 May 2014 17:54:16 +0900
Subject: [PATCH] [PATCH v3] Fix free bitmap_buffer_cyclic error.
Description:
In create_dump_bitmap() and write_kdump_pages_and_bitmap_cyclic(),
What should be freed is info->partial_bitmap instead of info->bitmap.
Solution:
Add two functions to free the bitmap_buffer_cyclic. info->partial_bitmap1
is freed by free_bitmap1_buffer_cyclic(). info->partial_bitmap2 is
freed by free_bitmap2_buffer_cyclic(). At the same time, remove
thoes frees that free partial_bitmap1 or partial_bitmap2 at the end
of main() because partial_bitmap1 and partial_bitmap2 has been freed
after dump file has been written out, so there is no need to free it
again at the end of main.
Signed-off-by: Arthur Zou <zzou@redhat.com>
Signed-off-by: Baoquan He <bhe@redhat.com>
---
makedumpfile.c | 38 ++++++++++++++++++++++++++++++--------
1 file changed, 30 insertions(+), 8 deletions(-)
diff --git a/makedumpfile.c b/makedumpfile.c
index 16081a5..ef8a750 100644
--- a/makedumpfile-1.5.6/makedumpfile.c
+++ b/makedumpfile-1.5.6/makedumpfile.c
@@ -5130,6 +5130,31 @@ free_bitmap_buffer(void)
free_bitmap2_buffer();
}
+void
+free_bitmap1_buffer_cyclic()
+{
+ if (info->partial_bitmap1 != NULL){
+ free(info->partial_bitmap1);
+ info->partial_bitmap1 = NULL;
+ }
+}
+
+void
+free_bitmap2_buffer_cyclic()
+{
+ if (info->partial_bitmap2 != NULL){
+ free(info->partial_bitmap2);
+ info->partial_bitmap2 = NULL;
+ }
+}
+
+void
+free_bitmap_buffer_cyclic()
+{
+ free_bitmap1_buffer_cyclic();
+ free_bitmap2_buffer_cyclic();
+}
+
int
create_dump_bitmap(void)
{
@@ -5147,8 +5172,7 @@ create_dump_bitmap(void)
goto out;
info->num_dumpable = get_num_dumpable_cyclic();
-
- free_bitmap2_buffer();
+ free_bitmap2_buffer_cyclic();
}
} else {
@@ -6190,6 +6214,8 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)
if (!write_cache_bufsz(cd_page))
return FALSE;
+ free_bitmap_buffer_cyclic();
+
/*
* print [100 %]
*/
@@ -6947,7 +6973,7 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data *cd_header, struct cache_d
}
- free_bitmap1_buffer();
+ free_bitmap1_buffer_cyclic();
if (!prepare_bitmap2_buffer_cyclic())
return FALSE;
@@ -6970,7 +6996,7 @@ write_kdump_pages_and_bitmap_cyclic(struct cache_data *cd_header, struct cache_d
return FALSE;
}
-
+ free_bitmap2_buffer_cyclic();
gettimeofday(&tv_start, NULL);
@@ -9349,10 +9375,6 @@ out:
free(info->splitting_info);
if (info->p2m_mfn_frame_list != NULL)
free(info->p2m_mfn_frame_list);
- if (info->partial_bitmap1 != NULL)
- free(info->partial_bitmap1);
- if (info->partial_bitmap2 != NULL)
- free(info->partial_bitmap2);
free(info);
}
free_elf_info();
--
1.8.5.3