]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Add more logging for out-of-memory cases.
authorGeorge Thessalonikefs <george@nlnetlabs.nl>
Tue, 4 May 2021 13:39:06 +0000 (15:39 +0200)
committerGeorge Thessalonikefs <george@nlnetlabs.nl>
Tue, 4 May 2021 13:39:06 +0000 (15:39 +0200)
daemon/worker.c
doc/Changelog
util/data/msgreply.c
validator/val_anchor.c

index 7537bd33dcd1fdca4e4759122f624986913b7007..e9e163a0448b438e3d3cb8c9d808707bffd095e7 100644 (file)
@@ -1850,6 +1850,11 @@ worker_init(struct worker* worker, struct config_file *cfg,
                return 0;
        }
        worker->env.mesh = mesh_create(&worker->daemon->mods, &worker->env);
+       if(!worker->env.mesh) {
+               log_err("malloc failure");
+               worker_delete(worker);
+               return 0;
+       }
        /* Pass on daemon variables that we would need in the mesh area */
        worker->env.mesh->use_response_ip = worker->daemon->use_response_ip;
        worker->env.mesh->use_rpz = worker->daemon->use_rpz;
@@ -1860,6 +1865,11 @@ worker_init(struct worker* worker, struct config_file *cfg,
        worker->env.kill_sub = &mesh_state_delete;
        worker->env.detect_cycle = &mesh_detect_cycle;
        worker->env.scratch_buffer = sldns_buffer_new(cfg->msg_buffer_size);
+       if(!worker->env.scratch_buffer) {
+               log_err("malloc failure");
+               worker_delete(worker);
+               return 0;
+       }
        if(!(worker->env.fwds = forwards_create()) ||
                !forwards_apply_cfg(worker->env.fwds, cfg)) {
                log_err("Could not set forward zones");
@@ -1914,10 +1924,6 @@ worker_init(struct worker* worker, struct config_file *cfg,
                }
        }
 #endif /* USE_DNSTAP */
-       if(!worker->env.mesh || !worker->env.scratch_buffer) {
-               worker_delete(worker);
-               return 0;
-       }
        worker_mem_report(worker, NULL);
        /* if statistics enabled start timer */
        if(worker->env.cfg->stat_interval > 0) {
index 6edbcf9692eae5835354a7da8aea2ca404752fa3..18cb98ae5d41a5f01e078d10ca701154977e04b9 100644 (file)
@@ -1,6 +1,7 @@
 4 May 2021: George
        - Fix for #367: only attempt to get the interface for queries that are no
          longer on the tcp_waiting_list.
+       - Add more logging for out-of-memory cases.
 
 4 May 2021: Wouter
        - Merge #478: Allow configuration of TCP timeout while waiting for
index 4830b343f0f3f055a77c9a3029a38ec9316da0c9..48550cbe4f387305c1a240d9526c5da9033add80 100644 (file)
@@ -825,9 +825,15 @@ log_dns_msg(const char* str, struct query_info* qinfo, struct reply_info* rep)
        /* not particularly fast but flexible, make wireformat and print */
        sldns_buffer* buf = sldns_buffer_new(65535);
        struct regional* region = regional_create();
-       if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0, 
+       if(!(buf && region)) {
+               log_err("%s: log_dns_msg: out of memory", str);
+               sldns_buffer_free(buf);
+               regional_destroy(region);
+               return;
+       }
+       if(!reply_info_encode(qinfo, rep, 0, rep->flags, buf, 0,
                region, 65535, 1, 0)) {
-               log_info("%s: log_dns_msg: out of memory", str);
+               log_err("%s: log_dns_msg: out of memory", str);
        } else {
                char* s = sldns_wire2str_pkt(sldns_buffer_begin(buf),
                        sldns_buffer_limit(buf));
index 9b6574c5d24ad9b5fd111c0ebb99658692195d35..52711bbcb35ceb3ce2fd3c98a1e91c37558ad0ad 100644 (file)
@@ -1048,6 +1048,10 @@ anchors_apply_cfg(struct val_anchors* anchors, struct config_file* cfg)
        const char** zstr;
        char* nm;
        sldns_buffer* parsebuf = sldns_buffer_new(65535);
+       if(!parsebuf) {
+               log_err("malloc error in anchors_apply_cfg.");
+               return 0;
+       }
        if(cfg->insecure_lan_zones) {
                for(zstr = as112_zones; *zstr; zstr++) {
                        if(!anchor_insert_insecure(anchors, *zstr)) {