Commit c2b43854 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM fixes from Russell King:

 - Fix clang-related relocation warning in futex code

 - Fix incorrect use of get_kernel_nofault()

 - Fix bad code generation in __get_user_check() when kasan is enabled

 - Ensure TLB function table is correctly aligned

 - Remove duplicated string function definitions in decompressor

 - Fix link-time orphan section warnings

 - Fix old-style function prototype for arch_init_kprobes()

 - Only warn about XIP address when not compile testing

 - Handle BE32 big endian for keystone2 remapping

* tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm:
  ARM: 9148/1: handle CONFIG_CPU_ENDIAN_BE32 in arch/arm/kernel/head.S
  ARM: 9141/1: only warn about XIP address when not compile testing
  ARM: 9139/1: kprobes: fix arch_init_kprobes() prototype
  ARM: 9138/1: fix link warning with XIP + frame-pointer
  ARM: 9134/1: remove duplicate memcpy() definition
  ARM: 9133/1: mm: proc-macros: ensure *_tlb_fns are 4B aligned
  ARM: 9132/1: Fix __get_user_check failure with ARM KASAN images
  ARM: 9125/1: fix incorrect use of get_kernel_nofault()
  ARM: 9122/1: select HAVE_FUTEX_CMPXCHG
parents 4862649f 00568b8a
...@@ -92,6 +92,7 @@ config ARM ...@@ -92,6 +92,7 @@ config ARM
select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
select HAVE_FUNCTION_GRAPH_TRACER if !THUMB2_KERNEL && !CC_IS_CLANG select HAVE_FUNCTION_GRAPH_TRACER if !THUMB2_KERNEL && !CC_IS_CLANG
select HAVE_FUNCTION_TRACER if !XIP_KERNEL select HAVE_FUNCTION_TRACER if !XIP_KERNEL
select HAVE_FUTEX_CMPXCHG if FUTEX
select HAVE_GCC_PLUGINS select HAVE_GCC_PLUGINS
select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7) select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)
select HAVE_IRQ_TIME_ACCOUNTING select HAVE_IRQ_TIME_ACCOUNTING
......
...@@ -47,7 +47,10 @@ extern char * strchrnul(const char *, int); ...@@ -47,7 +47,10 @@ extern char * strchrnul(const char *, int);
#endif #endif
#ifdef CONFIG_KERNEL_XZ #ifdef CONFIG_KERNEL_XZ
/* Prevent KASAN override of string helpers in decompressor */
#undef memmove
#define memmove memmove #define memmove memmove
#undef memcpy
#define memcpy memcpy #define memcpy memcpy
#include "../../../../lib/decompress_unxz.c" #include "../../../../lib/decompress_unxz.c"
#endif #endif
......
...@@ -176,6 +176,7 @@ extern int __get_user_64t_4(void *); ...@@ -176,6 +176,7 @@ extern int __get_user_64t_4(void *);
register unsigned long __l asm("r1") = __limit; \ register unsigned long __l asm("r1") = __limit; \
register int __e asm("r0"); \ register int __e asm("r0"); \
unsigned int __ua_flags = uaccess_save_and_enable(); \ unsigned int __ua_flags = uaccess_save_and_enable(); \
int __tmp_e; \
switch (sizeof(*(__p))) { \ switch (sizeof(*(__p))) { \
case 1: \ case 1: \
if (sizeof((x)) >= 8) \ if (sizeof((x)) >= 8) \
...@@ -203,9 +204,10 @@ extern int __get_user_64t_4(void *); ...@@ -203,9 +204,10 @@ extern int __get_user_64t_4(void *);
break; \ break; \
default: __e = __get_user_bad(); break; \ default: __e = __get_user_bad(); break; \
} \ } \
__tmp_e = __e; \
uaccess_restore(__ua_flags); \ uaccess_restore(__ua_flags); \
x = (typeof(*(p))) __r2; \ x = (typeof(*(p))) __r2; \
__e; \ __tmp_e; \
}) })
#define get_user(x, p) \ #define get_user(x, p) \
......
...@@ -253,7 +253,7 @@ __create_page_tables: ...@@ -253,7 +253,7 @@ __create_page_tables:
add r0, r4, #KERNEL_OFFSET >> (SECTION_SHIFT - PMD_ORDER) add r0, r4, #KERNEL_OFFSET >> (SECTION_SHIFT - PMD_ORDER)
ldr r6, =(_end - 1) ldr r6, =(_end - 1)
adr_l r5, kernel_sec_start @ _pa(kernel_sec_start) adr_l r5, kernel_sec_start @ _pa(kernel_sec_start)
#ifdef CONFIG_CPU_ENDIAN_BE8 #if defined CONFIG_CPU_ENDIAN_BE8 || defined CONFIG_CPU_ENDIAN_BE32
str r8, [r5, #4] @ Save physical start of kernel (BE) str r8, [r5, #4] @ Save physical start of kernel (BE)
#else #else
str r8, [r5] @ Save physical start of kernel (LE) str r8, [r5] @ Save physical start of kernel (LE)
...@@ -266,7 +266,7 @@ __create_page_tables: ...@@ -266,7 +266,7 @@ __create_page_tables:
bls 1b bls 1b
eor r3, r3, r7 @ Remove the MMU flags eor r3, r3, r7 @ Remove the MMU flags
adr_l r5, kernel_sec_end @ _pa(kernel_sec_end) adr_l r5, kernel_sec_end @ _pa(kernel_sec_end)
#ifdef CONFIG_CPU_ENDIAN_BE8 #if defined CONFIG_CPU_ENDIAN_BE8 || defined CONFIG_CPU_ENDIAN_BE32
str r3, [r5, #4] @ Save physical end of kernel (BE) str r3, [r5, #4] @ Save physical end of kernel (BE)
#else #else
str r3, [r5] @ Save physical end of kernel (LE) str r3, [r5] @ Save physical end of kernel (LE)
......
...@@ -136,7 +136,7 @@ static void dump_mem(const char *lvl, const char *str, unsigned long bottom, ...@@ -136,7 +136,7 @@ static void dump_mem(const char *lvl, const char *str, unsigned long bottom,
for (p = first, i = 0; i < 8 && p < top; i++, p += 4) { for (p = first, i = 0; i < 8 && p < top; i++, p += 4) {
if (p >= bottom && p < top) { if (p >= bottom && p < top) {
unsigned long val; unsigned long val;
if (get_kernel_nofault(val, (unsigned long *)p)) if (!get_kernel_nofault(val, (unsigned long *)p))
sprintf(str + i * 9, " %08lx", val); sprintf(str + i * 9, " %08lx", val);
else else
sprintf(str + i * 9, " ????????"); sprintf(str + i * 9, " ????????");
......
...@@ -40,6 +40,10 @@ SECTIONS ...@@ -40,6 +40,10 @@ SECTIONS
ARM_DISCARD ARM_DISCARD
*(.alt.smp.init) *(.alt.smp.init)
*(.pv_table) *(.pv_table)
#ifndef CONFIG_ARM_UNWIND
*(.ARM.exidx) *(.ARM.exidx.*)
*(.ARM.extab) *(.ARM.extab.*)
#endif
} }
. = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR); . = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR);
...@@ -172,7 +176,7 @@ ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined") ...@@ -172,7 +176,7 @@ ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined")
ASSERT((_end - __bss_start) >= 12288, ".bss too small for CONFIG_XIP_DEFLATED_DATA") ASSERT((_end - __bss_start) >= 12288, ".bss too small for CONFIG_XIP_DEFLATED_DATA")
#endif #endif
#ifdef CONFIG_ARM_MPU #if defined(CONFIG_ARM_MPU) && !defined(CONFIG_COMPILE_TEST)
/* /*
* Due to PMSAv7 restriction on base address and size we have to * Due to PMSAv7 restriction on base address and size we have to
* enforce minimal alignment restrictions. It was seen that weaker * enforce minimal alignment restrictions. It was seen that weaker
......
...@@ -340,6 +340,7 @@ ENTRY(\name\()_cache_fns) ...@@ -340,6 +340,7 @@ ENTRY(\name\()_cache_fns)
.macro define_tlb_functions name:req, flags_up:req, flags_smp .macro define_tlb_functions name:req, flags_up:req, flags_smp
.type \name\()_tlb_fns, #object .type \name\()_tlb_fns, #object
.align 2
ENTRY(\name\()_tlb_fns) ENTRY(\name\()_tlb_fns)
.long \name\()_flush_user_tlb_range .long \name\()_flush_user_tlb_range
.long \name\()_flush_kern_tlb_range .long \name\()_flush_kern_tlb_range
......
...@@ -439,7 +439,7 @@ static struct undef_hook kprobes_arm_break_hook = { ...@@ -439,7 +439,7 @@ static struct undef_hook kprobes_arm_break_hook = {
#endif /* !CONFIG_THUMB2_KERNEL */ #endif /* !CONFIG_THUMB2_KERNEL */
int __init arch_init_kprobes() int __init arch_init_kprobes(void)
{ {
arm_probes_decode_init(); arm_probes_decode_init();
#ifdef CONFIG_THUMB2_KERNEL #ifdef CONFIG_THUMB2_KERNEL
......
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