mirror of
https://github.com/apache/nuttx.git
synced 2026-06-04 14:53:47 +08:00
mm/kasan: Kasan global support setting alignment length
1. Similar to asan, supports single byte out of bounds detection 2. Fix the script to address the issue of not supporting the big end Signed-off-by: wangmingrong1 <wangmingrong1@xiaomi.com>
This commit is contained in:
committed by
Xiang Xiao
parent
0d8b6de03a
commit
469418f3c9
@@ -341,6 +341,14 @@ config MM_KASAN_GLOBAL
|
||||
KEEP ( *(. data. rel. local.. LASAN0))
|
||||
}", used to extract data generated by the compiler
|
||||
|
||||
if MM_KASAN_GLOBAL
|
||||
|
||||
config MM_KASAN_GLOBAL_ALIGN
|
||||
int "KASan global alignment"
|
||||
default 32
|
||||
|
||||
endif # MM_KASAN_GLOBAL
|
||||
|
||||
config MM_KASAN_DISABLE_READ_PANIC
|
||||
bool "Disable panic on kasan read error"
|
||||
default n
|
||||
|
||||
+4
-6
@@ -40,8 +40,6 @@
|
||||
#define KASAN_GLOBAL_LAST_WORD_MASK(end) \
|
||||
(UINTPTR_MAX >> (-(end) & (KASAN_BITS_PER_WORD - 1)))
|
||||
|
||||
#define KASAN_GLOBAL_SHADOW_SCALE (32)
|
||||
|
||||
/****************************************************************************
|
||||
* Private Types
|
||||
****************************************************************************/
|
||||
@@ -77,7 +75,7 @@ kasan_global_mem_to_shadow(FAR const void *ptr, size_t size,
|
||||
{
|
||||
DEBUGASSERT(addr + size <= g_global_region[i]->end);
|
||||
addr -= g_global_region[i]->begin;
|
||||
addr /= KASAN_GLOBAL_SHADOW_SCALE;
|
||||
addr /= CONFIG_MM_KASAN_GLOBAL_ALIGN;
|
||||
*bit = addr % KASAN_BITS_PER_WORD;
|
||||
return (FAR uintptr_t *)
|
||||
&g_global_region[i]->shadow[addr / KASAN_BITS_PER_WORD];
|
||||
@@ -101,15 +99,15 @@ kasan_global_is_poisoned(FAR const void *addr, size_t size)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (size <= KASAN_GLOBAL_SHADOW_SCALE)
|
||||
if (size <= CONFIG_MM_KASAN_GLOBAL_ALIGN)
|
||||
{
|
||||
return ((*p >> bit) & 1);
|
||||
}
|
||||
|
||||
nbit = KASAN_BITS_PER_WORD - bit % KASAN_BITS_PER_WORD;
|
||||
mask = KASAN_GLOBAL_FIRST_WORD_MASK(bit);
|
||||
size = ALIGN_UP(size, KASAN_GLOBAL_SHADOW_SCALE);
|
||||
size /= KASAN_GLOBAL_SHADOW_SCALE;
|
||||
size = ALIGN_UP(size, CONFIG_MM_KASAN_GLOBAL_ALIGN);
|
||||
size /= CONFIG_MM_KASAN_GLOBAL_ALIGN;
|
||||
|
||||
while (size >= nbit)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user