Commit f39b6f0e authored by Andy Lutomirski's avatar Andy Lutomirski Committed by Ingo Molnar

x86/asm/entry: Change all 'user_mode_vm()' calls to 'user_mode()'

user_mode_vm() and user_mode() are now the same.  Change all callers
of user_mode_vm() to user_mode().

The next patch will remove the definition of user_mode_vm.
Signed-off-by: default avatarAndy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brad Spengler <spender@grsecurity.net>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/43b1f57f3df70df5a08b0925897c660725015554.1426728647.git.luto@kernel.org
[ Merged to a more recent kernel. ]
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent efa70451
...@@ -715,7 +715,7 @@ int poke_int3_handler(struct pt_regs *regs) ...@@ -715,7 +715,7 @@ int poke_int3_handler(struct pt_regs *regs)
if (likely(!bp_patching_in_progress)) if (likely(!bp_patching_in_progress))
return 0; return 0;
if (user_mode_vm(regs) || regs->ip != (unsigned long)bp_int3_addr) if (user_mode(regs) || regs->ip != (unsigned long)bp_int3_addr)
return 0; return 0;
/* set up the specified breakpoint handler */ /* set up the specified breakpoint handler */
......
...@@ -105,7 +105,7 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs) ...@@ -105,7 +105,7 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs)
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
struct pt_regs fixed_regs; struct pt_regs fixed_regs;
if (!user_mode_vm(regs)) { if (!user_mode(regs)) {
crash_fixup_ss_esp(&fixed_regs, regs); crash_fixup_ss_esp(&fixed_regs, regs);
regs = &fixed_regs; regs = &fixed_regs;
} }
......
...@@ -278,7 +278,7 @@ int __die(const char *str, struct pt_regs *regs, long err) ...@@ -278,7 +278,7 @@ int __die(const char *str, struct pt_regs *regs, long err)
print_modules(); print_modules();
show_regs(regs); show_regs(regs);
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
if (user_mode_vm(regs)) { if (user_mode(regs)) {
sp = regs->sp; sp = regs->sp;
ss = regs->ss & 0xffff; ss = regs->ss & 0xffff;
} else { } else {
...@@ -307,7 +307,7 @@ void die(const char *str, struct pt_regs *regs, long err) ...@@ -307,7 +307,7 @@ void die(const char *str, struct pt_regs *regs, long err)
unsigned long flags = oops_begin(); unsigned long flags = oops_begin();
int sig = SIGSEGV; int sig = SIGSEGV;
if (!user_mode_vm(regs)) if (!user_mode(regs))
report_bug(regs->ip, regs); report_bug(regs->ip, regs);
if (__die(str, regs, err)) if (__die(str, regs, err))
......
...@@ -123,13 +123,13 @@ void show_regs(struct pt_regs *regs) ...@@ -123,13 +123,13 @@ void show_regs(struct pt_regs *regs)
int i; int i;
show_regs_print_info(KERN_EMERG); show_regs_print_info(KERN_EMERG);
__show_regs(regs, !user_mode_vm(regs)); __show_regs(regs, !user_mode(regs));
/* /*
* When in-kernel, we also print out the stack and code at the * When in-kernel, we also print out the stack and code at the
* time of the fault.. * time of the fault..
*/ */
if (!user_mode_vm(regs)) { if (!user_mode(regs)) {
unsigned int code_prologue = code_bytes * 43 / 64; unsigned int code_prologue = code_bytes * 43 / 64;
unsigned int code_len = code_bytes; unsigned int code_len = code_bytes;
unsigned char c; unsigned char c;
......
...@@ -68,7 +68,7 @@ static inline bool interrupted_kernel_fpu_idle(void) ...@@ -68,7 +68,7 @@ static inline bool interrupted_kernel_fpu_idle(void)
static inline bool interrupted_user_mode(void) static inline bool interrupted_user_mode(void)
{ {
struct pt_regs *regs = get_irq_regs(); struct pt_regs *regs = get_irq_regs();
return regs && user_mode_vm(regs); return regs && user_mode(regs);
} }
/* /*
......
...@@ -165,7 +165,7 @@ bool handle_irq(unsigned irq, struct pt_regs *regs) ...@@ -165,7 +165,7 @@ bool handle_irq(unsigned irq, struct pt_regs *regs)
if (unlikely(!desc)) if (unlikely(!desc))
return false; return false;
if (user_mode_vm(regs) || !execute_on_irq_stack(overflow, desc, irq)) { if (user_mode(regs) || !execute_on_irq_stack(overflow, desc, irq)) {
if (unlikely(overflow)) if (unlikely(overflow))
print_stack_overflow(); print_stack_overflow();
desc->handle_irq(irq, desc); desc->handle_irq(irq, desc);
......
...@@ -44,7 +44,7 @@ static inline void stack_overflow_check(struct pt_regs *regs) ...@@ -44,7 +44,7 @@ static inline void stack_overflow_check(struct pt_regs *regs)
u64 estack_top, estack_bottom; u64 estack_top, estack_bottom;
u64 curbase = (u64)task_stack_page(current); u64 curbase = (u64)task_stack_page(current);
if (user_mode_vm(regs)) if (user_mode(regs))
return; return;
if (regs->sp >= curbase + sizeof(struct thread_info) + if (regs->sp >= curbase + sizeof(struct thread_info) +
......
...@@ -126,11 +126,11 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs) ...@@ -126,11 +126,11 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
#ifdef CONFIG_X86_32 #ifdef CONFIG_X86_32
switch (regno) { switch (regno) {
case GDB_SS: case GDB_SS:
if (!user_mode_vm(regs)) if (!user_mode(regs))
*(unsigned long *)mem = __KERNEL_DS; *(unsigned long *)mem = __KERNEL_DS;
break; break;
case GDB_SP: case GDB_SP:
if (!user_mode_vm(regs)) if (!user_mode(regs))
*(unsigned long *)mem = kernel_stack_pointer(regs); *(unsigned long *)mem = kernel_stack_pointer(regs);
break; break;
case GDB_GS: case GDB_GS:
......
...@@ -602,7 +602,7 @@ int kprobe_int3_handler(struct pt_regs *regs) ...@@ -602,7 +602,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
struct kprobe *p; struct kprobe *p;
struct kprobe_ctlblk *kcb; struct kprobe_ctlblk *kcb;
if (user_mode_vm(regs)) if (user_mode(regs))
return 0; return 0;
addr = (kprobe_opcode_t *)(regs->ip - sizeof(kprobe_opcode_t)); addr = (kprobe_opcode_t *)(regs->ip - sizeof(kprobe_opcode_t));
...@@ -1007,7 +1007,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val, ...@@ -1007,7 +1007,7 @@ int kprobe_exceptions_notify(struct notifier_block *self, unsigned long val,
struct die_args *args = data; struct die_args *args = data;
int ret = NOTIFY_DONE; int ret = NOTIFY_DONE;
if (args->regs && user_mode_vm(args->regs)) if (args->regs && user_mode(args->regs))
return ret; return ret;
if (val == DIE_GPF) { if (val == DIE_GPF) {
......
...@@ -73,7 +73,7 @@ void __show_regs(struct pt_regs *regs, int all) ...@@ -73,7 +73,7 @@ void __show_regs(struct pt_regs *regs, int all)
unsigned long sp; unsigned long sp;
unsigned short ss, gs; unsigned short ss, gs;
if (user_mode_vm(regs)) { if (user_mode(regs)) {
sp = regs->sp; sp = regs->sp;
ss = regs->ss & 0xffff; ss = regs->ss & 0xffff;
gs = get_user_gs(regs); gs = get_user_gs(regs);
......
...@@ -1415,7 +1415,7 @@ static void fill_sigtrap_info(struct task_struct *tsk, ...@@ -1415,7 +1415,7 @@ static void fill_sigtrap_info(struct task_struct *tsk,
memset(info, 0, sizeof(*info)); memset(info, 0, sizeof(*info));
info->si_signo = SIGTRAP; info->si_signo = SIGTRAP;
info->si_code = si_code; info->si_code = si_code;
info->si_addr = user_mode_vm(regs) ? (void __user *)regs->ip : NULL; info->si_addr = user_mode(regs) ? (void __user *)regs->ip : NULL;
} }
void user_single_step_siginfo(struct task_struct *tsk, void user_single_step_siginfo(struct task_struct *tsk,
......
...@@ -30,7 +30,7 @@ unsigned long profile_pc(struct pt_regs *regs) ...@@ -30,7 +30,7 @@ unsigned long profile_pc(struct pt_regs *regs)
{ {
unsigned long pc = instruction_pointer(regs); unsigned long pc = instruction_pointer(regs);
if (!user_mode_vm(regs) && in_lock_functions(pc)) { if (!user_mode(regs) && in_lock_functions(pc)) {
#ifdef CONFIG_FRAME_POINTER #ifdef CONFIG_FRAME_POINTER
return *(unsigned long *)(regs->bp + sizeof(long)); return *(unsigned long *)(regs->bp + sizeof(long));
#else #else
......
...@@ -112,7 +112,7 @@ enum ctx_state ist_enter(struct pt_regs *regs) ...@@ -112,7 +112,7 @@ enum ctx_state ist_enter(struct pt_regs *regs)
{ {
enum ctx_state prev_state; enum ctx_state prev_state;
if (user_mode_vm(regs)) { if (user_mode(regs)) {
/* Other than that, we're just an exception. */ /* Other than that, we're just an exception. */
prev_state = exception_enter(); prev_state = exception_enter();
} else { } else {
...@@ -146,7 +146,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state) ...@@ -146,7 +146,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state)
/* Must be before exception_exit. */ /* Must be before exception_exit. */
preempt_count_sub(HARDIRQ_OFFSET); preempt_count_sub(HARDIRQ_OFFSET);
if (user_mode_vm(regs)) if (user_mode(regs))
return exception_exit(prev_state); return exception_exit(prev_state);
else else
rcu_nmi_exit(); rcu_nmi_exit();
...@@ -158,7 +158,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state) ...@@ -158,7 +158,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state)
* *
* IST exception handlers normally cannot schedule. As a special * IST exception handlers normally cannot schedule. As a special
* exception, if the exception interrupted userspace code (i.e. * exception, if the exception interrupted userspace code (i.e.
* user_mode_vm(regs) would return true) and the exception was not * user_mode(regs) would return true) and the exception was not
* a double fault, it can be safe to schedule. ist_begin_non_atomic() * a double fault, it can be safe to schedule. ist_begin_non_atomic()
* begins a non-atomic section within an ist_enter()/ist_exit() region. * begins a non-atomic section within an ist_enter()/ist_exit() region.
* Callers are responsible for enabling interrupts themselves inside * Callers are responsible for enabling interrupts themselves inside
...@@ -167,7 +167,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state) ...@@ -167,7 +167,7 @@ void ist_exit(struct pt_regs *regs, enum ctx_state prev_state)
*/ */
void ist_begin_non_atomic(struct pt_regs *regs) void ist_begin_non_atomic(struct pt_regs *regs)
{ {
BUG_ON(!user_mode_vm(regs)); BUG_ON(!user_mode(regs));
/* /*
* Sanity check: we need to be on the normal thread stack. This * Sanity check: we need to be on the normal thread stack. This
...@@ -384,7 +384,7 @@ dotraplinkage void do_bounds(struct pt_regs *regs, long error_code) ...@@ -384,7 +384,7 @@ dotraplinkage void do_bounds(struct pt_regs *regs, long error_code)
goto exit; goto exit;
conditional_sti(regs); conditional_sti(regs);
if (!user_mode_vm(regs)) if (!user_mode(regs))
die("bounds", regs, error_code); die("bounds", regs, error_code);
if (!cpu_feature_enabled(X86_FEATURE_MPX)) { if (!cpu_feature_enabled(X86_FEATURE_MPX)) {
...@@ -587,7 +587,7 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s) ...@@ -587,7 +587,7 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
/* Copy the remainder of the stack from the current stack. */ /* Copy the remainder of the stack from the current stack. */
memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip)); memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip));
BUG_ON(!user_mode_vm(&new_stack->regs)); BUG_ON(!user_mode(&new_stack->regs));
return new_stack; return new_stack;
} }
NOKPROBE_SYMBOL(fixup_bad_iret); NOKPROBE_SYMBOL(fixup_bad_iret);
...@@ -637,7 +637,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code) ...@@ -637,7 +637,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
* then it's very likely the result of an icebp/int01 trap. * then it's very likely the result of an icebp/int01 trap.
* User wants a sigtrap for that. * User wants a sigtrap for that.
*/ */
if (!dr6 && user_mode_vm(regs)) if (!dr6 && user_mode(regs))
user_icebp = 1; user_icebp = 1;
/* Catch kmemcheck conditions first of all! */ /* Catch kmemcheck conditions first of all! */
...@@ -721,7 +721,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr) ...@@ -721,7 +721,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
return; return;
conditional_sti(regs); conditional_sti(regs);
if (!user_mode_vm(regs)) if (!user_mode(regs))
{ {
if (!fixup_exception(regs)) { if (!fixup_exception(regs)) {
task->thread.error_code = error_code; task->thread.error_code = error_code;
......
...@@ -912,7 +912,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, ...@@ -912,7 +912,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val,
int ret = NOTIFY_DONE; int ret = NOTIFY_DONE;
/* We are only interested in userspace traps */ /* We are only interested in userspace traps */
if (regs && !user_mode_vm(regs)) if (regs && !user_mode(regs))
return NOTIFY_DONE; return NOTIFY_DONE;
switch (val) { switch (val) {
......
...@@ -59,7 +59,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs) ...@@ -59,7 +59,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs)
int ret = 0; int ret = 0;
/* kprobe_running() needs smp_processor_id() */ /* kprobe_running() needs smp_processor_id() */
if (kprobes_built_in() && !user_mode_vm(regs)) { if (kprobes_built_in() && !user_mode(regs)) {
preempt_disable(); preempt_disable();
if (kprobe_running() && kprobe_fault_handler(regs, 14)) if (kprobe_running() && kprobe_fault_handler(regs, 14))
ret = 1; ret = 1;
...@@ -1035,7 +1035,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs) ...@@ -1035,7 +1035,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs)
if (error_code & PF_USER) if (error_code & PF_USER)
return false; return false;
if (!user_mode_vm(regs) && (regs->flags & X86_EFLAGS_AC)) if (!user_mode(regs) && (regs->flags & X86_EFLAGS_AC))
return false; return false;
return true; return true;
...@@ -1140,7 +1140,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code, ...@@ -1140,7 +1140,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
* User-mode registers count as a user access even for any * User-mode registers count as a user access even for any
* potential system fault or CPU buglet: * potential system fault or CPU buglet:
*/ */
if (user_mode_vm(regs)) { if (user_mode(regs)) {
local_irq_enable(); local_irq_enable();
error_code |= PF_USER; error_code |= PF_USER;
flags |= FAULT_FLAG_USER; flags |= FAULT_FLAG_USER;
......
...@@ -111,7 +111,7 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth) ...@@ -111,7 +111,7 @@ x86_backtrace(struct pt_regs * const regs, unsigned int depth)
{ {
struct stack_frame *head = (struct stack_frame *)frame_pointer(regs); struct stack_frame *head = (struct stack_frame *)frame_pointer(regs);
if (!user_mode_vm(regs)) { if (!user_mode(regs)) {
unsigned long stack = kernel_stack_pointer(regs); unsigned long stack = kernel_stack_pointer(regs);
if (depth) if (depth)
dump_trace(NULL, regs, (unsigned long *)stack, 0, dump_trace(NULL, regs, (unsigned long *)stack, 0,
......
...@@ -1210,7 +1210,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *_die_args) ...@@ -1210,7 +1210,7 @@ xpc_system_die(struct notifier_block *nb, unsigned long event, void *_die_args)
if (((die_args->trapnr == X86_TRAP_MF) || if (((die_args->trapnr == X86_TRAP_MF) ||
(die_args->trapnr == X86_TRAP_XF)) && (die_args->trapnr == X86_TRAP_XF)) &&
!user_mode_vm(die_args->regs)) !user_mode(die_args->regs))
xpc_die_deactivate(); xpc_die_deactivate();
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment