Re: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hello Kazu, I've refreshed my patch on top of 'origin/add-get_kaslr_offset_general'. Please find it attached below. Hope there is still a chance to include it into the release. Thanks, Mikhail Zaslonko On 06.01.2020 22:42, HAGIO KAZUHITO(萩尾 一仁) wrote: > >> -Original Message- >> Hi Kazu, >> >> Sorry, I did't have a chance to try your patch yet. >> I will update mine next week. > > OK. > FYI, I'm planning to relase the next version of makedumpfile by the end > of next week. It needs some regression testing with old vmcores, etc., so > I can include patches merged by the beginning of next week in the release. > > Thanks, > Kazu > >> >> Thanks, >> Mikhail >> >> >> On 03.01.2020 21:55, HAGIO KAZUHITO(萩尾 一仁) wrote: >>> Hi Lianbo, Mikhail, >>> -Original Message- >> >> In addition, the above code confused me, it will always return 0 on >> s390(please refer to my logs). > > The aim of get_kaslr_offset() here is only setting info->kaslr_offset to > the value > from vmcoreinfo for the SYMBOL_INIT() macro. > (get_kaslr_offset() returns the kaslr offset in the > resolve_config_entry().) > Thanks for your explanation, Kazu. > But yeah, the get_kaslr_offset(SYMBOL(_stext)) is confusing and not good. > Passing 0 might be a bit better..? > Yes, looks good to me. >>> >>> OK, I pushed an additional patch fixing it to the test branch: >>> https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general >>> Thanks Lianbo for pointing it out. >>> >>> Mikhail, if you update your patch on top of the tree above, >>> I'll merge it upstream. >>> >>> Thanks, >>> Kazu >>> >>> P.S. My email address has been changed to k-hagio...@nec.com. >>> Please send email to this address in the future. Thanks. >>> (Ugh, it seems I cannot remove my kanji name in the From: field..) >>> > From 5d30ddfc2f97b48e923688c0a295106c68fd56df Mon Sep 17 00:00:00 2001 From: Mikhail Zaslonko Date: Tue, 7 Jan 2020 13:38:14 +0100 Subject: [PATCH] makedumpfile/s390: Use get_kaslr_offset_general() for s390x Since kernel v5.2 KASLR is supported on s390. Use recently introduced get_kaslr_offset_general() for s390x in order to derive kaslr offset from vmcoreinfo when -x makedumpfile option specified. Signed-off-by: Mikhail Zaslonko --- makedumpfile.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/makedumpfile.h b/makedumpfile.h index 067fa48..e6c815d 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -1075,7 +1075,7 @@ int is_iomem_phys_addr_s390x(unsigned long addr); #define get_phys_base()stub_true() #define get_machdep_info() get_machdep_info_s390x() #define get_versiondep_info() stub_true() -#define get_kaslr_offset(X)stub_false() +#define get_kaslr_offset(X)get_kaslr_offset_general(X) #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) #define paddr_to_vaddr(X) paddr_to_vaddr_general(X) #define is_phys_addr(X)is_iomem_phys_addr_s390x(X) -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
RE: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi Mikhail, > -Original Message- > Hello Kazu, > > I've refreshed my patch on top of 'origin/add-get_kaslr_offset_general'. > Please find it attached below. > Hope there is still a chance to include it into the release. Thank you. Your patch is queued for makedumpfile v1.6.7. Kazu > > Thanks, > Mikhail Zaslonko > > > On 06.01.2020 22:42, HAGIO KAZUHITO(萩尾 一仁) wrote: > > > >> -Original Message- > >> Hi Kazu, > >> > >> Sorry, I did't have a chance to try your patch yet. > >> I will update mine next week. > > > > OK. > > FYI, I'm planning to relase the next version of makedumpfile by the end > > of next week. It needs some regression testing with old vmcores, etc., so > > I can include patches merged by the beginning of next week in the release. > > > > Thanks, > > Kazu > > > >> > >> Thanks, > >> Mikhail > >> > >> > >> On 03.01.2020 21:55, HAGIO KAZUHITO(萩尾 一仁) wrote: > >>> Hi Lianbo, Mikhail, > >>> > -Original Message- > >> > >> In addition, the above code confused me, it will always return 0 on > >> s390(please refer to my logs). > > > > The aim of get_kaslr_offset() here is only setting info->kaslr_offset > > to the value > > from vmcoreinfo for the SYMBOL_INIT() macro. > > (get_kaslr_offset() returns the kaslr offset in the > > resolve_config_entry().) > > > Thanks for your explanation, Kazu. > > > But yeah, the get_kaslr_offset(SYMBOL(_stext)) is confusing and not > > good. > > Passing 0 might be a bit better..? > > > Yes, looks good to me. > >>> > >>> OK, I pushed an additional patch fixing it to the test branch: > >>> https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general > >>> Thanks Lianbo for pointing it out. > >>> > >>> Mikhail, if you update your patch on top of the tree above, > >>> I'll merge it upstream. > >>> > >>> Thanks, > >>> Kazu > >>> > >>> P.S. My email address has been changed to k-hagio...@nec.com. > >>> Please send email to this address in the future. Thanks. > >>> (Ugh, it seems I cannot remove my kanji name in the From: field..) > >>> > > ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
RE: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
> -Original Message- > Hi Kazu, > > Sorry, I did't have a chance to try your patch yet. > I will update mine next week. OK. FYI, I'm planning to relase the next version of makedumpfile by the end of next week. It needs some regression testing with old vmcores, etc., so I can include patches merged by the beginning of next week in the release. Thanks, Kazu > > Thanks, > Mikhail > > > On 03.01.2020 21:55, HAGIO KAZUHITO(萩尾 一仁) wrote: > > Hi Lianbo, Mikhail, > > > >> -Original Message- > > In addition, the above code confused me, it will always return 0 on > s390(please refer to my logs). > >>> > >>> The aim of get_kaslr_offset() here is only setting info->kaslr_offset to > >>> the value > >>> from vmcoreinfo for the SYMBOL_INIT() macro. > >>> (get_kaslr_offset() returns the kaslr offset in the > >>> resolve_config_entry().) > >>> > >> Thanks for your explanation, Kazu. > >> > >>> But yeah, the get_kaslr_offset(SYMBOL(_stext)) is confusing and not good. > >>> Passing 0 might be a bit better..? > >>> > >> Yes, looks good to me. > > > > OK, I pushed an additional patch fixing it to the test branch: > > https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general > > Thanks Lianbo for pointing it out. > > > > Mikhail, if you update your patch on top of the tree above, > > I'll merge it upstream. > > > > Thanks, > > Kazu > > > > P.S. My email address has been changed to k-hagio...@nec.com. > > Please send email to this address in the future. Thanks. > > (Ugh, it seems I cannot remove my kanji name in the From: field..) > > ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi Kazu, Sorry, I did't have a chance to try your patch yet. I will update mine next week. Thanks, Mikhail On 03.01.2020 21:55, HAGIO KAZUHITO(萩尾 一仁) wrote: > Hi Lianbo, Mikhail, > >> -Original Message- In addition, the above code confused me, it will always return 0 on s390(please refer to my logs). >>> >>> The aim of get_kaslr_offset() here is only setting info->kaslr_offset to >>> the value >>> from vmcoreinfo for the SYMBOL_INIT() macro. >>> (get_kaslr_offset() returns the kaslr offset in the resolve_config_entry().) >>> >> Thanks for your explanation, Kazu. >> >>> But yeah, the get_kaslr_offset(SYMBOL(_stext)) is confusing and not good. >>> Passing 0 might be a bit better..? >>> >> Yes, looks good to me. > > OK, I pushed an additional patch fixing it to the test branch: > https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general > Thanks Lianbo for pointing it out. > > Mikhail, if you update your patch on top of the tree above, > I'll merge it upstream. > > Thanks, > Kazu > > P.S. My email address has been changed to k-hagio...@nec.com. > Please send email to this address in the future. Thanks. > (Ugh, it seems I cannot remove my kanji name in the From: field..) > ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
RE: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi Lianbo, Mikhail, > -Original Message- > >> > >> In addition, the above code confused me, it will always return 0 on > >> s390(please refer to my logs). > > > > The aim of get_kaslr_offset() here is only setting info->kaslr_offset to > > the value > > from vmcoreinfo for the SYMBOL_INIT() macro. > > (get_kaslr_offset() returns the kaslr offset in the resolve_config_entry().) > > > Thanks for your explanation, Kazu. > > > But yeah, the get_kaslr_offset(SYMBOL(_stext)) is confusing and not good. > > Passing 0 might be a bit better..? > > > Yes, looks good to me. OK, I pushed an additional patch fixing it to the test branch: https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general Thanks Lianbo for pointing it out. Mikhail, if you update your patch on top of the tree above, I'll merge it upstream. Thanks, Kazu P.S. My email address has been changed to k-hagio...@nec.com. Please send email to this address in the future. Thanks. (Ugh, it seems I cannot remove my kanji name in the From: field..) ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
Re: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
> Hi Lianbo, > >> -Original Message- >> 在 2019年12月26日 11:38, lijiang 写道: >>> Hi, Kazu and Mikhail, >>> Hi Mikhail, > -Original Message- > Hi, > > On 12.12.2019 17:12, Kazuhito Hagio wrote: >> Hi Mikhail, >> >>> -Original Message- >>> Hello Kazu, >>> >>> I think we can try to generalize the kaslr offset extraction. >>> I won't speak for other architectures, but for s390 that >>> get_kaslr_offset_arm64() >>> should work fine. The only concern of mine is this TODO statement: >>> >>> if (_text <= vaddr && vaddr <= _end) { >>> DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); >>> return info->kaslr_offset; >>> } else { >>> /* >>> * TODO: we need to check if it is vmalloc/vmmemmap/module >>> * address, we will have different offset >>> */ >>> return 0; >>> } >>> >>> Could you explain this one? >> >> Probably it was considered that the check would be needed to support >> the whole KASLR behavior when get_kaslr_offset_x86_64() was written >> originally. >> >> But in the current makedumpfile for x86_64 and arm64 supporting KASLR, >> the offset we need is the one for symbol addresses in vmlinux only. >> As I said below, module symbol addresses are retrieved from vmcore. >> Other addresses should not be passed to the function for now, as far >> as I know. >> >> So I think the TODO comment is confusing, and it would be better to >> remove it or change it to something like: >> /* >> * Returns 0 if vaddr does not need the offset to be added, >> * e.g. for module address. >> */ >> >> But if s390 uses get_kaslr_offset() in its arch-specific code to >> adjust addresses other than kernel text address, we might need to >> modify it for s390, not generalize it. > > Currently, s390 doesn't use get_kaslr_offset() in its arch-specific > code. OK, I pushed a patch that generalizes it to my test repository. Could you enable s390 to use it and test? https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general >>> >>> I enabled it on s390 as below and tested, it worked. > > Thank you for testing. > It's my pleasure. >>> >>> @@ -1075,7 +1075,7 @@ int is_iomem_phys_addr_s390x(unsigned long addr); >>> #define get_phys_base()stub_true() >>> #define get_machdep_info() get_machdep_info_s390x() >>> #define get_versiondep_info() stub_true() >>> -#define get_kaslr_offset(X)stub_false() >>> +#define get_kaslr_offset(X)get_kaslr_offset_general(X) >>> #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) >>> >>> But, there is still a problem that needs to be improved. In the >>> find_kaslr_offsets(), >>> the value of SYMBOL(_stext) is always 0(zero) and it is passed to the >>> get_kaslr_offset(). >>> For the following code in the get_kaslr_offset_general(), it does not work >>> as expected. >>> ... >>> if (_text <= vaddr && vaddr <= _end) >>> return info->kaslr_offset; >>> else >>> return 0; > > I don't know why the SYMBOL(_stext) is passed to the get_kaslr_offset() > there, but > since the return value of get_kaslr_offset() is not used in the > find_kaslr_offsets(), > it's meaningless and not harmful. So it is not worth doing > READ_SYMBOL(_stext) there > for now. > Sounds good. >> >> In addition, the above code confused me, it will always return 0 on >> s390(please refer to my logs). > > The aim of get_kaslr_offset() here is only setting info->kaslr_offset to the > value > from vmcoreinfo for the SYMBOL_INIT() macro. > (get_kaslr_offset() returns the kaslr offset in the resolve_config_entry().) > Thanks for your explanation, Kazu. > But yeah, the get_kaslr_offset(SYMBOL(_stext)) is confusing and not good. > Passing 0 might be a bit better..? > Yes, looks good to me. Lianbo > Thanks, > Kazu > >> >> Thanks. >> >>> ... >>> Here is my log: >>> get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, >>> _end:10ba000, vaddr:0 >>> >>> After applied the following patch, got the expected result. >>> int >>> find_kaslr_offsets() >>> { >>> @@ -3973,6 +4042,11 @@ find_kaslr_offsets() >>> * called this function between open_vmcoreinfo() and >>> * close_vmcoreinfo() >>> */ >>> + READ_SYMBOL("_stext", _stext); >>> + if (SYMBOL(_stext) == NOT_FOUND_SYMBOL) { >>> +ERRMSG("Can't get the symbol of _stext.\n"); >>> +goto out; >>> + } >>> get_kaslr_offset(SYMBOL(_stext)); >>> >>> Here is my log: >>> get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, >>> _end:10ba000, vaddr:67fbc000 >>> >>> Basically, before using the value of SYMBOL(_stext), need to ensure that >>> the SYMBOL(_stext) is parsed >>> correctly.
RE: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi Lianbo, > -Original Message- > 在 2019年12月26日 11:38, lijiang 写道: > > Hi, Kazu and Mikhail, > > > >> Hi Mikhail, > >> > >>> -Original Message- > >>> Hi, > >>> > >>> On 12.12.2019 17:12, Kazuhito Hagio wrote: > Hi Mikhail, > > > -Original Message- > > Hello Kazu, > > > > I think we can try to generalize the kaslr offset extraction. > > I won't speak for other architectures, but for s390 that > > get_kaslr_offset_arm64() > > should work fine. The only concern of mine is this TODO statement: > > > > if (_text <= vaddr && vaddr <= _end) { > > DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); > > return info->kaslr_offset; > > } else { > > /* > > * TODO: we need to check if it is vmalloc/vmmemmap/module > > * address, we will have different offset > > */ > > return 0; > > } > > > > Could you explain this one? > > Probably it was considered that the check would be needed to support > the whole KASLR behavior when get_kaslr_offset_x86_64() was written > originally. > > But in the current makedumpfile for x86_64 and arm64 supporting KASLR, > the offset we need is the one for symbol addresses in vmlinux only. > As I said below, module symbol addresses are retrieved from vmcore. > Other addresses should not be passed to the function for now, as far > as I know. > > So I think the TODO comment is confusing, and it would be better to > remove it or change it to something like: > /* > * Returns 0 if vaddr does not need the offset to be added, > * e.g. for module address. > */ > > But if s390 uses get_kaslr_offset() in its arch-specific code to > adjust addresses other than kernel text address, we might need to > modify it for s390, not generalize it. > >>> > >>> Currently, s390 doesn't use get_kaslr_offset() in its arch-specific > >>> code. > >> > >> OK, I pushed a patch that generalizes it to my test repository. > >> Could you enable s390 to use it and test? > >> https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general > >> > > > > I enabled it on s390 as below and tested, it worked. Thank you for testing. > > > > @@ -1075,7 +1075,7 @@ int is_iomem_phys_addr_s390x(unsigned long addr); > > #define get_phys_base()stub_true() > > #define get_machdep_info() get_machdep_info_s390x() > > #define get_versiondep_info() stub_true() > > -#define get_kaslr_offset(X)stub_false() > > +#define get_kaslr_offset(X)get_kaslr_offset_general(X) > > #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) > > > > But, there is still a problem that needs to be improved. In the > > find_kaslr_offsets(), > > the value of SYMBOL(_stext) is always 0(zero) and it is passed to the > > get_kaslr_offset(). > > For the following code in the get_kaslr_offset_general(), it does not work > > as expected. > > ... > > if (_text <= vaddr && vaddr <= _end) > > return info->kaslr_offset; > > else > > return 0; I don't know why the SYMBOL(_stext) is passed to the get_kaslr_offset() there, but since the return value of get_kaslr_offset() is not used in the find_kaslr_offsets(), it's meaningless and not harmful. So it is not worth doing READ_SYMBOL(_stext) there for now. > > In addition, the above code confused me, it will always return 0 on > s390(please refer to my logs). The aim of get_kaslr_offset() here is only setting info->kaslr_offset to the value from vmcoreinfo for the SYMBOL_INIT() macro. (get_kaslr_offset() returns the kaslr offset in the resolve_config_entry().) But yeah, the get_kaslr_offset(SYMBOL(_stext)) is confusing and not good. Passing 0 might be a bit better..? Thanks, Kazu > > Thanks. > > > ... > > Here is my log: > > get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, > > _end:10ba000, vaddr:0 > > > > After applied the following patch, got the expected result. > > int > > find_kaslr_offsets() > > { > > @@ -3973,6 +4042,11 @@ find_kaslr_offsets() > > * called this function between open_vmcoreinfo() and > > * close_vmcoreinfo() > > */ > > + READ_SYMBOL("_stext", _stext); > > + if (SYMBOL(_stext) == NOT_FOUND_SYMBOL) { > > +ERRMSG("Can't get the symbol of _stext.\n"); > > +goto out; > > + } > > get_kaslr_offset(SYMBOL(_stext)); > > > > Here is my log: > > get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, > > _end:10ba000, vaddr:67fbc000 > > > > Basically, before using the value of SYMBOL(_stext), need to ensure that > > the SYMBOL(_stext) is parsed > > correctly. > > > > Thanks. > > > >> Thanks, > >> Kazu > >> > >>> > > Thanks, > Kazu > > > > > Thanks, > > Mikhail > > > > On
Re: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
在 2019年12月26日 11:38, lijiang 写道: > Hi, Kazu and Mikhail, > >> Hi Mikhail, >> >>> -Original Message- >>> Hi, >>> >>> On 12.12.2019 17:12, Kazuhito Hagio wrote: Hi Mikhail, > -Original Message- > Hello Kazu, > > I think we can try to generalize the kaslr offset extraction. > I won't speak for other architectures, but for s390 that > get_kaslr_offset_arm64() > should work fine. The only concern of mine is this TODO statement: > > if (_text <= vaddr && vaddr <= _end) { > DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); > return info->kaslr_offset; > } else { > /* > * TODO: we need to check if it is vmalloc/vmmemmap/module > * address, we will have different offset > */ > return 0; > } > > Could you explain this one? Probably it was considered that the check would be needed to support the whole KASLR behavior when get_kaslr_offset_x86_64() was written originally. But in the current makedumpfile for x86_64 and arm64 supporting KASLR, the offset we need is the one for symbol addresses in vmlinux only. As I said below, module symbol addresses are retrieved from vmcore. Other addresses should not be passed to the function for now, as far as I know. So I think the TODO comment is confusing, and it would be better to remove it or change it to something like: /* * Returns 0 if vaddr does not need the offset to be added, * e.g. for module address. */ But if s390 uses get_kaslr_offset() in its arch-specific code to adjust addresses other than kernel text address, we might need to modify it for s390, not generalize it. >>> >>> Currently, s390 doesn't use get_kaslr_offset() in its arch-specific >>> code. >> >> OK, I pushed a patch that generalizes it to my test repository. >> Could you enable s390 to use it and test? >> https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general >> > > I enabled it on s390 as below and tested, it worked. > > @@ -1075,7 +1075,7 @@ int is_iomem_phys_addr_s390x(unsigned long addr); > #define get_phys_base()stub_true() > #define get_machdep_info() get_machdep_info_s390x() > #define get_versiondep_info() stub_true() > -#define get_kaslr_offset(X)stub_false() > +#define get_kaslr_offset(X)get_kaslr_offset_general(X) > #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) > > But, there is still a problem that needs to be improved. In the > find_kaslr_offsets(), > the value of SYMBOL(_stext) is always 0(zero) and it is passed to the > get_kaslr_offset(). > For the following code in the get_kaslr_offset_general(), it does not work as > expected. > ... > if (_text <= vaddr && vaddr <= _end) > return info->kaslr_offset; > else > return 0; In addition, the above code confused me, it will always return 0 on s390(please refer to my logs). Thanks. > ... > Here is my log: > get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, > _end:10ba000, vaddr:0 > > After applied the following patch, got the expected result. > int > find_kaslr_offsets() > { > @@ -3973,6 +4042,11 @@ find_kaslr_offsets() > * called this function between open_vmcoreinfo() and > * close_vmcoreinfo() > */ > + READ_SYMBOL("_stext", _stext); > + if (SYMBOL(_stext) == NOT_FOUND_SYMBOL) { > +ERRMSG("Can't get the symbol of _stext.\n"); > +goto out; > + } > get_kaslr_offset(SYMBOL(_stext)); > > Here is my log: > get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, > _end:10ba000, vaddr:67fbc000 > > Basically, before using the value of SYMBOL(_stext), need to ensure that the > SYMBOL(_stext) is parsed > correctly. > > Thanks. > >> Thanks, >> Kazu >> >>> Thanks, Kazu > > Thanks, > Mikhail > > On 09.12.2019 23:02, Kazuhito Hagio wrote: >> Hi Mikhail, >> >> Sorry for late reply. >> >>> -Original Message- >>> Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no >>> support has been added yet. This patch adds the arch specific function >>> get_kaslr_offset() for s390x. >>> Since the values in vmcoreinfo are already relocated, the patch is >>> mainly relevant for vmlinux processing (-x option). >> >> In the current implementation of makedumpfile, the >> get_kaslr_offset(vaddr) >> is supposed to return the KASLR offset only when the offset is needed to >> add to the vaddr. So generally symbols from kernel (vmlinux) need it, >> but >> symbols from modules are resolved dynamically and don't need the offset. > \> >> This patch always returns the offset if any, as a result, I guess this >> patch >> will not work as expected with module
Re: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi, Kazu and Mikhail, > Hi Mikhail, > >> -Original Message- >> Hi, >> >> On 12.12.2019 17:12, Kazuhito Hagio wrote: >>> Hi Mikhail, >>> -Original Message- Hello Kazu, I think we can try to generalize the kaslr offset extraction. I won't speak for other architectures, but for s390 that get_kaslr_offset_arm64() should work fine. The only concern of mine is this TODO statement: if (_text <= vaddr && vaddr <= _end) { DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); return info->kaslr_offset; } else { /* * TODO: we need to check if it is vmalloc/vmmemmap/module * address, we will have different offset */ return 0; } Could you explain this one? >>> >>> Probably it was considered that the check would be needed to support >>> the whole KASLR behavior when get_kaslr_offset_x86_64() was written >>> originally. >>> >>> But in the current makedumpfile for x86_64 and arm64 supporting KASLR, >>> the offset we need is the one for symbol addresses in vmlinux only. >>> As I said below, module symbol addresses are retrieved from vmcore. >>> Other addresses should not be passed to the function for now, as far >>> as I know. >>> >>> So I think the TODO comment is confusing, and it would be better to >>> remove it or change it to something like: >>> /* >>> * Returns 0 if vaddr does not need the offset to be added, >>> * e.g. for module address. >>> */ >>> >>> But if s390 uses get_kaslr_offset() in its arch-specific code to >>> adjust addresses other than kernel text address, we might need to >>> modify it for s390, not generalize it. >> >> Currently, s390 doesn't use get_kaslr_offset() in its arch-specific >> code. > > OK, I pushed a patch that generalizes it to my test repository. > Could you enable s390 to use it and test? > https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general > I enabled it on s390 as below and tested, it worked. @@ -1075,7 +1075,7 @@ int is_iomem_phys_addr_s390x(unsigned long addr); #define get_phys_base()stub_true() #define get_machdep_info() get_machdep_info_s390x() #define get_versiondep_info() stub_true() -#define get_kaslr_offset(X)stub_false() +#define get_kaslr_offset(X)get_kaslr_offset_general(X) #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) But, there is still a problem that needs to be improved. In the find_kaslr_offsets(), the value of SYMBOL(_stext) is always 0(zero) and it is passed to the get_kaslr_offset(). For the following code in the get_kaslr_offset_general(), it does not work as expected. ... if (_text <= vaddr && vaddr <= _end) return info->kaslr_offset; else return 0; ... Here is my log: get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, _end:10ba000, vaddr:0 After applied the following patch, got the expected result. int find_kaslr_offsets() { @@ -3973,6 +4042,11 @@ find_kaslr_offsets() * called this function between open_vmcoreinfo() and * close_vmcoreinfo() */ + READ_SYMBOL("_stext", _stext); + if (SYMBOL(_stext) == NOT_FOUND_SYMBOL) { +ERRMSG("Can't get the symbol of _stext.\n"); +goto out; + } get_kaslr_offset(SYMBOL(_stext)); Here is my log: get_kaslr_offset_general: info->kaslr_offset: 67ebc000, _text:10, _end:10ba000, vaddr:67fbc000 Basically, before using the value of SYMBOL(_stext), need to ensure that the SYMBOL(_stext) is parsed correctly. Thanks. > Thanks, > Kazu > >> >>> >>> Thanks, >>> Kazu >>> Thanks, Mikhail On 09.12.2019 23:02, Kazuhito Hagio wrote: > Hi Mikhail, > > Sorry for late reply. > >> -Original Message- >> Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no >> support has been added yet. This patch adds the arch specific function >> get_kaslr_offset() for s390x. >> Since the values in vmcoreinfo are already relocated, the patch is >> mainly relevant for vmlinux processing (-x option). > > In the current implementation of makedumpfile, the get_kaslr_offset(vaddr) > is supposed to return the KASLR offset only when the offset is needed to > add to the vaddr. So generally symbols from kernel (vmlinux) need it, but > symbols from modules are resolved dynamically and don't need the offset. \> > This patch always returns the offset if any, as a result, I guess this > patch > will not work as expected with module symbols in filter config file. > > So... How about making get_kaslr_offset_arm64() general for other archs > (get_kaslr_offset_general() or something), then using it also for s390? > If OK, I can do that generalization. > > Thanks, > Kazu > >> >> Signed-off-by: Philipp Rudo >> Signed-off-by:
RE: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi Mikhail, > -Original Message- > Hi, > > On 12.12.2019 17:12, Kazuhito Hagio wrote: > > Hi Mikhail, > > > >> -Original Message- > >> Hello Kazu, > >> > >> I think we can try to generalize the kaslr offset extraction. > >> I won't speak for other architectures, but for s390 that > >> get_kaslr_offset_arm64() > >> should work fine. The only concern of mine is this TODO statement: > >> > >> if (_text <= vaddr && vaddr <= _end) { > >>DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); > >>return info->kaslr_offset; > >>} else { > >>/* > >>* TODO: we need to check if it is vmalloc/vmmemmap/module > >>* address, we will have different offset > >>*/ > >>return 0; > >> } > >> > >> Could you explain this one? > > > > Probably it was considered that the check would be needed to support > > the whole KASLR behavior when get_kaslr_offset_x86_64() was written > > originally. > > > > But in the current makedumpfile for x86_64 and arm64 supporting KASLR, > > the offset we need is the one for symbol addresses in vmlinux only. > > As I said below, module symbol addresses are retrieved from vmcore. > > Other addresses should not be passed to the function for now, as far > > as I know. > > > > So I think the TODO comment is confusing, and it would be better to > > remove it or change it to something like: > > /* > > * Returns 0 if vaddr does not need the offset to be added, > > * e.g. for module address. > > */ > > > > But if s390 uses get_kaslr_offset() in its arch-specific code to > > adjust addresses other than kernel text address, we might need to > > modify it for s390, not generalize it. > > Currently, s390 doesn't use get_kaslr_offset() in its arch-specific > code. OK, I pushed a patch that generalizes it to my test repository. Could you enable s390 to use it and test? https://github.com/k-hagio/makedumpfile/tree/add-get_kaslr_offset_general Thanks, Kazu > > > > > Thanks, > > Kazu > > > >> > >> Thanks, > >> Mikhail > >> > >> On 09.12.2019 23:02, Kazuhito Hagio wrote: > >>> Hi Mikhail, > >>> > >>> Sorry for late reply. > >>> > -Original Message- > Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no > support has been added yet. This patch adds the arch specific function > get_kaslr_offset() for s390x. > Since the values in vmcoreinfo are already relocated, the patch is > mainly relevant for vmlinux processing (-x option). > >>> > >>> In the current implementation of makedumpfile, the get_kaslr_offset(vaddr) > >>> is supposed to return the KASLR offset only when the offset is needed to > >>> add to the vaddr. So generally symbols from kernel (vmlinux) need it, but > >>> symbols from modules are resolved dynamically and don't need the offset. > >> \> > >>> This patch always returns the offset if any, as a result, I guess this > >>> patch > >>> will not work as expected with module symbols in filter config file. > >>> > >>> So... How about making get_kaslr_offset_arm64() general for other archs > >>> (get_kaslr_offset_general() or something), then using it also for s390? > >>> If OK, I can do that generalization. > >>> > >>> Thanks, > >>> Kazu > >>> > > Signed-off-by: Philipp Rudo > Signed-off-by: Mikhail Zaslonko > --- > arch/s390x.c | 32 > makedumpfile.h | 3 ++- > 2 files changed, 34 insertions(+), 1 deletion(-) > > diff --git a/arch/s390x.c b/arch/s390x.c > index bf9d58e..892df14 100644 > --- a/arch/s390x.c > +++ b/arch/s390x.c > @@ -122,6 +122,38 @@ get_machdep_info_s390x(void) > return TRUE; > } > > +unsigned long > +get_kaslr_offset_s390x(unsigned long vaddr) > +{ > +unsigned int i; > +char buf[BUFSIZE_FGETS], *endp; > + > +if (!info->file_vmcoreinfo) > +return FALSE; > + > +if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { > +ERRMSG("Can't seek the vmcoreinfo file(%s). %s\n", > + info->name_vmcoreinfo, strerror(errno)); > +return FALSE; > +} > + > +while (fgets(buf, BUFSIZE_FGETS, info->file_vmcoreinfo)) { > +i = strlen(buf); > +if (!i) > +break; > +if (buf[i - 1] == '\n') > +buf[i - 1] = '\0'; > +if (strncmp(buf, STR_KERNELOFFSET, > +strlen(STR_KERNELOFFSET)) == 0) { > +info->kaslr_offset = > +strtoul(buf + strlen(STR_KERNELOFFSET), > , 16); > +DEBUG_MSG("info->kaslr_offset: %lx\n", > info->kaslr_offset); > +} > +} > + > +return
Re: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi, On 12.12.2019 17:12, Kazuhito Hagio wrote: > Hi Mikhail, > >> -Original Message- >> Hello Kazu, >> >> I think we can try to generalize the kaslr offset extraction. >> I won't speak for other architectures, but for s390 that >> get_kaslr_offset_arm64() >> should work fine. The only concern of mine is this TODO statement: >> >> if (_text <= vaddr && vaddr <= _end) { >> DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); >> return info->kaslr_offset; >> } else { >> /* >> * TODO: we need to check if it is vmalloc/vmmemmap/module >> * address, we will have different offset >> */ >> return 0; >> } >> >> Could you explain this one? > > Probably it was considered that the check would be needed to support > the whole KASLR behavior when get_kaslr_offset_x86_64() was written > originally. > > But in the current makedumpfile for x86_64 and arm64 supporting KASLR, > the offset we need is the one for symbol addresses in vmlinux only. > As I said below, module symbol addresses are retrieved from vmcore. > Other addresses should not be passed to the function for now, as far > as I know. > > So I think the TODO comment is confusing, and it would be better to > remove it or change it to something like: > /* > * Returns 0 if vaddr does not need the offset to be added, > * e.g. for module address. > */ > > But if s390 uses get_kaslr_offset() in its arch-specific code to > adjust addresses other than kernel text address, we might need to > modify it for s390, not generalize it. Currently, s390 doesn't use get_kaslr_offset() in its arch-specific code. > > Thanks, > Kazu > >> >> Thanks, >> Mikhail >> >> On 09.12.2019 23:02, Kazuhito Hagio wrote: >>> Hi Mikhail, >>> >>> Sorry for late reply. >>> -Original Message- Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no support has been added yet. This patch adds the arch specific function get_kaslr_offset() for s390x. Since the values in vmcoreinfo are already relocated, the patch is mainly relevant for vmlinux processing (-x option). >>> >>> In the current implementation of makedumpfile, the get_kaslr_offset(vaddr) >>> is supposed to return the KASLR offset only when the offset is needed to >>> add to the vaddr. So generally symbols from kernel (vmlinux) need it, but >>> symbols from modules are resolved dynamically and don't need the offset. >> \> >>> This patch always returns the offset if any, as a result, I guess this patch >>> will not work as expected with module symbols in filter config file. >>> >>> So... How about making get_kaslr_offset_arm64() general for other archs >>> (get_kaslr_offset_general() or something), then using it also for s390? >>> If OK, I can do that generalization. >>> >>> Thanks, >>> Kazu >>> Signed-off-by: Philipp Rudo Signed-off-by: Mikhail Zaslonko --- arch/s390x.c | 32 makedumpfile.h | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/arch/s390x.c b/arch/s390x.c index bf9d58e..892df14 100644 --- a/arch/s390x.c +++ b/arch/s390x.c @@ -122,6 +122,38 @@ get_machdep_info_s390x(void) return TRUE; } +unsigned long +get_kaslr_offset_s390x(unsigned long vaddr) +{ + unsigned int i; + char buf[BUFSIZE_FGETS], *endp; + + if (!info->file_vmcoreinfo) + return FALSE; + + if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { + ERRMSG("Can't seek the vmcoreinfo file(%s). %s\n", + info->name_vmcoreinfo, strerror(errno)); + return FALSE; + } + + while (fgets(buf, BUFSIZE_FGETS, info->file_vmcoreinfo)) { + i = strlen(buf); + if (!i) + break; + if (buf[i - 1] == '\n') + buf[i - 1] = '\0'; + if (strncmp(buf, STR_KERNELOFFSET, + strlen(STR_KERNELOFFSET)) == 0) { + info->kaslr_offset = + strtoul(buf + strlen(STR_KERNELOFFSET), , 16); + DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); + } + } + + return info->kaslr_offset; +} + static int is_vmalloc_addr_s390x(unsigned long vaddr) { diff --git a/makedumpfile.h b/makedumpfile.h index ac11e90..26f6247 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -1071,11 +1071,12 @@ unsigned long long vaddr_to_paddr_ppc(unsigned long vaddr); int get_machdep_info_s390x(void); unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr); int is_iomem_phys_addr_s390x(unsigned long addr); +unsigned long get_kaslr_offset_s390x(unsigned long vaddr); #define find_vmemmap()stub_false()
RE: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi Mikhail, > -Original Message- > Hello Kazu, > > I think we can try to generalize the kaslr offset extraction. > I won't speak for other architectures, but for s390 that > get_kaslr_offset_arm64() > should work fine. The only concern of mine is this TODO statement: > > if (_text <= vaddr && vaddr <= _end) { > DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); > return info->kaslr_offset; > } else { > /* > * TODO: we need to check if it is vmalloc/vmmemmap/module > * address, we will have different offset > */ > return 0; > } > > Could you explain this one? Probably it was considered that the check would be needed to support the whole KASLR behavior when get_kaslr_offset_x86_64() was written originally. But in the current makedumpfile for x86_64 and arm64 supporting KASLR, the offset we need is the one for symbol addresses in vmlinux only. As I said below, module symbol addresses are retrieved from vmcore. Other addresses should not be passed to the function for now, as far as I know. So I think the TODO comment is confusing, and it would be better to remove it or change it to something like: /* * Returns 0 if vaddr does not need the offset to be added, * e.g. for module address. */ But if s390 uses get_kaslr_offset() in its arch-specific code to adjust addresses other than kernel text address, we might need to modify it for s390, not generalize it. Thanks, Kazu > > Thanks, > Mikhail > > On 09.12.2019 23:02, Kazuhito Hagio wrote: > > Hi Mikhail, > > > > Sorry for late reply. > > > >> -Original Message- > >> Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no > >> support has been added yet. This patch adds the arch specific function > >> get_kaslr_offset() for s390x. > >> Since the values in vmcoreinfo are already relocated, the patch is > >> mainly relevant for vmlinux processing (-x option). > > > > In the current implementation of makedumpfile, the get_kaslr_offset(vaddr) > > is supposed to return the KASLR offset only when the offset is needed to > > add to the vaddr. So generally symbols from kernel (vmlinux) need it, but > > symbols from modules are resolved dynamically and don't need the offset. > \> > > This patch always returns the offset if any, as a result, I guess this patch > > will not work as expected with module symbols in filter config file. > > > > So... How about making get_kaslr_offset_arm64() general for other archs > > (get_kaslr_offset_general() or something), then using it also for s390? > > If OK, I can do that generalization. > > > > Thanks, > > Kazu > > > >> > >> Signed-off-by: Philipp Rudo > >> Signed-off-by: Mikhail Zaslonko > >> --- > >> arch/s390x.c | 32 > >> makedumpfile.h | 3 ++- > >> 2 files changed, 34 insertions(+), 1 deletion(-) > >> > >> diff --git a/arch/s390x.c b/arch/s390x.c > >> index bf9d58e..892df14 100644 > >> --- a/arch/s390x.c > >> +++ b/arch/s390x.c > >> @@ -122,6 +122,38 @@ get_machdep_info_s390x(void) > >>return TRUE; > >> } > >> > >> +unsigned long > >> +get_kaslr_offset_s390x(unsigned long vaddr) > >> +{ > >> + unsigned int i; > >> + char buf[BUFSIZE_FGETS], *endp; > >> + > >> + if (!info->file_vmcoreinfo) > >> + return FALSE; > >> + > >> + if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { > >> + ERRMSG("Can't seek the vmcoreinfo file(%s). %s\n", > >> + info->name_vmcoreinfo, strerror(errno)); > >> + return FALSE; > >> + } > >> + > >> + while (fgets(buf, BUFSIZE_FGETS, info->file_vmcoreinfo)) { > >> + i = strlen(buf); > >> + if (!i) > >> + break; > >> + if (buf[i - 1] == '\n') > >> + buf[i - 1] = '\0'; > >> + if (strncmp(buf, STR_KERNELOFFSET, > >> + strlen(STR_KERNELOFFSET)) == 0) { > >> + info->kaslr_offset = > >> + strtoul(buf + strlen(STR_KERNELOFFSET), , > >> 16); > >> + DEBUG_MSG("info->kaslr_offset: %lx\n", > >> info->kaslr_offset); > >> + } > >> + } > >> + > >> + return info->kaslr_offset; > >> +} > >> + > >> static int > >> is_vmalloc_addr_s390x(unsigned long vaddr) > >> { > >> diff --git a/makedumpfile.h b/makedumpfile.h > >> index ac11e90..26f6247 100644 > >> --- a/makedumpfile.h > >> +++ b/makedumpfile.h > >> @@ -1071,11 +1071,12 @@ unsigned long long vaddr_to_paddr_ppc(unsigned > >> long vaddr); > >> int get_machdep_info_s390x(void); > >> unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr); > >> int is_iomem_phys_addr_s390x(unsigned long addr); > >> +unsigned long get_kaslr_offset_s390x(unsigned long vaddr); > >> #define find_vmemmap()stub_false() > >> #define get_phys_base() stub_true() > >> #define get_machdep_info()get_machdep_info_s390x() > >> #define get_versiondep_info() stub_true() > >> -#define get_kaslr_offset(X)
Re: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hello Kazu, I think we can try to generalize the kaslr offset extraction. I won't speak for other architectures, but for s390 that get_kaslr_offset_arm64() should work fine. The only concern of mine is this TODO statement: if (_text <= vaddr && vaddr <= _end) { DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); return info->kaslr_offset; } else { /* * TODO: we need to check if it is vmalloc/vmmemmap/module * address, we will have different offset */ return 0; } Could you explain this one? Thanks, Mikhail On 09.12.2019 23:02, Kazuhito Hagio wrote: > Hi Mikhail, > > Sorry for late reply. > >> -Original Message- >> Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no >> support has been added yet. This patch adds the arch specific function >> get_kaslr_offset() for s390x. >> Since the values in vmcoreinfo are already relocated, the patch is >> mainly relevant for vmlinux processing (-x option). > > In the current implementation of makedumpfile, the get_kaslr_offset(vaddr) > is supposed to return the KASLR offset only when the offset is needed to > add to the vaddr. So generally symbols from kernel (vmlinux) need it, but > symbols from modules are resolved dynamically and don't need the offset. \> > This patch always returns the offset if any, as a result, I guess this patch > will not work as expected with module symbols in filter config file. > > So... How about making get_kaslr_offset_arm64() general for other archs > (get_kaslr_offset_general() or something), then using it also for s390? > If OK, I can do that generalization. > > Thanks, > Kazu > >> >> Signed-off-by: Philipp Rudo >> Signed-off-by: Mikhail Zaslonko >> --- >> arch/s390x.c | 32 >> makedumpfile.h | 3 ++- >> 2 files changed, 34 insertions(+), 1 deletion(-) >> >> diff --git a/arch/s390x.c b/arch/s390x.c >> index bf9d58e..892df14 100644 >> --- a/arch/s390x.c >> +++ b/arch/s390x.c >> @@ -122,6 +122,38 @@ get_machdep_info_s390x(void) >> return TRUE; >> } >> >> +unsigned long >> +get_kaslr_offset_s390x(unsigned long vaddr) >> +{ >> +unsigned int i; >> +char buf[BUFSIZE_FGETS], *endp; >> + >> +if (!info->file_vmcoreinfo) >> +return FALSE; >> + >> +if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { >> +ERRMSG("Can't seek the vmcoreinfo file(%s). %s\n", >> + info->name_vmcoreinfo, strerror(errno)); >> +return FALSE; >> +} >> + >> +while (fgets(buf, BUFSIZE_FGETS, info->file_vmcoreinfo)) { >> +i = strlen(buf); >> +if (!i) >> +break; >> +if (buf[i - 1] == '\n') >> +buf[i - 1] = '\0'; >> +if (strncmp(buf, STR_KERNELOFFSET, >> +strlen(STR_KERNELOFFSET)) == 0) { >> +info->kaslr_offset = >> +strtoul(buf + strlen(STR_KERNELOFFSET), , >> 16); >> +DEBUG_MSG("info->kaslr_offset: %lx\n", >> info->kaslr_offset); >> +} >> +} >> + >> +return info->kaslr_offset; >> +} >> + >> static int >> is_vmalloc_addr_s390x(unsigned long vaddr) >> { >> diff --git a/makedumpfile.h b/makedumpfile.h >> index ac11e90..26f6247 100644 >> --- a/makedumpfile.h >> +++ b/makedumpfile.h >> @@ -1071,11 +1071,12 @@ unsigned long long vaddr_to_paddr_ppc(unsigned long >> vaddr); >> int get_machdep_info_s390x(void); >> unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr); >> int is_iomem_phys_addr_s390x(unsigned long addr); >> +unsigned long get_kaslr_offset_s390x(unsigned long vaddr); >> #define find_vmemmap() stub_false() >> #define get_phys_base() stub_true() >> #define get_machdep_info() get_machdep_info_s390x() >> #define get_versiondep_info() stub_true() >> -#define get_kaslr_offset(X) stub_false() >> +#define get_kaslr_offset(X) get_kaslr_offset_s390x(X) >> #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) >> #define paddr_to_vaddr(X) paddr_to_vaddr_general(X) >> #define is_phys_addr(X) is_iomem_phys_addr_s390x(X) >> -- >> 2.17.1 >> > > ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
RE: [PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Hi Mikhail, Sorry for late reply. > -Original Message- > Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no > support has been added yet. This patch adds the arch specific function > get_kaslr_offset() for s390x. > Since the values in vmcoreinfo are already relocated, the patch is > mainly relevant for vmlinux processing (-x option). In the current implementation of makedumpfile, the get_kaslr_offset(vaddr) is supposed to return the KASLR offset only when the offset is needed to add to the vaddr. So generally symbols from kernel (vmlinux) need it, but symbols from modules are resolved dynamically and don't need the offset. This patch always returns the offset if any, as a result, I guess this patch will not work as expected with module symbols in filter config file. So... How about making get_kaslr_offset_arm64() general for other archs (get_kaslr_offset_general() or something), then using it also for s390? If OK, I can do that generalization. Thanks, Kazu > > Signed-off-by: Philipp Rudo > Signed-off-by: Mikhail Zaslonko > --- > arch/s390x.c | 32 > makedumpfile.h | 3 ++- > 2 files changed, 34 insertions(+), 1 deletion(-) > > diff --git a/arch/s390x.c b/arch/s390x.c > index bf9d58e..892df14 100644 > --- a/arch/s390x.c > +++ b/arch/s390x.c > @@ -122,6 +122,38 @@ get_machdep_info_s390x(void) > return TRUE; > } > > +unsigned long > +get_kaslr_offset_s390x(unsigned long vaddr) > +{ > + unsigned int i; > + char buf[BUFSIZE_FGETS], *endp; > + > + if (!info->file_vmcoreinfo) > + return FALSE; > + > + if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { > + ERRMSG("Can't seek the vmcoreinfo file(%s). %s\n", > +info->name_vmcoreinfo, strerror(errno)); > + return FALSE; > + } > + > + while (fgets(buf, BUFSIZE_FGETS, info->file_vmcoreinfo)) { > + i = strlen(buf); > + if (!i) > + break; > + if (buf[i - 1] == '\n') > + buf[i - 1] = '\0'; > + if (strncmp(buf, STR_KERNELOFFSET, > + strlen(STR_KERNELOFFSET)) == 0) { > + info->kaslr_offset = > + strtoul(buf + strlen(STR_KERNELOFFSET), , > 16); > + DEBUG_MSG("info->kaslr_offset: %lx\n", > info->kaslr_offset); > + } > + } > + > + return info->kaslr_offset; > +} > + > static int > is_vmalloc_addr_s390x(unsigned long vaddr) > { > diff --git a/makedumpfile.h b/makedumpfile.h > index ac11e90..26f6247 100644 > --- a/makedumpfile.h > +++ b/makedumpfile.h > @@ -1071,11 +1071,12 @@ unsigned long long vaddr_to_paddr_ppc(unsigned long > vaddr); > int get_machdep_info_s390x(void); > unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr); > int is_iomem_phys_addr_s390x(unsigned long addr); > +unsigned long get_kaslr_offset_s390x(unsigned long vaddr); > #define find_vmemmap() stub_false() > #define get_phys_base() stub_true() > #define get_machdep_info() get_machdep_info_s390x() > #define get_versiondep_info()stub_true() > -#define get_kaslr_offset(X) stub_false() > +#define get_kaslr_offset(X) get_kaslr_offset_s390x(X) > #define vaddr_to_paddr(X)vaddr_to_paddr_s390x(X) > #define paddr_to_vaddr(X)paddr_to_vaddr_general(X) > #define is_phys_addr(X) is_iomem_phys_addr_s390x(X) > -- > 2.17.1 > ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec
[PATCH] makedumpfile/s390: Add get_kaslr_offset() for s390x
Since kernel v5.2 KASLR is supported on s390. In makedumpfile however no support has been added yet. This patch adds the arch specific function get_kaslr_offset() for s390x. Since the values in vmcoreinfo are already relocated, the patch is mainly relevant for vmlinux processing (-x option). Signed-off-by: Philipp Rudo Signed-off-by: Mikhail Zaslonko --- arch/s390x.c | 32 makedumpfile.h | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/arch/s390x.c b/arch/s390x.c index bf9d58e..892df14 100644 --- a/arch/s390x.c +++ b/arch/s390x.c @@ -122,6 +122,38 @@ get_machdep_info_s390x(void) return TRUE; } +unsigned long +get_kaslr_offset_s390x(unsigned long vaddr) +{ + unsigned int i; + char buf[BUFSIZE_FGETS], *endp; + + if (!info->file_vmcoreinfo) + return FALSE; + + if (fseek(info->file_vmcoreinfo, 0, SEEK_SET) < 0) { + ERRMSG("Can't seek the vmcoreinfo file(%s). %s\n", + info->name_vmcoreinfo, strerror(errno)); + return FALSE; + } + + while (fgets(buf, BUFSIZE_FGETS, info->file_vmcoreinfo)) { + i = strlen(buf); + if (!i) + break; + if (buf[i - 1] == '\n') + buf[i - 1] = '\0'; + if (strncmp(buf, STR_KERNELOFFSET, + strlen(STR_KERNELOFFSET)) == 0) { + info->kaslr_offset = + strtoul(buf + strlen(STR_KERNELOFFSET), , 16); + DEBUG_MSG("info->kaslr_offset: %lx\n", info->kaslr_offset); + } + } + + return info->kaslr_offset; +} + static int is_vmalloc_addr_s390x(unsigned long vaddr) { diff --git a/makedumpfile.h b/makedumpfile.h index ac11e90..26f6247 100644 --- a/makedumpfile.h +++ b/makedumpfile.h @@ -1071,11 +1071,12 @@ unsigned long long vaddr_to_paddr_ppc(unsigned long vaddr); int get_machdep_info_s390x(void); unsigned long long vaddr_to_paddr_s390x(unsigned long vaddr); int is_iomem_phys_addr_s390x(unsigned long addr); +unsigned long get_kaslr_offset_s390x(unsigned long vaddr); #define find_vmemmap() stub_false() #define get_phys_base()stub_true() #define get_machdep_info() get_machdep_info_s390x() #define get_versiondep_info() stub_true() -#define get_kaslr_offset(X)stub_false() +#define get_kaslr_offset(X)get_kaslr_offset_s390x(X) #define vaddr_to_paddr(X) vaddr_to_paddr_s390x(X) #define paddr_to_vaddr(X) paddr_to_vaddr_general(X) #define is_phys_addr(X)is_iomem_phys_addr_s390x(X) -- 2.17.1 ___ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec