diff options
| author | Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com> | 2025-02-04 18:33:50 +0100 |
|---|---|---|
| committer | Dave Hansen <dave.hansen@linux.intel.com> | 2025-02-05 16:23:17 -0800 |
| commit | 63887c9f02030afd042c125052ad60680f7c21b2 (patch) | |
| tree | db54802ae1d194761849992d0fbf9d3b00aa5ec0 /arch/x86/mm/tlb.c | |
| parent | 3ef938c3503563bfc2ac15083557f880d29c2e64 (diff) | |
x86: Compare physical instead of virtual PGD addresses
This is a preparatory patch for when pointers have tags in their
upper address bits. But it's a harmless change on its own.
The mm->pgd virtual address may be tagged because it came out of
the allocator at some point. The __va(read_cr3_pa()) address will
never be tagged (the tag bits are all 1's). A direct pointer value
comparison would fail if one is tagged and the other is not.
To fix this, just compare the physical addresses which are never
affected by tagging.
[ dhansen: subject and changelog munging ]
Signed-off-by: Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Link: https://lore.kernel.org/all/fde443d0e67f76a51e7ab4e96647705840f53ddb.1738686764.git.maciej.wieczor-retman%40intel.com
Diffstat (limited to 'arch/x86/mm/tlb.c')
| -rw-r--r-- | arch/x86/mm/tlb.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c index 6cf881a942bb..ffc25b348041 100644 --- a/arch/x86/mm/tlb.c +++ b/arch/x86/mm/tlb.c @@ -1325,7 +1325,7 @@ bool nmi_uaccess_okay(void) if (loaded_mm != current_mm) return false; - VM_WARN_ON_ONCE(current_mm->pgd != __va(read_cr3_pa())); + VM_WARN_ON_ONCE(__pa(current_mm->pgd) != read_cr3_pa()); return true; } |