You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/08/23 09:51:26 UTC
[incubator-nuttx] branch master updated: sim: Enable ubsan in sim:kasan
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new 559f831005 sim: Enable ubsan in sim:kasan
559f831005 is described below
commit 559f83100530380567ae63a42448388880ecfdd4
Author: Huang Qi <hu...@xiaomi.com>
AuthorDate: Mon Aug 22 19:35:13 2022 +0800
sim: Enable ubsan in sim:kasan
Signed-off-by: Huang Qi <hu...@xiaomi.com>
---
boards/sim/sim/sim/configs/kasan/defconfig | 1 +
mm/kasan/kasan.c | 88 +++++++++++++++---------------
2 files changed, 46 insertions(+), 43 deletions(-)
diff --git a/boards/sim/sim/sim/configs/kasan/defconfig b/boards/sim/sim/sim/configs/kasan/defconfig
index caa7c74129..847f05ea73 100644
--- a/boards/sim/sim/sim/configs/kasan/defconfig
+++ b/boards/sim/sim/sim/configs/kasan/defconfig
@@ -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
diff --git a/mm/kasan/kasan.c b/mm/kasan/kasan.c
index 90c324e7cd..5d5a59a571 100644
--- a/mm/kasan/kasan.c
+++ b/mm/kasan/kasan.c
@@ -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);
}