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);
 }