On Fri, 2018-10-19 at 04:13:29 UTC, Michael Ellerman wrote: > When we have CONFIG_STRICT_KERNEL_RWX enabled, we try to split the > kernel linear (1:1) mapping so that the kernel text is in a separate > page to kernel data, so we can mark the former read-only. > > We could achieve that just by always using 64K pages for the linear > mapping, but we try to be smarter. Instead we use huge pages when > possible, and only switch to smaller pages when necessary. > > However we have an off-by-one bug in that logic, which causes us to > calculate the wrong boundary between text and data. > > For example with the end of the kernel text at 16M we see: > > radix-mmu: Mapped 0x0000000000000000-0x0000000001200000 with 64.0 KiB pages > radix-mmu: Mapped 0x0000000001200000-0x0000000040000000 with 2.00 MiB pages > radix-mmu: Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages > > ie. we mapped from 0 to 18M with 64K pages, even though the boundary > between text and data is at 16M. > > With the fix we see we're correctly hitting the 16M boundary: > > radix-mmu: Mapped 0x0000000000000000-0x0000000001000000 with 64.0 KiB pages > radix-mmu: Mapped 0x0000000001000000-0x0000000040000000 with 2.00 MiB pages > radix-mmu: Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages > > Signed-off-by: Michael Ellerman <m...@ellerman.id.au>
Series applied to powerpc next. https://git.kernel.org/powerpc/c/5c6499b7041b43807dfaeda28aa87f cheers