kasan: a few cleanups
Subsystems (4)
v2 cover kasan: a few cleanups
Clean up usage of KASAN_SHADOW_SCALE_SHIFT and fix prototype author email address.
Changes in v2:
- fix comments as well.
Andrey Konovalov (2):
kasan: fix prototype author email address
kasan: clean up KASAN_SHADOW_SCALE_SHIFT usage
arch/arm64/include/asm/kasan.h | 17 ++++++++++------- arch/arm64/include/asm/memory.h | 3 ++- arch/arm64/mm/kasan_init.c | 3 ++- arch/x86/include/asm/kasan.h | 12 ++++++++---- include/linux/kasan.h | 2 -- mm/kasan/kasan.c | 2 +- mm/kasan/report.c | 2 +- 7 files changed, 24 insertions(+), 17 deletions(-)
Signature · 1 line
2.16.0.rc1.238.g530d649a79-goog
PATCH v2 1/2 kasan: fix prototype author email address
Use the new one.
--- mm/kasan/kasan.c | 2 +- mm/kasan/report.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
mm/kasan/kasan.c +1 -1
@@ -5,7 +5,7 @@* Author: Andrey Ryabinin <[email protected]> * * Some code borrowed from https://github.com/xairy/kasan-prototype by -* Andrey Konovalov <[email protected]> +* Andrey Konovalov <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as
mm/kasan/report.c +1 -1
@@ -5,7 +5,7 @@* Author: Andrey Ryabinin <[email protected]> * * Some code borrowed from https://github.com/xairy/kasan-prototype by -* Andrey Konovalov <[email protected]> +* Andrey Konovalov <[email protected]> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as
Signature · 1 line
2.16.0.rc1.238.g530d649a79-goog
PATCH v2 2/2 kasan: clean up KASAN_SHADOW_SCALE_SHIFT usage
In reply to Andrey KonovalovRight now the fact that KASAN uses a single shadow byte for 8 bytes of memory is scattered all over the code.
This change defines KASAN_SHADOW_SCALE_SHIFT early in asm include files and makes use of this constant where necessary.
--- arch/arm64/include/asm/kasan.h | 17 ++++++++++------- arch/arm64/include/asm/memory.h | 3 ++- arch/arm64/mm/kasan_init.c | 3 ++- arch/x86/include/asm/kasan.h | 12 ++++++++---- include/linux/kasan.h | 2 -- 5 files changed, 22 insertions(+), 15 deletions(-)
arch/arm64/include/asm/kasan.h +10 -7
@@ -12,7 +12,8 @@/* * KASAN_SHADOW_START: beginning of the kernel virtual addresses. -* KASAN_SHADOW_END: KASAN_SHADOW_START + 1/8 of kernel virtual addresses. +* KASAN_SHADOW_END: KASAN_SHADOW_START + 1/N of kernel virtual addresses, +* where N = (1 << KASAN_SHADOW_SCALE_SHIFT). */ #define KASAN_SHADOW_START (VA_START)#define KASAN_SHADOW_END (KASAN_SHADOW_START + KASAN_SHADOW_SIZE)
@@ -20,14 +21,16 @@/* * This value is used to map an address to the corresponding shadow * address by the following formula: -* shadow_addr = (address >> 3) + KASAN_SHADOW_OFFSET; +* shadow_addr = (address >> KASAN_SHADOW_SCALE_SHIFT) + KASAN_SHADOW_OFFSET * -* (1 << 61) shadow addresses - [KASAN_SHADOW_OFFSET,KASAN_SHADOW_END] -* cover all 64-bits of virtual addresses. So KASAN_SHADOW_OFFSET -* should satisfy the following equation: -* KASAN_SHADOW_OFFSET = KASAN_SHADOW_END - (1ULL << 61) +* (1 << (64 - KASAN_SHADOW_SCALE_SHIFT)) shadow addresses that lie in range +* [KASAN_SHADOW_OFFSET, KASAN_SHADOW_END) cover all 64-bits of virtual +* addresses. So KASAN_SHADOW_OFFSET should satisfy the following equation: +* KASAN_SHADOW_OFFSET = KASAN_SHADOW_END - +* (1ULL << (64 - KASAN_SHADOW_SCALE_SHIFT)) */ -#define KASAN_SHADOW_OFFSET (KASAN_SHADOW_END - (1ULL << (64 - 3))) +#define KASAN_SHADOW_OFFSET (KASAN_SHADOW_END - (1ULL << \ + (64 - KASAN_SHADOW_SCALE_SHIFT)))void kasan_init (void );void kasan_copy_shadow (pgd_t *pgdir);
arch/arm64/include/asm/memory.h +2 -1
@@ -85,7 +85,8 @@* stack size when KASAN is in use. */ #ifdef CONFIG_KASAN -#define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - 3)) +#define KASAN_SHADOW_SCALE_SHIFT 3 +#define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - KASAN_SHADOW_SCALE_SHIFT))#define KASAN_THREAD_SHIFT 1#else #define KASAN_SHADOW_SIZE (0)
arch/arm64/mm/kasan_init.c +2 -1
@@ -135,7 +135,8 @@ static void __init kasan_pgd_populate(unsigned long addr, unsigned long end,/* The early shadow maps everything to a single page of zeroes */ asmlinkage void __init kasan_early_init(void) { -BUILD_BUG_ON (KASAN_SHADOW_OFFSET !=KASAN_SHADOW_END - (1UL <<61 )); +BUILD_BUG_ON (KASAN_SHADOW_OFFSET != +KASAN_SHADOW_END - (1UL << (64 -KASAN_SHADOW_SCALE_SHIFT )));BUILD_BUG_ON (!IS_ALIGNED (KASAN_SHADOW_START ,PGDIR_SIZE ));BUILD_BUG_ON (!IS_ALIGNED (KASAN_SHADOW_END ,PGDIR_SIZE )); kasan_pgd_populate(KASAN_SHADOW_START, KASAN_SHADOW_END, NUMA_NO_NODE,
arch/x86/include/asm/kasan.h +8 -4
@@ -4,6 +4,7 @@#include <linux/const.h> #define KASAN_SHADOW_OFFSET _AC(CONFIG_KASAN_SHADOW_OFFSET, UL) +#define KASAN_SHADOW_SCALE_SHIFT 3/* * Compiler uses shadow offset assuming that addresses start
@@ -12,12 +13,15 @@* 'kernel address space start' >> KASAN_SHADOW_SCALE_SHIFT */ #define KASAN_SHADOW_START (KASAN_SHADOW_OFFSET + \ - ((-1UL << __VIRTUAL_MASK_SHIFT) >> 3)) + ((-1UL << __VIRTUAL_MASK_SHIFT) >> \ + KASAN_SHADOW_SCALE_SHIFT))/* -* 47 bits for kernel address -> (47 - 3) bits for shadow -* 56 bits for kernel address -> (56 - 3) bits for shadow +* 47 bits for kernel address -> (47 - KASAN_SHADOW_SCALE_SHIFT) bits for shadow +* 56 bits for kernel address -> (56 - KASAN_SHADOW_SCALE_SHIFT) bits for shadow */ -#define KASAN_SHADOW_END (KASAN_SHADOW_START + (1ULL << (__VIRTUAL_MASK_SHIFT - 3))) +#define KASAN_SHADOW_END (KASAN_SHADOW_START + \ + (1ULL << (__VIRTUAL_MASK_SHIFT - \ + KASAN_SHADOW_SCALE_SHIFT)))#ifndef __ASSEMBLY__
include/linux/kasan.h +0 -2
@@ -11,8 +11,6 @@ struct task_struct;#ifdef CONFIG_KASAN -#define KASAN_SHADOW_SCALE_SHIFT 3 -#include <asm/kasan.h> #include <asm/pgtable.h>
Signature · 1 line
2.16.0.rc1.238.g530d649a79-goog
Re: [PATCH v2 2/2] kasan: clean up KASAN_SHADOW_SCALE_SHIFT usage
Quoted 8 lines · Andrey Konovalov
Right now the fact that KASAN uses a single shadow byte for 8 bytes of memory is scattered all over the code.
This change defines
KASAN_SHADOW_SCALE_SHIFTearly in asm include files and makes use of this constant where necessary.Signed-off-by Andrey Konovalov <[email protected]>---
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to [email protected]. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>