sim: Enable ubsan in sim:kasan

Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
This commit is contained in:
Huang Qi 2022-08-22 19:35:13 +08:00 committed by Xiang Xiao
parent 55df6e951e
commit 559f831005
2 changed files with 46 additions and 43 deletions

View File

@ -27,6 +27,7 @@ CONFIG_INIT_ARGS="\"-c\", \"ostest;gcov -d;poweroff\""
CONFIG_INIT_ENTRYPOINT="nsh_main"
CONFIG_LIBC_MAX_EXITFUNS=1
CONFIG_MM_KASAN=y
CONFIG_MM_UBSAN=y
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_READLINE=y

View File

@ -73,10 +73,11 @@ static FAR struct kasan_region_s *g_region;
* Private Functions
****************************************************************************/
static FAR uintptr_t *kasan_mem_to_shadow(uintptr_t addr, size_t size,
static FAR uintptr_t *kasan_mem_to_shadow(FAR const void *ptr, size_t size,
unsigned int *bit)
{
FAR struct kasan_region_s *region;
uintptr_t addr = (uintptr_t)ptr;
for (region = g_region; region != NULL; region = region->next)
{
@ -93,7 +94,7 @@ static FAR uintptr_t *kasan_mem_to_shadow(uintptr_t addr, size_t size,
return NULL;
}
static void kasan_report(uintptr_t addr, size_t size, bool is_write)
static void kasan_report(FAR const void *addr, size_t size, bool is_write)
{
static int recursion;
@ -107,7 +108,7 @@ static void kasan_report(uintptr_t addr, size_t size, bool is_write)
--recursion;
}
static bool kasan_is_poisoned(uintptr_t addr, size_t size)
static bool kasan_is_poisoned(FAR const void *addr, size_t size)
{
FAR uintptr_t *p;
unsigned int bit;
@ -116,7 +117,8 @@ static bool kasan_is_poisoned(uintptr_t addr, size_t size)
return p && ((*p >> bit) & 1);
}
static void kasan_set_poison(uintptr_t addr, size_t size, bool poisoned)
static void kasan_set_poison(FAR const void *addr, size_t size,
bool poisoned)
{
FAR uintptr_t *p;
unsigned int bit;
@ -170,12 +172,12 @@ static void kasan_set_poison(uintptr_t addr, size_t size, bool poisoned)
void kasan_poison(FAR const void *addr, size_t size)
{
kasan_set_poison((uintptr_t)addr, size, true);
kasan_set_poison(addr, size, true);
}
void kasan_unpoison(FAR const void *addr, size_t size)
{
kasan_set_poison((uintptr_t)addr, size, false);
kasan_set_poison(addr, size, false);
}
void kasan_register(FAR void *addr, FAR size_t *size)
@ -207,7 +209,7 @@ void __sanitizer_annotate_contiguous_container(FAR const void *beg,
/* Shut up compiler complaints */
}
void __asan_before_dynamic_init(FAR const char *module_name)
void __asan_before_dynamic_init(FAR const void *module_name)
{
/* Shut up compiler complaints */
}
@ -222,67 +224,67 @@ void __asan_handle_no_return(void)
/* Shut up compiler complaints */
}
void __asan_report_load_n_noabort(uintptr_t addr, size_t size)
void __asan_report_load_n_noabort(FAR void *addr, size_t size)
{
kasan_report(addr, size, false);
}
void __asan_report_store_n_noabort(uintptr_t addr, size_t size)
void __asan_report_store_n_noabort(FAR void *addr, size_t size)
{
kasan_report(addr, size, true);
}
void __asan_report_load16_noabort(uintptr_t addr)
void __asan_report_load16_noabort(FAR void *addr)
{
__asan_report_load_n_noabort(addr, 16);
}
void __asan_report_store16_noabort(uintptr_t addr)
void __asan_report_store16_noabort(FAR void *addr)
{
__asan_report_store_n_noabort(addr, 16);
}
void __asan_report_load8_noabort(uintptr_t addr)
void __asan_report_load8_noabort(FAR void *addr)
{
__asan_report_load_n_noabort(addr, 8);
}
void __asan_report_store8_noabort(uintptr_t addr)
void __asan_report_store8_noabort(FAR void *addr)
{
__asan_report_store_n_noabort(addr, 8);
}
void __asan_report_load4_noabort(uintptr_t addr)
void __asan_report_load4_noabort(FAR void *addr)
{
__asan_report_load_n_noabort(addr, 4);
}
void __asan_report_store4_noabort(uintptr_t addr)
void __asan_report_store4_noabort(FAR void *addr)
{
__asan_report_store_n_noabort(addr, 4);
}
void __asan_report_load2_noabort(uintptr_t addr)
void __asan_report_load2_noabort(FAR void *addr)
{
__asan_report_load_n_noabort(addr, 2);
}
void __asan_report_store2_noabort(uintptr_t addr)
void __asan_report_store2_noabort(FAR void *addr)
{
__asan_report_store_n_noabort(addr, 2);
}
void __asan_report_load1_noabort(uintptr_t addr)
void __asan_report_load1_noabort(FAR void *addr)
{
__asan_report_load_n_noabort(addr, 1);
}
void __asan_report_store1_noabort(uintptr_t addr)
void __asan_report_store1_noabort(FAR void *addr)
{
__asan_report_store_n_noabort(addr, 1);
}
void __asan_loadN_noabort(uintptr_t addr, size_t size)
void __asan_loadN_noabort(FAR void *addr, size_t size)
{
if (kasan_is_poisoned(addr, size))
{
@ -290,7 +292,7 @@ void __asan_loadN_noabort(uintptr_t addr, size_t size)
}
}
void __asan_storeN_noabort(uintptr_t addr, size_t size)
void __asan_storeN_noabort(FAR void * addr, size_t size)
{
if (kasan_is_poisoned(addr, size))
{
@ -298,112 +300,112 @@ void __asan_storeN_noabort(uintptr_t addr, size_t size)
}
}
void __asan_load16_noabort(uintptr_t addr)
void __asan_load16_noabort(FAR void *addr)
{
__asan_loadN_noabort(addr, 16);
}
void __asan_store16_noabort(uintptr_t addr)
void __asan_store16_noabort(FAR void *addr)
{
__asan_storeN_noabort(addr, 16);
}
void __asan_load8_noabort(uintptr_t addr)
void __asan_load8_noabort(FAR void *addr)
{
__asan_loadN_noabort(addr, 8);
}
void __asan_store8_noabort(uintptr_t addr)
void __asan_store8_noabort(FAR void *addr)
{
__asan_storeN_noabort(addr, 8);
}
void __asan_load4_noabort(uintptr_t addr)
void __asan_load4_noabort(FAR void *addr)
{
__asan_loadN_noabort(addr, 4);
}
void __asan_store4_noabort(uintptr_t addr)
void __asan_store4_noabort(FAR void *addr)
{
__asan_storeN_noabort(addr, 4);
}
void __asan_load2_noabort(uintptr_t addr)
void __asan_load2_noabort(FAR void *addr)
{
__asan_loadN_noabort(addr, 2);
}
void __asan_store2_noabort(uintptr_t addr)
void __asan_store2_noabort(FAR void *addr)
{
__asan_storeN_noabort(addr, 2);
}
void __asan_load1_noabort(uintptr_t addr)
void __asan_load1_noabort(FAR void *addr)
{
__asan_loadN_noabort(addr, 1);
}
void __asan_store1_noabort(uintptr_t addr)
void __asan_store1_noabort(FAR void *addr)
{
__asan_storeN_noabort(addr, 1);
}
void __asan_loadN(uintptr_t addr, size_t size)
void __asan_loadN(FAR void *addr, size_t size)
{
__asan_loadN_noabort(addr, size);
}
void __asan_storeN(uintptr_t addr, size_t size)
void __asan_storeN(FAR void *addr, size_t size)
{
__asan_storeN_noabort(addr, size);
}
void __asan_load16(uintptr_t addr)
void __asan_load16(FAR void *addr)
{
__asan_load16_noabort(addr);
}
void __asan_store16(uintptr_t addr)
void __asan_store16(FAR void *addr)
{
__asan_store16_noabort(addr);
}
void __asan_load8(uintptr_t addr)
void __asan_load8(FAR void *addr)
{
__asan_load8_noabort(addr);
}
void __asan_store8(uintptr_t addr)
void __asan_store8(FAR void *addr)
{
__asan_store8_noabort(addr);
}
void __asan_load4(uintptr_t addr)
void __asan_load4(FAR void *addr)
{
__asan_load4_noabort(addr);
}
void __asan_store4(uintptr_t addr)
void __asan_store4(FAR void *addr)
{
__asan_store4_noabort(addr);
}
void __asan_load2(uintptr_t addr)
void __asan_load2(FAR void *addr)
{
__asan_load2_noabort(addr);
}
void __asan_store2(uintptr_t addr)
void __asan_store2(FAR void *addr)
{
__asan_store2_noabort(addr);
}
void __asan_load1(uintptr_t addr)
void __asan_load1(FAR void *addr)
{
__asan_load1_noabort(addr);
}
void __asan_store1(uintptr_t addr)
void __asan_store1(FAR void *addr)
{
__asan_store1_noabort(addr);
}