summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2014-10-20 09:13:36 +0200
committerAndreas Schneider <asn@samba.org>2014-10-20 16:48:29 +0200
commitdb8edc87e6a1a771336d832a6da02c4760c74100 (patch)
tree98bd093ec792c0550d029d7df352e647c4a28c5e
parent390cfbef05e42439f82d301752b74f8865f32225 (diff)
downloadsocket_wrapper-db8edc87e6a1a771336d832a6da02c4760c74100.tar.gz
socket_wrapper-db8edc87e6a1a771336d832a6da02c4760c74100.tar.xz
socket_wrapper-db8edc87e6a1a771336d832a6da02c4760c74100.zip
src: Add support for running with address sanitizer.
It address sanitzer will complain about our hack with variable function attributes. This disables the checking of it. Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: Guenther Deschner <gd@samba.org>
-rw-r--r--ConfigureChecks.cmake11
-rw-r--r--config.h.cmake1
-rw-r--r--src/socket_wrapper.c8
3 files changed, 20 insertions, 0 deletions
diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake
index ea0a208..32cd9bb 100644
--- a/ConfigureChecks.cmake
+++ b/ConfigureChecks.cmake
@@ -194,6 +194,17 @@ int main(void) {
return 0;
}" HAVE_FUNCTION_ATTRIBUTE_FORMAT)
+check_c_source_compiles("
+void test_address_sanitizer_attribute(void) __attribute__((no_sanitize_address));
+
+void test_address_sanitizer_attribute(void)
+{
+ return;
+}
+
+int main(void) {
+ return 0;
+}" HAVE_ADDRESS_SANITIZER_ATTRIBUTE)
check_library_exists(dl dlopen "" HAVE_LIBDL)
if (HAVE_LIBDL)
diff --git a/config.h.cmake b/config.h.cmake
index 8b66420..91e1206 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -57,6 +57,7 @@
#cmakedefine HAVE_GCC_THREAD_LOCAL_STORAGE 1
#cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1
+#cmakedefine HAVE_ADDRESS_SANITIZER_ATTRIBUTE 1
#cmakedefine HAVE_SOCKADDR_STORAGE 1
#cmakedefine HAVE_IPV6 1
#cmakedefine HAVE_FUNCTION_ATTRIBUTE_FORMAT 1
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index b30303f..82e5737 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -100,6 +100,12 @@ enum swrap_dbglvl_e {
#define DESTRUCTOR_ATTRIBUTE
#endif
+#ifdef HAVE_ADDRESS_SANITIZER_ATTRIBUTE
+#define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE __attribute__((no_sanitize_address))
+#else
+#define DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
+#endif
+
#ifdef HAVE_GCC_THREAD_LOCAL_STORAGE
# define SWRAP_THREAD __thread
#else
@@ -598,6 +604,7 @@ static int libc_eventfd(int count, int flags)
}
#endif
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
static int libc_vfcntl(int fd, int cmd, va_list ap)
{
long int args[4];
@@ -649,6 +656,7 @@ static int libc_getsockopt(int sockfd,
return swrap.fns.libc_getsockopt(sockfd, level, optname, optval, optlen);
}
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
static int libc_vioctl(int d, unsigned long int request, va_list ap)
{
long int args[4];