linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC][PATCH 00/22] x86: Remove anonymous out-of-line fixups
@ 2021-11-04 16:47 Peter Zijlstra
  2021-11-04 16:47 ` [RFC][PATCH 01/22] bitfield.h: Fix "type of reg too small for mask" test Peter Zijlstra
                   ` (21 more replies)
  0 siblings, 22 replies; 59+ messages in thread
From: Peter Zijlstra @ 2021-11-04 16:47 UTC (permalink / raw)
  To: x86
  Cc: linux-kernel, peterz, jpoimboe, mark.rutland, dvyukov, seanjc,
	pbonzini, mbenes

Hi,

Direct counterpart to the arm64 series from Mark:

  https://lkml.kernel.org/r/20211019160219.5202-1-mark.rutland@arm.com

Since he already put it rather well:

"We recently realised that out-of-line extable fixups cause a number of problems
for backtracing (mattering both for developers and for RELIABLE_STACKTRACE and
LIVEPATCH). Dmitry spotted a confusing backtrace, which we identified was due
to problems with unwinding fixups, as summarized in:

  https://lore.kernel.org/linux-arm-kernel/20210927171812.GB9201@C02TD0UTHF1T.local/

The gist is that while backtracing through a fixup, the fixup gets symbolized
as an offset from the nearest prior symbol (which happens to be
`__entry_tramp_text_end`), and we the backtrace misses the function that was
being fixed up (because the fixup handling adjusts the PC, then the fixup does
a direct branch back to the original function). We can't reliably map from an
arbitrary PC in the fixup text back to the original function.

The way we create fixups is a bit unfortunate: most fixups are generated from
common templates, and only differ in register to be poked and the address to
branch back to, leading to redundant copies of the same logic that must pollute
Since the fixups are all written in assembly, and duplicated for each fixup
site, we can only perform very simple fixups, and can't handle any complex
triage that we might need for some exceptions (e.g. MTE faults)."



So far these patches have only been compile tested on x86_64
(defconfig,allyesconfig) and boot tested in kvm (defconfig) -- realy early
days.

Enjoy..

---
 arch/x86/entry/entry_32.S                  |  28 ++---
 arch/x86/entry/entry_64.S                  |  13 ++-
 arch/x86/entry/vdso/vdso-layout.lds.S      |   1 -
 arch/x86/include/asm/asm.h                 |  27 +++++
 arch/x86/include/asm/extable_fixup_types.h |  44 ++++++--
 arch/x86/include/asm/futex.h               |  28 ++---
 arch/x86/include/asm/msr.h                 |  26 ++---
 arch/x86/include/asm/segment.h             |   9 +-
 arch/x86/include/asm/sgx.h                 |  18 ++++
 arch/x86/include/asm/uaccess.h             |  35 +++---
 arch/x86/include/asm/word-at-a-time.h      |  29 ++---
 arch/x86/include/asm/xen/page.h            |  12 +--
 arch/x86/kernel/cpu/sgx/encls.h            |  36 +------
 arch/x86/kernel/fpu/legacy.h               |   6 +-
 arch/x86/kernel/fpu/xstate.h               |   6 +-
 arch/x86/kernel/ftrace.c                   |   9 +-
 arch/x86/kernel/vmlinux.lds.S              |   1 -
 arch/x86/kvm/emulate.c                     |  14 +--
 arch/x86/kvm/vmx/vmx_ops.h                 |  14 ++-
 arch/x86/lib/checksum_32.S                 |  19 +---
 arch/x86/lib/copy_mc_64.S                  |  12 +--
 arch/x86/lib/copy_user_64.S                |  32 ++----
 arch/x86/lib/mmx_32.c                      |  83 +++++----------
 arch/x86/lib/usercopy_32.c                 |  66 +++++-------
 arch/x86/lib/usercopy_64.c                 |   8 +-
 arch/x86/mm/extable.c                      | 166 ++++++++++++++++++++++++-----
 include/linux/bitfield.h                   |  19 +++-
 27 files changed, 385 insertions(+), 376 deletions(-)


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

end of thread, other threads:[~2021-11-07 19:13 UTC | newest]

Thread overview: 59+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-04 16:47 [RFC][PATCH 00/22] x86: Remove anonymous out-of-line fixups Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 01/22] bitfield.h: Fix "type of reg too small for mask" test Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 02/22] x86,mmx_32: Remove .fixup usage Peter Zijlstra
2021-11-04 18:00   ` Borislav Petkov
2021-11-05 11:20     ` David Laight
2021-11-04 20:22   ` Josh Poimboeuf
2021-11-05  8:05     ` Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 03/22] x86,copy_user_64: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 04/22] x86,copy_mc_64: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 05/22] x86,entry_64: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 06/22] x86,entry_32: " Peter Zijlstra
2021-11-04 20:39   ` Josh Poimboeuf
2021-11-05  7:43     ` Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 07/22] x86,extable: Extend extable functionality Peter Zijlstra
2021-11-04 21:49   ` Josh Poimboeuf
2021-11-05  7:54     ` Peter Zijlstra
2021-11-05 10:16       ` Mark Rutland
2021-11-05 17:32   ` Sean Christopherson
2021-11-05 18:45     ` Peter Zijlstra
2021-11-05 19:17       ` Sean Christopherson
2021-11-05 19:32         ` Peter Zijlstra
2021-11-05 19:47           ` Sean Christopherson
2021-11-05 20:15             ` Peter Zijlstra
2021-11-05 20:26               ` Peter Zijlstra
2021-11-05 22:30                 ` Sean Christopherson
2021-11-04 16:47 ` [RFC][PATCH 08/22] x86,msr: Remove .fixup usage Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 09/22] x86,futex: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 10/22] x86,uaccess: " Peter Zijlstra
2021-11-04 22:28   ` Josh Poimboeuf
2021-11-04 16:47 ` [RFC][PATCH 11/22] x86,xen: " Peter Zijlstra
2021-11-04 22:31   ` Josh Poimboeuf
2021-11-05  7:56     ` Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 12/22] x86,fpu: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 13/22] x86,segment: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 14/22] x86,ftrace: " Peter Zijlstra
2021-11-04 22:35   ` Josh Poimboeuf
2021-11-05  7:57     ` Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 15/22] x86,vmx: " Peter Zijlstra
2021-11-04 18:50   ` Paolo Bonzini
2021-11-05 18:17   ` Sean Christopherson
2021-11-05 18:52     ` Peter Zijlstra
2021-11-05 20:58     ` Peter Zijlstra
2021-11-05 22:29       ` Sean Christopherson
2021-11-06  7:05     ` Paolo Bonzini
2021-11-06  8:36       ` Peter Zijlstra
2021-11-07 19:13         ` Paolo Bonzini
2021-11-06  8:28     ` Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 16/22] x86,checksum_32: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 17/22] x86,sgx: " Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 18/22] x86,kvm: " Peter Zijlstra
2021-11-04 18:50   ` Paolo Bonzini
2021-11-05  7:58     ` Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 19/22] x86,usercopy_32: Simplify Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 20/22] x86,usercopy: Remove .fixup usage Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 21/22] x86,word-at-a-time: " Peter Zijlstra
2021-11-04 23:33   ` Josh Poimboeuf
2021-11-05  8:04     ` Peter Zijlstra
2021-11-04 16:47 ` [RFC][PATCH 22/22] x86: Remove .fixup section Peter Zijlstra
2021-11-04 23:00   ` Josh Poimboeuf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).