Wipe excluded pages that are written into ELF dump file
Subsystems (2)
PATCH 1/1 Wipe excluded pages that are written into ELF dump file
When a page is excluded by any of the existing dump levels, that page may still be written to the ELF dump file, depending upon the PFN_EXCLUDED mechanism.
The PFN_EXCLUDED mechanism looks for N consecutive "not dumpable" pages, and if found, the current ELF segment is closed out and a new ELF segment started, at the next dumpable page. Otherwise, if the PFN_EXCLUDED criteria is not meet (that is, there is a mix of dumpable and not dumpable pages, but not N consecutive not dumpable pages) all pages are written to the dump file.
This patch implements a mechanism for those "not dumpable" pages that are written to the ELF dump file to fill those pages with constant data, rather than the original data. In other words, the dump file still contains the page, but its data is wiped.
The motivation for doing this is to protect real user (customer) data from "leaking" through to a dump file when that data was intended to be omitted.
--- makedumpfile.8 | 8 ++++++++ makedumpfile.c | 32 +++++++++++++++++++++++++------- makedumpfile.h | 2 ++ 3 files changed, 35 insertions(+), 7 deletions(-)
makedumpfile.8 +8 -0
@@ -621,6 +621,14 @@ order from left to right. \fIVMCORE\fRs are assembled into a single # makedumpfile \-x vmlinux \-\-diskset=vmcore1 \-\-diskset=vmcore2 dumpfile .TP +\fB\-\-fill-excluded-pages FILL_VALUE\fR +For the ELF dump file format, excluded pages may be written into the dump +file, but the page contents are wiped. This option allows the wipe value +to be changed from the default 0x5041474557495045UL "PAGEWIPE", or on +32-bit systems "WIPE". + + +.TP \fB\-D\fR Print debugging message.
makedumpfile.c +25 -7
@@ -7139,7 +7139,7 @@ out:int write_elf_load_segment (struct cache_data *cd_page,unsigned long long paddr, -off_t off_memory,long long size) +off_t off_memory,long long size,struct cycle *cycle) {long page_size = info->page_size;long long bufsz_write;
@@ -7163,10 +7163,23 @@ write_elf_load_segment(struct cache_data *cd_page, unsigned long long paddr,else bufsz_write = size; -if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { -ERRMSG ("Can't read the dump memory(%s). %s\n" , - info->name_memory,strerror (errno)); -return FALSE; +if (!is_dumpable (info->bitmap2,paddr_to_pfn (paddr), cycle)) { +unsigned k; +unsigned long *p = (unsigned long *)buf; +for (k =0 ; k < info->page_size; k +=sizeof (unsigned long )) { + *p++ = info->fill_excluded_pages_value; + } +if (lseek (info->fd_memory, bufsz_write,SEEK_CUR ) <0 ) { +ERRMSG ("Can't seek the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } + }else { +if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { +ERRMSG ("Can't read the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } }filter_data_buffer ((unsigned char *)buf, paddr, bufsz_write); paddr += bufsz_write;
@@ -7431,7 +7444,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; load.p_paddr += load.p_memsz;
@@ -7473,7 +7486,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; off_seg_load += load.p_filesz;
@@ -11057,6 +11070,7 @@ static struct option longopts[] = { {"splitblock-size", required_argument, NULL, OPT_SPLITBLOCK_SIZE}, {"work-dir", required_argument, NULL, OPT_WORKING_DIR}, {"num-threads", required_argument, NULL, OPT_NUM_THREADS}, + {"fill-excluded-pages", required_argument, NULL, OPT_FILL_EXCLUDED_PAGES}, {0, 0, 0, 0} };
@@ -11083,6 +11097,7 @@ main(int argc, char *argv[]) info->fd_dumpfile =-1 ; info->fd_bitmap =-1 ; info->kaslr_offset =0 ; + info->fill_excluded_pages_value =0x5041474557495045UL ;initialize_tables ();/*
@@ -11218,6 +11233,9 @@ main(int argc, char *argv[])case OPT_NUM_THREADS : info->num_threads =MAX (atoi (optarg),0 );break ; +case OPT_FILL_EXCLUDED_PAGES : + info->fill_excluded_pages_value =strtoul (optarg,NULL ,0 ); +break ;case '?' :MSG ("Commandline parameter is invalid.\n" );MSG ("Try `makedumpfile --help' for more information.\n" );
makedumpfile.h +2 -0
@@ -1266,6 +1266,7 @@ struct DumpInfo {int vmemmap_cnt;struct ppc64_vmemmap *vmemmap_list;unsigned long kaslr_offset; +unsigned long fill_excluded_pages_value;/* fill value for excluded pages */ /* * page table info for ppc64
@@ -2275,6 +2276,7 @@ struct elf_prstatus {#define OPT_WORKING_DIR OPT_START+15#define OPT_NUM_THREADS OPT_START+16#define OPT_PARTIAL_DMESG OPT_START+17 +#define OPT_FILL_EXCLUDED_PAGES OPT_START+18/* * Function Prototype.
Signature · 7 lines
2.7.4 _______________________________________________ kexec mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kexec
Quoted 33 lines · Eric DeVolder
When a page is excluded by any of the existing dump levels, that page may still be written to the ELF dump file, depending upon the
PFN_EXCLUDEDmechanism.The
PFN_EXCLUDEDmechanism looks for N consecutive "not dumpable" pages, and if found, the current ELF segment is closed out and a new ELF segment started, at the next dumpable page. Otherwise, if thePFN_EXCLUDEDcriteria is not meet (that is, there is a mix of dumpable and not dumpable pages, but not N consecutive not dumpable pages) all pages are written to the dump file.This patch implements a mechanism for those "not dumpable" pages that are written to the ELF dump file to fill those pages with constant data, rather than the original data. In other words, the dump file still contains the page, but its data is wiped.
The motivation for doing this is to protect real user (customer) data from "leaking" through to a dump file when that data was intended to be omitted.
Signed-off-by Eric DeVolder <[email protected]>--- makedumpfile.8 | 8 ++++++++ makedumpfile.c | 32 +++++++++++++++++++++++++------- makedumpfile.h | 2 ++ 3 files changed, 35 insertions(+), 7 deletions(-)makedumpfile.8 +0
-0
makedumpfile.8 order from left to right. \fIVMCORE\fRs are assembled into a single · line 624
Quoted 4 lines
makedumpfile.8 +1
-0@@ -621,6 +621,14 @@ order from left to right. \fIVMCORE\fRs are assembled into a single # makedumpfile \-x vmlinux \-\-diskset=vmcore1 \-\-diskset=vmcore2 dumpfile .TP +\fB\-\-fill-excluded-pages FILL_VALUE\fR
I am OK with --fill-excluded-pages to change default value but it is not needed in my opinion. However, I think that we should have --no-fill-excluded-pages variant. Just in case if somebody wish to disable default behavior
makedumpfile.8 order from left to right. \fIVMCORE\fRs are assembled into a single · line 628
Quoted 4 lines
makedumpfile.8 +4
-0+For the ELF dump file format, excluded pages may be written into the dump +file, but the page contents are wiped. This option allows the wipe value +to be changed from the default 0x5041474557495045UL "PAGEWIPE", or on +32-bit systems "WIPE".
0xDEAD9A6E == DEADPAGE where P == 9 (do you have better figure for P?) and G == 6
This seems better for me because you do not need to convert it to ASCII to see what it is. And fills exactly 32-bits.
Quoted 104 lines
makedumpfile.8 +3
-0+ + +.TP \fB\-D\fR Print debugging message.makedumpfile.c +25
-7@@ -7139,7 +7139,7 @@ out:int write_elf_load_segment (struct cache_data *cd_page,unsigned long long paddr, -off_t off_memory,long long size) +off_t off_memory,long long size,struct cycle *cycle) {long page_size = info->page_size;long long bufsz_write;@@ -7163,10 +7163,23 @@ write_elf_load_segment(struct cache_data *cd_page, unsigned long long paddr,else bufsz_write = size; -if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { -ERRMSG ("Can't read the dump memory(%s). %s\n" , - info->name_memory,strerror (errno)); -return FALSE; +if (!is_dumpable (info->bitmap2,paddr_to_pfn (paddr), cycle)) { +unsigned k; +unsigned long *p = (unsigned long *)buf; +for (k =0 ; k < info->page_size; k +=sizeof (unsigned long )) { + *p++ = info->fill_excluded_pages_value; + } +if (lseek (info->fd_memory, bufsz_write,SEEK_CUR ) <0 ) { +ERRMSG ("Can't seek the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } + }else { +if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { +ERRMSG ("Can't read the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } }filter_data_buffer ((unsigned char *)buf, paddr, bufsz_write); paddr += bufsz_write;@@ -7431,7 +7444,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; load.p_paddr += load.p_memsz;@@ -7473,7 +7486,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; off_seg_load += load.p_filesz;@@ -11057,6 +11070,7 @@ static struct option longopts[] = { {"splitblock-size", required_argument, NULL, OPT_SPLITBLOCK_SIZE}, {"work-dir", required_argument, NULL, OPT_WORKING_DIR}, {"num-threads", required_argument, NULL, OPT_NUM_THREADS}, + {"fill-excluded-pages", required_argument, NULL, OPT_FILL_EXCLUDED_PAGES}, {0, 0, 0, 0} };@@ -11083,6 +11097,7 @@ main(int argc, char *argv[]) info->fd_dumpfile =-1 ; info->fd_bitmap =-1 ; info->kaslr_offset =0 ; + info->fill_excluded_pages_value =0x5041474557495045UL ;initialize_tables ();/* @@ -11218,6 +11233,9 @@ main(int argc, char *argv[])case OPT_NUM_THREADS : info->num_threads =MAX (atoi (optarg),0 );break ; +case OPT_FILL_EXCLUDED_PAGES : + info->fill_excluded_pages_value =strtoul (optarg,NULL ,0 ); +break ;case '?' :MSG ("Commandline parameter is invalid.\n" );MSG ("Try `makedumpfile --help' for more information.\n" );makedumpfile.h +1
-0@@ -1266,6 +1266,7 @@ struct DumpInfo {int vmemmap_cnt;struct ppc64_vmemmap *vmemmap_list;unsigned long kaslr_offset; +unsigned long fill_excluded_pages_value;/* fill value for excluded pages */ /* * page table info for ppc64
makedumpfile.h struct elf_prstatus { · line 2279
Quoted 4 lines
makedumpfile.h +1
-0@@ -2275,6 +2276,7 @@ struct elf_prstatus {#define OPT_WORKING_DIR OPT_START+15#define OPT_NUM_THREADS OPT_START+16#define OPT_PARTIAL_DMESG OPT_START+17 +#define OPT_FILL_EXCLUDED_PAGES OPT_START+18
Oh, no please fix alignment somehow here. Separate patch? And I think that just in case it should be:
#define OPT_FILL_EXCLUDED_PAGES (OPT_START+18)
And probably this applies to others. Next patch?
Daniel
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Hello,
Quoted 36 lines · Eric DeVolder
Quoted 35 lines
When a page is excluded by any of the existing dump levels, that page may still be written to the ELF dump file, depending upon the
PFN_EXCLUDEDmechanism.The
PFN_EXCLUDEDmechanism looks for N consecutive "not dumpable" pages, and if found, the current ELF segment is closed out and a new ELF segment started, at the next dumpable page. Otherwise, if thePFN_EXCLUDEDcriteria is not meet (that is, there is a mix of dumpable and not dumpable pages, but not N consecutive not dumpable pages) all pages are written to the dump file.This patch implements a mechanism for those "not dumpable" pages that are written to the ELF dump file to fill those pages with constant data, rather than the original data. In other words, the dump file still contains the page, but its data is wiped.
The motivation for doing this is to protect real user (customer) data from "leaking" through to a dump file when that data was intended to be omitted.
Signed-off-by Eric DeVolder <[email protected]>--- makedumpfile.8 | 8 ++++++++ makedumpfile.c | 32 +++++++++++++++++++++++++------- makedumpfile.h | 2 ++ 3 files changed, 35 insertions(+), 7 deletions(-)makedumpfile.8 +0
-0@@ -621,6 +621,14 @@ order from left to right. \fIVMCORE\fRs are assembled into a single # makedumpfile \-x vmlinux \-\-diskset=vmcore1 \-\-diskset=vmcore2 dumpfile
Quoted 6 lines
makedumpfile.8 order from left to right. \fIVMCORE\fRs are assembled into a single · line 624
Quoted 2 lines
makedumpfile.8 +1
-0.TP +\fB\-\-fill-excluded-pages FILL_VALUE\fRI am OK with --fill-excluded-pages to change default value but it is not needed in my opinion. However, I think that we should have --no-fill-excluded-pages variant. Just in case if somebody wish to disable default behavior
Umm, I can't think of any cases where a user expects "not dumpable pages" to remain while he specifies a dump level to exclude those pages. That's why I suggested that this feature should be default.
BTW, could you tell me the benefits of making FILL_VALUE changeable ?
Quoted 9 lines
makedumpfile.8 order from left to right. \fIVMCORE\fRs are assembled into a single · line 628
Quoted 4 lines
makedumpfile.8 +4
-0+For the ELF dump file format, excluded pages may be written into the dump +file, but the page contents are wiped. This option allows the wipe value +to be changed from the default 0x5041474557495045UL "PAGEWIPE", or on +32-bit systems "WIPE".
0xDEAD9A6E== DEADPAGE where P == 9 (do you have better figure for P?) and G == 6This seems better for me because you do not need to convert it to ASCII to see what it is. And fills exactly 32-bits.
I'll leave it up to you :-)
Thanks,
Atsushi Kumagai
Quoted 112 lines
Quoted 104 lines
makedumpfile.8 +3
-0+ + +.TP \fB\-D\fR Print debugging message.makedumpfile.c +25
-7@@ -7139,7 +7139,7 @@ out:int write_elf_load_segment (struct cache_data *cd_page,unsigned long long paddr, -off_t off_memory,long long size) +off_t off_memory,long long size,struct cycle *cycle) {long page_size = info->page_size;long long bufsz_write;@@ -7163,10 +7163,23 @@ write_elf_load_segment(struct cache_data *cd_page, unsigned long long paddr,else bufsz_write = size; -if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { -ERRMSG ("Can't read the dump memory(%s). %s\n" , - info->name_memory,strerror (errno)); -return FALSE; +if (!is_dumpable (info->bitmap2,paddr_to_pfn (paddr), cycle)) { +unsigned k; +unsigned long *p = (unsigned long *)buf; +for (k =0 ; k < info->page_size; k +=sizeof (unsigned long )) { + *p++ = info->fill_excluded_pages_value; + } +if (lseek (info->fd_memory, bufsz_write,SEEK_CUR ) <0 ) { +ERRMSG ("Can't seek the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } + }else { +if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { +ERRMSG ("Can't read the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } }filter_data_buffer ((unsigned char *)buf, paddr, bufsz_write); paddr += bufsz_write;@@ -7431,7 +7444,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; load.p_paddr += load.p_memsz;@@ -7473,7 +7486,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; off_seg_load += load.p_filesz;@@ -11057,6 +11070,7 @@ static struct option longopts[] = { {"splitblock-size", required_argument, NULL, OPT_SPLITBLOCK_SIZE}, {"work-dir", required_argument, NULL, OPT_WORKING_DIR}, {"num-threads", required_argument, NULL, OPT_NUM_THREADS}, + {"fill-excluded-pages", required_argument, NULL, OPT_FILL_EXCLUDED_PAGES}, {0, 0, 0, 0} };@@ -11083,6 +11097,7 @@ main(int argc, char *argv[]) info->fd_dumpfile =-1 ; info->fd_bitmap =-1 ; info->kaslr_offset =0 ; + info->fill_excluded_pages_value =0x5041474557495045UL ;initialize_tables ();/* @@ -11218,6 +11233,9 @@ main(int argc, char *argv[])case OPT_NUM_THREADS : info->num_threads =MAX (atoi (optarg),0 );break ; +case OPT_FILL_EXCLUDED_PAGES : + info->fill_excluded_pages_value =strtoul (optarg,NULL ,0 ); +break ;case '?' :MSG ("Commandline parameter is invalid.\n" );MSG ("Try `makedumpfile --help' for more information.\n" );makedumpfile.h +1
-0@@ -1266,6 +1266,7 @@ struct DumpInfo {int vmemmap_cnt;struct ppc64_vmemmap *vmemmap_list;unsigned long kaslr_offset; +unsigned long fill_excluded_pages_value;/* fill value for excluded pages */ /* * page table info for ppc64 makedumpfile.h struct elf_prstatus { · line 2279
Quoted 4 lines
makedumpfile.h +1
-0@@ -2275,6 +2276,7 @@ struct elf_prstatus {#define OPT_WORKING_DIR OPT_START+15#define OPT_NUM_THREADS OPT_START+16#define OPT_PARTIAL_DMESG OPT_START+17 +#define OPT_FILL_EXCLUDED_PAGES OPT_START+18Oh, no please fix alignment somehow here. Separate patch? And I think that just in case it should be:
Quoted 5 lines
#define
OPT_FILL_EXCLUDED_PAGES(OPT_START+18)And probably this applies to others. Next patch?
Daniel
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 45 lines · Atsushi Kumagai
Hello,
Quoted 36 lines · Eric DeVolder
Quoted 35 lines
When a page is excluded by any of the existing dump levels, that page may still be written to the ELF dump file, depending upon the
PFN_EXCLUDEDmechanism.The
PFN_EXCLUDEDmechanism looks for N consecutive "not dumpable" pages, and if found, the current ELF segment is closed out and a new ELF segment started, at the next dumpable page. Otherwise, if thePFN_EXCLUDEDcriteria is not meet (that is, there is a mix of dumpable and not dumpable pages, but not N consecutive not dumpable pages) all pages are written to the dump file.This patch implements a mechanism for those "not dumpable" pages that are written to the ELF dump file to fill those pages with constant data, rather than the original data. In other words, the dump file still contains the page, but its data is wiped.
The motivation for doing this is to protect real user (customer) data from "leaking" through to a dump file when that data was intended to be omitted.
Signed-off-by Eric DeVolder <[email protected]>--- makedumpfile.8 | 8 ++++++++ makedumpfile.c | 32 +++++++++++++++++++++++++------- makedumpfile.h | 2 ++ 3 files changed, 35 insertions(+), 7 deletions(-)makedumpfile.8 +0
-0@@ -621,6 +621,14 @@ order from left to right. \fIVMCORE\fRs are assembled into a single # makedumpfile \-x vmlinux \-\-diskset=vmcore1 \-\-diskset=vmcore2 dumpfileQuoted 6 lines
makedumpfile.8 order from left to right. \fIVMCORE\fRs are assembled into a single · line 624
Quoted 2 lines
makedumpfile.8 +1
-0.TP +\fB\-\-fill-excluded-pages FILL_VALUE\fRI am OK with --fill-excluded-pages to change default value but it is not needed in my opinion. However, I think that we should have --no-fill-excluded-pages variant. Just in case if somebody wish to disable default behavior
Quoted 3 lines
Umm, I can't think of any cases where a user expects "not dumpable pages" to remain while he specifies a dump level to exclude those pages. That's why I suggested that this feature should be default.
I have changed the patch to do this behavior; I have eliminated the option altogether. If I have misunderstood, please indicate as such.
Quoted 2 lines
BTW, could you tell me the benefits of making
FILL_VALUEchangeable ?
The motivation for this was debugging; perhaps not very useful given this is post-mortem debugging...
I've posted v2 of the patch.
Thanks,
eric
Quoted 132 lines
Quoted 10 lines
makedumpfile.8 order from left to right. \fIVMCORE\fRs are assembled into a single · line 628
Quoted 5 lines
makedumpfile.8 +4
-0+For the ELF dump file format, excluded pages may be written into the dump +file, but the page contents are wiped. This option allows the wipe value +to be changed from the default 0x5041474557495045UL "PAGEWIPE", or on +32-bit systems "WIPE".
0xDEAD9A6E== DEADPAGE where P == 9 (do you have better figure for P?) and G == 6This seems better for me because you do not need to convert it to ASCII to see what it is. And fills exactly 32-bits.
I'll leave it up to you :-)
Thanks,
Atsushi KumagaiQuoted 116 lines
Quoted 104 lines
makedumpfile.8 +3
-0+ + +.TP \fB\-D\fR Print debugging message.makedumpfile.c +25
-7@@ -7139,7 +7139,7 @@ out:int write_elf_load_segment (struct cache_data *cd_page,unsigned long long paddr, -off_t off_memory,long long size) +off_t off_memory,long long size,struct cycle *cycle) {long page_size = info->page_size;long long bufsz_write;@@ -7163,10 +7163,23 @@ write_elf_load_segment(struct cache_data *cd_page, unsigned long long paddr,else bufsz_write = size; -if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { -ERRMSG ("Can't read the dump memory(%s). %s\n" , - info->name_memory,strerror (errno)); -return FALSE; +if (!is_dumpable (info->bitmap2,paddr_to_pfn (paddr), cycle)) { +unsigned k; +unsigned long *p = (unsigned long *)buf; +for (k =0 ; k < info->page_size; k +=sizeof (unsigned long )) { + *p++ = info->fill_excluded_pages_value; + } +if (lseek (info->fd_memory, bufsz_write,SEEK_CUR ) <0 ) { +ERRMSG ("Can't seek the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } + }else { +if (read (info->fd_memory, buf, bufsz_write) != bufsz_write) { +ERRMSG ("Can't read the dump memory(%s). %s\n" , + info->name_memory,strerror (errno)); +return FALSE; + } }filter_data_buffer ((unsigned char *)buf, paddr, bufsz_write); paddr += bufsz_write;@@ -7431,7 +7444,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; load.p_paddr += load.p_memsz;@@ -7473,7 +7486,7 @@ write_elf_pages_cyclic(struct cache_data *cd_header, struct cache_data *cd_page)*/ if (load.p_filesz)if (!write_elf_load_segment (cd_page, paddr, - off_memory, load.p_filesz)) + off_memory, load.p_filesz, &cycle))return FALSE; off_seg_load += load.p_filesz;@@ -11057,6 +11070,7 @@ static struct option longopts[] = { {"splitblock-size", required_argument, NULL, OPT_SPLITBLOCK_SIZE}, {"work-dir", required_argument, NULL, OPT_WORKING_DIR}, {"num-threads", required_argument, NULL, OPT_NUM_THREADS}, + {"fill-excluded-pages", required_argument, NULL, OPT_FILL_EXCLUDED_PAGES}, {0, 0, 0, 0} };@@ -11083,6 +11097,7 @@ main(int argc, char *argv[]) info->fd_dumpfile =-1 ; info->fd_bitmap =-1 ; info->kaslr_offset =0 ; + info->fill_excluded_pages_value =0x5041474557495045UL ;initialize_tables ();/* @@ -11218,6 +11233,9 @@ main(int argc, char *argv[])case OPT_NUM_THREADS : info->num_threads =MAX (atoi (optarg),0 );break ; +case OPT_FILL_EXCLUDED_PAGES : + info->fill_excluded_pages_value =strtoul (optarg,NULL ,0 ); +break ;case '?' :MSG ("Commandline parameter is invalid.\n" );MSG ("Try `makedumpfile --help' for more information.\n" );makedumpfile.h +1
-0@@ -1266,6 +1266,7 @@ struct DumpInfo {int vmemmap_cnt;struct ppc64_vmemmap *vmemmap_list;unsigned long kaslr_offset; +unsigned long fill_excluded_pages_value;/* fill value for excluded pages */ /* * page table info for ppc64 makedumpfile.h struct elf_prstatus { · line 2279
Quoted 4 lines
makedumpfile.h +1
-0@@ -2275,6 +2276,7 @@ struct elf_prstatus {#define OPT_WORKING_DIR OPT_START+15#define OPT_NUM_THREADS OPT_START+16#define OPT_PARTIAL_DMESG OPT_START+17 +#define OPT_FILL_EXCLUDED_PAGES OPT_START+18Oh, no please fix alignment somehow here. Separate patch? And I think that just in case it should be:
#define
OPT_FILL_EXCLUDED_PAGES(OPT_START+18)And probably this applies to others. Next patch?
Quoted 8 lines
Quoted 1 line
Daniel
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec
Quoted 1 line · Daniel Kiper
On Mon, Jul 31, 2017 at 06:35:30AM -0700, Eric DeVolder wrote:
[...snip...]
Quoted 21 lines
Quoted 13 lines
makedumpfile.h +1
-0@@ -1266,6 +1266,7 @@ struct DumpInfo {int vmemmap_cnt;struct ppc64_vmemmap *vmemmap_list;unsigned long kaslr_offset; +unsigned long fill_excluded_pages_value;/* fill value for excluded pages */ /* * page table info for ppc64 makedumpfile.h struct elf_prstatus { · line 2279
Quoted 4 lines
makedumpfile.h +1
-0@@ -2275,6 +2276,7 @@ struct elf_prstatus {#define OPT_WORKING_DIR OPT_START+15#define OPT_NUM_THREADS OPT_START+16#define OPT_PARTIAL_DMESG OPT_START+17 +#define OPT_FILL_EXCLUDED_PAGES OPT_START+18Oh, no please fix alignment somehow here. Separate patch? And I think that just in case it should be:
Quoted 3 lines
#define
OPT_FILL_EXCLUDED_PAGES(OPT_START+18)And probably this applies to others. Next patch?
I will fix formatting in a subsequent patch.
eric
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec