Thread (20 messages) 20 messages, 3 authors, 2024-04-02

Re: [PATCH v11 00/11] Support page table check PowerPC

From: Christophe Leroy <hidden>
Date: 2024-03-28 06:53:01
Also in: linux-arm-kernel, linux-mm, linux-riscv


Le 28/03/2024 à 05:55, Rohan McLure a écrit :
Support page table check on all PowerPC platforms. This works by
serialising assignments, reassignments and clears of page table
entries at each level in order to ensure that anonymous mappings
have at most one writable consumer, and likewise that file-backed
mappings are not simultaneously also anonymous mappings.

In order to support this infrastructure, a number of stubs must be
defined for all powerpc platforms. Additionally, seperate set_pte_at()
and set_pte_at_unchecked(), to allow for internal, uninstrumented mappings.
I gave it a try on QEMU e500 (64 bits), and get the following Oops. What 
do I have to look for ?

Freeing unused kernel image (initmem) memory: 2588K
This architecture does not have kernel memory protection.
Run /init as init process
------------[ cut here ]------------
kernel BUG at mm/page_table_check.c:119!
Oops: Exception in kernel mode, sig: 5 [#1]
BE PAGE_SIZE=4K SMP NR_CPUS=32 QEMU e500
Modules linked in:
CPU: 0 PID: 1 Comm: init Not tainted 6.8.0-13732-gc5347beead0b-dirty #784
Hardware name: QEMU ppce500 e5500 0x80240020 QEMU e500
NIP:  c0000000002951a0 LR: c0000000002951bc CTR: 0000000000000000
REGS: c0000000032e7440 TRAP: 0700   Not tainted 
(6.8.0-13732-gc5347beead0b-dirty)
MSR:  0000000080029002 <CE,EE,ME>  CR: 24044248  XER: 00000000
IRQMASK: 0
GPR00: c000000000029d90 c0000000032e76e0 c000000000d44000 c000000003017e18
GPR04: 00000000ffb11000 c000000007f16888 0000000fc324123d 0000000000000000
GPR08: 0000000000000000 0000000000000001 c000000001184000 0000000084004248
GPR12: 00000000000000c0 c0000000011b9000 c000000007f16888 c000000007f19000
GPR16: 0000000000001000 00003ffffffff000 0000000000000000 0000000000000000
GPR20: 0000400000000000 0000000000000000 0000000000000001 ffffc000ffb12000
GPR24: c000000007f19000 c000000006008000 c000000006008000 0000000000000030
GPR28: 0000000000000001 c00000000118afe8 c000000003017e18 0000000000000001
NIP [c0000000002951a0] __page_table_check_ptes_set+0x210/0x2ac
LR [c0000000002951bc] __page_table_check_ptes_set+0x22c/0x2ac
Call Trace:
[c0000000032e76e0] [c0000000032e7790] 0xc0000000032e7790 (unreliable)
[c0000000032e7730] [c000000000029d90] set_ptes+0x178/0x210
[c0000000032e7790] [c00000000024c72c] move_page_tables+0x298/0x750
[c0000000032e7870] [c0000000002a944c] shift_arg_pages+0x120/0x254
[c0000000032e79a0] [c0000000002a9f94] setup_arg_pages+0x244/0x418
[c0000000032e7b30] [c000000000331610] load_elf_binary+0x584/0x17d4
[c0000000032e7c30] [c0000000002aa3e8] bprm_execve+0x280/0x704
[c0000000032e7d00] [c0000000002ac158] kernel_execve+0x16c/0x214
[c0000000032e7d50] [c0000000000011c8] run_init_process+0x100/0x168
[c0000000032e7de0] [c00000000000214c] kernel_init+0x84/0x1f8
[c0000000032e7e50] [c000000000000594] ret_from_kernel_user_thread+0x14/0x1c
--- interrupt: 0 at 0x0
Code: 81230004 7d2907b4 0b090000 7c0004ac 7d201828 31290001 7d20192d 
40c2fff4 7c0004ac 2c090002 39200000 7d29e01e <0b090000> e93d0000 
37ffffff 7fde4a14
---[ end trace 0000000000000000 ]---

note: init[1] exited with irqs disabled
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000005
Rebooting in 180 seconds..
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help