vppinfra: fix AddressSanitizer
[vpp.git] / src / vcl / ldp_socket_wrapper.c
index ddf947d..e4e0f44 100644 (file)
@@ -63,6 +63,8 @@
 #include <unistd.h>
 #include <pthread.h>
 
+#include <vppinfra/clib.h>
+
 #include <vcl/ldp_socket_wrapper.h>
 
 
@@ -173,6 +175,9 @@ typedef int (*__libc_dup2) (int oldfd, int newfd);
 #endif
 
 typedef int (*__libc_fcntl) (int fd, int cmd, ...);
+#ifdef HAVE_FCNTL64
+typedef int (*__libc_fcntl64) (int fd, int cmd, ...);
+#endif
 typedef FILE *(*__libc_fopen) (const char *name, const char *mode);
 #ifdef HAVE_FOPEN64
 typedef FILE *(*__libc_fopen64) (const char *name, const char *mode);
@@ -292,6 +297,9 @@ struct swrap_libc_symbols
   SWRAP_SYMBOL_ENTRY (dup2);
 #endif
   SWRAP_SYMBOL_ENTRY (fcntl);
+#ifdef HAVE_FCNTL64
+  SWRAP_SYMBOL_ENTRY (fcntl64);
+#endif
   SWRAP_SYMBOL_ENTRY (fopen);
 #ifdef HAVE_FOPEN64
   SWRAP_SYMBOL_ENTRY (fopen64);
@@ -388,7 +396,7 @@ swrap_load_lib_handle (enum swrap_lib lib)
   void *handle = NULL;
   int i;
 
-#ifdef RTLD_DEEPBIND
+#if defined(RTLD_DEEPBIND) && !defined(CLIB_SANITIZE_ADDR)
   flags |= RTLD_DEEPBIND;
 #endif
 
@@ -541,28 +549,23 @@ libc_eventfd (int count, int flags)
 }
 #endif
 
-DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
+int
 libc_vfcntl (int fd, int cmd, va_list ap)
 {
-  long int args[4];
-  int rc;
-  int i;
-
   swrap_bind_symbol_libc (fcntl);
+  return swrap.libc.symbols._libc_fcntl.f (fd, cmd, va_arg (ap, long int));
+}
 
-  for (i = 0; i < 4; i++)
-    {
-      args[i] = va_arg (ap, long int);
-    }
-
-  rc = swrap.libc.symbols._libc_fcntl.f (fd,
-                                        cmd,
-                                        args[0], args[1], args[2], args[3]);
-
-  return rc;
+#ifdef HAVE_FCNTL64
+int
+libc_vfcntl64 (int fd, int cmd, va_list ap)
+{
+  swrap_bind_symbol_libc (fcntl64);
+  return swrap.libc.symbols._libc_fcntl64.f (fd, cmd, va_arg (ap, long int));
 }
+#endif
 
-DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE int
+int
 libc_vioctl (int fd, int cmd, va_list ap)
 {
   long int args[4];