Re: [PATCH v9 01/42] mm: Rename arch pte_mkwrite()'s to pte_mkwrite_novma()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2023-06-13 at 10:43 +0300, Mike Rapoport wrote:
On Mon, Jun 12, 2023 at 05:10:27PM -0700, Rick Edgecombe wrote:
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 memory or shadow stack memory.

Nit:                            ^ mapping?

Hmm, sure.


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.

Start the process by renaming pte_mkwrite() to pte_mkwrite_novma()
and
adding the pte_mkwrite() wrapper in linux/pgtable.h. Apply the same
pattern for pmd_mkwrite(). Since not all archs have a
pmd_mkwrite_novma(),
create a new arch config HAS_HUGE_PAGE that can be used to tell if
pmd_mkwrite() should be defined. Otherwise in the !HAS_HUGE_PAGE
cases the
compiler would not be able to find pmd_mkwrite_novma().

No functional change.

Cc: linux-doc@xxxxxxxxxxxxxxx
Cc: linux-kernel@xxxxxxxxxxxxxxx
Cc: linux-alpha@xxxxxxxxxxxxxxx
Cc: linux-snps-arc@xxxxxxxxxxxxxxxxxxx
Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
Cc: linux-csky@xxxxxxxxxxxxxxx
Cc: linux-hexagon@xxxxxxxxxxxxxxx
Cc: linux-ia64@xxxxxxxxxxxxxxx
Cc: loongarch@xxxxxxxxxxxxxxx
Cc: linux-m68k@xxxxxxxxxxxxxxxxxxxx
Cc: Michal Simek <monstr@xxxxxxxxx>
Cc: Dinh Nguyen <dinguyen@xxxxxxxxxx>
Cc: linux-mips@xxxxxxxxxxxxxxx
Cc: openrisc@xxxxxxxxxxxxxxxxxxxx
Cc: linux-parisc@xxxxxxxxxxxxxxx
Cc: linuxppc-dev@xxxxxxxxxxxxxxxx
Cc: linux-riscv@xxxxxxxxxxxxxxxxxxx
Cc: linux-s390@xxxxxxxxxxxxxxx
Cc: linux-sh@xxxxxxxxxxxxxxx
Cc: sparclinux@xxxxxxxxxxxxxxx
Cc: linux-um@xxxxxxxxxxxxxxxxxxx
Cc: linux-arch@xxxxxxxxxxxxxxx
Cc: linux-mm@xxxxxxxxx
Suggested-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxx>
Signed-off-by: Rick Edgecombe <rick.p.edgecombe@xxxxxxxxx>
Link:
https://lore.kernel.org/lkml/CAHk-=wiZjSu7c9sFYZb3q04108stgHff2wfbokGCCgW7riz+8Q@xxxxxxxxxxxxxx/

Reviewed-by: Mike Rapoport (IBM) <rppt@xxxxxxxxxx>

Thanks!




[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux