提交 e950631e 编写于 作者: C Catalin Marinas

arm64: Remove the get_thread_info() function

This function was introduced by previous commits implementing UAO.
However, it can be replaced with task_thread_info() in
uao_thread_switch() or get_fs() in do_page_fault() (the latter being
called only on the current context, so no need for using the saved
pt_regs).
Signed-off-by: NCatalin Marinas <catalin.marinas@arm.com>
上级 70544196
...@@ -85,12 +85,6 @@ static inline struct thread_info *current_thread_info(void) ...@@ -85,12 +85,6 @@ static inline struct thread_info *current_thread_info(void)
return (struct thread_info *)sp_el0; return (struct thread_info *)sp_el0;
} }
/* Access struct thread_info of another thread */
static inline struct thread_info *get_thread_info(unsigned long thread_stack)
{
return (struct thread_info *)(thread_stack & ~(THREAD_SIZE - 1));
}
#define thread_saved_pc(tsk) \ #define thread_saved_pc(tsk) \
((unsigned long)(tsk->thread.cpu_context.pc)) ((unsigned long)(tsk->thread.cpu_context.pc))
#define thread_saved_sp(tsk) \ #define thread_saved_sp(tsk) \
......
...@@ -315,15 +315,12 @@ static void tls_thread_switch(struct task_struct *next) ...@@ -315,15 +315,12 @@ static void tls_thread_switch(struct task_struct *next)
/* Restore the UAO state depending on next's addr_limit */ /* Restore the UAO state depending on next's addr_limit */
static void uao_thread_switch(struct task_struct *next) static void uao_thread_switch(struct task_struct *next)
{ {
unsigned long next_sp = next->thread.cpu_context.sp; if (IS_ENABLED(CONFIG_ARM64_UAO)) {
if (task_thread_info(next)->addr_limit == KERNEL_DS)
if (IS_ENABLED(CONFIG_ARM64_UAO) && asm(ALTERNATIVE("nop", SET_PSTATE_UAO(1), ARM64_HAS_UAO));
get_thread_info(next_sp)->addr_limit == KERNEL_DS) else
asm(ALTERNATIVE("nop", SET_PSTATE_UAO(1), ARM64_HAS_UAO, asm(ALTERNATIVE("nop", SET_PSTATE_UAO(0), ARM64_HAS_UAO));
CONFIG_ARM64_UAO)); }
else
asm(ALTERNATIVE("nop", SET_PSTATE_UAO(0), ARM64_HAS_UAO,
CONFIG_ARM64_UAO));
} }
/* /*
......
...@@ -234,7 +234,7 @@ static int __kprobes do_page_fault(unsigned long addr, unsigned int esr, ...@@ -234,7 +234,7 @@ 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_thread_info(regs->sp)->addr_limit == KERNEL_DS) if (get_fs() == KERNEL_DS)
panic("Accessing user space memory with fs=KERNEL_DS"); panic("Accessing user space memory with fs=KERNEL_DS");
if (!search_exception_tables(regs->pc)) if (!search_exception_tables(regs->pc))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册