All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/9] x86/kexec: Fixes for tip/x86/boot
@ 2024-12-16 23:24 David Woodhouse
  2024-12-16 23:24 ` [PATCH 1/9] x86/kexec: Disable global pages before writing to control page David Woodhouse
                   ` (9 more replies)
  0 siblings, 10 replies; 37+ messages in thread
From: David Woodhouse @ 2024-12-16 23:24 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	H. Peter Anvin, Eric Biederman, David Woodhouse, Sourabh Jain,
	Hari Bathini, Michael Ellerman, Thomas Zimmermann, Andrew Morton,
	Baoquan He, Yuntao Wang, David Kaplan, Tao Liu,
	Kirill A. Shutemov, Kai Huang, Ard Biesheuvel, Josh Poimboeuf,
	Breno Leitao, Wei Yang, Rong Xu, Thomas Weißschuh,
	linux-kernel, kexec, Simon Horman, Dave Young, Peter Zijlstra,
	bsz, nathan

Fix a few bugs introduced by the recent rework of the relocate_kernel()
code, and one which has been there in the kjump code from the beginning.

 • Global read-only TLB entries made relocate_kernel() crash when writing
   to its own page after the %cr3 switch should have made it writeable.
 • The preserve_context flag was lost when invoking swap_pages on the way
   back, causing pages not to be swapped.
 • The wrong page was being used as the swap page.
 • The ABI for the kjump call asks the callee to put its entry address for
   next time at %rsp+8 before returning, but we set %rsp to the top of the
   available page, such that the entry address is at the start of some
   other page.
 • The relocate_kernel() function lacked Clang CFI information, but is now
   called via a function pointer, leading to a crash¹.
 • The relocate_kernel() code and data could end up being linked into the
   wrong place for a LTO / -ffunction-sections build.

Thanks to Nathan for reporting many of the above.

Also a few minor cleanups, including a comments-only patch from Rafael 
on the suspend-like part of kjump as a prelude to actually cleaning that 
up.

¹ Fixed by just adding __nocfi. Actually providing the CFI information 
for relocate_kernel() will need a bit more work, so let's just do the 
simple fix for now.

David Woodhouse (7):
      x86/kexec: Disable global pages before writing to control page
      x86/kexec: Ensure preserve_context flag is set on return to kernel
      x86/kexec: Use correct swap page in swap_pages function
      x86/kexec: Fix stack and handling of re-entry point for ::preserve_context
      x86/kexec: Mark machine_kexec() with __nocfi
      x86/kexec: Cope with relocate_kernel() not being at the start of the page
      x86/kexec: Use typedef for relocate_kernel_fn function prototype

Nathan Chancellor (1):
      x86/kexec: Fix location of relocate_kernel with -ffunction-sections

Rafael J. Wysocki (1):
      kexec_core: Add and update comments regarding the KEXEC_JUMP flow

 arch/x86/include/asm/kexec.h         | 26 ++++++++--------
 arch/x86/kernel/machine_kexec_32.c   |  7 +----
 arch/x86/kernel/machine_kexec_64.c   |  8 ++---
 arch/x86/kernel/relocate_kernel_64.S | 57 ++++++++++++++++++++++++------------
 arch/x86/kernel/vmlinux.lds.S        |  4 +--
 kernel/kexec_core.c                  | 23 +++++++++++----
 6 files changed, 74 insertions(+), 51 deletions(-)



^ permalink raw reply	[flat|nested] 37+ messages in thread

end of thread, other threads:[~2025-01-06 17:21 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-16 23:24 [PATCH 0/9] x86/kexec: Fixes for tip/x86/boot David Woodhouse
2024-12-16 23:24 ` [PATCH 1/9] x86/kexec: Disable global pages before writing to control page David Woodhouse
2024-12-17 12:25   ` Kirill A. Shutemov
2024-12-17 12:39     ` David Woodhouse
2024-12-17 14:51     ` Dave Hansen
2024-12-17 14:56       ` [EXTERNAL] " David Woodhouse
2024-12-17 15:06         ` Dave Hansen
2024-12-16 23:24 ` [PATCH 2/9] x86/kexec: Ensure preserve_context flag is set on return to kernel David Woodhouse
2024-12-17 16:38   ` Uros Bizjak
2025-01-03 10:14     ` David Woodhouse
2024-12-16 23:24 ` [PATCH 3/9] x86/kexec: Use correct swap page in swap_pages function David Woodhouse
2024-12-16 23:24 ` [PATCH 4/9] x86/kexec: Fix stack and handling of re-entry point for ::preserve_context David Woodhouse
2024-12-16 23:24 ` [PATCH 5/9] x86/kexec: Fix location of relocate_kernel with -ffunction-sections David Woodhouse
2024-12-16 23:24 ` [PATCH 6/9] x86/kexec: Mark machine_kexec() with __nocfi David Woodhouse
2024-12-16 23:24 ` [PATCH 7/9] kexec_core: Add and update comments regarding the KEXEC_JUMP flow David Woodhouse
2025-01-03  9:24   ` Dave Young
2025-01-03 10:14     ` David Woodhouse
2024-12-16 23:24 ` [PATCH 8/9] x86/kexec: Cope with relocate_kernel() not being at the start of the page David Woodhouse
2024-12-17  8:47   ` Ard Biesheuvel
2024-12-17  9:17     ` David Woodhouse
2024-12-17  9:25       ` Ard Biesheuvel
2024-12-17  9:36         ` David Woodhouse
2025-01-03 10:10         ` David Woodhouse
2025-01-06 16:09           ` Ard Biesheuvel
2025-01-06 16:13             ` David Woodhouse
2025-01-06 16:27               ` Ard Biesheuvel
2024-12-16 23:24 ` [PATCH 9/9] x86/kexec: Use typedef for relocate_kernel_fn function prototype David Woodhouse
2024-12-17  8:49   ` Ard Biesheuvel
2024-12-17  9:21     ` David Woodhouse
2024-12-17  9:29       ` Ard Biesheuvel
2024-12-17  9:42         ` David Woodhouse
2024-12-17  9:54           ` Ard Biesheuvel
2024-12-17 10:06             ` David Woodhouse
2024-12-17 10:14               ` Ard Biesheuvel
2024-12-17 10:47                 ` David Woodhouse
2024-12-17 10:29             ` David Woodhouse
2024-12-26  8:38 ` [PATCH 0/9] x86/kexec: Fixes for tip/x86/boot David Woodhouse

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.