2021-12-23 19:50:06

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH v4 1/4] build: Add sanitizer options

From: Luiz Augusto von Dentz <[email protected]>

Build using Address Sanitizer (asan), Leak Sanitizer (lsan), or
Undefined Behavior Sanitizer (ubsan) by using one of these options for
the configure script:

--enable-asan
--enable-lsan
--enable-ubsan

For each of these to work, the compiler must support the requested
sanitizer and the requisite libraries must be installed (libasan,
liblsan, libubsan).
---
v2: Attempt to fix CI findings
v3: Yet again attempt to fix CI findings, disable running tests with
valgrind if either asan or lsan are enabled are they are likely going
to conflict.
v4: Yet another attempt to fix CI findings.

Makefile.am | 8 +++++-
acinclude.m4 | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++
configure.ac | 7 ++++-
3 files changed, 90 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 993168f00..308f13c50 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -24,7 +24,7 @@ pkgincludedir = $(includedir)/bluetooth

pkginclude_HEADERS =

-AM_CFLAGS = $(WARNING_CFLAGS) $(MISC_CFLAGS) $(UDEV_CFLAGS) $(LIBEBOOK_CFLAGS) \
+AM_CFLAGS = $(MISC_CFLAGS) $(WARNING_CFLAGS) $(UDEV_CFLAGS) $(LIBEBOOK_CFLAGS) \
$(LIBEDATASERVER_CFLAGS) $(ell_cflags)
AM_LDFLAGS = $(MISC_LDFLAGS)

@@ -243,6 +243,8 @@ src_libshared_glib_la_SOURCES = $(shared_sources) \
src/shared/mainloop-notify.h \
src/shared/mainloop-notify.c \
src/shared/tester.c
+src_libshared_glib_la_LDFLAGS = $(AM_LDFLAGS)
+src_libshared_glib_la_CFLAGS = $(AM_CFLAGS)

src_libshared_mainloop_la_SOURCES = $(shared_sources) \
src/shared/io-mainloop.c \
@@ -250,6 +252,8 @@ src_libshared_mainloop_la_SOURCES = $(shared_sources) \
src/shared/mainloop.h src/shared/mainloop.c \
src/shared/mainloop-notify.h \
src/shared/mainloop-notify.c
+src_libshared_mainloop_la_LDFLAGS = $(AM_LDFLAGS)
+src_libshared_mainloop_la_CFLAGS = $(AM_CFLAGS)

if LIBSHARED_ELL
src_libshared_ell_la_SOURCES = $(shared_sources) \
@@ -257,6 +261,8 @@ src_libshared_ell_la_SOURCES = $(shared_sources) \
src/shared/timeout-ell.c \
src/shared/mainloop.h \
src/shared/mainloop-ell.c
+src_libshared_ell_la_LDFLAGS = $(AM_LDFLAGS)
+src_libshared_ell_la_CFLAGS = $(AM_CFLAGS)
endif

attrib_sources = attrib/att.h attrib/att-database.h attrib/att.c \
diff --git a/acinclude.m4 b/acinclude.m4
index 529848357..b388dfc11 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -10,6 +10,45 @@ AC_DEFUN([AC_PROG_CC_PIE], [
])
])

+AC_DEFUN([AC_PROG_CC_ASAN], [
+ AC_CACHE_CHECK([whether ${CC-cc} accepts -fsanitize=address],
+ ac_cv_prog_cc_asan, [
+ echo 'void f(){}' > asan.c
+ if test -z "`${CC-cc} -fsanitize=address -c asan.c 2>&1`"; then
+ ac_cv_prog_cc_asan=yes
+ else
+ ac_cv_prog_cc_asan=no
+ fi
+ rm -rf asan*
+ ])
+])
+
+AC_DEFUN([AC_PROG_CC_LSAN], [
+ AC_CACHE_CHECK([whether ${CC-cc} accepts -fsanitize=leak],
+ ac_cv_prog_cc_lsan, [
+ echo 'void f(){}' > lsan.c
+ if test -z "`${CC-cc} -fsanitize=leak -c lsan.c 2>&1`"; then
+ ac_cv_prog_cc_lsan=yes
+ else
+ ac_cv_prog_cc_lsan=no
+ fi
+ rm -rf lsan*
+ ])
+])
+
+AC_DEFUN([AC_PROG_CC_UBSAN], [
+ AC_CACHE_CHECK([whether ${CC-cc} accepts -fsanitize=undefined],
+ ac_cv_prog_cc_ubsan, [
+ echo 'void f(){}' > ubsan.c
+ if test -z "`${CC-cc} -fsanitize=undefined -c ubsan.c 2>&1`"; then
+ ac_cv_prog_cc_ubsan=yes
+ else
+ ac_cv_prog_cc_ubsan=no
+ fi
+ rm -rf ubsan*
+ ])
+])
+
AC_DEFUN([COMPILER_FLAGS], [
with_cflags=""
if (test "$USE_MAINTAINER_MODE" = "yes"); then
@@ -38,6 +77,44 @@ AC_DEFUN([MISC_FLAGS], [
misc_cflags="$misc_cflags -O0"
fi
])
+ AC_ARG_ENABLE(asan, AC_HELP_STRING([--enable-asan],
+ [enable linking with address sanitizer]), [
+ save_LIBS=$LIBS
+ AC_CHECK_LIB(asan, _init)
+ LIBS=$save_LIBS
+ if (test "${enableval}" = "yes" &&
+ test "${ac_cv_lib_asan__init}" = "yes" &&
+ test "${ac_cv_prog_cc_asan}" = "yes"); then
+ misc_cflags="$misc_cflags -fsanitize=address";
+ misc_ldflags="$misc_ldflags -fsanitize=address"
+ AC_SUBST([ASAN_LIB], ${ac_cv_lib_asan__init})
+ fi
+ ])
+ AC_ARG_ENABLE(lsan, AC_HELP_STRING([--enable-lsan],
+ [enable linking with address sanitizer]), [
+ save_LIBS=$LIBS
+ AC_CHECK_LIB(lsan, _init)
+ LIBS=$save_LIBS
+ if (test "${enableval}" = "yes" &&
+ test "${ac_cv_lib_lsan__init}" = "yes" &&
+ test "${ac_cv_prog_cc_lsan}" = "yes"); then
+ misc_cflags="$misc_cflags -fsanitize=leak";
+ misc_ldflags="$misc_ldflags -fsanitize=leak"
+ AC_SUBST([ASAN_LIB], ${ac_cv_lib_lsan__init})
+ fi
+ ])
+ AC_ARG_ENABLE(ubsan, AC_HELP_STRING([--enable-ubsan],
+ [enable linking with address sanitizer]), [
+ save_LIBS=$LIBS
+ AC_CHECK_LIB(ubsan, _init)
+ LIBS=$save_LIBS
+ if (test "${enableval}" = "yes" &&
+ test "${ac_cv_lib_ubsan__init}" = "yes" &&
+ test "${ac_cv_prog_cc_ubsan}" = "yes"); then
+ misc_cflags="$misc_cflags -fsanitize=undefined";
+ misc_ldflags="$misc_ldflags -fsanitize=undefined";
+ fi
+ ])
AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],
[enable compiling with debugging information]), [
if (test "${enableval}" = "yes" &&
diff --git a/configure.ac b/configure.ac
index 2674e30d3..849e1db46 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,6 +23,9 @@ AC_C_RESTRICT
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_CC_PIE
+AC_PROG_CC_ASAN
+AC_PROG_CC_LSAN
+AC_PROG_CC_UBSAN
AC_PROG_INSTALL
AC_PROG_MKDIR_P

@@ -40,10 +43,12 @@ if (test "$USE_MAINTAINER_MODE" = "yes"); then
fi
AM_CONDITIONAL(COVERAGE, test "${enable_coverage}" = "yes")
AM_CONDITIONAL(DBUS_RUN_SESSION, test "${enable_dbus_run_session}" = "yes")
-AM_CONDITIONAL(VALGRIND, test "${enable_valgrind}" = "yes")

MISC_FLAGS

+AM_CONDITIONAL(VALGRIND, test "${enable_valgrind}" = "yes" &&
+ test "$ASAN_LIB" != "yes" && test "LSAN_LIB" != "yes")
+
AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads],
[enable threading support]), [enable_threads=${enableval}])

--
2.33.1



2021-12-23 22:12:33

by bluez.test.bot

[permalink] [raw]
Subject: RE: [v4,1/4] build: Add sanitizer options

This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=601103

---Test result---

Test Summary:
CheckPatch PASS 5.43 seconds
GitLint PASS 3.74 seconds
Prep - Setup ELL PASS 42.12 seconds
Build - Prep PASS 0.61 seconds
Build - Configure PASS 8.43 seconds
Build - Make PASS 1390.99 seconds
Make Check PASS 11.98 seconds
Make Distcheck PASS 227.47 seconds
Build w/ext ELL - Configure PASS 8.57 seconds
Build w/ext ELL - Make PASS 1367.60 seconds
Incremental Build with patchesPASS 3218.00 seconds



---
Regards,
Linux Bluetooth

2021-12-27 06:24:42

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: [v4,1/4] build: Add sanitizer options

Hi,

On Thu, Dec 23, 2021 at 2:12 PM <[email protected]> wrote:
>
> This is automated email and please do not reply to this email!
>
> Dear submitter,
>
> Thank you for submitting the patches to the linux bluetooth mailing list.
> This is a CI test results with your patch series:
> PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=601103
>
> ---Test result---
>
> Test Summary:
> CheckPatch PASS 5.43 seconds
> GitLint PASS 3.74 seconds
> Prep - Setup ELL PASS 42.12 seconds
> Build - Prep PASS 0.61 seconds
> Build - Configure PASS 8.43 seconds
> Build - Make PASS 1390.99 seconds
> Make Check PASS 11.98 seconds
> Make Distcheck PASS 227.47 seconds
> Build w/ext ELL - Configure PASS 8.57 seconds
> Build w/ext ELL - Make PASS 1367.60 seconds
> Incremental Build with patchesPASS 3218.00 seconds
>
>
>
> ---
> Regards,
> Linux Bluetooth

Pushed.

--
Luiz Augusto von Dentz