Add --enable-asan and --enable-ubsan switches

`configure` now accepts `--enable-asan` and `--enable-ubsan` switches
which results in passing `-fsanitize=address`
and `-fsanitize=undefined`, respectively, to the compiler. Those
flags are enabled in GitHub workflows for ZTS and zloop. Errors
reported by both instrumentations are corrected, except for:

- Memory leak reporting is (temporarily) suppressed. The cost of
  fixing them is relatively high compared to the gains.

- Checksum computing functions in `module/zcommon/zfs_fletcher*`
  have UBSan errors suppressed. It is completely impractical
  to enforce 64-byte payload alignment there due to performance
  impact.

- There's no ASan heap poisoning in `module/zstd/lib/zstd.c`. A custom
  memory allocator is used there rendering that measure
  unfeasible.

- Memory leaks detection has to be suppressed for `cmd/zvol_id`.
  `zvol_id` is run by udev with the help of `ptrace(2)`. Tracing is
  incompatible with memory leaks detection.

Reviewed-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Reviewed-by: George Melikov <mail@gmelikov.ru>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: szubersk <szuberskidamian@gmail.com>
Closes #12928
This commit is contained in:
Damian Szuberski
2022-02-03 23:35:38 +01:00
committed by GitHub
parent aa9905d89b
commit 63652e1546
50 changed files with 253 additions and 62 deletions
+8
View File
@@ -55,6 +55,7 @@
%bcond_with debug
%bcond_with debuginfo
%bcond_with asan
%bcond_with ubsan
%bcond_with systemd
%bcond_with pam
%bcond_without pyzfs
@@ -344,6 +345,12 @@ image which is ZFS aware.
%define asan --disable-asan
%endif
%if %{with ubsan}
%define ubsan --enable-ubsan
%else
%define ubsan --disable-ubsan
%endif
%if 0%{?_systemd}
%define systemd --enable-systemd --with-systemdunitdir=%{_unitdir} --with-systemdpresetdir=%{_presetdir} --with-systemdmodulesloaddir=%{_modulesloaddir} --with-systemdgeneratordir=%{_systemdgeneratordir} --disable-sysvinit
%define systemd_svcs zfs-import-cache.service zfs-import-scan.service zfs-mount.service zfs-share.service zfs-zed.service zfs.target zfs-import.target zfs-volume-wait.service zfs-volumes.target
@@ -379,6 +386,7 @@ image which is ZFS aware.
%{debug} \
%{debuginfo} \
%{asan} \
%{ubsan} \
%{systemd} \
%{pam} \
%{pyzfs}