]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix unfreed locks in log and arc4random at exit of unbound.
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 2 Feb 2018 09:27:16 +0000 (09:27 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Fri, 2 Feb 2018 09:27:16 +0000 (09:27 +0000)
git-svn-id: file:///svn/unbound/trunk@4491 be551aaa-1e26-0410-a405-d3ace91eadb9

compat/arc4_lock.c
config.h.in
configure.ac
daemon/daemon.c
daemon/unbound.c
doc/Changelog
services/authzone.c
testcode/testbound.c
util/log.c
util/log.h

index 0c45ad01b0426e21d661fdea868559f56a545561..a78f7523235017781b053800fb8fbce28513ad93 100644 (file)
@@ -33,6 +33,9 @@
  */
 #include "config.h"
 #define LOCKRET(func) func
+#ifdef ENABLE_LOCK_CHECKS
+#undef ENABLE_LOCK_CHECKS
+#endif
 #include "util/locks.h"
 
 void _ARC4_LOCK(void);
@@ -46,6 +49,10 @@ void _ARC4_LOCK(void)
 void _ARC4_UNLOCK(void)
 {
 }
+
+void _ARC4_LOCK_DESTROY(void)
+{
+}
 #else /* !THREADS_DISABLED */
 
 static lock_quick_type arc4lock;
@@ -64,4 +71,12 @@ void _ARC4_UNLOCK(void)
 {
        lock_quick_unlock(&arc4lock);
 }
+
+void _ARC4_LOCK_DESTROY(void)
+{
+       if(arc4lockinit) {
+               arc4lockinit = 0;
+               lock_quick_destroy(&arc4lock);
+       }
+}
 #endif /* THREADS_DISABLED */
index 90038a88fac599d26fdbcee1a75a4b88e2116434..47aa147cbab84e44464239fb8ebd843771352284 100644 (file)
@@ -1150,6 +1150,7 @@ uint32_t arc4random(void);
 void arc4random_buf(void* buf, size_t n);
 void _ARC4_LOCK(void);
 void _ARC4_UNLOCK(void);
+void _ARC4_LOCK_DESTROY(void);
 #endif
 #ifndef HAVE_ARC4RANDOM_UNIFORM
 uint32_t arc4random_uniform(uint32_t upper_bound);
index 822eed520187254b4ed4f0ef786db7d413f69428..e3e222f895f471339539bbbca7fc8afe4087a3b4 100644 (file)
@@ -1661,6 +1661,7 @@ uint32_t arc4random(void);
 void arc4random_buf(void* buf, size_t n);
 void _ARC4_LOCK(void);
 void _ARC4_UNLOCK(void);
+void _ARC4_LOCK_DESTROY(void);
 #endif
 #ifndef HAVE_ARC4RANDOM_UNIFORM
 uint32_t arc4random_uniform(uint32_t upper_bound);
index 13aba723a2a8d30bdd33586243f6a4520efcc7ac..f68bd981b01b76fa4384c7ca7e1635c4ef2be12c 100644 (file)
@@ -778,6 +778,9 @@ daemon_delete(struct daemon* daemon)
 #  if defined(HAVE_SSL) && defined(OPENSSL_THREADS) && !defined(THREADS_DISABLED)
        ub_openssl_lock_delete();
 #  endif
+#ifndef HAVE_ARC4RANDOM
+       _ARC4_LOCK_DESTROY();
+#endif
 #elif defined(HAVE_NSS)
        NSS_Shutdown();
 #endif /* HAVE_SSL or HAVE_NSS */
index 10ab082e2158e919dcfb264b939e27dfe139a548..827246f0c70a29306a8f687af3fad1beca0c4a64 100644 (file)
@@ -744,5 +744,10 @@ main(int argc, char* argv[])
 
        run_daemon(cfgfile, cmdline_verbose, debug_mode, log_ident_default, need_pidfile);
        log_init(NULL, 0, NULL); /* close logfile */
+#ifndef unbound_testbound
+       if(log_get_lock()) {
+               lock_quick_destroy((lock_quick_type*)log_get_lock());
+       }
+#endif
        return 0;
 }
index 3af4ff2fd402f2e2c1661da760b2476df1a70846..227aca428299f9567950ebba3e7e659cf89d2c15 100644 (file)
@@ -1,3 +1,6 @@
+2 February 2018: Wouter
+       - Fix unfreed locks in log and arc4random at exit of unbound.
+
 1 February 2018: Wouter
        - fix unaligned structure making a false positive in checklock
          unitialised memory.
index f2baafb31389a29088b0e830a0780049f7e245a5..99b83c5f17680a31fe239b7bb271a4b136d765d4 100644 (file)
@@ -4276,6 +4276,8 @@ check_xfer_packet(sldns_buffer* pkt, struct auth_xfer* xfr,
                return 0;
        }
        /* check ID */
+       log_info("id wire %x, want %x", (int)LDNS_ID_WIRE(wire),
+               (int)xfr->task_transfer->id);
        if(LDNS_ID_WIRE(wire) != xfr->task_transfer->id) {
                verbose(VERB_ALGO, "xfr to %s failed, packet wrong ID",
                        xfr->task_transfer->master->host);
index 5ec51ab3df52e298f119eae4f47ceded18922bc7..c9880cdd3625d8a92f047e31b969338372b2997b 100644 (file)
@@ -456,7 +456,10 @@ main(int argc, char* argv[])
        for(c=1; c<pass_argc; c++)
                free(pass_argv[c]);
        if(res == 0) {
-               log_info("Testbound Exit Success");
+               log_info("Testbound Exit Success\n");
+               if(log_get_lock()) {
+                       lock_quick_destroy((lock_quick_type*)log_get_lock());
+               }
 #ifdef HAVE_PTHREAD
                /* dlopen frees its thread state (dlopen of gost engine) */
                pthread_exit(NULL);
index c14b45834add44bcc5790b5d25cbf8f9a6d42c50..7ac06cdbefe0a28fcd37177a77260e3b93ae7d65 100644 (file)
@@ -191,6 +191,13 @@ void log_set_time_asc(int use_asc)
        log_time_asc = use_asc;
 }
 
+void* log_get_lock(void)
+{
+       if(!key_created)
+               return NULL;
+       return (void*)&log_lock;
+}
+
 void
 log_vmsg(int pri, const char* type,
        const char *format, va_list args)
index 8e85ee620b18c1d413aa9bb244d90d8834d8b49f..0053e2de828f46b2d8aab1f8e4dfe438d8c7cc02 100644 (file)
@@ -127,6 +127,9 @@ void log_set_time(time_t* t);
  */
 void log_set_time_asc(int use_asc);
 
+/** get log lock */
+void* log_get_lock(void);
+
 /**
  * Log informational message.
  * Pass printf formatted arguments. No trailing newline is needed.