On Fri, Dec 02, 2022 at 04:35:44PM -0800, Rick Edgecombe wrote: > From: Yu-cheng Yu <yu-cheng.yu@xxxxxxxxx> > > When serving a page fault, maybe_mkwrite() makes a PTE writable if there is > a write access to it, and its vma has VM_WRITE. Shadow stack accesses to > shadow stack vma's are also treated as write accesses by the fault handler. > This is because setting shadow stack memory makes it writable via some > instructions, so COW has to happen even for shadow stack reads. > > So maybe_mkwrite() should continue to set VM_WRITE vma's as normally > writable, but also set VM_WRITE|VM_SHADOW_STACK vma's as shadow stack. > > Do this by adding a pte_mkwrite_shstk() and a cross-arch stub. Check for > VM_SHADOW_STACK in maybe_mkwrite() and call pte_mkwrite_shstk() > accordingly. > > Apply the same changes to maybe_pmd_mkwrite(). > > Tested-by: Pengfei Xu <pengfei.xu@xxxxxxxxx> > Tested-by: John Allen <john.allen@xxxxxxx> > Signed-off-by: Yu-cheng Yu <yu-cheng.yu@xxxxxxxxx> Reviewed-by: Kees Cook <keescook@xxxxxxxxxxxx> -- Kees Cook