mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge branches 'fixes' and 'misc' into for-next
This commit is contained in:
@@ -45,9 +45,14 @@ fffe8000 fffeffff DTCM mapping area for platforms with
|
||||
fffe0000 fffe7fff ITCM mapping area for platforms with
|
||||
ITCM mounted inside the CPU.
|
||||
|
||||
ffc00000 ffefffff Fixmap mapping region. Addresses provided
|
||||
ffc80000 ffefffff Fixmap mapping region. Addresses provided
|
||||
by fix_to_virt() will be located here.
|
||||
|
||||
ffc00000 ffc7ffff Guard region
|
||||
|
||||
ff800000 ffbfffff Permanent, fixed read-only mapping of the
|
||||
firmware provided DT blob
|
||||
|
||||
fee00000 feffffff Mapping of PCI I/O space. This is a static
|
||||
mapping within the vmalloc space.
|
||||
|
||||
@@ -72,6 +77,11 @@ MODULES_VADDR MODULES_END-1 Kernel module space
|
||||
Kernel modules inserted via insmod are
|
||||
placed here using dynamic mappings.
|
||||
|
||||
TASK_SIZE MODULES_VADDR-1 KASAn shadow memory when KASan is in use.
|
||||
The range from MODULES_VADDR to the top
|
||||
of the memory is shadowed here with 1 bit
|
||||
per byte of memory.
|
||||
|
||||
00001000 TASK_SIZE-1 User space mappings
|
||||
Per-thread mappings are placed here via
|
||||
the mmap() system call.
|
||||
|
||||
@@ -18,8 +18,8 @@ out-of-bounds accesses for global variables is only supported since Clang 11.
|
||||
|
||||
Tag-based KASAN is only supported in Clang.
|
||||
|
||||
Currently generic KASAN is supported for the x86_64, arm64, xtensa, s390 and
|
||||
riscv architectures, and tag-based KASAN is supported only for arm64.
|
||||
Currently generic KASAN is supported for the x86_64, arm, arm64, xtensa, s390
|
||||
and riscv architectures, and tag-based KASAN is supported only for arm64.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
-----------------------
|
||||
| alpha: | TODO |
|
||||
| arc: | TODO |
|
||||
| arm: | TODO |
|
||||
| arm: | ok |
|
||||
| arm64: | ok |
|
||||
| c6x: | TODO |
|
||||
| csky: | TODO |
|
||||
|
||||
@@ -67,6 +67,7 @@ config ARM
|
||||
select HAVE_ARCH_BITREVERSE if (CPU_32v7M || CPU_32v7) && !CPU_32v6
|
||||
select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL && !CPU_ENDIAN_BE32 && MMU
|
||||
select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU
|
||||
select HAVE_ARCH_KASAN if MMU && !XIP_KERNEL
|
||||
select HAVE_ARCH_MMAP_RND_BITS if MMU
|
||||
select HAVE_ARCH_SECCOMP
|
||||
select HAVE_ARCH_SECCOMP_FILTER if AEABI && !OABI_COMPAT
|
||||
@@ -1323,6 +1324,15 @@ config PAGE_OFFSET
|
||||
default 0xB0000000 if VMSPLIT_3G_OPT
|
||||
default 0xC0000000
|
||||
|
||||
config KASAN_SHADOW_OFFSET
|
||||
hex
|
||||
depends on KASAN
|
||||
default 0x1f000000 if PAGE_OFFSET=0x40000000
|
||||
default 0x5f000000 if PAGE_OFFSET=0x80000000
|
||||
default 0x9f000000 if PAGE_OFFSET=0xC0000000
|
||||
default 0x8f000000 if PAGE_OFFSET=0xB0000000
|
||||
default 0xffffffff
|
||||
|
||||
config NR_CPUS
|
||||
int "Maximum number of CPUs (2-32)"
|
||||
range 2 32
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#
|
||||
# Copyright (C) 1995-2001 by Russell King
|
||||
|
||||
LDFLAGS_vmlinux := --no-undefined -X --pic-veneer
|
||||
LDFLAGS_vmlinux := --no-undefined -X --pic-veneer -z norelro
|
||||
ifeq ($(CONFIG_CPU_ENDIAN_BE8),y)
|
||||
LDFLAGS_vmlinux += --be8
|
||||
KBUILD_LDFLAGS_MODULE += --be8
|
||||
|
||||
@@ -24,6 +24,7 @@ OBJS += hyp-stub.o
|
||||
endif
|
||||
|
||||
GCOV_PROFILE := n
|
||||
KASAN_SANITIZE := n
|
||||
|
||||
# Prevents link failures: __sanitizer_cov_trace_pc() is not linked in.
|
||||
KCOV_INSTRUMENT := n
|
||||
|
||||
@@ -11,6 +11,12 @@
|
||||
|
||||
#include "efi-header.S"
|
||||
|
||||
#ifdef __ARMEB__
|
||||
#define OF_DT_MAGIC 0xd00dfeed
|
||||
#else
|
||||
#define OF_DT_MAGIC 0xedfe0dd0
|
||||
#endif
|
||||
|
||||
AR_CLASS( .arch armv7-a )
|
||||
M_CLASS( .arch armv7-m )
|
||||
|
||||
@@ -116,7 +122,7 @@
|
||||
/*
|
||||
* Debug print of the final appended DTB location
|
||||
*/
|
||||
.macro dbgadtb, begin, end
|
||||
.macro dbgadtb, begin, size
|
||||
#ifdef DEBUG
|
||||
kputc #'D'
|
||||
kputc #'T'
|
||||
@@ -129,7 +135,7 @@
|
||||
kputc #'('
|
||||
kputc #'0'
|
||||
kputc #'x'
|
||||
kphex \end, 8 /* End of appended DTB */
|
||||
kphex \size, 8 /* Size of appended DTB */
|
||||
kputc #')'
|
||||
kputc #'\n'
|
||||
#endif
|
||||
@@ -165,6 +171,16 @@
|
||||
orr \res, \res, \tmp1, lsl #24
|
||||
.endm
|
||||
|
||||
.macro be32tocpu, val, tmp
|
||||
#ifndef __ARMEB__
|
||||
/* convert to little endian */
|
||||
eor \tmp, \val, \val, ror #16
|
||||
bic \tmp, \tmp, #0x00ff0000
|
||||
mov \val, \val, ror #8
|
||||
eor \val, \val, \tmp, lsr #8
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.section ".start", "ax"
|
||||
/*
|
||||
* sort out different calling conventions
|
||||
@@ -325,11 +341,7 @@ restart: adr r0, LC1
|
||||
*/
|
||||
|
||||
ldr lr, [r6, #0]
|
||||
#ifndef __ARMEB__
|
||||
ldr r1, =0xedfe0dd0 @ sig is 0xd00dfeed big endian
|
||||
#else
|
||||
ldr r1, =0xd00dfeed
|
||||
#endif
|
||||
ldr r1, =OF_DT_MAGIC
|
||||
cmp lr, r1
|
||||
bne dtb_check_done @ not found
|
||||
|
||||
@@ -345,13 +357,7 @@ restart: adr r0, LC1
|
||||
|
||||
/* Get the initial DTB size */
|
||||
ldr r5, [r6, #4]
|
||||
#ifndef __ARMEB__
|
||||
/* convert to little endian */
|
||||
eor r1, r5, r5, ror #16
|
||||
bic r1, r1, #0x00ff0000
|
||||
mov r5, r5, ror #8
|
||||
eor r5, r5, r1, lsr #8
|
||||
#endif
|
||||
be32tocpu r5, r1
|
||||
dbgadtb r6, r5
|
||||
/* 50% DTB growth should be good enough */
|
||||
add r5, r5, r5, lsr #1
|
||||
@@ -403,13 +409,7 @@ restart: adr r0, LC1
|
||||
|
||||
/* Get the current DTB size */
|
||||
ldr r5, [r6, #4]
|
||||
#ifndef __ARMEB__
|
||||
/* convert r5 (dtb size) to little endian */
|
||||
eor r1, r5, r5, ror #16
|
||||
bic r1, r1, #0x00ff0000
|
||||
mov r5, r5, ror #8
|
||||
eor r5, r5, r1, lsr #8
|
||||
#endif
|
||||
be32tocpu r5, r1
|
||||
|
||||
/* preserve 64-bit alignment */
|
||||
add r5, r5, #7
|
||||
|
||||
@@ -7,6 +7,25 @@
|
||||
|
||||
#include <linux/string.h>
|
||||
|
||||
/*
|
||||
* The decompressor is built without KASan but uses the same redirects as the
|
||||
* rest of the kernel when CONFIG_KASAN is enabled, defining e.g. memcpy()
|
||||
* to __memcpy() but since we are not linking with the main kernel string
|
||||
* library in the decompressor, that will lead to link failures.
|
||||
*
|
||||
* Undefine KASan's versions, define the wrapped functions and alias them to
|
||||
* the right names so that when e.g. __memcpy() appear in the code, it will
|
||||
* still be linked to this local version of memcpy().
|
||||
*/
|
||||
#ifdef CONFIG_KASAN
|
||||
#undef memcpy
|
||||
#undef memmove
|
||||
#undef memset
|
||||
void *__memcpy(void *__dest, __const void *__src, size_t __n) __alias(memcpy);
|
||||
void *__memmove(void *__dest, __const void *__src, size_t count) __alias(memmove);
|
||||
void *__memset(void *s, int c, size_t count) __alias(memset);
|
||||
#endif
|
||||
|
||||
void *memcpy(void *__dest, __const void *__src, size_t __n)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#ifndef _ASM_FIXMAP_H
|
||||
#define _ASM_FIXMAP_H
|
||||
|
||||
#define FIXADDR_START 0xffc00000UL
|
||||
#define FIXADDR_START 0xffc80000UL
|
||||
#define FIXADDR_END 0xfff00000UL
|
||||
#define FIXADDR_TOP (FIXADDR_END - PAGE_SIZE)
|
||||
|
||||
|
||||
33
arch/arm/include/asm/kasan.h
Normal file
33
arch/arm/include/asm/kasan.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* arch/arm/include/asm/kasan.h
|
||||
*
|
||||
* Copyright (c) 2015 Samsung Electronics Co., Ltd.
|
||||
* Author: Andrey Ryabinin <ryabinin.a.a@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ASM_KASAN_H
|
||||
#define __ASM_KASAN_H
|
||||
|
||||
#ifdef CONFIG_KASAN
|
||||
|
||||
#include <asm/kasan_def.h>
|
||||
|
||||
#define KASAN_SHADOW_SCALE_SHIFT 3
|
||||
|
||||
/*
|
||||
* The compiler uses a shadow offset assuming that addresses start
|
||||
* from 0. Kernel addresses don't start from 0, so shadow
|
||||
* for kernel really starts from 'compiler's shadow offset' +
|
||||
* ('kernel address space start' >> KASAN_SHADOW_SCALE_SHIFT)
|
||||
*/
|
||||
|
||||
asmlinkage void kasan_early_init(void);
|
||||
extern void kasan_init(void);
|
||||
|
||||
#else
|
||||
static inline void kasan_init(void) { }
|
||||
#endif
|
||||
|
||||
#endif
|
||||
81
arch/arm/include/asm/kasan_def.h
Normal file
81
arch/arm/include/asm/kasan_def.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* arch/arm/include/asm/kasan_def.h
|
||||
*
|
||||
* Copyright (c) 2018 Huawei Technologies Co., Ltd.
|
||||
*
|
||||
* Author: Abbott Liu <liuwenliang@huawei.com>
|
||||
*/
|
||||
|
||||
#ifndef __ASM_KASAN_DEF_H
|
||||
#define __ASM_KASAN_DEF_H
|
||||
|
||||
#ifdef CONFIG_KASAN
|
||||
|
||||
/*
|
||||
* Define KASAN_SHADOW_OFFSET,KASAN_SHADOW_START and KASAN_SHADOW_END for
|
||||
* the Arm kernel address sanitizer. We are "stealing" lowmem (the 4GB
|
||||
* addressable by a 32bit architecture) out of the virtual address
|
||||
* space to use as shadow memory for KASan as follows:
|
||||
*
|
||||
* +----+ 0xffffffff
|
||||
* | | \
|
||||
* | | |-> Static kernel image (vmlinux) BSS and page table
|
||||
* | |/
|
||||
* +----+ PAGE_OFFSET
|
||||
* | | \
|
||||
* | | |-> Loadable kernel modules virtual address space area
|
||||
* | |/
|
||||
* +----+ MODULES_VADDR = KASAN_SHADOW_END
|
||||
* | | \
|
||||
* | | |-> The shadow area of kernel virtual address.
|
||||
* | |/
|
||||
* +----+-> TASK_SIZE (start of kernel space) = KASAN_SHADOW_START the
|
||||
* | |\ shadow address of MODULES_VADDR
|
||||
* | | |
|
||||
* | | |
|
||||
* | | |-> The user space area in lowmem. The kernel address
|
||||
* | | | sanitizer do not use this space, nor does it map it.
|
||||
* | | |
|
||||
* | | |
|
||||
* | | |
|
||||
* | | |
|
||||
* | |/
|
||||
* ------ 0
|
||||
*
|
||||
* 1) KASAN_SHADOW_START
|
||||
* This value begins with the MODULE_VADDR's shadow address. It is the
|
||||
* start of kernel virtual space. Since we have modules to load, we need
|
||||
* to cover also that area with shadow memory so we can find memory
|
||||
* bugs in modules.
|
||||
*
|
||||
* 2) KASAN_SHADOW_END
|
||||
* This value is the 0x100000000's shadow address: the mapping that would
|
||||
* be after the end of the kernel memory at 0xffffffff. It is the end of
|
||||
* kernel address sanitizer shadow area. It is also the start of the
|
||||
* module area.
|
||||
*
|
||||
* 3) KASAN_SHADOW_OFFSET:
|
||||
* This value is used to map an address to the corresponding shadow
|
||||
* address by the following formula:
|
||||
*
|
||||
* shadow_addr = (address >> 3) + KASAN_SHADOW_OFFSET;
|
||||
*
|
||||
* As you would expect, >> 3 is equal to dividing by 8, meaning each
|
||||
* byte in the shadow memory covers 8 bytes of kernel memory, so one
|
||||
* bit shadow memory per byte of kernel memory is used.
|
||||
*
|
||||
* The KASAN_SHADOW_OFFSET is provided in a Kconfig option depending
|
||||
* on the VMSPLIT layout of the system: the kernel and userspace can
|
||||
* split up lowmem in different ways according to needs, so we calculate
|
||||
* the shadow offset depending on this.
|
||||
*/
|
||||
|
||||
#define KASAN_SHADOW_SCALE_SHIFT 3
|
||||
#define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL)
|
||||
#define KASAN_SHADOW_END ((UL(1) << (32 - KASAN_SHADOW_SCALE_SHIFT)) \
|
||||
+ KASAN_SHADOW_OFFSET)
|
||||
#define KASAN_SHADOW_START ((KASAN_SHADOW_END >> 3) + KASAN_SHADOW_OFFSET)
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -18,6 +18,7 @@
|
||||
#ifdef CONFIG_NEED_MACH_MEMORY_H
|
||||
#include <mach/memory.h>
|
||||
#endif
|
||||
#include <asm/kasan_def.h>
|
||||
|
||||
/* PAGE_OFFSET - the virtual address of the start of the kernel image */
|
||||
#define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET)
|
||||
@@ -28,7 +29,11 @@
|
||||
* TASK_SIZE - the maximum size of a user space task.
|
||||
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
|
||||
*/
|
||||
#ifndef CONFIG_KASAN
|
||||
#define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(SZ_16M))
|
||||
#else
|
||||
#define TASK_SIZE (KASAN_SHADOW_START)
|
||||
#endif
|
||||
#define TASK_UNMAPPED_BASE ALIGN(TASK_SIZE / 3, SZ_16M)
|
||||
|
||||
/*
|
||||
@@ -67,6 +72,10 @@
|
||||
*/
|
||||
#define XIP_VIRT_ADDR(physaddr) (MODULES_VADDR + ((physaddr) & 0x000fffff))
|
||||
|
||||
#define FDT_FIXED_BASE UL(0xff800000)
|
||||
#define FDT_FIXED_SIZE (2 * SECTION_SIZE)
|
||||
#define FDT_VIRT_BASE(physbase) ((void *)(FDT_FIXED_BASE | (physbase) % SECTION_SIZE))
|
||||
|
||||
#if !defined(CONFIG_SMP) && !defined(CONFIG_ARM_LPAE)
|
||||
/*
|
||||
* Allow 16MB-aligned ioremap pages
|
||||
@@ -107,6 +116,7 @@ extern unsigned long vectors_base;
|
||||
#define MODULES_VADDR PAGE_OFFSET
|
||||
|
||||
#define XIP_VIRT_ADDR(physaddr) (physaddr)
|
||||
#define FDT_VIRT_BASE(physbase) ((void *)(physbase))
|
||||
|
||||
#endif /* !CONFIG_MMU */
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#define _PAGE_KERNEL_TABLE (PMD_TYPE_TABLE | PMD_BIT4 | PMD_DOMAIN(DOMAIN_KERNEL))
|
||||
|
||||
#ifdef CONFIG_ARM_LPAE
|
||||
#define PGD_SIZE (PTRS_PER_PGD * sizeof(pgd_t))
|
||||
|
||||
static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
|
||||
{
|
||||
@@ -28,14 +29,19 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
|
||||
}
|
||||
|
||||
#else /* !CONFIG_ARM_LPAE */
|
||||
#define PGD_SIZE (PAGE_SIZE << 2)
|
||||
|
||||
/*
|
||||
* Since we have only two-level page tables, these are trivial
|
||||
*/
|
||||
#define pmd_alloc_one(mm,addr) ({ BUG(); ((pmd_t *)2); })
|
||||
#define pmd_free(mm, pmd) do { } while (0)
|
||||
#ifdef CONFIG_KASAN
|
||||
/* The KASan core unconditionally calls pud_populate() on all architectures */
|
||||
#define pud_populate(mm,pmd,pte) do { } while (0)
|
||||
#else
|
||||
#define pud_populate(mm,pmd,pte) BUG()
|
||||
|
||||
#endif
|
||||
#endif /* CONFIG_ARM_LPAE */
|
||||
|
||||
extern pgd_t *pgd_alloc(struct mm_struct *mm);
|
||||
|
||||
@@ -177,11 +177,28 @@
|
||||
* the pud: the pud entry is never bad, always exists, and can't be set or
|
||||
* cleared.
|
||||
*/
|
||||
#define pud_none(pud) (0)
|
||||
#define pud_bad(pud) (0)
|
||||
#define pud_present(pud) (1)
|
||||
#define pud_clear(pudp) do { } while (0)
|
||||
#define set_pud(pud,pudp) do { } while (0)
|
||||
static inline int pud_none(pud_t pud)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pud_bad(pud_t pud)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pud_present(pud_t pud)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline void pud_clear(pud_t *pudp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void set_pud(pud_t *pudp, pud_t pud)
|
||||
{
|
||||
}
|
||||
|
||||
static inline pmd_t *pmd_offset(pud_t *pud, unsigned long addr)
|
||||
{
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
|
||||
extern const struct machine_desc *setup_machine_fdt(unsigned int dt_phys);
|
||||
extern const struct machine_desc *setup_machine_fdt(void *dt_virt);
|
||||
extern void __init arm_dt_init_cpu_maps(void);
|
||||
|
||||
#else /* CONFIG_OF */
|
||||
|
||||
static inline const struct machine_desc *setup_machine_fdt(unsigned int dt_phys)
|
||||
static inline const struct machine_desc *setup_machine_fdt(void *dt_virt)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,9 @@
|
||||
/*
|
||||
* We don't do inline string functions, since the
|
||||
* optimised inline asm versions are not small.
|
||||
*
|
||||
* The __underscore versions of some functions are for KASan to be able
|
||||
* to replace them with instrumented versions.
|
||||
*/
|
||||
|
||||
#define __HAVE_ARCH_STRRCHR
|
||||
@@ -15,15 +18,18 @@ extern char * strchr(const char * s, int c);
|
||||
|
||||
#define __HAVE_ARCH_MEMCPY
|
||||
extern void * memcpy(void *, const void *, __kernel_size_t);
|
||||
extern void *__memcpy(void *dest, const void *src, __kernel_size_t n);
|
||||
|
||||
#define __HAVE_ARCH_MEMMOVE
|
||||
extern void * memmove(void *, const void *, __kernel_size_t);
|
||||
extern void *__memmove(void *dest, const void *src, __kernel_size_t n);
|
||||
|
||||
#define __HAVE_ARCH_MEMCHR
|
||||
extern void * memchr(const void *, int, __kernel_size_t);
|
||||
|
||||
#define __HAVE_ARCH_MEMSET
|
||||
extern void * memset(void *, int, __kernel_size_t);
|
||||
extern void *__memset(void *s, int c, __kernel_size_t n);
|
||||
|
||||
#define __HAVE_ARCH_MEMSET32
|
||||
extern void *__memset32(uint32_t *, uint32_t v, __kernel_size_t);
|
||||
@@ -39,4 +45,24 @@ static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n)
|
||||
return __memset64(p, v, n * 8, v >> 32);
|
||||
}
|
||||
|
||||
/*
|
||||
* For files that are not instrumented (e.g. mm/slub.c) we
|
||||
* must use non-instrumented versions of the mem*
|
||||
* functions named __memcpy() etc. All such kernel code has
|
||||
* been tagged with KASAN_SANITIZE_file.o = n, which means
|
||||
* that the address sanitization argument isn't passed to the
|
||||
* compiler, and __SANITIZE_ADDRESS__ is not set. As a result
|
||||
* these defines kick in.
|
||||
*/
|
||||
#if defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)
|
||||
#define memcpy(dst, src, len) __memcpy(dst, src, len)
|
||||
#define memmove(dst, src, len) __memmove(dst, src, len)
|
||||
#define memset(s, c, n) __memset(s, c, n)
|
||||
|
||||
#ifndef __NO_FORTIFY
|
||||
#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -13,7 +13,15 @@
|
||||
#include <asm/fpstate.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#ifdef CONFIG_KASAN
|
||||
/*
|
||||
* KASan uses a lot of extra stack space so the thread size order needs to
|
||||
* be increased.
|
||||
*/
|
||||
#define THREAD_SIZE_ORDER 2
|
||||
#else
|
||||
#define THREAD_SIZE_ORDER 1
|
||||
#endif
|
||||
#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
|
||||
#define THREAD_START_SP (THREAD_SIZE - 8)
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
*/
|
||||
.macro uaccess_entry, tsk, tmp0, tmp1, tmp2, disable
|
||||
ldr \tmp1, [\tsk, #TI_ADDR_LIMIT]
|
||||
mov \tmp2, #TASK_SIZE
|
||||
ldr \tmp2, =TASK_SIZE
|
||||
str \tmp2, [\tsk, #TI_ADDR_LIMIT]
|
||||
DACR( mrc p15, 0, \tmp0, c3, c0, 0)
|
||||
DACR( str \tmp0, [sp, #SVC_DACR])
|
||||
|
||||
@@ -21,6 +21,9 @@ obj-y := elf.o entry-common.o irq.o opcodes.o \
|
||||
setup.o signal.o sigreturn_codes.o \
|
||||
stacktrace.o sys_arm.o time.o traps.o
|
||||
|
||||
KASAN_SANITIZE_stacktrace.o := n
|
||||
KASAN_SANITIZE_traps.o := n
|
||||
|
||||
ifneq ($(CONFIG_ARM_UNWIND),y)
|
||||
obj-$(CONFIG_FRAME_POINTER) += return_address.o
|
||||
endif
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
void convert_to_tag_list(struct tag *tags);
|
||||
|
||||
#ifdef CONFIG_ATAGS
|
||||
const struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer,
|
||||
const struct machine_desc *setup_machine_tags(void *__atags_vaddr,
|
||||
unsigned int machine_nr);
|
||||
#else
|
||||
static inline const struct machine_desc * __init __noreturn
|
||||
setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr)
|
||||
setup_machine_tags(void *__atags_vaddr, unsigned int machine_nr)
|
||||
{
|
||||
early_print("no ATAGS support: can't continue\n");
|
||||
while (true);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user