public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [kvm-unit-tests PATCH v2 00/16] x86: cleanups, fixes and new tests
@ 2023-04-13 18:42 Mathias Krause
  2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 01/16] x86: Drop types.h Mathias Krause
                   ` (16 more replies)
  0 siblings, 17 replies; 23+ messages in thread
From: Mathias Krause @ 2023-04-13 18:42 UTC (permalink / raw)
  To: Paolo Bonzini, Sean Christopherson, kvm; +Cc: Mathias Krause

v1: https://lore.kernel.org/kvm/b6322bd0-3639-fb2a-7211-974386865bac@grsecurity.net/

This is v2 of the "non-canonical memory access" test. It evolved into a
small series, bringing cleanups and fixes along the way.

I integrated Sean's feedback and changed the test to make use of
ASM_TRY() instead of using the hand-rolled exception handler. I also
switched all other users in emulator64.c to ASM_TRY() and was able to
drop the one-off exception handler all together.

Sean, this should be a solid ground to refine it further when [1] lands?

[1] https://lkml.kernel.org/r/20230406025117.738014-1-seanjc@google.com

As for the fixes, run_in_user() didn't restore the exception handler it
overwrites, which leads to interesting bugs when the handler fires again
for an unrelated exception -- that longjmp() won't do the right thing in
this case ;)

I fixed fault_test() as well, as it has the same behaviour.

For new tests, I added the non-canonical memory access exception test of
v1 and added another SS segment register load test to check non-NULL
selectors as well, as I stumbled over the bugs in run_in_user() while
switching test_sreg() over to TRY_ASM().

Be aware that the types.h removal (first patch) has an unfortunate side
effect. It breaks compilation in already build trees, as the dependency
files (.*.d) don't get regenerated / cleaned if a source file changes.
This leads to stale references to types.h which can only be solved by a
'make clean'. :(

We really should change the dependency file generation to avoid that
problem, as the current state is kinda awkward. Tho, I didn't had the
time to look into it further myself.

Please apply!

Thanks,
Mathias

PS: I'm on holidays for three weeks from Saturday on, so won't respond
to feedback any time soon.

Mathias Krause (16):
  x86: Drop types.h
  x86: Use symbolic names in exception_mnemonic()
  x86: Add vendor specific exception vectors
  x86/cet: Use symbolic name for #CP
  x86/access: Use 'bool' type as defined via libcflat.h
  x86/run_in_user: Change type of code label
  x86/run_in_user: Preserve exception handler
  x86/run_in_user: Relax register constraints of inline asm
  x86/run_in_user: Reload SS after successful return
  x86/fault_test: Preserve exception handler
  x86/emulator64: Relax register constraints for usr_gs_mov()
  x86/emulator64: Switch test_sreg() to ASM_TRY()
  x86/emulator64: Add non-null selector test
  x86/emulator64: Switch test_jmp_noncanonical() to ASM_TRY()
  x86/emulator64: Switch test_mmx_movq_mf() to ASM_TRY()
  x86/emulator64: Test non-canonical memory access exceptions

 lib/x86/processor.h  |  13 ++++++
 lib/x86/desc.c       |  43 ++++++++++--------
 lib/x86/fault_test.c |   4 +-
 lib/x86/usermode.c   |  42 ++++++++++-------
 x86/types.h          |  21 ---------
 x86/access.c         |  11 ++---
 x86/cet.c            |   2 +-
 x86/cmpxchg8b.c      |   1 -
 x86/emulator.c       |   1 -
 x86/emulator64.c     | 105 ++++++++++++++++++++++++-------------------
 x86/pmu_pebs.c       |   1 -
 x86/svm.c            |   1 -
 x86/svm_tests.c      |   1 -
 x86/vmx_tests.c      |   1 -
 14 files changed, 129 insertions(+), 118 deletions(-)
 delete mode 100644 x86/types.h

-- 
2.39.2


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

end of thread, other threads:[~2023-06-16  6:38 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-13 18:42 [kvm-unit-tests PATCH v2 00/16] x86: cleanups, fixes and new tests Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 01/16] x86: Drop types.h Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 02/16] x86: Use symbolic names in exception_mnemonic() Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 03/16] x86: Add vendor specific exception vectors Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 04/16] x86/cet: Use symbolic name for #CP Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 05/16] x86/access: Use 'bool' type as defined via libcflat.h Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 06/16] x86/run_in_user: Change type of code label Mathias Krause
2023-06-13  0:32   ` Sean Christopherson
2023-06-14 21:02     ` Mathias Krause
2023-06-15 15:18       ` Sean Christopherson
2023-06-16  6:38         ` Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 07/16] x86/run_in_user: Preserve exception handler Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 08/16] x86/run_in_user: Relax register constraints of inline asm Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 09/16] x86/run_in_user: Reload SS after successful return Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 10/16] x86/fault_test: Preserve exception handler Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 11/16] x86/emulator64: Relax register constraints for usr_gs_mov() Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 12/16] x86/emulator64: Switch test_sreg() to ASM_TRY() Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 13/16] x86/emulator64: Add non-null selector test Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 14/16] x86/emulator64: Switch test_jmp_noncanonical() to ASM_TRY() Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 15/16] x86/emulator64: Switch test_mmx_movq_mf() " Mathias Krause
2023-04-13 18:42 ` [kvm-unit-tests PATCH v2 16/16] x86/emulator64: Test non-canonical memory access exceptions Mathias Krause
2023-06-13 21:40 ` [kvm-unit-tests PATCH v2 00/16] x86: cleanups, fixes and new tests Sean Christopherson
2023-06-14 21:58   ` Mathias Krause

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox