Intel Linear-address masking (LAM) [1], modifies the checking that is applied to *64-bit* linear addresses, allowing software to use of the untranslated address bits for metadata. The patch series add test cases for KVM LAM: Patch 1 moves struct invpcid_desc to header file for new test cases. Patch 2 makes change to allow setting of CR3 LAM bits in vmlaunch tests. Patch 3~5 add test cases for LAM supervisor mode and user mode, including: - For supervisor mode CR4.LAM_SUP toggle Memory/MMIO access with tagged pointer INVLPG INVPCID INVVPID (also used to cover VMX instruction VMExit path) - For user mode CR3 LAM bits toggle Memory/MMIO access with tagged pointer [1] Intel ISE https://cdrdv2.intel.com/v1/dl/getContent/671368 Chapter Linear Address Masking (LAM) --- Changelog: v7 - Move struct invpcid_desc to header file instead of defining a new copy in lam.c. - Rename is_la57()/lam_sup_active() to is_la57_enabled()/is_lam_sup_enabled(), and move them to processor.h (Sean) - Drop cr4_set_lam_sup()/cr4_clear_lam_sup() and use write_cr4_safe() instead. (Sean) - Add get_lam_mask() to get lam status based on the address and vCPU state. (Sean) - Drop the wrappers for INVLPG since INVLPG never faults. (Sean) - Drop the wrapper for INVPCID and use invpcid_safe() instead. (Sean) - Drop the check for X86_FEATURE_PCID. (Sean) - Rename lam_{u48,u57}_active() to is_lam_{u48,u57}_enabled(), and move them to processor.h (Sean) - Test LAM userspace address in kernel mode directly to simplify the interface of test_ptr() since LAM identifies a address as kernel or user only based on the address itself. - Add comments about the virtualization hole of CR3 LAM bits. - Drop the check of X86_FEATURE_LA57 when check LA57. (Sean) v6 - https://lore.kernel.org/kvm/20240122085354.9510-1-binbin.wu@xxxxxxxxxxxxxxx/ v5 - https://lore.kernel.org/kvm/20230530024356.24870-1-binbin.wu@xxxxxxxxxxxxxxx/ Binbin Wu (4): x86: Move struct invpcid_desc to processor.h x86: Allow setting of CR3 LAM bits if LAM supported x86: Add test cases for LAM_{U48,U57} x86: Add test case for INVVPID with LAM Robert Hoo (1): x86: Add test case for LAM_SUP lib/x86/processor.h | 41 +++++++ x86/Makefile.x86_64 | 1 + x86/lam.c | 281 ++++++++++++++++++++++++++++++++++++++++++++ x86/pcid.c | 6 - x86/unittests.cfg | 10 ++ x86/vmx_tests.c | 51 +++++++- 6 files changed, 382 insertions(+), 8 deletions(-) create mode 100644 x86/lam.c base-commit: d301d0187f5db09531a1c2c7608997cc3b0a5c7d -- 2.43.2