mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 14:53:58 -04:00
riscv/mm: teach pte_mkwrite to manufacture shadow stack PTEs
pte_mkwrite() creates PTEs with WRITE encodings for the underlying architecture. The underlying architecture can have two types of writeable mappings: one that can be written using regular store instructions, and another one that can only be written using specialized store instructions (like shadow stack stores). pte_mkwrite can select write PTE encoding based on VMA range (i.e. VM_SHADOW_STACK) Reviewed-by: Alexandre Ghiti <alexghiti@rivosinc.com> Reviewed-by: Zong Li <zong.li@sifive.com> Signed-off-by: Deepak Gupta <debug@rivosinc.com> Tested-by: Andreas Korb <andreas.korb@aisec.fraunhofer.de> # QEMU, custom CVA6 Tested-by: Valentin Haudiquet <valentin.haudiquet@canonical.com> Link: https://patch.msgid.link/20251112-v5_user_cfi_series-v23-8-b55691eacf4f@rivosinc.com [pjw@kernel.org: cleaned up patch description] Signed-off-by: Paul Walmsley <pjw@kernel.org>
This commit is contained in:
committed by
Paul Walmsley
parent
f56ffb8ada
commit
c68c2ef9d6
@@ -451,6 +451,10 @@ static inline pte_t pte_swp_clear_uffd_wp(pte_t pte)
|
||||
|
||||
/* static inline pte_t pte_mkread(pte_t pte) */
|
||||
|
||||
struct vm_area_struct;
|
||||
pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma);
|
||||
#define pte_mkwrite pte_mkwrite
|
||||
|
||||
static inline pte_t pte_mkwrite_novma(pte_t pte)
|
||||
{
|
||||
return __pte(pte_val(pte) | _PAGE_WRITE);
|
||||
@@ -839,6 +843,9 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd)
|
||||
return pte_pmd(pte_mkyoung(pmd_pte(pmd)));
|
||||
}
|
||||
|
||||
pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma);
|
||||
#define pmd_mkwrite pmd_mkwrite
|
||||
|
||||
static inline pmd_t pmd_mkwrite_novma(pmd_t pmd)
|
||||
{
|
||||
return pte_pmd(pte_mkwrite_novma(pmd_pte(pmd)));
|
||||
|
||||
Reference in New Issue
Block a user