mirror of
https://github.com/apache/nuttx.git
synced 2026-06-05 07:12:54 +08:00
kasan:support kasan_mem_to_shadow can check any size
Signed-off-by: anjiahao <anjiahao@xiaomi.com>
This commit is contained in:
+37
-8
@@ -104,16 +104,10 @@ extern const unsigned char g_globals_region[];
|
|||||||
* Private Functions
|
* Private Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static FAR uintptr_t *kasan_mem_to_shadow(FAR const void *ptr, size_t size,
|
static inline FAR uintptr_t *kasan_find_mem(uintptr_t addr, size_t size,
|
||||||
unsigned int *bit)
|
unsigned int *bit)
|
||||||
{
|
{
|
||||||
FAR struct kasan_region_s *region;
|
FAR struct kasan_region_s *region;
|
||||||
uintptr_t addr = (uintptr_t)ptr;
|
|
||||||
|
|
||||||
if (g_region_init != KASAN_INIT_VALUE)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (region = g_region; region != NULL; region = region->next)
|
for (region = g_region; region != NULL; region = region->next)
|
||||||
{
|
{
|
||||||
@@ -146,6 +140,41 @@ static FAR uintptr_t *kasan_mem_to_shadow(FAR const void *ptr, size_t size,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FAR uintptr_t *kasan_mem_to_shadow(FAR const void *ptr, size_t size,
|
||||||
|
unsigned int *bit)
|
||||||
|
{
|
||||||
|
uintptr_t addr = (uintptr_t)ptr;
|
||||||
|
FAR uintptr_t *ret;
|
||||||
|
size_t mul;
|
||||||
|
size_t mod;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if (g_region_init != KASAN_INIT_VALUE)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size > KASAN_SHADOW_SCALE)
|
||||||
|
{
|
||||||
|
mul = size / KASAN_SHADOW_SCALE;
|
||||||
|
for (i = 0; i < mul; i++)
|
||||||
|
{
|
||||||
|
ret = kasan_find_mem(addr + i * KASAN_SHADOW_SCALE,
|
||||||
|
KASAN_SHADOW_SCALE, bit);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mod = size % KASAN_SHADOW_SCALE;
|
||||||
|
addr += mul * KASAN_SHADOW_SCALE;
|
||||||
|
size = mod;
|
||||||
|
}
|
||||||
|
|
||||||
|
return kasan_find_mem(addr, size, bit);
|
||||||
|
}
|
||||||
|
|
||||||
static void kasan_show_memory(FAR const uint8_t *addr, size_t size,
|
static void kasan_show_memory(FAR const uint8_t *addr, size_t size,
|
||||||
size_t dumpsize)
|
size_t dumpsize)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user