Message ID | 20250224151225.3637934-1-arnd@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm: unhide get_dump_page() function | expand |
On Mon, Feb 24, 2025 at 04:12:21PM +0100, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@arndb.de> > > The definition of get_dump_page() is guarded by CONFIG_ELF_CORE, but > the caller has now moved into a function that is built based on > CONFIG_COREDUMP, which leads to a possible link failure: > > ld.lld-21: error: undefined symbol: get_dump_page > >>> referenced by coredump.c > >>> fs/coredump.o:(dump_vma_snapshot) in archive vmlinux.a > > Change the #ifdef block around the definition to match the caller. > In practice there is very little difference, as setting COREDUMP > but not ELF_CORE is not useful. > > Fixes: ff41385709f0 ("coredump: Only sort VMAs when truncating or core_sort_vma sysctl is set") > Signed-off-by: Arnd Bergmann <arnd@arndb.de> Thanks for this! I think I'm going to split up ff41385709f0 -- between this #ifdef and the recent prototype changes, it's going to be not a great backport, so I'll pick this up too. I expect I'll have a simple sysctl fix for -rc5 and then the rest in -next. -Kees > --- > mm/gup.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/gup.c b/mm/gup.c > index d846c0ce41d6..15d6d7b5df1d 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -2266,7 +2266,7 @@ EXPORT_SYMBOL(fault_in_readable); > * > * Called without mmap_lock (takes and releases the mmap_lock by itself). > */ > -#ifdef CONFIG_ELF_CORE > +#ifdef CONFIG_COREDUMP > struct page *get_dump_page(unsigned long addr, int *locked) > { > struct page *page; > @@ -2276,7 +2276,7 @@ struct page *get_dump_page(unsigned long addr, int *locked) > FOLL_FORCE | FOLL_DUMP | FOLL_GET); > return (ret == 1) ? page : NULL; > } > -#endif /* CONFIG_ELF_CORE */ > +#endif /* CONFIG_COREDUMP */ > > #ifdef CONFIG_MIGRATION > > -- > 2.39.5 >
On Feb 24, 2025, at 7:12 AM, Arnd Bergmann <arnd@kernel.org> wrote: > The definition of get_dump_page() is guarded by CONFIG_ELF_CORE, but > the caller has now moved into a function that is built based on > CONFIG_COREDUMP, which leads to a possible link failure: > > ld.lld-21: error: undefined symbol: get_dump_page >>>> referenced by coredump.c >>>> fs/coredump.o:(dump_vma_snapshot) in archive vmlinux.a Kernel test robot reported this issue yesterday here: https://lore.kernel.org/oe-kbuild-all/202502231914.ROOVWMZN-lkp@intel.com/ https://lore.kernel.org/oe-kbuild-all/202502231818.fP8cuxmf-lkp@intel.com/ > Change the #ifdef block around the definition to match the caller. > In practice there is very little difference, as setting COREDUMP > but not ELF_CORE is not useful. Good catch! I wonder if we should guard the sparse dump size calculation logic from the get_dump_page() caller behind CONFIG_ELF_CORE instead though. I guess the question becomes, will we ever have a non-ELF core dump format that won't skip zero pages? Anyway, I'm fine with this fix as-is.
On Mon, Feb 24, 2025, at 19:42, Brian Mak wrote: > On Feb 24, 2025, at 7:12 AM, Arnd Bergmann <arnd@kernel.org> wrote: > >> The definition of get_dump_page() is guarded by CONFIG_ELF_CORE, but >> the caller has now moved into a function that is built based on >> CONFIG_COREDUMP, which leads to a possible link failure: >> >> ld.lld-21: error: undefined symbol: get_dump_page >>>>> referenced by coredump.c >>>>> fs/coredump.o:(dump_vma_snapshot) in archive vmlinux.a > > Kernel test robot reported this issue yesterday here: > https://lore.kernel.org/oe-kbuild-all/202502231914.ROOVWMZN-lkp@intel.com/ > https://lore.kernel.org/oe-kbuild-all/202502231818.fP8cuxmf-lkp@intel.com/ > >> Change the #ifdef block around the definition to match the caller. >> In practice there is very little difference, as setting COREDUMP >> but not ELF_CORE is not useful. > > Good catch! I wonder if we should guard the sparse dump size calculation > logic from the get_dump_page() caller behind CONFIG_ELF_CORE instead > though. I guess the question becomes, will we ever have a non-ELF core > dump format that won't skip zero pages? > > Anyway, I'm fine with this fix as-is. The only other code that is guarded by CONFIG_COREDUMP now is the powerpc spufs, but that is only used with ELF_CORE as well. The last non-ELF coredump support was removed in 2022, earlier versions had some form of coredump for flat, a.out and som binaries. We can probably just combine ELF_CORE and COREDUMP into a single Kconfig symbol. Arnd
diff --git a/mm/gup.c b/mm/gup.c index d846c0ce41d6..15d6d7b5df1d 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -2266,7 +2266,7 @@ EXPORT_SYMBOL(fault_in_readable); * * Called without mmap_lock (takes and releases the mmap_lock by itself). */ -#ifdef CONFIG_ELF_CORE +#ifdef CONFIG_COREDUMP struct page *get_dump_page(unsigned long addr, int *locked) { struct page *page; @@ -2276,7 +2276,7 @@ struct page *get_dump_page(unsigned long addr, int *locked) FOLL_FORCE | FOLL_DUMP | FOLL_GET); return (ret == 1) ? page : NULL; } -#endif /* CONFIG_ELF_CORE */ +#endif /* CONFIG_COREDUMP */ #ifdef CONFIG_MIGRATION