linux/arch/x86/xen
Rick Edgecombe 6ecc21bb43 mm: Move pte/pmd_mkwrite() callers with no VMA to _novma()
The x86 Shadow stack feature includes a new type of memory called shadow
stack. This shadow stack memory has some unusual properties, which requires
some core mm changes to function properly.

One of these unusual properties is that shadow stack memory is writable,
but only in limited ways. These limits are applied via a specific PTE
bit combination. Nevertheless, the memory is writable, and core mm code
will need to apply the writable permissions in the typical paths that
call pte_mkwrite(). Future patches will make pte_mkwrite() take a VMA, so
that the x86 implementation of it can know whether to create regular
writable or shadow stack mappings.

But there are a couple of challenges to this. Modifying the signatures of
each arch pte_mkwrite() implementation would be error prone because some
are generated with macros and would need to be re-implemented. Also, some
pte_mkwrite() callers operate on kernel memory without a VMA.

So this can be done in a three step process. First pte_mkwrite() can be
renamed to pte_mkwrite_novma() in each arch, with a generic pte_mkwrite()
added that just calls pte_mkwrite_novma(). Next callers without a VMA can
be moved to pte_mkwrite_novma(). And lastly, pte_mkwrite() and all callers
can be changed to take/pass a VMA.

Earlier work did the first step, so next move the callers that don't have
a VMA to pte_mkwrite_novma(). Also do the same for pmd_mkwrite().  This
will be ok for the shadow stack feature, as these callers are on kernel
memory which will not need to be made shadow stack, and the other
architectures only currently support one type of memory in pte_mkwrite()

Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Mike Rapoport (IBM) <rppt@kernel.org>
Acked-by: David Hildenbrand <david@redhat.com>
Link: https://lore.kernel.org/all/20230613001108.3040476-3-rick.p.edgecombe%40intel.com
2023-07-11 14:10:57 -07:00
..
apic.c arch:x86:xen: Remove unnecessary assignment in xen_apic_read() 2022-03-15 20:35:35 -05:00
debugfs.c x86: xen: no need to check return value of debugfs_create functions 2019-06-03 15:49:07 +02:00
debugfs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
efi.c x86: xen: add missing prototypes 2023-06-26 07:47:11 +02:00
enlighten_hvm.c x86/xen/hvm: Get rid of DEAD_FROZEN handling 2023-05-15 13:44:55 +02:00
enlighten_pv.c x86/xen: Set default memory type for PV guests to WB 2023-06-16 11:22:33 +02:00
enlighten_pvh.c x86/PVH: avoid 32-bit build warning when obtaining VGA console info 2023-03-22 16:59:46 +01:00
enlighten.c x86/xen: Add support for HVMOP_set_evtchn_upcall_vector 2022-08-12 11:28:21 +02:00
grant-table.c x86/xen: open code alloc_vm_area in arch_gnttab_valloc 2020-10-18 09:27:10 -07:00
irq.c cpuidle, xenpv: Make more PARAVIRT_XXL noinstr clean 2023-01-13 11:48:16 +01:00
Kconfig xen/pv: support selecting safe/unsafe msr accesses 2022-10-11 10:51:05 +02:00
Makefile x86/PVH: obtain VGA console info in Dom0 2023-03-14 15:20:51 +01:00
mmu_hvm.c proc/vmcore: convert oldmem_pfn_is_ram callback to more generic vmcore callbacks 2021-11-09 10:02:48 -08:00
mmu_pv.c mm: Move pte/pmd_mkwrite() callers with no VMA to _novma() 2023-07-11 14:10:57 -07:00
mmu.c x86/xen: Add SPDX identifier in arch/x86/xen files 2018-09-03 16:50:33 +02:00
mmu.h mm: update ptep_modify_prot_start/commit to take vm_area_struct as arg 2019-03-05 21:07:18 -08:00
multicalls.c treewide: Switch printk users from %pf and %pF to %ps and %pS, respectively 2019-04-09 14:19:06 +02:00
multicalls.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
p2m.c x86/xen: Remove the unused function p2m_index() 2023-01-09 07:54:28 +01:00
platform-pci-unplug.c x86: xen: platform-pci-unplug: use pr_err() and pr_warn() instead of raw printk() 2021-08-30 12:09:54 +02:00
pmu.c x86/xen: silence smatch warning in pmu_msr_chk_emulated() 2022-11-03 10:23:26 +01:00
pmu.h xen: fix is_xen_pmu() 2022-03-25 14:22:53 -05:00
setup.c iscsi_ibft: Fix finding the iBFT under Xen Dom 0 2023-06-26 07:47:11 +02:00
smp_hvm.c x86/smpboot: Switch to hotplug core state synchronization 2023-05-15 13:44:56 +02:00
smp_pv.c - Do FPU AP initialization on Xen PV too which got missed by the recent 2023-07-09 10:13:32 -07:00
smp.c x86/xen: Fix memory leak in xen_smp_intr_init{_pv}() 2022-12-05 12:59:50 +01:00
smp.h x86: xen: add missing prototypes 2023-06-26 07:47:11 +02:00
spinlock.c x86/xen: Fix memory leak in xen_init_lock_cpu() 2022-12-05 12:59:50 +01:00
suspend_hvm.c x86/xen: Add support for HVMOP_set_evtchn_upcall_vector 2022-08-12 11:28:21 +02:00
suspend_pv.c locking/seqlock, headers: Untangle the spaghetti monster 2020-08-06 16:13:13 +02:00
suspend.c x86/xen: Zero MSR_IA32_SPEC_CTRL before suspend 2018-02-28 16:03:19 +01:00
time.c x86/tsc: Provide sched_clock_noinstr() 2023-06-05 21:11:08 +02:00
trace.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
vga.c x86/PVH: obtain VGA console info in Dom0 2023-03-14 15:20:51 +01:00
xen-asm.S x86,objtool: Split UNWIND_HINT_EMPTY in two 2023-03-23 23:18:58 +01:00
xen-head.S Objtool changes for v6.4: 2023-04-28 14:02:54 -07:00
xen-ops.h x86: xen: add missing prototypes 2023-06-26 07:47:11 +02:00