Merge "arm64: kernel: Save and restore UAO and addr_limit on exception entry"
This commit is contained in:
commit
fbf5f7c2db
2 changed files with 5 additions and 1 deletions
|
@ -104,6 +104,7 @@
|
||||||
str x20, [sp, #S_ORIG_ADDR_LIMIT]
|
str x20, [sp, #S_ORIG_ADDR_LIMIT]
|
||||||
mov x20, #TASK_SIZE_64
|
mov x20, #TASK_SIZE_64
|
||||||
str x20, [tsk, #TI_ADDR_LIMIT]
|
str x20, [tsk, #TI_ADDR_LIMIT]
|
||||||
|
ALTERNATIVE(nop, SET_PSTATE_UAO(0), ARM64_HAS_UAO, CONFIG_ARM64_UAO)
|
||||||
.endif /* \el == 0 */
|
.endif /* \el == 0 */
|
||||||
mrs x22, elr_el1
|
mrs x22, elr_el1
|
||||||
mrs x23, spsr_el1
|
mrs x23, spsr_el1
|
||||||
|
@ -139,6 +140,8 @@
|
||||||
/* Restore the task's original addr_limit. */
|
/* Restore the task's original addr_limit. */
|
||||||
ldr x20, [sp, #S_ORIG_ADDR_LIMIT]
|
ldr x20, [sp, #S_ORIG_ADDR_LIMIT]
|
||||||
str x20, [tsk, #TI_ADDR_LIMIT]
|
str x20, [tsk, #TI_ADDR_LIMIT]
|
||||||
|
|
||||||
|
/* No need to restore UAO, it will be restored from SPSR_EL1 */
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
ldp x21, x22, [sp, #S_PC] // load ELR, SPSR
|
ldp x21, x22, [sp, #S_PC] // load ELR, SPSR
|
||||||
|
|
|
@ -291,7 +291,8 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permission_fault(esr) && (addr < USER_DS)) {
|
if (permission_fault(esr) && (addr < USER_DS)) {
|
||||||
if (get_fs() == KERNEL_DS)
|
/* regs->orig_addr_limit may be 0 if we entered from EL0 */
|
||||||
|
if (regs->orig_addr_limit == KERNEL_DS)
|
||||||
die("Accessing user space memory with fs=KERNEL_DS", regs, esr);
|
die("Accessing user space memory with fs=KERNEL_DS", regs, esr);
|
||||||
|
|
||||||
if (!search_exception_tables(regs->pc))
|
if (!search_exception_tables(regs->pc))
|
||||||
|
|
Loading…
Add table
Reference in a new issue