2021-12-20 23:59:27

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 1/3] 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).
---
Makefile.am | 6 +++++
acinclude.m4 | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++
configure.ac | 3 +++
3 files changed, 84 insertions(+)

diff --git a/Makefile.am b/Makefile.am
index 993168f00..36ff19340 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -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..cf9ede408 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
@@ -53,6 +92,42 @@ AC_DEFUN([MISC_FLAGS], [
misc_ldflags="$misc_ldflags -pie -Wl,-z,now"
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"
+ 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"
+ 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
+ ])
if (test "$enable_coverage" = "yes"); then
misc_cflags="$misc_cflags --coverage"
misc_ldflags="$misc_ldflags --coverage"
diff --git a/configure.ac b/configure.ac
index 2674e30d3..c9a7f40a9 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

--
2.33.1



2021-12-20 23:59:28

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH BlueZ 3/3] bootstrap-configure: Enable sanitizer options

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

This makes bootstrap-configure enables all sanitizers.
---
bootstrap-configure | 3 +++
1 file changed, 3 insertions(+)

diff --git a/bootstrap-configure b/bootstrap-configure
index a34be8320..8172840d5 100755
--- a/bootstrap-configure
+++ b/bootstrap-configure
@@ -28,6 +28,9 @@ fi
--enable-btpclient \
--enable-logger \
--enable-pie \
+ --enable-asan \
+ --enable-lsan \
+ --enable-ubsan \
--enable-cups \
--enable-library \
--enable-admin \
--
2.33.1


2021-12-21 01:53:06

by bluez.test.bot

[permalink] [raw]
Subject: RE: [BlueZ,1/3] 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=598539

---Test result---

Test Summary:
CheckPatch PASS 1.51 seconds
GitLint PASS 0.94 seconds
Prep - Setup ELL PASS 53.01 seconds
Build - Prep PASS 0.44 seconds
Build - Configure PASS 10.44 seconds
Build - Make FAIL 300.42 seconds
Make Check FAIL 0.93 seconds
Make Distcheck PASS 303.27 seconds
Build w/ext ELL - Configure PASS 10.63 seconds
Build w/ext ELL - Make FAIL 270.09 seconds
Incremental Build with patchesFAIL 862.79 seconds

Details
##############################
Test: Build - Make - FAIL
Desc: Build the BlueZ source tree
Output:
tools/mgmt-tester.c: In function ‘main’:
tools/mgmt-tester.c:12364:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without
12364 | int main(int argc, char *argv[])
| ^~~~
In file included from /usr/include/string.h:495,
from /usr/include/glib-2.0/glib/gtestutils.h:30,
from /usr/include/glib-2.0/glib.h:85,
from profiles/network/bnep.c:27:
In function ‘strncpy’,
inlined from ‘bnep_connadd’ at profiles/network/bnep.c:111:2:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7271: profiles/network/bnep.o] Error 1
make: *** [Makefile:4301: all] Error 2


##############################
Test: Make Check - FAIL
Desc: Run 'make check'
Output:
In file included from /usr/include/string.h:495,
from /usr/include/glib-2.0/glib/gtestutils.h:30,
from /usr/include/glib-2.0/glib.h:85,
from profiles/network/bnep.c:27:
In function ‘strncpy’,
inlined from ‘bnep_connadd’ at profiles/network/bnep.c:111:2:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7271: profiles/network/bnep.o] Error 1
make: *** [Makefile:11305: check] Error 2


##############################
Test: Build w/ext ELL - Make - FAIL
Desc: Build BlueZ source with '--enable-external-ell' configuration
Output:
tools/mgmt-tester.c: In function ‘main’:
tools/mgmt-tester.c:12364:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without
12364 | int main(int argc, char *argv[])
| ^~~~
In file included from /usr/include/string.h:495,
from /usr/include/glib-2.0/glib/gtestutils.h:30,
from /usr/include/glib-2.0/glib.h:85,
from profiles/network/bnep.c:27:
In function ‘strncpy’,
inlined from ‘bnep_connadd’ at profiles/network/bnep.c:111:2:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7271: profiles/network/bnep.o] Error 1
make: *** [Makefile:4301: all] Error 2


##############################
Test: Incremental Build with patches - FAIL
Desc: Incremental build per patch in the series
Output:
tools/mgmt-tester.c: In function ‘main’:
tools/mgmt-tester.c:12364:5: note: variable tracking size limit exceeded with ‘-fvar-tracking-assignments’, retrying without
12364 | int main(int argc, char *argv[])
| ^~~~
In file included from /usr/include/string.h:495,
from /usr/include/glib-2.0/glib/gtestutils.h:30,
from /usr/include/glib-2.0/glib.h:85,
from profiles/network/bnep.c:27:
In function ‘strncpy’,
inlined from ‘bnep_connadd’ at profiles/network/bnep.c:111:2:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:10: error: ‘__builtin_strncpy’ specified bound 16 equals destination size [-Werror=stringop-truncation]
cc1: all warnings being treated as errors
make[1]: *** [Makefile:7271: profiles/network/bnep.o] Error 1
make: *** [Makefile:4301: all] Error 2




---
Regards,
Linux Bluetooth