sim: Enable ubsan in sim:kasan
Signed-off-by: Huang Qi <huangqi3@xiaomi.com>
This commit is contained in:
parent
55df6e951e
commit
559f831005
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user