[PATCH v2] Fix free bitmap_buffer_cyclic error

Arthur Zou zzou at redhat.com
Mon Apr 28 01:48:19 PDT 2014


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
at the end of write_kdump_pages_and_bitmap_cyclic(), so there is no
need to free it again at the end of main.

Signed-off-by: Arthur Zou <zzou at redhat.com>
---
 makedumpfile.c | 27 +++++++++++++++++++--------
 1 file changed, 19 insertions(+), 8 deletions(-)

diff --git a/makedumpfile.c b/makedumpfile.c
index 0b31932..5ca0021 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -5130,6 +5130,22 @@ 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;
+	}
+}
+
 int
 create_dump_bitmap(void)
 {
@@ -5147,8 +5163,7 @@ create_dump_bitmap(void)
 				goto out;
 
 			info->num_dumpable = get_num_dumpable_cyclic();
-
-			free_bitmap2_buffer();
+			free_bitmap2_buffer_cyclic();
 		}
 
 	} else {
@@ -6947,7 +6962,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 +6985,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 +9364,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.4.2




More information about the kexec mailing list