]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Fix build with KASAN
authorRich Ercolani <214141+rincebrain@users.noreply.github.com>
Sat, 26 Jun 2021 05:28:12 +0000 (01:28 -0400)
committerGitHub <noreply@github.com>
Sat, 26 Jun 2021 05:28:12 +0000 (22:28 -0700)
The stock zstd code expects some helpers from ASAN if present.
This works fine in userland, but in kernel, KASAN also gets detected,
and lacks those helpers. So let's make some empty substitutes for
that case.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rich Ercolani <rincebrain@gmail.com>
Closes #12232

module/zstd/zfs_zstd.c

index fc1b0359aa69886285cdf64e42bd83027d0ecc21..a91ed1be9efe62ed2a673d5257e48c5ee4330342 100644 (file)
@@ -202,6 +202,25 @@ static struct zstd_fallback_mem zstd_dctx_fallback;
 static struct zstd_pool *zstd_mempool_cctx;
 static struct zstd_pool *zstd_mempool_dctx;
 
+/*
+ * The library zstd code expects these if ADDRESS_SANITIZER gets defined,
+ * and while ASAN does this, KASAN defines that and does not. So to avoid
+ * changing the external code, we do this.
+ */
+#if defined(__has_feature)
+#if __has_feature(address_sanitizer)
+#define        ADDRESS_SANITIZER 1
+#endif
+#elif defined(__SANITIZE_ADDRESS__)
+#define        ADDRESS_SANITIZER 1
+#endif
+#if defined(_KERNEL) && defined(ADDRESS_SANITIZER)
+void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
+void __asan_poison_memory_region(void const volatile *addr, size_t size);
+void __asan_unpoison_memory_region(void const volatile *addr, size_t size) {};
+void __asan_poison_memory_region(void const volatile *addr, size_t size) {};
+#endif
+
 
 static void
 zstd_mempool_reap(struct zstd_pool *zstd_mempool)