[PATCH v2] Fix free bitmap_buffer_cyclic error

Atsushi Kumagai kumagai-atsushi at mxc.nes.nec.co.jp
Wed May 7 00:39:06 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.

It seems that I didn't make myself clear, sorry.

partial_bitmap(1|2) will not be freed in the case of ELF format,
so you should call free_bitmap(1|2)_buffer_cyclic() in
write_elf_pages_cyclic() as well.


Thanks
Atsushi Kumagai

>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