ARM: uaccess: integrate uaccess_save and uaccess_restore

Integrate uaccess_save / uaccess_restore macros into the new
uaccess_entry / uaccess_exit macros respectively.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
This commit is contained in:
Russell King 2020-05-03 13:14:09 +01:00
parent 747ffc2fcf
commit 8ede890b0b
1 changed files with 13 additions and 17 deletions

View File

@ -67,30 +67,23 @@
#endif #endif
.endm .endm
.macro uaccess_save, tmp
#ifdef CONFIG_CPU_SW_DOMAIN_PAN #ifdef CONFIG_CPU_SW_DOMAIN_PAN
mrc p15, 0, \tmp, c3, c0, 0 #define DACR(x...) x
str \tmp, [sp, #SVC_DACR] #else
#define DACR(x...)
#endif #endif
.endm
.macro uaccess_restore
#ifdef CONFIG_CPU_SW_DOMAIN_PAN
ldr r0, [sp, #SVC_DACR]
mcr p15, 0, r0, c3, c0, 0
#endif
.endm
/* /*
* Save the address limit on entry to a privileged exception and * Save the address limit on entry to a privileged exception and
* if using PAN, save and disable usermode access. * if using PAN, save and disable usermode access.
*/ */
.macro uaccess_entry, tsk, tmp0, tmp1, tmp2, disable .macro uaccess_entry, tsk, tmp0, tmp1, tmp2, disable
ldr \tmp0, [\tsk, #TI_ADDR_LIMIT] ldr \tmp1, [\tsk, #TI_ADDR_LIMIT]
mov \tmp1, #TASK_SIZE mov \tmp2, #TASK_SIZE
str \tmp1, [\tsk, #TI_ADDR_LIMIT] str \tmp2, [\tsk, #TI_ADDR_LIMIT]
str \tmp0, [sp, #SVC_ADDR_LIMIT] DACR( mrc p15, 0, \tmp0, c3, c0, 0)
uaccess_save \tmp0 DACR( str \tmp0, [sp, #SVC_DACR])
str \tmp1, [sp, #SVC_ADDR_LIMIT]
.if \disable .if \disable
uaccess_disable \tmp0 uaccess_disable \tmp0
.endif .endif
@ -99,8 +92,11 @@
/* Restore the user access state previously saved by uaccess_entry */ /* Restore the user access state previously saved by uaccess_entry */
.macro uaccess_exit, tsk, tmp0, tmp1 .macro uaccess_exit, tsk, tmp0, tmp1
ldr \tmp1, [sp, #SVC_ADDR_LIMIT] ldr \tmp1, [sp, #SVC_ADDR_LIMIT]
uaccess_restore DACR( ldr \tmp0, [sp, #SVC_DACR])
str \tmp1, [\tsk, #TI_ADDR_LIMIT] str \tmp1, [\tsk, #TI_ADDR_LIMIT]
DACR( mcr p15, 0, \tmp0, c3, c0, 0)
.endm .endm
#undef DACR
#endif /* __ASM_UACCESS_ASM_H__ */ #endif /* __ASM_UACCESS_ASM_H__ */