diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-08 14:05:05 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-08 14:05:05 -0400 |
| commit | 301cdf5c75695addaaf3b4857b6df7a1d764503e (patch) | |
| tree | 4efc0d054c3c34b48cba7df4994f251d3c0449e7 | |
| parent | febb72a6e4cc6c8cffcc1ea649a3fb364f1ea432 (diff) | |
| parent | fde165b2a29673aabf18ceff14dea1f1cfb0daad (diff) | |
Merge branch 'fixes' of git://git.linaro.org/people/rmk/linux-arm
Pull ARM fixes from Russell King:
"This is mainly audit fixes, found by folks who happened to enable this
feature and then found it broke their user applications."
* 'fixes' of git://git.linaro.org/people/rmk/linux-arm:
ARM: 7414/1: SMP: prevent use of the console when using idmap_pgd
ARM: 7412/1: audit: use only AUDIT_ARCH_ARM regardless of endianness
ARM: 7411/1: audit: fix treatment of saved ip register during syscall tracing
ARM: 7410/1: Add extra clobber registers for assembly in kernel_execve
| -rw-r--r-- | arch/arm/kernel/ptrace.c | 24 | ||||
| -rw-r--r-- | arch/arm/kernel/smp.c | 4 | ||||
| -rw-r--r-- | arch/arm/kernel/sys_arm.c | 2 |
3 files changed, 12 insertions, 18 deletions
diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index 80abafb9bf33..9650c143afc1 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c | |||
| @@ -906,27 +906,14 @@ long arch_ptrace(struct task_struct *child, long request, | |||
| 906 | return ret; | 906 | return ret; |
| 907 | } | 907 | } |
| 908 | 908 | ||
| 909 | #ifdef __ARMEB__ | ||
| 910 | #define AUDIT_ARCH_NR AUDIT_ARCH_ARMEB | ||
| 911 | #else | ||
| 912 | #define AUDIT_ARCH_NR AUDIT_ARCH_ARM | ||
| 913 | #endif | ||
| 914 | |||
| 915 | asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno) | 909 | asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno) |
| 916 | { | 910 | { |
| 917 | unsigned long ip; | 911 | unsigned long ip; |
| 918 | 912 | ||
| 919 | /* | 913 | if (why) |
| 920 | * Save IP. IP is used to denote syscall entry/exit: | ||
| 921 | * IP = 0 -> entry, = 1 -> exit | ||
| 922 | */ | ||
| 923 | ip = regs->ARM_ip; | ||
| 924 | regs->ARM_ip = why; | ||
| 925 | |||
| 926 | if (!ip) | ||
| 927 | audit_syscall_exit(regs); | 914 | audit_syscall_exit(regs); |
| 928 | else | 915 | else |
| 929 | audit_syscall_entry(AUDIT_ARCH_NR, scno, regs->ARM_r0, | 916 | audit_syscall_entry(AUDIT_ARCH_ARM, scno, regs->ARM_r0, |
| 930 | regs->ARM_r1, regs->ARM_r2, regs->ARM_r3); | 917 | regs->ARM_r1, regs->ARM_r2, regs->ARM_r3); |
| 931 | 918 | ||
| 932 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) | 919 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) |
| @@ -936,6 +923,13 @@ asmlinkage int syscall_trace(int why, struct pt_regs *regs, int scno) | |||
| 936 | 923 | ||
| 937 | current_thread_info()->syscall = scno; | 924 | current_thread_info()->syscall = scno; |
| 938 | 925 | ||
| 926 | /* | ||
| 927 | * IP is used to denote syscall entry/exit: | ||
| 928 | * IP = 0 -> entry, =1 -> exit | ||
| 929 | */ | ||
| 930 | ip = regs->ARM_ip; | ||
| 931 | regs->ARM_ip = why; | ||
| 932 | |||
| 939 | /* the 0x80 provides a way for the tracing parent to distinguish | 933 | /* the 0x80 provides a way for the tracing parent to distinguish |
| 940 | between a syscall stop and SIGTRAP delivery */ | 934 | between a syscall stop and SIGTRAP delivery */ |
| 941 | ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) | 935 | ptrace_notify(SIGTRAP | ((current->ptrace & PT_TRACESYSGOOD) |
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index f6a4d32b0421..8f4644659777 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c | |||
| @@ -251,8 +251,6 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
| 251 | struct mm_struct *mm = &init_mm; | 251 | struct mm_struct *mm = &init_mm; |
| 252 | unsigned int cpu = smp_processor_id(); | 252 | unsigned int cpu = smp_processor_id(); |
| 253 | 253 | ||
| 254 | printk("CPU%u: Booted secondary processor\n", cpu); | ||
| 255 | |||
| 256 | /* | 254 | /* |
| 257 | * All kernel threads share the same mm context; grab a | 255 | * All kernel threads share the same mm context; grab a |
| 258 | * reference and switch to it. | 256 | * reference and switch to it. |
| @@ -264,6 +262,8 @@ asmlinkage void __cpuinit secondary_start_kernel(void) | |||
| 264 | enter_lazy_tlb(mm, current); | 262 | enter_lazy_tlb(mm, current); |
| 265 | local_flush_tlb_all(); | 263 | local_flush_tlb_all(); |
| 266 | 264 | ||
| 265 | printk("CPU%u: Booted secondary processor\n", cpu); | ||
| 266 | |||
| 267 | cpu_init(); | 267 | cpu_init(); |
| 268 | preempt_disable(); | 268 | preempt_disable(); |
| 269 | trace_hardirqs_off(); | 269 | trace_hardirqs_off(); |
diff --git a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c index d2b177905cdb..76cbb055dd05 100644 --- a/arch/arm/kernel/sys_arm.c +++ b/arch/arm/kernel/sys_arm.c | |||
| @@ -115,7 +115,7 @@ int kernel_execve(const char *filename, | |||
| 115 | "Ir" (THREAD_START_SP - sizeof(regs)), | 115 | "Ir" (THREAD_START_SP - sizeof(regs)), |
| 116 | "r" (®s), | 116 | "r" (®s), |
| 117 | "Ir" (sizeof(regs)) | 117 | "Ir" (sizeof(regs)) |
| 118 | : "r0", "r1", "r2", "r3", "ip", "lr", "memory"); | 118 | : "r0", "r1", "r2", "r3", "r8", "r9", "ip", "lr", "memory"); |
| 119 | 119 | ||
| 120 | out: | 120 | out: |
| 121 | return ret; | 121 | return ret; |
