Hello,
I got a little problem in ARMv8's MMU.
Obviously, when we access the kernel virtual address in application such as :
unsigned long *p = 0xffffffff28008000; unsigned long x = *p; *p = 1;
The application will be killed by kernel and then reports "segment fault".
But What the actual action does by MMU in ARMv8? When does it find the permission fault?
In the first time it gets the VA? OR when MMU obtains the value from the TTBR1_EL1? OR at the time when MMU translates the table and gets some descriptor which determines the permission?
0xffffffff28008000 is kernel virtual address, translated by the TTBR1_EL1. there is AP (Access Permission, 2 bits ) in the page table entry, the kernel virtual address is coded not to allow EL0 access.
check the link for more details developer.arm.com/.../Permissions-attributes