/* 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 4 GB
* addressable by a 32 bit architecture ) out of the virtual address
* space to use as shadow memory for KASan as follows :
*
* + - - - - + 0 xffffffff
* | | \
* | | | - > 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 0 x100000000 ' s shadow address : the mapping that would
* be after the end of the kernel memory at 0 xffffffff . 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
Messung V0.5 in Prozent C=95 H=96 G=95
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-09-27)
¤
*© Formatika GbR, Deutschland