* [PATCH 0/3] makedumpfile: fix segfault with -X in XEN environment
@ 2016-08-10 12:56 Martin Wilck
2016-08-10 12:56 ` [PATCH 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck
` (2 more replies)
0 siblings, 3 replies; 24+ messages in thread
From: Martin Wilck @ 2016-08-10 12:56 UTC (permalink / raw)
To: ats-kumagai; +Cc: Martin Wilck, ptesarik, kexec
exclude_xen4_user_domain()i calls clear_bit_on_2nd_bitmap(pfn, NULL)
to exclude domU ranges. This resolves to
set_bitmap(info->bitmap2, pfn, 0, NULL)
-> set_bitmap_buffer(info->bitmap2, pfn, 0, NULL) (because bitmap2->fd == 0)
==> segfault, set_bitmap_buffer can't handle NULL as cycle pointer.
If non-cyclic approach is used (always under XEN AFAICS), makedumpfile needs a
bitmap fd to avoid this crash. But info->flag_cyclic can change after
open_dump_bitmap() is called.
This patch series fixes that by moving the call to open_dump_bitmap() after
the call to initial(). Tested successfully on both Linux and XEN, x86_64.
Also submitted to https://sourceforge.net/p/makedumpfile/patches/215/
Martin Wilck (3):
open_dump_bitmap: open bitmap file in non-cyclic case
move call to open_dump_bitmap() to after call to initial()
close_dump_bitmap: simplify logic
makedumpfile.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
--
2.9.2
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 24+ messages in thread* [PATCH 1/3] open_dump_bitmap: open bitmap file in non-cyclic case 2016-08-10 12:56 [PATCH 0/3] makedumpfile: fix segfault with -X in XEN environment Martin Wilck @ 2016-08-10 12:56 ` Martin Wilck 2016-08-10 12:56 ` [PATCH 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck 2016-08-10 12:56 ` [PATCH 3/3] close_dump_bitmap: simplify logic Martin Wilck 2 siblings, 0 replies; 24+ messages in thread From: Martin Wilck @ 2016-08-10 12:56 UTC (permalink / raw) To: ats-kumagai; +Cc: Martin Wilck, ptesarik, kexec The logic of set_bitmap() requires that a bitmap fd exists in the non-cyclic case. Signed-off-by: Martin Wilck <mwilck@suse.de> --- makedumpfile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makedumpfile.c b/makedumpfile.c index 853b999..9f05396 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1365,7 +1365,7 @@ open_dump_bitmap(void) /* Unnecessary to open */ if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering - && !info->flag_sadump && !info->flag_mem_usage) + && !info->flag_sadump && !info->flag_mem_usage && info->flag_cyclic) return TRUE; tmpname = getenv("TMPDIR"); -- 2.9.2 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 2/3] move call to open_dump_bitmap() to after call to initial() 2016-08-10 12:56 [PATCH 0/3] makedumpfile: fix segfault with -X in XEN environment Martin Wilck 2016-08-10 12:56 ` [PATCH 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck @ 2016-08-10 12:56 ` Martin Wilck 2016-08-10 12:56 ` [PATCH 3/3] close_dump_bitmap: simplify logic Martin Wilck 2 siblings, 0 replies; 24+ messages in thread From: Martin Wilck @ 2016-08-10 12:56 UTC (permalink / raw) To: ats-kumagai; +Cc: Martin Wilck, ptesarik, kexec When open_files_for_creating_dumpfile() is called, we don't have all necessary information to determine whether a bitmap file is actually needed. In particular, we don't know whether info->flag_cyclic will ultimately be set. This patch moves the call to open_dump_bitmap() to after initialize() when all flags are known. For the dump_dmesg() path, no bitmap file is needed. Signed-off-by: Martin Wilck <mwilck@suse.de> --- makedumpfile.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 9f05396..43278f1 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1480,9 +1480,6 @@ open_files_for_creating_dumpfile(void) if (!open_dump_memory()) return FALSE; - if (!open_dump_bitmap()) - return FALSE; - return TRUE; } @@ -9708,6 +9705,9 @@ create_dumpfile(void) if (!initial()) return FALSE; + if (!open_dump_bitmap()) + return FALSE; + /* create an array of translations from pfn to vmemmap pages */ if (info->flag_excludevm) { if (find_vmemmap() == FAILED) { @@ -10878,6 +10878,9 @@ int show_mem_usage(void) if (!initial()) return FALSE; + if (!open_dump_bitmap()) + return FALSE; + if (!prepare_bitmap_buffer()) return FALSE; -- 2.9.2 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH 3/3] close_dump_bitmap: simplify logic 2016-08-10 12:56 [PATCH 0/3] makedumpfile: fix segfault with -X in XEN environment Martin Wilck 2016-08-10 12:56 ` [PATCH 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 2016-08-10 12:56 ` [PATCH 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck @ 2016-08-10 12:56 ` Martin Wilck 2016-08-10 13:08 ` Petr Tesarik 2 siblings, 1 reply; 24+ messages in thread From: Martin Wilck @ 2016-08-10 12:56 UTC (permalink / raw) To: ats-kumagai; +Cc: Martin Wilck, ptesarik, kexec The boolean expression replicates the logic of open_dump_bitmap(). It's simpler and less error-prone to simply check if fd_bitmap is valid. Signed-off-by: Martin Wilck <mwilck@suse.de> --- makedumpfile.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 43278f1..771ab7c 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -8579,8 +8579,7 @@ close_dump_file(void) void close_dump_bitmap(void) { - if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering - && !info->flag_sadump && !info->flag_mem_usage) + if (!info->fd_bitmap) return; if ((info->fd_bitmap = close(info->fd_bitmap)) < 0) -- 2.9.2 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] close_dump_bitmap: simplify logic 2016-08-10 12:56 ` [PATCH 3/3] close_dump_bitmap: simplify logic Martin Wilck @ 2016-08-10 13:08 ` Petr Tesarik 2016-08-10 13:35 ` Martin Wilck 0 siblings, 1 reply; 24+ messages in thread From: Petr Tesarik @ 2016-08-10 13:08 UTC (permalink / raw) To: Martin Wilck; +Cc: ats-kumagai, kexec On Wed, 10 Aug 2016 14:56:58 +0200 Martin Wilck <mwilck@suse.de> wrote: > The boolean expression replicates the logic of open_dump_bitmap(). > It's simpler and less error-prone to simply check if fd_bitmap is > valid. > > Signed-off-by: Martin Wilck <mwilck@suse.de> > --- > makedumpfile.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/makedumpfile.c b/makedumpfile.c > index 43278f1..771ab7c 100644 > --- a/makedumpfile.c > +++ b/makedumpfile.c > @@ -8579,8 +8579,7 @@ close_dump_file(void) > void > close_dump_bitmap(void) > { > - if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering > - && !info->flag_sadump && !info->flag_mem_usage) > + if (!info->fd_bitmap) Strictly speaking, zero is a valid FD. I can see that it is highly unlikely to be the bitmap FD, but it would be a nice cleanup to initialize fd_bitmap to a negative number and check info->fd_bitmap < 0. I'm just not sure where to put the initializition... OTOH I know I'm asking you to fix something that you didn't break. Petr T _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] close_dump_bitmap: simplify logic 2016-08-10 13:08 ` Petr Tesarik @ 2016-08-10 13:35 ` Martin Wilck 2016-08-16 0:37 ` Atsushi Kumagai 0 siblings, 1 reply; 24+ messages in thread From: Martin Wilck @ 2016-08-10 13:35 UTC (permalink / raw) To: Petr Tesarik; +Cc: ats-kumagai, kexec On Wed, 2016-08-10 at 15:08 +0200, Petr Tesarik wrote: > On Wed, 10 Aug 2016 14:56:58 +0200 > Martin Wilck <mwilck@suse.de> wrote: > > > The boolean expression replicates the logic of open_dump_bitmap(). > > It's simpler and less error-prone to simply check if fd_bitmap is > > valid. > > > > Signed-off-by: Martin Wilck <mwilck@suse.de> > > --- > > makedumpfile.c | 3 +-- > > 1 file changed, 1 insertion(+), 2 deletions(-) > > > > diff --git a/makedumpfile.c b/makedumpfile.c > > index 43278f1..771ab7c 100644 > > --- a/makedumpfile.c > > +++ b/makedumpfile.c > > @@ -8579,8 +8579,7 @@ close_dump_file(void) > > void > > close_dump_bitmap(void) > > { > > - if (!info->working_dir && !info->flag_reassemble && !info- > > >flag_refiltering > > - && !info->flag_sadump && !info->flag_mem_usage) > > + if (!info->fd_bitmap) > > Strictly speaking, zero is a valid FD. I can see that it is highly > unlikely to be the bitmap FD, but it would be a nice cleanup to > initialize fd_bitmap to a negative number and check info->fd_bitmap < > 0. > I'm just not sure where to put the initializition... > > OTOH I know I'm asking you to fix something that you didn't break. I had the same thought, and the same excuse not to address it in this patch set. If you grep makedumpfile.c for "fd_bitmap", you'll see many checks like "if (info->fd_bitmap)". I just followed that pattern for now. Martin _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* RE: [PATCH 3/3] close_dump_bitmap: simplify logic 2016-08-10 13:35 ` Martin Wilck @ 2016-08-16 0:37 ` Atsushi Kumagai 2016-08-16 5:59 ` Petr Tesarik 0 siblings, 1 reply; 24+ messages in thread From: Atsushi Kumagai @ 2016-08-16 0:37 UTC (permalink / raw) To: Martin Wilck, Petr Tesarik; +Cc: kexec@lists.infradead.org >> > The boolean expression replicates the logic of open_dump_bitmap(). >> > It's simpler and less error-prone to simply check if fd_bitmap is >> > valid. >> > >> > Signed-off-by: Martin Wilck <mwilck@suse.de> >> > --- >> > makedumpfile.c | 3 +-- >> > 1 file changed, 1 insertion(+), 2 deletions(-) >> > >> > diff --git a/makedumpfile.c b/makedumpfile.c >> > index 43278f1..771ab7c 100644 >> > --- a/makedumpfile.c >> > +++ b/makedumpfile.c >> > @@ -8579,8 +8579,7 @@ close_dump_file(void) >> > void >> > close_dump_bitmap(void) >> > { >> > - if (!info->working_dir && !info->flag_reassemble && !info- >> > >flag_refiltering >> > - && !info->flag_sadump && !info->flag_mem_usage) >> > + if (!info->fd_bitmap) >> >> Strictly speaking, zero is a valid FD. I can see that it is highly >> unlikely to be the bitmap FD, but it would be a nice cleanup to >> initialize fd_bitmap to a negative number and check info->fd_bitmap < >> 0. >> I'm just not sure where to put the initializition... > > >> > OTOH I know I'm asking you to fix something that you didn't break. > >I had the same thought, and the same excuse not to address it in this >patch set. If you grep makedumpfile.c for "fd_bitmap", you'll see many >checks like "if (info->fd_bitmap)". I just followed that pattern for >now. I see, it would be better to make the checks strict on this occasion. So, could you work for that cleanup before your three patches as an additional cleanup patch ? Thanks, Atsushi Kumagai _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] close_dump_bitmap: simplify logic 2016-08-16 0:37 ` Atsushi Kumagai @ 2016-08-16 5:59 ` Petr Tesarik 2016-08-17 7:37 ` Martin Wilck 0 siblings, 1 reply; 24+ messages in thread From: Petr Tesarik @ 2016-08-16 5:59 UTC (permalink / raw) To: Atsushi Kumagai, Martin Wilck; +Cc: kexec@lists.infradead.org On Tue, 16 Aug 2016 00:37:09 +0000 Atsushi Kumagai <ats-kumagai@wm.jp.nec.com> wrote: > >> > The boolean expression replicates the logic of open_dump_bitmap(). > >> > It's simpler and less error-prone to simply check if fd_bitmap is > >> > valid. > >> > > >> > Signed-off-by: Martin Wilck <mwilck@suse.de> > >> > --- > >> > makedumpfile.c | 3 +-- > >> > 1 file changed, 1 insertion(+), 2 deletions(-) > >> > > >> > diff --git a/makedumpfile.c b/makedumpfile.c > >> > index 43278f1..771ab7c 100644 > >> > --- a/makedumpfile.c > >> > +++ b/makedumpfile.c > >> > @@ -8579,8 +8579,7 @@ close_dump_file(void) > >> > void > >> > close_dump_bitmap(void) > >> > { > >> > - if (!info->working_dir && !info->flag_reassemble && !info- > >> > >flag_refiltering > >> > - && !info->flag_sadump && !info->flag_mem_usage) > >> > + if (!info->fd_bitmap) > >> > >> Strictly speaking, zero is a valid FD. I can see that it is highly > >> unlikely to be the bitmap FD, but it would be a nice cleanup to > >> initialize fd_bitmap to a negative number and check info->fd_bitmap < > >> 0. > >> I'm just not sure where to put the initializition... > > > > > >> > OTOH I know I'm asking you to fix something that you didn't break. > > > >I had the same thought, and the same excuse not to address it in this > >patch set. If you grep makedumpfile.c for "fd_bitmap", you'll see many > >checks like "if (info->fd_bitmap)". I just followed that pattern for > >now. > > I see, it would be better to make the checks strict on this occasion. > So, could you work for that cleanup before your three patches as an > additional cleanup patch ? OK, I take it. ;-) Martin, do you mind rebasing your patch when I'm done with the cleanup? Petr T _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH 3/3] close_dump_bitmap: simplify logic 2016-08-16 5:59 ` Petr Tesarik @ 2016-08-17 7:37 ` Martin Wilck 2016-09-06 8:22 ` [PATCH] Cleanup: Use a negative number for uninitialized file descriptors Petr Tesarik 0 siblings, 1 reply; 24+ messages in thread From: Martin Wilck @ 2016-08-17 7:37 UTC (permalink / raw) To: Petr Tesarik, Atsushi Kumagai; +Cc: kexec@lists.infradead.org On Tue, 2016-08-16 at 07:59 +0200, Petr Tesarik wrote: > On Tue, 16 Aug 2016 00:37:09 +0000 > Atsushi Kumagai <ats-kumagai@wm.jp.nec.com> wrote: > > > So, could you work for that cleanup before your three patches as an > > additional cleanup patch ? > > OK, I take it. ;-) > > Martin, do you mind rebasing your patch when I'm done with the > cleanup? No problem. Regards Martin _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH] Cleanup: Use a negative number for uninitialized file descriptors 2016-08-17 7:37 ` Martin Wilck @ 2016-09-06 8:22 ` Petr Tesarik 2016-09-09 6:27 ` Atsushi Kumagai 0 siblings, 1 reply; 24+ messages in thread From: Petr Tesarik @ 2016-09-06 8:22 UTC (permalink / raw) To: Atsushi Kumagai; +Cc: Martin Wilck, kexec Do not use zero to denote an invalid file descriptor. First, zero is a valid value, although quite unlikely to be used for anything except standard input. Second, open(2) returns a negative value on failure, so there are already checks for a negative value in some places. The purpose of this patch is not to allow running in an evil environment (with closed stdin), but to aid in debugging by using a consistent value for uninitialized file descriptors which is also regarded as invalid by the kernel. For example, attempts to close a negative FD will fail (unlike an attempt to close FD 0). Signed-off-by: Petr Tesarik <ptesarik@suse.com> --- makedumpfile.c | 68 +++++++++++++++++++++++++++++++++------------------------- makedumpfile.h | 2 +- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 21784e8..d168dfd 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -3730,10 +3730,10 @@ free_for_parallel() return; for (i = 0; i < info->num_threads; i++) { - if (FD_MEMORY_PARALLEL(i) > 0) + if (FD_MEMORY_PARALLEL(i) >= 0) close(FD_MEMORY_PARALLEL(i)); - if (FD_BITMAP_MEMORY_PARALLEL(i) > 0) + if (FD_BITMAP_MEMORY_PARALLEL(i) >= 0) close(FD_BITMAP_MEMORY_PARALLEL(i)); } } @@ -4038,13 +4038,13 @@ out: void initialize_bitmap(struct dump_bitmap *bitmap) { - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { bitmap->fd = info->fd_bitmap; bitmap->file_name = info->name_bitmap; bitmap->no_block = -1; memset(bitmap->buf, 0, BUFSIZE_BITMAP); } else { - bitmap->fd = 0; + bitmap->fd = -1; bitmap->file_name = NULL; bitmap->no_block = -1; memset(bitmap->buf, 0, info->bufsize_cyclic); @@ -4154,7 +4154,7 @@ set_bitmap_buffer(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cyc int set_bitmap(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cycle *cycle) { - if (bitmap->fd) { + if (bitmap->fd >= 0) { return set_bitmap_file(bitmap, pfn, val); } else { return set_bitmap_buffer(bitmap, pfn, val, cycle); @@ -4170,7 +4170,7 @@ sync_bitmap(struct dump_bitmap *bitmap) /* * The bitmap doesn't have the fd, it's a on-memory bitmap. */ - if (bitmap->fd == 0) + if (bitmap->fd < 0) return TRUE; /* * The bitmap buffer is not dirty, and it is not necessary @@ -5403,7 +5403,7 @@ create_1st_bitmap_buffer(struct cycle *cycle) int create_1st_bitmap(struct cycle *cycle) { - if (info->bitmap1->fd) { + if (info->bitmap1->fd >= 0) { return create_1st_bitmap_file(); } else { return create_1st_bitmap_buffer(cycle); @@ -5414,7 +5414,7 @@ static inline int is_in_segs(unsigned long long paddr) { if (info->flag_refiltering || info->flag_sadump) { - if (info->bitmap1->fd == 0) { + if (info->bitmap1->fd < 0) { initialize_1st_bitmap(info->bitmap1); create_1st_bitmap_file(); } @@ -5872,7 +5872,7 @@ copy_bitmap_file(void) int copy_bitmap(void) { - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { return copy_bitmap_file(); } else { return copy_bitmap_buffer(); @@ -6313,7 +6313,7 @@ prepare_bitmap1_buffer(void) return FALSE; } - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { if ((info->bitmap1->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { ERRMSG("Can't allocate memory for the 1st bitmaps's buffer. %s\n", strerror(errno)); @@ -6352,7 +6352,7 @@ prepare_bitmap2_buffer(void) strerror(errno)); return FALSE; } - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { if ((info->bitmap2->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { ERRMSG("Can't allocate memory for the 2nd bitmaps's buffer. %s\n", strerror(errno)); @@ -7582,7 +7582,7 @@ kdump_thread_function_cyclic(void *arg) { fd_memory = FD_MEMORY_PARALLEL(kdump_thread_args->thread_num); - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { bitmap_parallel.buf = malloc(BUFSIZE_BITMAP); if (bitmap_parallel.buf == NULL){ ERRMSG("Can't allocate memory for bitmap_parallel.buf. %s\n", @@ -7628,7 +7628,7 @@ kdump_thread_function_cyclic(void *arg) { pthread_mutex_lock(&info->current_pfn_mutex); for (pfn = info->current_pfn; pfn < cycle->end_pfn; pfn++) { dumpable = is_dumpable( - info->fd_bitmap ? &bitmap_parallel : info->bitmap2, + info->fd_bitmap >= 0 ? &bitmap_parallel : info->bitmap2, pfn, cycle); if (dumpable) @@ -7723,7 +7723,7 @@ next: retval = NULL; fail: - if (bitmap_memory_parallel.fd > 0) + if (bitmap_memory_parallel.fd >= 0) close(bitmap_memory_parallel.fd); if (bitmap_parallel.buf != NULL) free(bitmap_parallel.buf); @@ -8461,7 +8461,7 @@ out: int write_kdump_bitmap1(struct cycle *cycle) { - if (info->bitmap1->fd) { + if (info->bitmap1->fd >= 0) { return write_kdump_bitmap1_file(); } else { return write_kdump_bitmap1_buffer(cycle); @@ -8470,7 +8470,7 @@ write_kdump_bitmap1(struct cycle *cycle) { int write_kdump_bitmap2(struct cycle *cycle) { - if (info->bitmap2->fd) { + if (info->bitmap2->fd >= 0) { return write_kdump_bitmap2_file(); } else { return write_kdump_bitmap2_buffer(cycle); @@ -8597,9 +8597,10 @@ close_vmcoreinfo(void) void close_dump_memory(void) { - if ((info->fd_memory = close(info->fd_memory)) < 0) + if (close(info->fd_memory) < 0) ERRMSG("Can't close the dump memory(%s). %s\n", info->name_memory, strerror(errno)); + info->fd_memory = -1; } void @@ -8608,9 +8609,10 @@ close_dump_file(void) if (info->flag_flatten) return; - if ((info->fd_dumpfile = close(info->fd_dumpfile)) < 0) + if (close(info->fd_dumpfile) < 0) ERRMSG("Can't close the dump file(%s). %s\n", info->name_dumpfile, strerror(errno)); + info->fd_dumpfile = -1; } void @@ -8620,9 +8622,10 @@ close_dump_bitmap(void) && !info->flag_sadump && !info->flag_mem_usage) return; - if ((info->fd_bitmap = close(info->fd_bitmap)) < 0) + if (close(info->fd_bitmap) < 0) ERRMSG("Can't close the bitmap file(%s). %s\n", info->name_bitmap, strerror(errno)); + info->fd_bitmap = -1; free(info->name_bitmap); info->name_bitmap = NULL; } @@ -8631,16 +8634,18 @@ void close_kernel_file(void) { if (info->name_vmlinux) { - if ((info->fd_vmlinux = close(info->fd_vmlinux)) < 0) { + if (close(info->fd_vmlinux) < 0) { ERRMSG("Can't close the kernel file(%s). %s\n", info->name_vmlinux, strerror(errno)); } + info->fd_vmlinux = -1; } if (info->name_xen_syms) { - if ((info->fd_xen_syms = close(info->fd_xen_syms)) < 0) { + if (close(info->fd_xen_syms) < 0) { ERRMSG("Can't close the kernel file(%s). %s\n", info->name_xen_syms, strerror(errno)); } + info->fd_xen_syms = -1; } } @@ -10202,7 +10207,7 @@ reassemble_kdump_header(void) ret = TRUE; out: - if (fd > 0) + if (fd >= 0) close(fd); free(buf_bitmap); @@ -10212,7 +10217,7 @@ out: int reassemble_kdump_pages(void) { - int i, fd = 0, ret = FALSE; + int i, fd = -1, ret = FALSE; off_t offset_first_ph, offset_ph_org, offset_eraseinfo; off_t offset_data_new, offset_zero_page = 0; mdf_pfn_t pfn, start_pfn, end_pfn; @@ -10336,7 +10341,7 @@ reassemble_kdump_pages(void) offset_data_new += pd.size; } close(fd); - fd = 0; + fd = -1; } if (!write_cache_bufsz(&cd_pd)) goto out; @@ -10379,7 +10384,7 @@ reassemble_kdump_pages(void) size_eraseinfo += SPLITTING_SIZE_EI(i); close(fd); - fd = 0; + fd = -1; } if (size_eraseinfo) { if (!write_cache_bufsz(&cd_data)) @@ -10400,7 +10405,7 @@ out: if (data) free(data); - if (fd > 0) + if (fd >= 0) close(fd); return ret; @@ -10973,6 +10978,11 @@ main(int argc, char *argv[]) strerror(errno)); goto out; } + info->fd_vmlinux = -1; + info->fd_xen_syms = -1; + info->fd_memory = -1; + info->fd_dumpfile = -1; + info->fd_bitmap = -1; initialize_tables(); /* @@ -11268,11 +11278,11 @@ out: free(info->bitmap_memory->buf); free(info->bitmap_memory); } - if (info->fd_memory) + if (info->fd_memory >= 0) close(info->fd_memory); - if (info->fd_dumpfile) + if (info->fd_dumpfile >= 0) close(info->fd_dumpfile); - if (info->fd_bitmap) + if (info->fd_bitmap >= 0) close(info->fd_bitmap); if (vt.node_online_map != NULL) free(vt.node_online_map); diff --git a/makedumpfile.h b/makedumpfile.h index 533e5b8..1814139 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -1955,7 +1955,7 @@ is_dumpable_file(struct dump_bitmap *bitmap, mdf_pfn_t pfn) static inline int is_dumpable(struct dump_bitmap *bitmap, mdf_pfn_t pfn, struct cycle *cycle) { - if (bitmap->fd == 0) { + if (bitmap->fd < 0) { return is_dumpable_buffer(bitmap, pfn, cycle); } else { return is_dumpable_file(bitmap, pfn); -- 2.6.6 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* RE: [PATCH] Cleanup: Use a negative number for uninitialized file descriptors 2016-09-06 8:22 ` [PATCH] Cleanup: Use a negative number for uninitialized file descriptors Petr Tesarik @ 2016-09-09 6:27 ` Atsushi Kumagai 2016-09-09 7:31 ` Petr Tesarik 0 siblings, 1 reply; 24+ messages in thread From: Atsushi Kumagai @ 2016-09-09 6:27 UTC (permalink / raw) To: Petr Tesarik; +Cc: Martin Wilck, kexec@lists.infradead.org Hello Petr, >Do not use zero to denote an invalid file descriptor. > >First, zero is a valid value, although quite unlikely to be used for >anything except standard input. > >Second, open(2) returns a negative value on failure, so there are >already checks for a negative value in some places. > >The purpose of this patch is not to allow running in an evil environment >(with closed stdin), but to aid in debugging by using a consistent value >for uninitialized file descriptors which is also regarded as invalid by >the kernel. For example, attempts to close a negative FD will fail >(unlike an attempt to close FD 0). > >Signed-off-by: Petr Tesarik <ptesarik@suse.com> Good, thanks for your work, but could you fix more two points as below ? dwarf_info.c:: 1595 if (dwarf_info.module_name 1596 && strcmp(dwarf_info.module_name, "vmlinux") 1597 && strcmp(dwarf_info.module_name, "xen-syms")) { 1598 if (dwarf_info.fd_debuginfo > 0) // should be '>= 0' 1599 close(dwarf_info.fd_debuginfo); sadump_info.c:: 1919 for (i = 1; i < si->num_disks; ++i) { 1920 if (si->diskset_info[i].fd_memory) // should be 'fd_memory >=0' 1921 close(si->diskset_info[i].fd_memory); Thanks, Atsushi Kumagai >--- > makedumpfile.c | 68 +++++++++++++++++++++++++++++++++------------------------- > makedumpfile.h | 2 +- > 2 files changed, 40 insertions(+), 30 deletions(-) > >diff --git a/makedumpfile.c b/makedumpfile.c >index 21784e8..d168dfd 100644 >--- a/makedumpfile.c >+++ b/makedumpfile.c >@@ -3730,10 +3730,10 @@ free_for_parallel() > return; > > for (i = 0; i < info->num_threads; i++) { >- if (FD_MEMORY_PARALLEL(i) > 0) >+ if (FD_MEMORY_PARALLEL(i) >= 0) > close(FD_MEMORY_PARALLEL(i)); > >- if (FD_BITMAP_MEMORY_PARALLEL(i) > 0) >+ if (FD_BITMAP_MEMORY_PARALLEL(i) >= 0) > close(FD_BITMAP_MEMORY_PARALLEL(i)); > } > } >@@ -4038,13 +4038,13 @@ out: > void > initialize_bitmap(struct dump_bitmap *bitmap) > { >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > bitmap->fd = info->fd_bitmap; > bitmap->file_name = info->name_bitmap; > bitmap->no_block = -1; > memset(bitmap->buf, 0, BUFSIZE_BITMAP); > } else { >- bitmap->fd = 0; >+ bitmap->fd = -1; > bitmap->file_name = NULL; > bitmap->no_block = -1; > memset(bitmap->buf, 0, info->bufsize_cyclic); >@@ -4154,7 +4154,7 @@ set_bitmap_buffer(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cyc > int > set_bitmap(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cycle *cycle) > { >- if (bitmap->fd) { >+ if (bitmap->fd >= 0) { > return set_bitmap_file(bitmap, pfn, val); > } else { > return set_bitmap_buffer(bitmap, pfn, val, cycle); >@@ -4170,7 +4170,7 @@ sync_bitmap(struct dump_bitmap *bitmap) > /* > * The bitmap doesn't have the fd, it's a on-memory bitmap. > */ >- if (bitmap->fd == 0) >+ if (bitmap->fd < 0) > return TRUE; > /* > * The bitmap buffer is not dirty, and it is not necessary >@@ -5403,7 +5403,7 @@ create_1st_bitmap_buffer(struct cycle *cycle) > int > create_1st_bitmap(struct cycle *cycle) > { >- if (info->bitmap1->fd) { >+ if (info->bitmap1->fd >= 0) { > return create_1st_bitmap_file(); > } else { > return create_1st_bitmap_buffer(cycle); >@@ -5414,7 +5414,7 @@ static inline int > is_in_segs(unsigned long long paddr) > { > if (info->flag_refiltering || info->flag_sadump) { >- if (info->bitmap1->fd == 0) { >+ if (info->bitmap1->fd < 0) { > initialize_1st_bitmap(info->bitmap1); > create_1st_bitmap_file(); > } >@@ -5872,7 +5872,7 @@ copy_bitmap_file(void) > int > copy_bitmap(void) > { >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > return copy_bitmap_file(); > } else { > return copy_bitmap_buffer(); >@@ -6313,7 +6313,7 @@ prepare_bitmap1_buffer(void) > return FALSE; > } > >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > if ((info->bitmap1->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { > ERRMSG("Can't allocate memory for the 1st bitmaps's buffer. %s\n", > strerror(errno)); >@@ -6352,7 +6352,7 @@ prepare_bitmap2_buffer(void) > strerror(errno)); > return FALSE; > } >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > if ((info->bitmap2->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { > ERRMSG("Can't allocate memory for the 2nd bitmaps's buffer. %s\n", > strerror(errno)); >@@ -7582,7 +7582,7 @@ kdump_thread_function_cyclic(void *arg) { > > fd_memory = FD_MEMORY_PARALLEL(kdump_thread_args->thread_num); > >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > bitmap_parallel.buf = malloc(BUFSIZE_BITMAP); > if (bitmap_parallel.buf == NULL){ > ERRMSG("Can't allocate memory for bitmap_parallel.buf. %s\n", >@@ -7628,7 +7628,7 @@ kdump_thread_function_cyclic(void *arg) { > pthread_mutex_lock(&info->current_pfn_mutex); > for (pfn = info->current_pfn; pfn < cycle->end_pfn; pfn++) { > dumpable = is_dumpable( >- info->fd_bitmap ? &bitmap_parallel : info->bitmap2, >+ info->fd_bitmap >= 0 ? &bitmap_parallel : info->bitmap2, > pfn, > cycle); > if (dumpable) >@@ -7723,7 +7723,7 @@ next: > retval = NULL; > > fail: >- if (bitmap_memory_parallel.fd > 0) >+ if (bitmap_memory_parallel.fd >= 0) > close(bitmap_memory_parallel.fd); > if (bitmap_parallel.buf != NULL) > free(bitmap_parallel.buf); >@@ -8461,7 +8461,7 @@ out: > > int > write_kdump_bitmap1(struct cycle *cycle) { >- if (info->bitmap1->fd) { >+ if (info->bitmap1->fd >= 0) { > return write_kdump_bitmap1_file(); > } else { > return write_kdump_bitmap1_buffer(cycle); >@@ -8470,7 +8470,7 @@ write_kdump_bitmap1(struct cycle *cycle) { > > int > write_kdump_bitmap2(struct cycle *cycle) { >- if (info->bitmap2->fd) { >+ if (info->bitmap2->fd >= 0) { > return write_kdump_bitmap2_file(); > } else { > return write_kdump_bitmap2_buffer(cycle); >@@ -8597,9 +8597,10 @@ close_vmcoreinfo(void) > void > close_dump_memory(void) > { >- if ((info->fd_memory = close(info->fd_memory)) < 0) >+ if (close(info->fd_memory) < 0) > ERRMSG("Can't close the dump memory(%s). %s\n", > info->name_memory, strerror(errno)); >+ info->fd_memory = -1; > } > > void >@@ -8608,9 +8609,10 @@ close_dump_file(void) > if (info->flag_flatten) > return; > >- if ((info->fd_dumpfile = close(info->fd_dumpfile)) < 0) >+ if (close(info->fd_dumpfile) < 0) > ERRMSG("Can't close the dump file(%s). %s\n", > info->name_dumpfile, strerror(errno)); >+ info->fd_dumpfile = -1; > } > > void >@@ -8620,9 +8622,10 @@ close_dump_bitmap(void) > && !info->flag_sadump && !info->flag_mem_usage) > return; > >- if ((info->fd_bitmap = close(info->fd_bitmap)) < 0) >+ if (close(info->fd_bitmap) < 0) > ERRMSG("Can't close the bitmap file(%s). %s\n", > info->name_bitmap, strerror(errno)); >+ info->fd_bitmap = -1; > free(info->name_bitmap); > info->name_bitmap = NULL; > } >@@ -8631,16 +8634,18 @@ void > close_kernel_file(void) > { > if (info->name_vmlinux) { >- if ((info->fd_vmlinux = close(info->fd_vmlinux)) < 0) { >+ if (close(info->fd_vmlinux) < 0) { > ERRMSG("Can't close the kernel file(%s). %s\n", > info->name_vmlinux, strerror(errno)); > } >+ info->fd_vmlinux = -1; > } > if (info->name_xen_syms) { >- if ((info->fd_xen_syms = close(info->fd_xen_syms)) < 0) { >+ if (close(info->fd_xen_syms) < 0) { > ERRMSG("Can't close the kernel file(%s). %s\n", > info->name_xen_syms, strerror(errno)); > } >+ info->fd_xen_syms = -1; > } > } > >@@ -10202,7 +10207,7 @@ reassemble_kdump_header(void) > > ret = TRUE; > out: >- if (fd > 0) >+ if (fd >= 0) > close(fd); > free(buf_bitmap); > >@@ -10212,7 +10217,7 @@ out: > int > reassemble_kdump_pages(void) > { >- int i, fd = 0, ret = FALSE; >+ int i, fd = -1, ret = FALSE; > off_t offset_first_ph, offset_ph_org, offset_eraseinfo; > off_t offset_data_new, offset_zero_page = 0; > mdf_pfn_t pfn, start_pfn, end_pfn; >@@ -10336,7 +10341,7 @@ reassemble_kdump_pages(void) > offset_data_new += pd.size; > } > close(fd); >- fd = 0; >+ fd = -1; > } > if (!write_cache_bufsz(&cd_pd)) > goto out; >@@ -10379,7 +10384,7 @@ reassemble_kdump_pages(void) > size_eraseinfo += SPLITTING_SIZE_EI(i); > > close(fd); >- fd = 0; >+ fd = -1; > } > if (size_eraseinfo) { > if (!write_cache_bufsz(&cd_data)) >@@ -10400,7 +10405,7 @@ out: > > if (data) > free(data); >- if (fd > 0) >+ if (fd >= 0) > close(fd); > > return ret; >@@ -10973,6 +10978,11 @@ main(int argc, char *argv[]) > strerror(errno)); > goto out; > } >+ info->fd_vmlinux = -1; >+ info->fd_xen_syms = -1; >+ info->fd_memory = -1; >+ info->fd_dumpfile = -1; >+ info->fd_bitmap = -1; > initialize_tables(); > > /* >@@ -11268,11 +11278,11 @@ out: > free(info->bitmap_memory->buf); > free(info->bitmap_memory); > } >- if (info->fd_memory) >+ if (info->fd_memory >= 0) > close(info->fd_memory); >- if (info->fd_dumpfile) >+ if (info->fd_dumpfile >= 0) > close(info->fd_dumpfile); >- if (info->fd_bitmap) >+ if (info->fd_bitmap >= 0) > close(info->fd_bitmap); > if (vt.node_online_map != NULL) > free(vt.node_online_map); >diff --git a/makedumpfile.h b/makedumpfile.h >index 533e5b8..1814139 100644 >--- a/makedumpfile.h >+++ b/makedumpfile.h >@@ -1955,7 +1955,7 @@ is_dumpable_file(struct dump_bitmap *bitmap, mdf_pfn_t pfn) > static inline int > is_dumpable(struct dump_bitmap *bitmap, mdf_pfn_t pfn, struct cycle *cycle) > { >- if (bitmap->fd == 0) { >+ if (bitmap->fd < 0) { > return is_dumpable_buffer(bitmap, pfn, cycle); > } else { > return is_dumpable_file(bitmap, pfn); >-- >2.6.6 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH] Cleanup: Use a negative number for uninitialized file descriptors 2016-09-09 6:27 ` Atsushi Kumagai @ 2016-09-09 7:31 ` Petr Tesarik 2016-09-09 8:11 ` [PATCH v2] " Petr Tesarik 0 siblings, 1 reply; 24+ messages in thread From: Petr Tesarik @ 2016-09-09 7:31 UTC (permalink / raw) To: Atsushi Kumagai; +Cc: Martin Wilck, kexec@lists.infradead.org Hello Atsushi, On Fri, 9 Sep 2016 06:27:17 +0000 Atsushi Kumagai <ats-kumagai@wm.jp.nec.com> wrote: > Hello Petr, > > >Do not use zero to denote an invalid file descriptor. > > > >First, zero is a valid value, although quite unlikely to be used for > >anything except standard input. > > > >Second, open(2) returns a negative value on failure, so there are > >already checks for a negative value in some places. > > > >The purpose of this patch is not to allow running in an evil environment > >(with closed stdin), but to aid in debugging by using a consistent value > >for uninitialized file descriptors which is also regarded as invalid by > >the kernel. For example, attempts to close a negative FD will fail > >(unlike an attempt to close FD 0). > > > >Signed-off-by: Petr Tesarik <ptesarik@suse.com> > > Good, thanks for your work, but could you fix > more two points as below ? I see. I skipped elf_info.c, dwarf_info.c, sadump_info.c and other files, because the file descriptors there are initialized from other variables, already checked in the main module, but you're right, the checks should become consistent. Expect a version 2 of the patch soon. Petr T > dwarf_info.c:: > 1595 if (dwarf_info.module_name > 1596 && strcmp(dwarf_info.module_name, "vmlinux") > 1597 && strcmp(dwarf_info.module_name, "xen-syms")) { > 1598 if (dwarf_info.fd_debuginfo > 0) // should be '>= 0' > 1599 close(dwarf_info.fd_debuginfo); > > sadump_info.c:: > 1919 for (i = 1; i < si->num_disks; ++i) { > 1920 if (si->diskset_info[i].fd_memory) // should be 'fd_memory >=0' > 1921 close(si->diskset_info[i].fd_memory); > > > Thanks, > Atsushi Kumagai > > >--- > > makedumpfile.c | 68 +++++++++++++++++++++++++++++++++------------------------- > > makedumpfile.h | 2 +- > > 2 files changed, 40 insertions(+), 30 deletions(-) > > > >diff --git a/makedumpfile.c b/makedumpfile.c > >index 21784e8..d168dfd 100644 > >--- a/makedumpfile.c > >+++ b/makedumpfile.c > >@@ -3730,10 +3730,10 @@ free_for_parallel() > > return; > > > > for (i = 0; i < info->num_threads; i++) { > >- if (FD_MEMORY_PARALLEL(i) > 0) > >+ if (FD_MEMORY_PARALLEL(i) >= 0) > > close(FD_MEMORY_PARALLEL(i)); > > > >- if (FD_BITMAP_MEMORY_PARALLEL(i) > 0) > >+ if (FD_BITMAP_MEMORY_PARALLEL(i) >= 0) > > close(FD_BITMAP_MEMORY_PARALLEL(i)); > > } > > } > >@@ -4038,13 +4038,13 @@ out: > > void > > initialize_bitmap(struct dump_bitmap *bitmap) > > { > >- if (info->fd_bitmap) { > >+ if (info->fd_bitmap >= 0) { > > bitmap->fd = info->fd_bitmap; > > bitmap->file_name = info->name_bitmap; > > bitmap->no_block = -1; > > memset(bitmap->buf, 0, BUFSIZE_BITMAP); > > } else { > >- bitmap->fd = 0; > >+ bitmap->fd = -1; > > bitmap->file_name = NULL; > > bitmap->no_block = -1; > > memset(bitmap->buf, 0, info->bufsize_cyclic); > >@@ -4154,7 +4154,7 @@ set_bitmap_buffer(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cyc > > int > > set_bitmap(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cycle *cycle) > > { > >- if (bitmap->fd) { > >+ if (bitmap->fd >= 0) { > > return set_bitmap_file(bitmap, pfn, val); > > } else { > > return set_bitmap_buffer(bitmap, pfn, val, cycle); > >@@ -4170,7 +4170,7 @@ sync_bitmap(struct dump_bitmap *bitmap) > > /* > > * The bitmap doesn't have the fd, it's a on-memory bitmap. > > */ > >- if (bitmap->fd == 0) > >+ if (bitmap->fd < 0) > > return TRUE; > > /* > > * The bitmap buffer is not dirty, and it is not necessary > >@@ -5403,7 +5403,7 @@ create_1st_bitmap_buffer(struct cycle *cycle) > > int > > create_1st_bitmap(struct cycle *cycle) > > { > >- if (info->bitmap1->fd) { > >+ if (info->bitmap1->fd >= 0) { > > return create_1st_bitmap_file(); > > } else { > > return create_1st_bitmap_buffer(cycle); > >@@ -5414,7 +5414,7 @@ static inline int > > is_in_segs(unsigned long long paddr) > > { > > if (info->flag_refiltering || info->flag_sadump) { > >- if (info->bitmap1->fd == 0) { > >+ if (info->bitmap1->fd < 0) { > > initialize_1st_bitmap(info->bitmap1); > > create_1st_bitmap_file(); > > } > >@@ -5872,7 +5872,7 @@ copy_bitmap_file(void) > > int > > copy_bitmap(void) > > { > >- if (info->fd_bitmap) { > >+ if (info->fd_bitmap >= 0) { > > return copy_bitmap_file(); > > } else { > > return copy_bitmap_buffer(); > >@@ -6313,7 +6313,7 @@ prepare_bitmap1_buffer(void) > > return FALSE; > > } > > > >- if (info->fd_bitmap) { > >+ if (info->fd_bitmap >= 0) { > > if ((info->bitmap1->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { > > ERRMSG("Can't allocate memory for the 1st bitmaps's buffer. %s\n", > > strerror(errno)); > >@@ -6352,7 +6352,7 @@ prepare_bitmap2_buffer(void) > > strerror(errno)); > > return FALSE; > > } > >- if (info->fd_bitmap) { > >+ if (info->fd_bitmap >= 0) { > > if ((info->bitmap2->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { > > ERRMSG("Can't allocate memory for the 2nd bitmaps's buffer. %s\n", > > strerror(errno)); > >@@ -7582,7 +7582,7 @@ kdump_thread_function_cyclic(void *arg) { > > > > fd_memory = FD_MEMORY_PARALLEL(kdump_thread_args->thread_num); > > > >- if (info->fd_bitmap) { > >+ if (info->fd_bitmap >= 0) { > > bitmap_parallel.buf = malloc(BUFSIZE_BITMAP); > > if (bitmap_parallel.buf == NULL){ > > ERRMSG("Can't allocate memory for bitmap_parallel.buf. %s\n", > >@@ -7628,7 +7628,7 @@ kdump_thread_function_cyclic(void *arg) { > > pthread_mutex_lock(&info->current_pfn_mutex); > > for (pfn = info->current_pfn; pfn < cycle->end_pfn; pfn++) { > > dumpable = is_dumpable( > >- info->fd_bitmap ? &bitmap_parallel : info->bitmap2, > >+ info->fd_bitmap >= 0 ? &bitmap_parallel : info->bitmap2, > > pfn, > > cycle); > > if (dumpable) > >@@ -7723,7 +7723,7 @@ next: > > retval = NULL; > > > > fail: > >- if (bitmap_memory_parallel.fd > 0) > >+ if (bitmap_memory_parallel.fd >= 0) > > close(bitmap_memory_parallel.fd); > > if (bitmap_parallel.buf != NULL) > > free(bitmap_parallel.buf); > >@@ -8461,7 +8461,7 @@ out: > > > > int > > write_kdump_bitmap1(struct cycle *cycle) { > >- if (info->bitmap1->fd) { > >+ if (info->bitmap1->fd >= 0) { > > return write_kdump_bitmap1_file(); > > } else { > > return write_kdump_bitmap1_buffer(cycle); > >@@ -8470,7 +8470,7 @@ write_kdump_bitmap1(struct cycle *cycle) { > > > > int > > write_kdump_bitmap2(struct cycle *cycle) { > >- if (info->bitmap2->fd) { > >+ if (info->bitmap2->fd >= 0) { > > return write_kdump_bitmap2_file(); > > } else { > > return write_kdump_bitmap2_buffer(cycle); > >@@ -8597,9 +8597,10 @@ close_vmcoreinfo(void) > > void > > close_dump_memory(void) > > { > >- if ((info->fd_memory = close(info->fd_memory)) < 0) > >+ if (close(info->fd_memory) < 0) > > ERRMSG("Can't close the dump memory(%s). %s\n", > > info->name_memory, strerror(errno)); > >+ info->fd_memory = -1; > > } > > > > void > >@@ -8608,9 +8609,10 @@ close_dump_file(void) > > if (info->flag_flatten) > > return; > > > >- if ((info->fd_dumpfile = close(info->fd_dumpfile)) < 0) > >+ if (close(info->fd_dumpfile) < 0) > > ERRMSG("Can't close the dump file(%s). %s\n", > > info->name_dumpfile, strerror(errno)); > >+ info->fd_dumpfile = -1; > > } > > > > void > >@@ -8620,9 +8622,10 @@ close_dump_bitmap(void) > > && !info->flag_sadump && !info->flag_mem_usage) > > return; > > > >- if ((info->fd_bitmap = close(info->fd_bitmap)) < 0) > >+ if (close(info->fd_bitmap) < 0) > > ERRMSG("Can't close the bitmap file(%s). %s\n", > > info->name_bitmap, strerror(errno)); > >+ info->fd_bitmap = -1; > > free(info->name_bitmap); > > info->name_bitmap = NULL; > > } > >@@ -8631,16 +8634,18 @@ void > > close_kernel_file(void) > > { > > if (info->name_vmlinux) { > >- if ((info->fd_vmlinux = close(info->fd_vmlinux)) < 0) { > >+ if (close(info->fd_vmlinux) < 0) { > > ERRMSG("Can't close the kernel file(%s). %s\n", > > info->name_vmlinux, strerror(errno)); > > } > >+ info->fd_vmlinux = -1; > > } > > if (info->name_xen_syms) { > >- if ((info->fd_xen_syms = close(info->fd_xen_syms)) < 0) { > >+ if (close(info->fd_xen_syms) < 0) { > > ERRMSG("Can't close the kernel file(%s). %s\n", > > info->name_xen_syms, strerror(errno)); > > } > >+ info->fd_xen_syms = -1; > > } > > } > > > >@@ -10202,7 +10207,7 @@ reassemble_kdump_header(void) > > > > ret = TRUE; > > out: > >- if (fd > 0) > >+ if (fd >= 0) > > close(fd); > > free(buf_bitmap); > > > >@@ -10212,7 +10217,7 @@ out: > > int > > reassemble_kdump_pages(void) > > { > >- int i, fd = 0, ret = FALSE; > >+ int i, fd = -1, ret = FALSE; > > off_t offset_first_ph, offset_ph_org, offset_eraseinfo; > > off_t offset_data_new, offset_zero_page = 0; > > mdf_pfn_t pfn, start_pfn, end_pfn; > >@@ -10336,7 +10341,7 @@ reassemble_kdump_pages(void) > > offset_data_new += pd.size; > > } > > close(fd); > >- fd = 0; > >+ fd = -1; > > } > > if (!write_cache_bufsz(&cd_pd)) > > goto out; > >@@ -10379,7 +10384,7 @@ reassemble_kdump_pages(void) > > size_eraseinfo += SPLITTING_SIZE_EI(i); > > > > close(fd); > >- fd = 0; > >+ fd = -1; > > } > > if (size_eraseinfo) { > > if (!write_cache_bufsz(&cd_data)) > >@@ -10400,7 +10405,7 @@ out: > > > > if (data) > > free(data); > >- if (fd > 0) > >+ if (fd >= 0) > > close(fd); > > > > return ret; > >@@ -10973,6 +10978,11 @@ main(int argc, char *argv[]) > > strerror(errno)); > > goto out; > > } > >+ info->fd_vmlinux = -1; > >+ info->fd_xen_syms = -1; > >+ info->fd_memory = -1; > >+ info->fd_dumpfile = -1; > >+ info->fd_bitmap = -1; > > initialize_tables(); > > > > /* > >@@ -11268,11 +11278,11 @@ out: > > free(info->bitmap_memory->buf); > > free(info->bitmap_memory); > > } > >- if (info->fd_memory) > >+ if (info->fd_memory >= 0) > > close(info->fd_memory); > >- if (info->fd_dumpfile) > >+ if (info->fd_dumpfile >= 0) > > close(info->fd_dumpfile); > >- if (info->fd_bitmap) > >+ if (info->fd_bitmap >= 0) > > close(info->fd_bitmap); > > if (vt.node_online_map != NULL) > > free(vt.node_online_map); > >diff --git a/makedumpfile.h b/makedumpfile.h > >index 533e5b8..1814139 100644 > >--- a/makedumpfile.h > >+++ b/makedumpfile.h > >@@ -1955,7 +1955,7 @@ is_dumpable_file(struct dump_bitmap *bitmap, mdf_pfn_t pfn) > > static inline int > > is_dumpable(struct dump_bitmap *bitmap, mdf_pfn_t pfn, struct cycle *cycle) > > { > >- if (bitmap->fd == 0) { > >+ if (bitmap->fd < 0) { > > return is_dumpable_buffer(bitmap, pfn, cycle); > > } else { > > return is_dumpable_file(bitmap, pfn); > >-- > >2.6.6 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v2] Cleanup: Use a negative number for uninitialized file descriptors 2016-09-09 7:31 ` Petr Tesarik @ 2016-09-09 8:11 ` Petr Tesarik 2016-09-12 8:17 ` Atsushi Kumagai 0 siblings, 1 reply; 24+ messages in thread From: Petr Tesarik @ 2016-09-09 8:11 UTC (permalink / raw) To: Atsushi Kumagai; +Cc: Martin Wilck, kexec@lists.infradead.org Do not use zero to denote an invalid file descriptor. First, zero is a valid value, although quite unlikely to be used for anything except standard input. Second, open(2) returns a negative value on failure, so there are already checks for a negative value in some places. The purpose of this patch is not to allow running in an evil environment (with closed stdin), but to aid in debugging by using a consistent value for uninitialized file descriptors which is also regarded as invalid by the kernel. For example, attempts to close a negative FD will fail (unlike an attempt to close FD 0). Changes from v1: - Cleanup file descriptor usage in dwarf_info.c and sadump_info.c Signed-off-by: Petr Tesarik <ptesarik@suse.com> --- dwarf_info.c | 6 ++++-- makedumpfile.c | 68 +++++++++++++++++++++++++++++++++------------------------- makedumpfile.h | 2 +- sadump_info.c | 3 ++- 4 files changed, 46 insertions(+), 33 deletions(-) diff --git a/dwarf_info.c b/dwarf_info.c index 8c491d3..4f9ad12 100644 --- a/dwarf_info.c +++ b/dwarf_info.c @@ -53,7 +53,9 @@ struct dwarf_info { char src_name[LEN_SRCFILE]; /* OUT */ Dwarf_Off die_offset; /* OUT */ }; -static struct dwarf_info dwarf_info; +static struct dwarf_info dwarf_info = { + .fd_debuginfo = -1, +}; /* @@ -1595,7 +1597,7 @@ set_dwarf_debuginfo(char *mod_name, char *os_release, if (dwarf_info.module_name && strcmp(dwarf_info.module_name, "vmlinux") && strcmp(dwarf_info.module_name, "xen-syms")) { - if (dwarf_info.fd_debuginfo > 0) + if (dwarf_info.fd_debuginfo >= 0) close(dwarf_info.fd_debuginfo); if (dwarf_info.name_debuginfo) free(dwarf_info.name_debuginfo); diff --git a/makedumpfile.c b/makedumpfile.c index 21784e8..d168dfd 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -3730,10 +3730,10 @@ free_for_parallel() return; for (i = 0; i < info->num_threads; i++) { - if (FD_MEMORY_PARALLEL(i) > 0) + if (FD_MEMORY_PARALLEL(i) >= 0) close(FD_MEMORY_PARALLEL(i)); - if (FD_BITMAP_MEMORY_PARALLEL(i) > 0) + if (FD_BITMAP_MEMORY_PARALLEL(i) >= 0) close(FD_BITMAP_MEMORY_PARALLEL(i)); } } @@ -4038,13 +4038,13 @@ out: void initialize_bitmap(struct dump_bitmap *bitmap) { - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { bitmap->fd = info->fd_bitmap; bitmap->file_name = info->name_bitmap; bitmap->no_block = -1; memset(bitmap->buf, 0, BUFSIZE_BITMAP); } else { - bitmap->fd = 0; + bitmap->fd = -1; bitmap->file_name = NULL; bitmap->no_block = -1; memset(bitmap->buf, 0, info->bufsize_cyclic); @@ -4154,7 +4154,7 @@ set_bitmap_buffer(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cyc int set_bitmap(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cycle *cycle) { - if (bitmap->fd) { + if (bitmap->fd >= 0) { return set_bitmap_file(bitmap, pfn, val); } else { return set_bitmap_buffer(bitmap, pfn, val, cycle); @@ -4170,7 +4170,7 @@ sync_bitmap(struct dump_bitmap *bitmap) /* * The bitmap doesn't have the fd, it's a on-memory bitmap. */ - if (bitmap->fd == 0) + if (bitmap->fd < 0) return TRUE; /* * The bitmap buffer is not dirty, and it is not necessary @@ -5403,7 +5403,7 @@ create_1st_bitmap_buffer(struct cycle *cycle) int create_1st_bitmap(struct cycle *cycle) { - if (info->bitmap1->fd) { + if (info->bitmap1->fd >= 0) { return create_1st_bitmap_file(); } else { return create_1st_bitmap_buffer(cycle); @@ -5414,7 +5414,7 @@ static inline int is_in_segs(unsigned long long paddr) { if (info->flag_refiltering || info->flag_sadump) { - if (info->bitmap1->fd == 0) { + if (info->bitmap1->fd < 0) { initialize_1st_bitmap(info->bitmap1); create_1st_bitmap_file(); } @@ -5872,7 +5872,7 @@ copy_bitmap_file(void) int copy_bitmap(void) { - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { return copy_bitmap_file(); } else { return copy_bitmap_buffer(); @@ -6313,7 +6313,7 @@ prepare_bitmap1_buffer(void) return FALSE; } - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { if ((info->bitmap1->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { ERRMSG("Can't allocate memory for the 1st bitmaps's buffer. %s\n", strerror(errno)); @@ -6352,7 +6352,7 @@ prepare_bitmap2_buffer(void) strerror(errno)); return FALSE; } - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { if ((info->bitmap2->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { ERRMSG("Can't allocate memory for the 2nd bitmaps's buffer. %s\n", strerror(errno)); @@ -7582,7 +7582,7 @@ kdump_thread_function_cyclic(void *arg) { fd_memory = FD_MEMORY_PARALLEL(kdump_thread_args->thread_num); - if (info->fd_bitmap) { + if (info->fd_bitmap >= 0) { bitmap_parallel.buf = malloc(BUFSIZE_BITMAP); if (bitmap_parallel.buf == NULL){ ERRMSG("Can't allocate memory for bitmap_parallel.buf. %s\n", @@ -7628,7 +7628,7 @@ kdump_thread_function_cyclic(void *arg) { pthread_mutex_lock(&info->current_pfn_mutex); for (pfn = info->current_pfn; pfn < cycle->end_pfn; pfn++) { dumpable = is_dumpable( - info->fd_bitmap ? &bitmap_parallel : info->bitmap2, + info->fd_bitmap >= 0 ? &bitmap_parallel : info->bitmap2, pfn, cycle); if (dumpable) @@ -7723,7 +7723,7 @@ next: retval = NULL; fail: - if (bitmap_memory_parallel.fd > 0) + if (bitmap_memory_parallel.fd >= 0) close(bitmap_memory_parallel.fd); if (bitmap_parallel.buf != NULL) free(bitmap_parallel.buf); @@ -8461,7 +8461,7 @@ out: int write_kdump_bitmap1(struct cycle *cycle) { - if (info->bitmap1->fd) { + if (info->bitmap1->fd >= 0) { return write_kdump_bitmap1_file(); } else { return write_kdump_bitmap1_buffer(cycle); @@ -8470,7 +8470,7 @@ write_kdump_bitmap1(struct cycle *cycle) { int write_kdump_bitmap2(struct cycle *cycle) { - if (info->bitmap2->fd) { + if (info->bitmap2->fd >= 0) { return write_kdump_bitmap2_file(); } else { return write_kdump_bitmap2_buffer(cycle); @@ -8597,9 +8597,10 @@ close_vmcoreinfo(void) void close_dump_memory(void) { - if ((info->fd_memory = close(info->fd_memory)) < 0) + if (close(info->fd_memory) < 0) ERRMSG("Can't close the dump memory(%s). %s\n", info->name_memory, strerror(errno)); + info->fd_memory = -1; } void @@ -8608,9 +8609,10 @@ close_dump_file(void) if (info->flag_flatten) return; - if ((info->fd_dumpfile = close(info->fd_dumpfile)) < 0) + if (close(info->fd_dumpfile) < 0) ERRMSG("Can't close the dump file(%s). %s\n", info->name_dumpfile, strerror(errno)); + info->fd_dumpfile = -1; } void @@ -8620,9 +8622,10 @@ close_dump_bitmap(void) && !info->flag_sadump && !info->flag_mem_usage) return; - if ((info->fd_bitmap = close(info->fd_bitmap)) < 0) + if (close(info->fd_bitmap) < 0) ERRMSG("Can't close the bitmap file(%s). %s\n", info->name_bitmap, strerror(errno)); + info->fd_bitmap = -1; free(info->name_bitmap); info->name_bitmap = NULL; } @@ -8631,16 +8634,18 @@ void close_kernel_file(void) { if (info->name_vmlinux) { - if ((info->fd_vmlinux = close(info->fd_vmlinux)) < 0) { + if (close(info->fd_vmlinux) < 0) { ERRMSG("Can't close the kernel file(%s). %s\n", info->name_vmlinux, strerror(errno)); } + info->fd_vmlinux = -1; } if (info->name_xen_syms) { - if ((info->fd_xen_syms = close(info->fd_xen_syms)) < 0) { + if (close(info->fd_xen_syms) < 0) { ERRMSG("Can't close the kernel file(%s). %s\n", info->name_xen_syms, strerror(errno)); } + info->fd_xen_syms = -1; } } @@ -10202,7 +10207,7 @@ reassemble_kdump_header(void) ret = TRUE; out: - if (fd > 0) + if (fd >= 0) close(fd); free(buf_bitmap); @@ -10212,7 +10217,7 @@ out: int reassemble_kdump_pages(void) { - int i, fd = 0, ret = FALSE; + int i, fd = -1, ret = FALSE; off_t offset_first_ph, offset_ph_org, offset_eraseinfo; off_t offset_data_new, offset_zero_page = 0; mdf_pfn_t pfn, start_pfn, end_pfn; @@ -10336,7 +10341,7 @@ reassemble_kdump_pages(void) offset_data_new += pd.size; } close(fd); - fd = 0; + fd = -1; } if (!write_cache_bufsz(&cd_pd)) goto out; @@ -10379,7 +10384,7 @@ reassemble_kdump_pages(void) size_eraseinfo += SPLITTING_SIZE_EI(i); close(fd); - fd = 0; + fd = -1; } if (size_eraseinfo) { if (!write_cache_bufsz(&cd_data)) @@ -10400,7 +10405,7 @@ out: if (data) free(data); - if (fd > 0) + if (fd >= 0) close(fd); return ret; @@ -10973,6 +10978,11 @@ main(int argc, char *argv[]) strerror(errno)); goto out; } + info->fd_vmlinux = -1; + info->fd_xen_syms = -1; + info->fd_memory = -1; + info->fd_dumpfile = -1; + info->fd_bitmap = -1; initialize_tables(); /* @@ -11268,11 +11278,11 @@ out: free(info->bitmap_memory->buf); free(info->bitmap_memory); } - if (info->fd_memory) + if (info->fd_memory >= 0) close(info->fd_memory); - if (info->fd_dumpfile) + if (info->fd_dumpfile >= 0) close(info->fd_dumpfile); - if (info->fd_bitmap) + if (info->fd_bitmap >= 0) close(info->fd_bitmap); if (vt.node_online_map != NULL) free(vt.node_online_map); diff --git a/makedumpfile.h b/makedumpfile.h index 533e5b8..1814139 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -1955,7 +1955,7 @@ is_dumpable_file(struct dump_bitmap *bitmap, mdf_pfn_t pfn) static inline int is_dumpable(struct dump_bitmap *bitmap, mdf_pfn_t pfn, struct cycle *cycle) { - if (bitmap->fd == 0) { + if (bitmap->fd < 0) { return is_dumpable_buffer(bitmap, pfn, cycle); } else { return is_dumpable_file(bitmap, pfn); diff --git a/sadump_info.c b/sadump_info.c index 5ff5595..f77a020 100644 --- a/sadump_info.c +++ b/sadump_info.c @@ -1853,6 +1853,7 @@ sadump_add_diskset_info(char *name_memory) } si->diskset_info[si->num_disks - 1].name_memory = name_memory; + si->diskset_info[si->num_disks - 1].fd_memory = -1; return TRUE; } @@ -1917,7 +1918,7 @@ free_sadump_info(void) int i; for (i = 1; i < si->num_disks; ++i) { - if (si->diskset_info[i].fd_memory) + if (si->diskset_info[i].fd_memory >= 0) close(si->diskset_info[i].fd_memory); if (si->diskset_info[i].sph_memory) free(si->diskset_info[i].sph_memory); -- 2.6.6 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* RE: [PATCH v2] Cleanup: Use a negative number for uninitialized file descriptors 2016-09-09 8:11 ` [PATCH v2] " Petr Tesarik @ 2016-09-12 8:17 ` Atsushi Kumagai 2016-09-14 10:17 ` [PATCH v2 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 0 siblings, 1 reply; 24+ messages in thread From: Atsushi Kumagai @ 2016-09-12 8:17 UTC (permalink / raw) To: Petr Tesarik, Martin Wilck; +Cc: kexec@lists.infradead.org Hello, >Do not use zero to denote an invalid file descriptor. > >First, zero is a valid value, although quite unlikely to be used for >anything except standard input. > >Second, open(2) returns a negative value on failure, so there are >already checks for a negative value in some places. > >The purpose of this patch is not to allow running in an evil environment >(with closed stdin), but to aid in debugging by using a consistent value >for uninitialized file descriptors which is also regarded as invalid by >the kernel. For example, attempts to close a negative FD will fail >(unlike an attempt to close FD 0). > >Changes from v1: > - Cleanup file descriptor usage in dwarf_info.c and sadump_info.c Thanks for your quick response. This fix isn't necessary but better to do it as you said. Martin, could you rebase your three patches ? I've updated the devel branch. Thanks, Atsushi Kumagai >Signed-off-by: Petr Tesarik <ptesarik@suse.com> > >--- > dwarf_info.c | 6 ++++-- > makedumpfile.c | 68 +++++++++++++++++++++++++++++++++------------------------- > makedumpfile.h | 2 +- > sadump_info.c | 3 ++- > 4 files changed, 46 insertions(+), 33 deletions(-) > >diff --git a/dwarf_info.c b/dwarf_info.c >index 8c491d3..4f9ad12 100644 >--- a/dwarf_info.c >+++ b/dwarf_info.c >@@ -53,7 +53,9 @@ struct dwarf_info { > char src_name[LEN_SRCFILE]; /* OUT */ > Dwarf_Off die_offset; /* OUT */ > }; >-static struct dwarf_info dwarf_info; >+static struct dwarf_info dwarf_info = { >+ .fd_debuginfo = -1, >+}; > > > /* >@@ -1595,7 +1597,7 @@ set_dwarf_debuginfo(char *mod_name, char *os_release, > if (dwarf_info.module_name > && strcmp(dwarf_info.module_name, "vmlinux") > && strcmp(dwarf_info.module_name, "xen-syms")) { >- if (dwarf_info.fd_debuginfo > 0) >+ if (dwarf_info.fd_debuginfo >= 0) > close(dwarf_info.fd_debuginfo); > if (dwarf_info.name_debuginfo) > free(dwarf_info.name_debuginfo); >diff --git a/makedumpfile.c b/makedumpfile.c >index 21784e8..d168dfd 100644 >--- a/makedumpfile.c >+++ b/makedumpfile.c >@@ -3730,10 +3730,10 @@ free_for_parallel() > return; > > for (i = 0; i < info->num_threads; i++) { >- if (FD_MEMORY_PARALLEL(i) > 0) >+ if (FD_MEMORY_PARALLEL(i) >= 0) > close(FD_MEMORY_PARALLEL(i)); > >- if (FD_BITMAP_MEMORY_PARALLEL(i) > 0) >+ if (FD_BITMAP_MEMORY_PARALLEL(i) >= 0) > close(FD_BITMAP_MEMORY_PARALLEL(i)); > } > } >@@ -4038,13 +4038,13 @@ out: > void > initialize_bitmap(struct dump_bitmap *bitmap) > { >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > bitmap->fd = info->fd_bitmap; > bitmap->file_name = info->name_bitmap; > bitmap->no_block = -1; > memset(bitmap->buf, 0, BUFSIZE_BITMAP); > } else { >- bitmap->fd = 0; >+ bitmap->fd = -1; > bitmap->file_name = NULL; > bitmap->no_block = -1; > memset(bitmap->buf, 0, info->bufsize_cyclic); >@@ -4154,7 +4154,7 @@ set_bitmap_buffer(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cyc > int > set_bitmap(struct dump_bitmap *bitmap, mdf_pfn_t pfn, int val, struct cycle *cycle) > { >- if (bitmap->fd) { >+ if (bitmap->fd >= 0) { > return set_bitmap_file(bitmap, pfn, val); > } else { > return set_bitmap_buffer(bitmap, pfn, val, cycle); >@@ -4170,7 +4170,7 @@ sync_bitmap(struct dump_bitmap *bitmap) > /* > * The bitmap doesn't have the fd, it's a on-memory bitmap. > */ >- if (bitmap->fd == 0) >+ if (bitmap->fd < 0) > return TRUE; > /* > * The bitmap buffer is not dirty, and it is not necessary >@@ -5403,7 +5403,7 @@ create_1st_bitmap_buffer(struct cycle *cycle) > int > create_1st_bitmap(struct cycle *cycle) > { >- if (info->bitmap1->fd) { >+ if (info->bitmap1->fd >= 0) { > return create_1st_bitmap_file(); > } else { > return create_1st_bitmap_buffer(cycle); >@@ -5414,7 +5414,7 @@ static inline int > is_in_segs(unsigned long long paddr) > { > if (info->flag_refiltering || info->flag_sadump) { >- if (info->bitmap1->fd == 0) { >+ if (info->bitmap1->fd < 0) { > initialize_1st_bitmap(info->bitmap1); > create_1st_bitmap_file(); > } >@@ -5872,7 +5872,7 @@ copy_bitmap_file(void) > int > copy_bitmap(void) > { >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > return copy_bitmap_file(); > } else { > return copy_bitmap_buffer(); >@@ -6313,7 +6313,7 @@ prepare_bitmap1_buffer(void) > return FALSE; > } > >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > if ((info->bitmap1->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { > ERRMSG("Can't allocate memory for the 1st bitmaps's buffer. %s\n", > strerror(errno)); >@@ -6352,7 +6352,7 @@ prepare_bitmap2_buffer(void) > strerror(errno)); > return FALSE; > } >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > if ((info->bitmap2->buf = (char *)malloc(BUFSIZE_BITMAP)) == NULL) { > ERRMSG("Can't allocate memory for the 2nd bitmaps's buffer. %s\n", > strerror(errno)); >@@ -7582,7 +7582,7 @@ kdump_thread_function_cyclic(void *arg) { > > fd_memory = FD_MEMORY_PARALLEL(kdump_thread_args->thread_num); > >- if (info->fd_bitmap) { >+ if (info->fd_bitmap >= 0) { > bitmap_parallel.buf = malloc(BUFSIZE_BITMAP); > if (bitmap_parallel.buf == NULL){ > ERRMSG("Can't allocate memory for bitmap_parallel.buf. %s\n", >@@ -7628,7 +7628,7 @@ kdump_thread_function_cyclic(void *arg) { > pthread_mutex_lock(&info->current_pfn_mutex); > for (pfn = info->current_pfn; pfn < cycle->end_pfn; pfn++) { > dumpable = is_dumpable( >- info->fd_bitmap ? &bitmap_parallel : info->bitmap2, >+ info->fd_bitmap >= 0 ? &bitmap_parallel : info->bitmap2, > pfn, > cycle); > if (dumpable) >@@ -7723,7 +7723,7 @@ next: > retval = NULL; > > fail: >- if (bitmap_memory_parallel.fd > 0) >+ if (bitmap_memory_parallel.fd >= 0) > close(bitmap_memory_parallel.fd); > if (bitmap_parallel.buf != NULL) > free(bitmap_parallel.buf); >@@ -8461,7 +8461,7 @@ out: > > int > write_kdump_bitmap1(struct cycle *cycle) { >- if (info->bitmap1->fd) { >+ if (info->bitmap1->fd >= 0) { > return write_kdump_bitmap1_file(); > } else { > return write_kdump_bitmap1_buffer(cycle); >@@ -8470,7 +8470,7 @@ write_kdump_bitmap1(struct cycle *cycle) { > > int > write_kdump_bitmap2(struct cycle *cycle) { >- if (info->bitmap2->fd) { >+ if (info->bitmap2->fd >= 0) { > return write_kdump_bitmap2_file(); > } else { > return write_kdump_bitmap2_buffer(cycle); >@@ -8597,9 +8597,10 @@ close_vmcoreinfo(void) > void > close_dump_memory(void) > { >- if ((info->fd_memory = close(info->fd_memory)) < 0) >+ if (close(info->fd_memory) < 0) > ERRMSG("Can't close the dump memory(%s). %s\n", > info->name_memory, strerror(errno)); >+ info->fd_memory = -1; > } > > void >@@ -8608,9 +8609,10 @@ close_dump_file(void) > if (info->flag_flatten) > return; > >- if ((info->fd_dumpfile = close(info->fd_dumpfile)) < 0) >+ if (close(info->fd_dumpfile) < 0) > ERRMSG("Can't close the dump file(%s). %s\n", > info->name_dumpfile, strerror(errno)); >+ info->fd_dumpfile = -1; > } > > void >@@ -8620,9 +8622,10 @@ close_dump_bitmap(void) > && !info->flag_sadump && !info->flag_mem_usage) > return; > >- if ((info->fd_bitmap = close(info->fd_bitmap)) < 0) >+ if (close(info->fd_bitmap) < 0) > ERRMSG("Can't close the bitmap file(%s). %s\n", > info->name_bitmap, strerror(errno)); >+ info->fd_bitmap = -1; > free(info->name_bitmap); > info->name_bitmap = NULL; > } >@@ -8631,16 +8634,18 @@ void > close_kernel_file(void) > { > if (info->name_vmlinux) { >- if ((info->fd_vmlinux = close(info->fd_vmlinux)) < 0) { >+ if (close(info->fd_vmlinux) < 0) { > ERRMSG("Can't close the kernel file(%s). %s\n", > info->name_vmlinux, strerror(errno)); > } >+ info->fd_vmlinux = -1; > } > if (info->name_xen_syms) { >- if ((info->fd_xen_syms = close(info->fd_xen_syms)) < 0) { >+ if (close(info->fd_xen_syms) < 0) { > ERRMSG("Can't close the kernel file(%s). %s\n", > info->name_xen_syms, strerror(errno)); > } >+ info->fd_xen_syms = -1; > } > } > >@@ -10202,7 +10207,7 @@ reassemble_kdump_header(void) > > ret = TRUE; > out: >- if (fd > 0) >+ if (fd >= 0) > close(fd); > free(buf_bitmap); > >@@ -10212,7 +10217,7 @@ out: > int > reassemble_kdump_pages(void) > { >- int i, fd = 0, ret = FALSE; >+ int i, fd = -1, ret = FALSE; > off_t offset_first_ph, offset_ph_org, offset_eraseinfo; > off_t offset_data_new, offset_zero_page = 0; > mdf_pfn_t pfn, start_pfn, end_pfn; >@@ -10336,7 +10341,7 @@ reassemble_kdump_pages(void) > offset_data_new += pd.size; > } > close(fd); >- fd = 0; >+ fd = -1; > } > if (!write_cache_bufsz(&cd_pd)) > goto out; >@@ -10379,7 +10384,7 @@ reassemble_kdump_pages(void) > size_eraseinfo += SPLITTING_SIZE_EI(i); > > close(fd); >- fd = 0; >+ fd = -1; > } > if (size_eraseinfo) { > if (!write_cache_bufsz(&cd_data)) >@@ -10400,7 +10405,7 @@ out: > > if (data) > free(data); >- if (fd > 0) >+ if (fd >= 0) > close(fd); > > return ret; >@@ -10973,6 +10978,11 @@ main(int argc, char *argv[]) > strerror(errno)); > goto out; > } >+ info->fd_vmlinux = -1; >+ info->fd_xen_syms = -1; >+ info->fd_memory = -1; >+ info->fd_dumpfile = -1; >+ info->fd_bitmap = -1; > initialize_tables(); > > /* >@@ -11268,11 +11278,11 @@ out: > free(info->bitmap_memory->buf); > free(info->bitmap_memory); > } >- if (info->fd_memory) >+ if (info->fd_memory >= 0) > close(info->fd_memory); >- if (info->fd_dumpfile) >+ if (info->fd_dumpfile >= 0) > close(info->fd_dumpfile); >- if (info->fd_bitmap) >+ if (info->fd_bitmap >= 0) > close(info->fd_bitmap); > if (vt.node_online_map != NULL) > free(vt.node_online_map); >diff --git a/makedumpfile.h b/makedumpfile.h >index 533e5b8..1814139 100644 >--- a/makedumpfile.h >+++ b/makedumpfile.h >@@ -1955,7 +1955,7 @@ is_dumpable_file(struct dump_bitmap *bitmap, mdf_pfn_t pfn) > static inline int > is_dumpable(struct dump_bitmap *bitmap, mdf_pfn_t pfn, struct cycle *cycle) > { >- if (bitmap->fd == 0) { >+ if (bitmap->fd < 0) { > return is_dumpable_buffer(bitmap, pfn, cycle); > } else { > return is_dumpable_file(bitmap, pfn); >diff --git a/sadump_info.c b/sadump_info.c >index 5ff5595..f77a020 100644 >--- a/sadump_info.c >+++ b/sadump_info.c >@@ -1853,6 +1853,7 @@ sadump_add_diskset_info(char *name_memory) > } > > si->diskset_info[si->num_disks - 1].name_memory = name_memory; >+ si->diskset_info[si->num_disks - 1].fd_memory = -1; > > return TRUE; > } >@@ -1917,7 +1918,7 @@ free_sadump_info(void) > int i; > > for (i = 1; i < si->num_disks; ++i) { >- if (si->diskset_info[i].fd_memory) >+ if (si->diskset_info[i].fd_memory >= 0) > close(si->diskset_info[i].fd_memory); > if (si->diskset_info[i].sph_memory) > free(si->diskset_info[i].sph_memory); >-- >2.6.6 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v2 1/3] open_dump_bitmap: open bitmap file in non-cyclic case 2016-09-12 8:17 ` Atsushi Kumagai @ 2016-09-14 10:17 ` Martin Wilck 2016-09-14 10:17 ` [PATCH v2 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck 2016-09-14 10:17 ` [PATCH v2 3/3] close_dump_bitmap: simplify logic Martin Wilck 0 siblings, 2 replies; 24+ messages in thread From: Martin Wilck @ 2016-09-14 10:17 UTC (permalink / raw) To: ats-kumagai; +Cc: mwilck, ptesarik, kexec The logic of set_bitmap() requires that a bitmap fd exists in the non-cyclic case. --- makedumpfile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makedumpfile.c b/makedumpfile.c index d168dfd..6164468 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1365,7 +1365,7 @@ open_dump_bitmap(void) /* Unnecessary to open */ if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering - && !info->flag_sadump && !info->flag_mem_usage) + && !info->flag_sadump && !info->flag_mem_usage && info->flag_cyclic) return TRUE; tmpname = getenv("TMPDIR"); -- 2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v2 2/3] move call to open_dump_bitmap() to after call to initial() 2016-09-14 10:17 ` [PATCH v2 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck @ 2016-09-14 10:17 ` Martin Wilck 2016-09-14 10:17 ` [PATCH v2 3/3] close_dump_bitmap: simplify logic Martin Wilck 1 sibling, 0 replies; 24+ messages in thread From: Martin Wilck @ 2016-09-14 10:17 UTC (permalink / raw) To: ats-kumagai; +Cc: mwilck, ptesarik, kexec When open_files_for_creating_dumpfile() is called, we don't have all necessary information to determine whether a bitmap file is actually needed. In particular, we don't know whether info->flag_cyclic will ultimately be set. This patch moves the call to open_dump_bitmap() to after initialize() when all flags are known. For the dump_dmesg() path, no bitmap file is needed. --- makedumpfile.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 6164468..30e1fa8 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1480,9 +1480,6 @@ open_files_for_creating_dumpfile(void) if (!open_dump_memory()) return FALSE; - if (!open_dump_bitmap()) - return FALSE; - return TRUE; } @@ -9747,6 +9744,9 @@ create_dumpfile(void) if (!initial()) return FALSE; + if (!open_dump_bitmap()) + return FALSE; + /* create an array of translations from pfn to vmemmap pages */ if (info->flag_excludevm) { if (find_vmemmap() == FAILED) { @@ -10917,6 +10917,9 @@ int show_mem_usage(void) if (!initial()) return FALSE; + if (!open_dump_bitmap()) + return FALSE; + if (!prepare_bitmap_buffer()) return FALSE; -- 2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v2 3/3] close_dump_bitmap: simplify logic 2016-09-14 10:17 ` [PATCH v2 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 2016-09-14 10:17 ` [PATCH v2 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck @ 2016-09-14 10:17 ` Martin Wilck 2016-09-14 11:50 ` [PATCH v3 " Martin Wilck 1 sibling, 1 reply; 24+ messages in thread From: Martin Wilck @ 2016-09-14 10:17 UTC (permalink / raw) To: ats-kumagai; +Cc: mwilck, ptesarik, kexec The boolean expression replicates the logic of open_dump_bitmap(). It's simpler and less error-prone to simply check if fd_bitmap is valid. --- makedumpfile.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 30e1fa8..d46777c 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -8615,8 +8615,7 @@ close_dump_file(void) void close_dump_bitmap(void) { - if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering - && !info->flag_sadump && !info->flag_mem_usage) + if (!info->fd_bitmap) return; if (close(info->fd_bitmap) < 0) -- 2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 3/3] close_dump_bitmap: simplify logic 2016-09-14 10:17 ` [PATCH v2 3/3] close_dump_bitmap: simplify logic Martin Wilck @ 2016-09-14 11:50 ` Martin Wilck 2016-09-20 9:43 ` Atsushi Kumagai 0 siblings, 1 reply; 24+ messages in thread From: Martin Wilck @ 2016-09-14 11:50 UTC (permalink / raw) To: ats-kumagai; +Cc: mwilck, ptesarik, kexec The boolean expression replicates the logic of open_dump_bitmap(). It's simpler and less error-prone to simply check if fd_bitmap is valid. (I forgot to apply the very change that Petr had asked for in V2 of this patch. I'm very sorry. Please apply V3). --- makedumpfile.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 30e1fa8..0f5be7f 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -8615,8 +8615,7 @@ close_dump_file(void) void close_dump_bitmap(void) { - if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering - && !info->flag_sadump && !info->flag_mem_usage) + if (info->fd_bitmap < 0) return; if (close(info->fd_bitmap) < 0) -- 2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* RE: [PATCH v3 3/3] close_dump_bitmap: simplify logic 2016-09-14 11:50 ` [PATCH v3 " Martin Wilck @ 2016-09-20 9:43 ` Atsushi Kumagai 2016-09-20 10:31 ` Martin Wilck 2016-09-20 10:33 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 0 siblings, 2 replies; 24+ messages in thread From: Atsushi Kumagai @ 2016-09-20 9:43 UTC (permalink / raw) To: Martin Wilck; +Cc: ptesarik@suse.cz, kexec@lists.infradead.org Hello Martin, >The boolean expression replicates the logic of open_dump_bitmap(). >It's simpler and less error-prone to simply check if fd_bitmap is >valid. > >(I forgot to apply the very change that Petr had asked for in V2 of >this patch. I'm very sorry. Please apply V3). This version looks good, so could you add your Signed-off-by ? Thanks, Atsushi Kumagai >--- > makedumpfile.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > >diff --git a/makedumpfile.c b/makedumpfile.c >index 30e1fa8..0f5be7f 100644 >--- a/makedumpfile.c >+++ b/makedumpfile.c >@@ -8615,8 +8615,7 @@ close_dump_file(void) > void > close_dump_bitmap(void) > { >- if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering >- && !info->flag_sadump && !info->flag_mem_usage) >+ if (info->fd_bitmap < 0) > return; > > if (close(info->fd_bitmap) < 0) >-- >2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH v3 3/3] close_dump_bitmap: simplify logic 2016-09-20 9:43 ` Atsushi Kumagai @ 2016-09-20 10:31 ` Martin Wilck 2016-09-20 10:33 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 1 sibling, 0 replies; 24+ messages in thread From: Martin Wilck @ 2016-09-20 10:31 UTC (permalink / raw) To: Atsushi Kumagai; +Cc: ptesarik@suse.cz, kexec@lists.infradead.org Kumagai-san, On Tue, 2016-09-20 at 09:43 +0000, Atsushi Kumagai wrote: > > This version looks good, so could you add your Signed-off-by ? OK, I'll resend the whole v3 series. Martin _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
* [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case 2016-09-20 9:43 ` Atsushi Kumagai 2016-09-20 10:31 ` Martin Wilck @ 2016-09-20 10:33 ` Martin Wilck 2016-09-20 10:33 ` [PATCH v3 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck ` (2 more replies) 1 sibling, 3 replies; 24+ messages in thread From: Martin Wilck @ 2016-09-20 10:33 UTC (permalink / raw) To: ats-kumagai; +Cc: Martin Wilck, ptesarik, kexec The logic of set_bitmap() requires that a bitmap fd exists in the non-cyclic case. Signed-off-by: Martin Wilck <mwilck@suse.de> --- makedumpfile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makedumpfile.c b/makedumpfile.c index d168dfd..6164468 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1365,7 +1365,7 @@ open_dump_bitmap(void) /* Unnecessary to open */ if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering - && !info->flag_sadump && !info->flag_mem_usage) + && !info->flag_sadump && !info->flag_mem_usage && info->flag_cyclic) return TRUE; tmpname = getenv("TMPDIR"); -- 2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 2/3] move call to open_dump_bitmap() to after call to initial() 2016-09-20 10:33 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck @ 2016-09-20 10:33 ` Martin Wilck 2016-09-20 10:33 ` [PATCH v3 3/3] close_dump_bitmap: simplify logic Martin Wilck 2016-09-21 6:29 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Atsushi Kumagai 2 siblings, 0 replies; 24+ messages in thread From: Martin Wilck @ 2016-09-20 10:33 UTC (permalink / raw) To: ats-kumagai; +Cc: Martin Wilck, ptesarik, kexec When open_files_for_creating_dumpfile() is called, we don't have all necessary information to determine whether a bitmap file is actually needed. In particular, we don't know whether info->flag_cyclic will ultimately be set. This patch moves the call to open_dump_bitmap() to after initialize() when all flags are known. For the dump_dmesg() path, no bitmap file is needed. Signed-off-by: Martin Wilck <mwilck@suse.de> --- makedumpfile.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 6164468..30e1fa8 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -1480,9 +1480,6 @@ open_files_for_creating_dumpfile(void) if (!open_dump_memory()) return FALSE; - if (!open_dump_bitmap()) - return FALSE; - return TRUE; } @@ -9747,6 +9744,9 @@ create_dumpfile(void) if (!initial()) return FALSE; + if (!open_dump_bitmap()) + return FALSE; + /* create an array of translations from pfn to vmemmap pages */ if (info->flag_excludevm) { if (find_vmemmap() == FAILED) { @@ -10917,6 +10917,9 @@ int show_mem_usage(void) if (!initial()) return FALSE; + if (!open_dump_bitmap()) + return FALSE; + if (!prepare_bitmap_buffer()) return FALSE; -- 2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH v3 3/3] close_dump_bitmap: simplify logic 2016-09-20 10:33 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 2016-09-20 10:33 ` [PATCH v3 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck @ 2016-09-20 10:33 ` Martin Wilck 2016-09-21 6:29 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Atsushi Kumagai 2 siblings, 0 replies; 24+ messages in thread From: Martin Wilck @ 2016-09-20 10:33 UTC (permalink / raw) To: ats-kumagai; +Cc: Martin Wilck, ptesarik, kexec The boolean expression replicates the logic of open_dump_bitmap(). It's simpler and less error-prone to simply check if fd_bitmap is valid. Signed-off-by: Martin Wilck <mwilck@suse.de> --- makedumpfile.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index 30e1fa8..0f5be7f 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -8615,8 +8615,7 @@ close_dump_file(void) void close_dump_bitmap(void) { - if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering - && !info->flag_sadump && !info->flag_mem_usage) + if (info->fd_bitmap < 0) return; if (close(info->fd_bitmap) < 0) -- 2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 24+ messages in thread
* RE: [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case 2016-09-20 10:33 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 2016-09-20 10:33 ` [PATCH v3 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck 2016-09-20 10:33 ` [PATCH v3 3/3] close_dump_bitmap: simplify logic Martin Wilck @ 2016-09-21 6:29 ` Atsushi Kumagai 2 siblings, 0 replies; 24+ messages in thread From: Atsushi Kumagai @ 2016-09-21 6:29 UTC (permalink / raw) To: Martin Wilck; +Cc: ptesarik@suse.cz, kexec@lists.infradead.org Hello Martin, >The logic of set_bitmap() requires that a bitmap fd exists in the >non-cyclic case. > >Signed-off-by: Martin Wilck <mwilck@suse.de> I'll merge this version into v1.6.1, thanks for your work. Regards, Atsushi Kumagai >--- > makedumpfile.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > >diff --git a/makedumpfile.c b/makedumpfile.c >index d168dfd..6164468 100644 >--- a/makedumpfile.c >+++ b/makedumpfile.c >@@ -1365,7 +1365,7 @@ open_dump_bitmap(void) > > /* Unnecessary to open */ > if (!info->working_dir && !info->flag_reassemble && !info->flag_refiltering >- && !info->flag_sadump && !info->flag_mem_usage) >+ && !info->flag_sadump && !info->flag_mem_usage && info->flag_cyclic) > return TRUE; > > tmpname = getenv("TMPDIR"); >-- >2.9.3 _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 24+ messages in thread
end of thread, other threads:[~2016-09-21 6:33 UTC | newest] Thread overview: 24+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-08-10 12:56 [PATCH 0/3] makedumpfile: fix segfault with -X in XEN environment Martin Wilck 2016-08-10 12:56 ` [PATCH 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 2016-08-10 12:56 ` [PATCH 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck 2016-08-10 12:56 ` [PATCH 3/3] close_dump_bitmap: simplify logic Martin Wilck 2016-08-10 13:08 ` Petr Tesarik 2016-08-10 13:35 ` Martin Wilck 2016-08-16 0:37 ` Atsushi Kumagai 2016-08-16 5:59 ` Petr Tesarik 2016-08-17 7:37 ` Martin Wilck 2016-09-06 8:22 ` [PATCH] Cleanup: Use a negative number for uninitialized file descriptors Petr Tesarik 2016-09-09 6:27 ` Atsushi Kumagai 2016-09-09 7:31 ` Petr Tesarik 2016-09-09 8:11 ` [PATCH v2] " Petr Tesarik 2016-09-12 8:17 ` Atsushi Kumagai 2016-09-14 10:17 ` [PATCH v2 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 2016-09-14 10:17 ` [PATCH v2 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck 2016-09-14 10:17 ` [PATCH v2 3/3] close_dump_bitmap: simplify logic Martin Wilck 2016-09-14 11:50 ` [PATCH v3 " Martin Wilck 2016-09-20 9:43 ` Atsushi Kumagai 2016-09-20 10:31 ` Martin Wilck 2016-09-20 10:33 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Martin Wilck 2016-09-20 10:33 ` [PATCH v3 2/3] move call to open_dump_bitmap() to after call to initial() Martin Wilck 2016-09-20 10:33 ` [PATCH v3 3/3] close_dump_bitmap: simplify logic Martin Wilck 2016-09-21 6:29 ` [PATCH v3 1/3] open_dump_bitmap: open bitmap file in non-cyclic case Atsushi Kumagai
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).