From eae4947cc5789d58443c6cb9f05cdb0b2038fd02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Thu, 8 Sep 2022 07:33:31 +0200 Subject: [PATCH] Disable stringop-overread with gcc-11+ Address Sanitizer When Address Sanitizer is enabled in gcc-11+, number of false positives might appear like this: netmgr/udp.c: In function 'isc__nm_udp_send': netmgr/udp.c:729:13: warning: 'uv_udp_send' reading 16 bytes from a region of size 8 [-Wstringop-overread] 729 | r = uv_udp_send(&uvreq->uv_req.udp_send, &sock->uv_handle.udp, | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 730 | &uvreq->uvbuf, 1, sa, udp_send_cb); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ netmgr/udp.c:729:13: note: referencing argument 3 of type 'const uv_buf_t[0]' In file included from ./include/isc/uv.h:17, from ./include/isc/barrier.h:31, from netmgr/udp.c:17: /usr/include/uv.h:711:15: note: in a call to function 'uv_udp_send' 711 | UV_EXTERN int uv_udp_send(uv_udp_send_t* req, | ^~~~~~~~~~~ Disable the warning globally in the autoconf, instead of just locally in a single CI job, as it might affect people outside our GitLab CI. --- .gitlab-ci.yml | 2 +- configure.ac | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bdabe4715e..9874ff4ed0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -968,7 +968,7 @@ unit:gcc:jammy:amd64: gcc:asan: variables: CC: gcc - CFLAGS: "${CFLAGS_COMMON} -fsanitize=address,undefined -Wno-error=stringop-overread" + CFLAGS: "${CFLAGS_COMMON} -fsanitize=address,undefined" LDFLAGS: "-fsanitize=address,undefined" EXTRA_CONFIGURE: "--with-libidn2 --without-jemalloc" <<: *fedora_35_amd64_image diff --git a/configure.ac b/configure.ac index 786f228c42..903287748b 100644 --- a/configure.ac +++ b/configure.ac @@ -119,6 +119,16 @@ STD_CFLAGS="-Wall -Wextra -Wwrite-strings -Wpointer-arith -Wno-missing-field-ini # These should be always errors STD_CFLAGS="$STD_CFLAGS -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=format-security -Werror=parentheses -Werror=implicit -Werror=strict-prototypes -Werror=vla" +# Disable false positives generated by GCC 11+ and ASAN +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], + [[#if __GNUC__ >= 11 && defined(__SANITIZE_ADDRESS__) + #error Address Sanitizer enabled + #endif + ]])], + [], + [STD_CFLAGS="$STD_CFLAGS -Wno-stringop-overread"]) + STD_LDFLAGS="" # ... except in test code