>>>>>> Thanks for your report, I have received this. >>>>>> I'm on vacation until Mar 8, I'll review it when I return from vacation. >>>>> >>>>> Any further comment on it? >>>>> Otherwise, I will send a v2 after accommodating concern from Xunlei. >>>> >>>> Unfortunately, it doesn't seem like I can make time anymore for review this week, >>>> but at least this patch doesn't seem to work in my environment (linux 4.8 without kaslr). >>>> Do you have any ideas ? >>> >>> I see, why it would have caused. I have not tested this case, but I hope my v2 >>> should not have this issue. >> >> Umm, v2 still doesn't work in my environment... >> It seems that I have to investigate this deeper. > >Hummm, I thought we would see file_vmcoreinfo as NULL in >get_kaslr_offset_x86_64() in your case. However, it's not true. > >I think, it will have to be initialized with NULL in main(). > >Can you please try following fixup on top of this series: I found the cause, please see below: initial() + find_kaslr_offsets() + open_vmcoreinfo() + get_kaslr_offset() // set info->kaslr_offset + close_vmcoreinfo() gather_filter_info() (snip) + resolve_config_entry() + get_kaslr_offset() // occur SIGSEGV since info->file_vmcoreinfo is closed The cause code is in [PATCH v2 1/2], diff --git a/erase_info.c b/erase_info.c index f2ba914..60abfa1 100644 --- a/erase_info.c +++ b/erase_info.c @@ -1088,6 +1088,7 @@ resolve_config_entry(struct config_entry *ce, unsigned long long base_vaddr, ce->line, ce->name); return FALSE; } + ce->sym_addr += get_kaslr_offset(ce->sym_addr); ce->type_name = get_symbol_type_name(ce->name, DWARF_INFO_GET_SYMBOL_TYPE, &ce->size, &ce->type_flag); I think we should use info->kaslr_offset instead of get_kaslr_offset(), how about you ? BTW, I'm not sure why you didn't meet this issue... Thanks, Atsushi Kumagai >diff --git a/makedumpfile.c b/makedumpfile.c >index 57235690569e..0fd485ccd45d 100644 >--- a/makedumpfile.c >+++ b/makedumpfile.c >@@ -11076,6 +11076,7 @@ main(int argc, char *argv[]) > strerror(errno)); > goto out; > } >+ info->file_vmcoreinfo = NULL; > info->fd_vmlinux = -1; > info->fd_xen_syms = -1; > info->fd_memory = -1; > > >Thanks for testing it thoroughly. > >~Pratyush > >> >> $ cat scrub.conf >> [vmlinux] >> erase modules size 50 >> $ >> >> (gdb) r -cd31 -x vmlinux --config scrub.conf vmcore dumpfile.cd31 >> Starting program: /work/kdump_utils/makedumpfile/makedumpfile -cd31 -x vmlinux --config scrub.conf vmcore >dumpfile.cd31 >> warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffd000 >> [Thread debugging using libthread_db enabled] >> >> Program received signal SIGSEGV, Segmentation fault. >> 0x000000308366ee0d in fseek () from /lib64/libc.so.6 >> Missing separate debuginfos, use: debuginfo-install bzip2-libs-1.0.5-7.el6_0.x86_64 >elfutils-libelf-0.152-1.el6.x86_64 elfutils-libs-0.152-1.el6.x86_64 glibc-2.12-1.132.el6.x86_64 >libgcc-4.4.7-4.el6.x86_64 libstdc++-4.4.7-4.el6.x86_64 snappy-1.1.0-1.el6.x86_64 >xz-libs-4.999.9-0.3.beta.20091007git.el6.x86_64 zlib-1.2.3-29.el6.x86_64 >> (gdb) bt >> #0 0x000000308366ee0d in fseek () from /lib64/libc.so.6 >> #1 0x0000000000420937 in get_kaslr_offset_x86_64 (vaddr=18446744071589596288) at arch/x86_64.c:43 >> #2 0x0000000000414310 in resolve_config_entry (ce=0x701370, base_vaddr=<value optimized out>, base_struct_name=0x0) >at erase_info.c:1091 >> #3 0x0000000000415a89 in get_config_symbol_addr (filter_symbol=0x701370, size_symbol=0x701430) at erase_info.c:1264 >> #4 update_filter_info (filter_symbol=0x701370, size_symbol=0x701430) at erase_info.c:1579 >> #5 0x0000000000416543 in process_config (name_config=<value optimized out>) at erase_info.c:1789 >> #6 process_config_file (name_config=<value optimized out>) at erase_info.c:1862 >> #7 0x0000000000417c57 in gather_filter_info () at erase_info.c:2356 >> #8 0x0000000000443e5b in create_dumpfile () at makedumpfile.c:9870 >> #9 0x00000000004457ae in main (argc=<value optimized out>, argv=<value optimized out>) at makedumpfile.c:11349 >> (gdb) >> >> Thanks, >> Atsushi Kuamgai >> >>> ~Pratyush >>>> >>>> >>>> Program received signal SIGSEGV, Segmentation fault. >>>> 0x00007ffff6be49f5 in fseek () from /lib64/libc.so.6 >>>> Missing separate debuginfos, use: debuginfo-install bzip2-libs-1.0.6-13.el7.x86_64 >elfutils-libelf-0.163-3.el7.x86_64 >>> elfutils-libs-0.163-3.el7.x86_64 glibc-2.17-105.el7.x86_64 libgcc-4.8.5-4.el7.x86_64 libstdc++-4.8.5-4.el7.x86_64 >>> snappy-1.1.0-3.el7.x86_64 xz-libs-5.1.2-12alpha.el7.x86_64 zlib-1.2.7-15.el7.x86_64 >>>> (gdb) bt >>>> #0 0x00007ffff6be49f5 in fseek () from /lib64/libc.so.6 >>>> #1 0x0000000000429d38 in read_vmcoreinfo_symbol (str_symbol=0x44cb0c "SYMBOL(_stext)=") at makedumpfile.c:2384 >>>> #2 0x000000000042097a in get_kaslr_offset_x86_64 (vaddr=18446744071589596288) at arch/x86_64.c:45 >>>> #3 0x0000000000414310 in resolve_config_entry (ce=0x701370, base_vaddr=<optimized out>, base_struct_name=0x0) >>>> at erase_info.c:1091 >>>> #4 0x0000000000415a89 in get_config_symbol_addr (base_struct_name=0x0, base_vaddr=0, ce=0x701370) at >erase_info.c:1264 >>>> #5 update_filter_info (filter_symbol=0x701370, size_symbol=0x701430) at erase_info.c:1579 >>>> #6 0x0000000000416543 in process_config (config=<optimized out>) at erase_info.c:1789 >>>> #7 process_config_file (name_config=<optimized out>) at erase_info.c:1862 >>>> #8 0x0000000000417c57 in gather_filter_info () at erase_info.c:2356 >>>> #9 0x0000000000443ccb in create_dumpfile () at makedumpfile.c:9863 >>>> #10 0x000000000044561e in main (argc=<optimized out>, argv=<optimized out>) at makedumpfile.c:11342 >>>> (gdb) >>>> >>>> >>>> Thanks, >>>> Atsushi Kumagai >>>> >>>>> ~Pratyush >>>>> >>>>> >>>>>> >>>>>> Thanks, >>>>>> Atsushi Kumagai >>>>>> >>>>>>> Hi All, >>>>>>> >>>>>>> We came across another failure in makedumpfile when kaslr is enabled. This >>>>>>> failure occurs when we try re-filtering. We try to erase some symbol from a >>>>>>> dumpfile which was copied/compressed from /proc/vmcore using makedumpfile. >>>>>>> >>>>>>> We have very limited symbol information in vmcoreinfo. So symbols to be >>>>>>> erased may not be available in vmcoreinfo and we look for it in vmlinux. >>>>>>> However, symbol address from vmlinux is a static address which differs >>>>>> >from run time address with KASLR_OFFSET. Therefore, reading any "virtual >>>>>>> address of vmlinux" from vmcore is not possible. >>>>>>> >>>>>>> These patches finds runtime KASLR offset and then calculates run time >>>>>>> address of symbols read from vmlinux. >>>>>>> >>>>>>> Since, I am not an expert of x86, and these patches touch x86 part of >>>>>>> makedumpfile, therefore I have CCed x86 experts. Please, provide your >>>>>>> review comment and let me know if you think there could have been a better >>>>>>> way to resolve this issue. >>>>>>> >>>>>>> thanks >>>>>>> >>>>>>> ~Pratyush >>>>>>> >>>>>>> Pratyush Anand (2): >>>>>>> makedumpfile: add runtime kaslr offset if it exists >>>>>>> x86_64: calculate page_offset in case of re-filtering >>>>>>> >>>>>>> arch/x86_64.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- >>>>>>> erase_info.c | 1 + >>>>>>> makedumpfile.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ >>>>>>> makedumpfile.h | 15 +++++++++++++++ >>>>>>> 4 files changed, 103 insertions(+), 2 deletions(-) >>>>>>> >>>>>>> -- >>>>>>> 2.9.3 >>>>>> >>>> >>>> >>>> >>>> _______________________________________________ >>>> kexec mailing list >>>> kexec at lists.infradead.org >>>> http://lists.infradead.org/mailman/listinfo/kexec >>>> >> >> >> >> _______________________________________________ >> kexec mailing list >> kexec at lists.infradead.org >> http://lists.infradead.org/mailman/listinfo/kexec >> > >_______________________________________________ >kexec mailing list >kexec at lists.infradead.org >http://lists.infradead.org/mailman/listinfo/kexec