Re: [PATCH v5 18/39] mm: Handle faultless write upgrades for shstk

Edgecombe, Rick P
2023-01-31T23:33:41Z

On Tue, 2023-01-31 at 09:46 +0100, David Hildenbrand wrote:
> Sure ...
>
> but I reconsidered :)
>
> Maybe there is a cleaner way to do it and avoid the "NULL" argument.
>
> What about having (while you're going over everything already):
>
> pte_mkwrite(pte, vma)
> pte_mkwrite_kernel(pte)
>
> The latter would only be used in that arch code where we're working
> on
> kernel pgtables. We already have pte_offset_kernel() and
> pte_alloc_kernel_track(), so it's not too weird.

Hmm, one downside is the "mk" part might lead people to guess
pte_mkwrite_kernel() would make it writable AND a kernel page (like
U/S=0 on x86). Instead of being a mkwrite() that's useful for setting
on kernel PTEs.

The other problem is that one of NULL passers is not for kernel memory.
huge_pte_mkwrite() calls pte_mkwrite(). Shadow stack memory can't be
created with MAP_HUGETLB, so it is not needed. Using
pte_mkwrite_kernel() would look weird in this case, but making
huge_pte_mkwrite() take a VMA would be for no reason. Maybe making
huge_pte_mkwrite() take a VMA is the better of those two options. Or
keep the NULL semantics... Any thoughts?