arm64 fixes for -rc3
- Fix broken kpti page-table rewrite in bizarre KASLR configuration - Fix module loading with KASLR - Remove redundant definition of ARCH_SLAB_MINALIGN -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEPxTL6PPUbjXGY88ct6xw3ITBYzQFAlxDkU8ACgkQt6xw3ITB YzRSeggAsvhxwa0Yg61A/s3tuaSO+kb6U6QXCVZSBw5F6tn3TPm7txoLlq+kUFoq gcQ5RFzoGaW27TQafWQHVWcwYVWHYAc4WqSLQBQDMDPRpA0WR7sx/WUaxPdBDHt1 qLYHTKs68oTCdHMbvugNQhvBEt9s0qAQzrBk4exPhTLxkeWYELK4F2SpSgxzJun/ K5Eg9qrl8XRCXO5TGyUT54MtZaF2utnopJOVupRpBpIjBrCY6BGSpZbWA6pcNlUr hftyXYMB8B4VGtKWAZp8mive2PFbzH/cj/rmxWDQRl0JUfnLw3lqXyHO8fe1e8vJ cZ6tW2shLhHzEM50OmAYnfaeTPqxcg== =EjUI -----END PGP SIGNATURE----- Merge tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux Pull arm64 fixes from Will Deacon: "Three arm64 fixes for -rc3. We've plugged a couple of nasty issues involving KASLR-enabled kernels, and removed a redundant #define that was introduced as part of the KHWASAN fixes from akpm at -rc2. - Fix broken kpti page-table rewrite in bizarre KASLR configuration - Fix module loading with KASLR - Remove redundant definition of ARCH_SLAB_MINALIGN" * tag 'arm64-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: kasan, arm64: remove redundant ARCH_SLAB_MINALIGN define arm64: kaslr: ensure randomized quantities are clean to the PoC arm64: kpti: Update arm64_kernel_use_ng_mappings() when forced on
This commit is contained in:
commit
b0f3e768a8
|
@ -60,8 +60,6 @@
|
||||||
|
|
||||||
#ifdef CONFIG_KASAN_SW_TAGS
|
#ifdef CONFIG_KASAN_SW_TAGS
|
||||||
#define ARCH_SLAB_MINALIGN (1ULL << KASAN_SHADOW_SCALE_SHIFT)
|
#define ARCH_SLAB_MINALIGN (1ULL << KASAN_SHADOW_SCALE_SHIFT)
|
||||||
#else
|
|
||||||
#define ARCH_SLAB_MINALIGN __alignof__(unsigned long long)
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
|
@ -60,8 +60,11 @@ static inline bool arm64_kernel_use_ng_mappings(void)
|
||||||
* later determine that kpti is required, then
|
* later determine that kpti is required, then
|
||||||
* kpti_install_ng_mappings() will make them non-global.
|
* kpti_install_ng_mappings() will make them non-global.
|
||||||
*/
|
*/
|
||||||
|
if (arm64_kernel_unmapped_at_el0())
|
||||||
|
return true;
|
||||||
|
|
||||||
if (!IS_ENABLED(CONFIG_RANDOMIZE_BASE))
|
if (!IS_ENABLED(CONFIG_RANDOMIZE_BASE))
|
||||||
return arm64_kernel_unmapped_at_el0();
|
return false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* KASLR is enabled so we're going to be enabling kpti on non-broken
|
* KASLR is enabled so we're going to be enabling kpti on non-broken
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/fixmap.h>
|
#include <asm/fixmap.h>
|
||||||
#include <asm/kernel-pgtable.h>
|
#include <asm/kernel-pgtable.h>
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
|
@ -43,7 +44,7 @@ static __init u64 get_kaslr_seed(void *fdt)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __init const u8 *get_cmdline(void *fdt)
|
static __init const u8 *kaslr_get_cmdline(void *fdt)
|
||||||
{
|
{
|
||||||
static __initconst const u8 default_cmdline[] = CONFIG_CMDLINE;
|
static __initconst const u8 default_cmdline[] = CONFIG_CMDLINE;
|
||||||
|
|
||||||
|
@ -109,7 +110,7 @@ u64 __init kaslr_early_init(u64 dt_phys)
|
||||||
* Check if 'nokaslr' appears on the command line, and
|
* Check if 'nokaslr' appears on the command line, and
|
||||||
* return 0 if that is the case.
|
* return 0 if that is the case.
|
||||||
*/
|
*/
|
||||||
cmdline = get_cmdline(fdt);
|
cmdline = kaslr_get_cmdline(fdt);
|
||||||
str = strstr(cmdline, "nokaslr");
|
str = strstr(cmdline, "nokaslr");
|
||||||
if (str == cmdline || (str > cmdline && *(str - 1) == ' '))
|
if (str == cmdline || (str > cmdline && *(str - 1) == ' '))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -169,5 +170,8 @@ u64 __init kaslr_early_init(u64 dt_phys)
|
||||||
module_alloc_base += (module_range * (seed & ((1 << 21) - 1))) >> 21;
|
module_alloc_base += (module_range * (seed & ((1 << 21) - 1))) >> 21;
|
||||||
module_alloc_base &= PAGE_MASK;
|
module_alloc_base &= PAGE_MASK;
|
||||||
|
|
||||||
|
__flush_dcache_area(&module_alloc_base, sizeof(module_alloc_base));
|
||||||
|
__flush_dcache_area(&memstart_offset_seed, sizeof(memstart_offset_seed));
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue