Hi Jiri, sorry for the long delay. On 2024/06/19 21:04, Jiri Bohac wrote: > makedumpfile: make reserve_diskspace do nothing for flattened format > > reserve_diskspace() is called by write_elf_header() to make sure there is > always space to write the program header, even if writing other data fails > because of ENOSPC. > > This is harmful when writing the flattened format to STDOUT for two reasons: > > First, it actually wastes disk space, because first the block of zeroes is sent > to STDOUT by reserve_diskspace() and then the actual program header is sent, > meant to overwrite the zeroes when the flattened format is rearranged. > > Second, the algorithm used to read flattened format directly by the crash > program does not cope with the flattened file containing two chunks meant for > the same offset. It uses a binary search on a sorted array of flat_data headers > to find the data in the flat file. It may return the zeroed chunk written by > reserve_diskspace() near the beginning of the file instead of the actual ELF > header located near the end of the flattened file. Thank you for the patch, I found a vmcore that reproduced the issue: $ makedumpfile -FEd 31 vmcore > dump.FEd31 $ crash vmlinux dump.FEd31 ... realloc: No such file or directory cannot realloc resized ELF header buffer $ and the patch fixed this, so Acked-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx> (Masa will apply the patch, please wait for a while.) Thanks, Kazu > > Fixes: e39216fce9f73759509ec158e39c289e6c211125 ("Make the incomplete dumpfile generated by ENOSPC error analyzable.") > Signed-off-by: Jiri Bohac <jbohac@xxxxxxx> > > --- > makedumpfile.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/makedumpfile.c b/makedumpfile.c > index cadc596..9624c3f 100644 > --- a/makedumpfile.c > +++ b/makedumpfile.c > @@ -5206,6 +5206,9 @@ reserve_diskspace(int fd, off_t start_offset, off_t end_offset, char *file_name) > > int ret = FALSE; > > + if (info->flag_flatten) > + return TRUE; > + > assert(start_offset < end_offset); > buf_size = end_offset - start_offset; > _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec