static void privwrap_log(enum privwrap_dbglvl_e dbglvl, const char *func, const char *format, ...) PRINTF_ATTRIBUTE(3, 4);
# define PRIVWRAP_LOG(dbglvl, ...) privwrap_log((dbglvl), __func__, __VA_ARGS__)
+/*
+ * DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE is used to avoid libasan to check all calls
+ * used by setrlimit(). setrlimit() is called by every process too early,
+ * already from _dl_init(), before call of __asan_init(), thus libasan is not
+ * yet fully initialized. This causes SIGSEGV and process crash.
+ */
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
static void privwrap_log(enum privwrap_dbglvl_e dbglvl,
const char *func,
const char *format, ...)
return "unknown";
}
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
static void *privwrap_load_lib_handle(enum privwrap_lib lib)
{
int flags = RTLD_LAZY;
_privwrap_bind_symbol(PRIVWRAP_LIBC, #sym_name); \
}
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
static void __pwrap_bind_symbol_all_once(void)
{
#ifdef HAVE_SETRLIMIT
#endif
}
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
static void pwrap_bind_symbol_all(void)
{
static pthread_once_t all_symbol_binding_once = PTHREAD_ONCE_INIT;
* PRIVWRAP HELPER FUNCTIONS
*********************************************************/
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
bool priv_wrapper_enabled(void)
{
const char *env;
return true;
}
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
static int privwrap_setrlimit(int resource, const struct rlimit *rlp)
{
bool setrlimit_disabled = false;
return rc;
}
+DO_NOT_SANITIZE_ADDRESS_ATTRIBUTE
#ifdef _GNU_SOURCE
int setrlimit(__rlimit_resource_t resource, const struct rlimit *rlp)
#else