[Makedumpfile PATCH 0/2] Fix refiltering when kaslr enabled

Atsushi Kumagai ats-kumagai at wm.jp.nec.com
Mon May 22 20:09:46 PDT 2017


>>>>>> 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





More information about the kexec mailing list