diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2022-12-12 17:39:07 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2022-12-13 09:37:08 +0100 |
commit | 90b88968cf71b8b0ccb11f3baabf36801a60462c (patch) | |
tree | 81a9df1585550173d8f05de1de49ddb988ad13d6 /lib | |
parent | 337693e66d25c3ff3de6a71c853c2328c934eefd (diff) | |
download | barebox-90b88968cf71b8b0ccb11f3baabf36801a60462c.tar.gz barebox-90b88968cf71b8b0ccb11f3baabf36801a60462c.tar.xz |
KASan: fix handling of devices with MMIO above SDRAM memory region
check_memory_region_inline will discard KASan reports before start of
RAM as false positives. This is sufficient for i.MX SoCs where the RAM
starts after all device MMIO regions. On the AT91, the EBI memory
controller's memory region follows the SDRAM memory region. This
results in a KASan warning the first time NAND is accessed.
Record the end of the shadowed SDRAM area to fix this.
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.barebox.org/20221212163907.2356192-2-a.fatoum@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/kasan/generic.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/kasan/generic.c b/lib/kasan/generic.c index b33a6c1a6c..1eccacf2b4 100644 --- a/lib/kasan/generic.c +++ b/lib/kasan/generic.c @@ -22,6 +22,7 @@ unsigned long kasan_shadow_start; unsigned long kasan_shadow_base; +unsigned long kasan_shadowed_end; /* * All functions below always inlined so compiler could @@ -160,6 +161,9 @@ static __always_inline bool check_memory_region_inline(unsigned long addr, if (addr < kasan_shadow_start) return true; + if (addr > kasan_shadowed_end) + return true; + if (unlikely(size == 0)) return true; @@ -180,6 +184,7 @@ void kasan_init(unsigned long membase, unsigned long memsize, { kasan_shadow_start = membase; kasan_shadow_base = shadow_base; + kasan_shadowed_end = membase + memsize - 1; kasan_unpoison_shadow((void *)membase, memsize); kasan_initialized = true; |