On 05/09/19 at 09:36am, Baoquan He wrote: > If the running kernel has 5-level paging activated, the 5-level paging > mode is preserved across kexec. If the kexec'ed kernel does not contain > support for handling active 5-level paging mode in the decompressor, the > decompressor will crash with #GP. > > Prevent this situation at load time. If 5-level paging is active, check the > xloadflags whether the kexec kernel can handle 5-level paging at least in > the decompressor. If not, reject the load attempt and print out error > message. > > Signed-off-by: Baoquan He <b...@redhat.com> > Acked-by: Kirill A. Shutemov <kirill.shute...@linux.intel.com> > --- > arch/x86/kernel/kexec-bzimage64.c | 5 +++++
How about the userspace kexec-tools? It needs a similar detection, but I'm not sure how to detect paging mode, maybe some sysfs entry or vmcoreinfo in /proc/vmcore > 1 file changed, 5 insertions(+) > > diff --git a/arch/x86/kernel/kexec-bzimage64.c > b/arch/x86/kernel/kexec-bzimage64.c > index 22f60dd26460..858cc892672f 100644 > --- a/arch/x86/kernel/kexec-bzimage64.c > +++ b/arch/x86/kernel/kexec-bzimage64.c > @@ -321,6 +321,11 @@ static int bzImage64_probe(const char *buf, unsigned > long len) > return ret; > } > > + if (!(header->xloadflags & XLF_5LEVEL) && pgtable_l5_enabled()) { > + pr_err("Can not jump to old 4-level kernel from 5-level > kernel.\n"); 4-level kernel sounds not very clear, maybe something like below? "5-level paging enabled, can not kexec into an old kernel without 5-level paging facility"? > + return ret; > + } > + > /* I've got a bzImage */ > pr_debug("It's a relocatable bzImage64\n"); > ret = 0; > -- > 2.17.2 > Thanks Dave