Avoid using 1GB mappings for the identity map that we use in the early
authorkettenis <kettenis@openbsd.org>
Fri, 23 Dec 2022 17:31:30 +0000 (17:31 +0000)
committerkettenis <kettenis@openbsd.org>
Fri, 23 Dec 2022 17:31:30 +0000 (17:31 +0000)
commit300b0a871d257af43592658dffd2f8fd7bc1c314
treec89fa0088ed7bb4b4cf7c9416c063a84a1a2e01c
parent62cec4ff13e34125c4fc9f4e9f3a7ed498d00861
Avoid using 1GB mappings for the identity map that we use in the early
kernel bootstrap phase and when booting the secondary CPUs.  This avoids
accidentally mapping memory regions that should not be mapped (i.e. secure
memory) as all mapped memory can be accessed speculatively.

To allow the kernel to be loaded at arbitrary physical addresses (and
arbitrary virtual addresses in the future) make sure the code that builds
the page tables can handle mapping a block of memory that straddles a
1GB or 512GB boundary.  This involves using two pagetable pages at all
levels except the top level and changing the link_l1_pagetable function
to accept an entry count just like link_l0_pagetable already does.

ok patrick@
sys/arch/arm64/arm64/locore.S
sys/arch/arm64/arm64/locore0.S