]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
rlimit formula
authorWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 20 Nov 2008 09:20:10 +0000 (09:20 +0000)
committerWouter Wijngaards <wouter@nlnetlabs.nl>
Thu, 20 Nov 2008 09:20:10 +0000 (09:20 +0000)
git-svn-id: file:///svn/unbound/trunk@1365 be551aaa-1e26-0410-a405-d3ace91eadb9

daemon/unbound.c
doc/Changelog

index 19abe0c415a8a5a0fa327bdf8ae74cdcfccc8523..b051995bb7525eb484157ff8d54b5f678a41bd88 100644 (file)
@@ -97,11 +97,12 @@ static void
 checkrlimits(struct config_file* cfg)
 {
 #ifdef HAVE_GETRLIMIT
-       int list = ((cfg->do_ip4?1:0) + (cfg->do_ip6?1:0)) * 
-               ((cfg->do_udp?1:0) + (cfg->do_tcp?1 + 
+       int list = ((cfg->do_udp?1:0) + (cfg->do_tcp?1 + 
                        (int)cfg->incoming_num_tcp:0));
-       size_t ifs = (size_t)(cfg->num_ifs==0?1:cfg->num_ifs);
-       size_t listen_num = list*ifs;
+       size_t listen_ifs = (size_t)(cfg->num_ifs==0?
+               ((cfg->do_ip4 && !cfg->if_automatic?1:0) + 
+                (cfg->do_ip6?1:0)):cfg->num_ifs);
+       size_t listen_num = list*listen_ifs;
        size_t outudpnum = (size_t)cfg->outgoing_num_ports;
        size_t outtcpnum = cfg->outgoing_num_tcp;
        size_t misc = 4; /* logfile, pidfile, stdout... */
@@ -132,6 +133,8 @@ checkrlimits(struct config_file* cfg)
                        log_warn("setrlimit: %s", strerror(errno));
                        log_warn("cannot increase max open fds from %u to %u",
                                (unsigned)avail, (unsigned)total+10);
+                       if(numthread*perthread_noudp+15 > avail)
+                               fatal_exit("too much tcp. not enough fds.");
                        cfg->outgoing_num_ports = (int)((avail 
                                - numthread*perthread_noudp 
                                - 10 /* safety margin */) /numthread);
index 6a0eeca865f7a5f35565634c1ed5f8d7a1875edb..919f2b71d3ddebff8e496699ec165a1e28039955 100644 (file)
@@ -1,5 +1,6 @@
 20 November 2008: Wouter
        - fixup fatal error due to faulty error checking after tcp accept.
+       - add check in rlimit to avoid integer underflow. Better formula.
 
 19 November 2008: Wouter
        - bug #219: fixed so that syslog which delays opening until the first