Fixed race condition - ra_init may already result in SIGIO, and without signal handle...
authorMarkus Stenberg <markus.stenberg@iki.fi>
Tue, 26 Mar 2013 13:15:25 +0000 (15:15 +0200)
committerMarkus Stenberg <markus.stenberg@iki.fi>
Tue, 26 Mar 2013 13:15:25 +0000 (15:15 +0200)
src/odhcp6c.c

index 645131252a2f9f10c0e19aa136dac61bb6a62855..88f2ae5c7228c1b51e5781fdeb075c4ed4dc99a8 100644 (file)
@@ -139,13 +139,6 @@ int main(_unused int argc, char* const argv[])
        if (help || !ifname)
                return usage();
 
-       if ((urandom_fd = open("/dev/urandom", O_CLOEXEC | O_RDONLY)) < 0 ||
-                       init_dhcpv6(ifname, request_pd) || ra_init(ifname) ||
-                       script_init(script, ifname)) {
-               syslog(LOG_ERR, "failed to initialize: %s", strerror(errno));
-               return 3;
-       }
-
        signal(SIGIO, sighandler);
        signal(SIGHUP, sighandler);
        signal(SIGINT, sighandler);
@@ -154,6 +147,13 @@ int main(_unused int argc, char* const argv[])
        signal(SIGUSR1, sighandler);
        signal(SIGUSR2, sighandler);
 
+       if ((urandom_fd = open("/dev/urandom", O_CLOEXEC | O_RDONLY)) < 0 ||
+                       init_dhcpv6(ifname, request_pd) || ra_init(ifname) ||
+                       script_init(script, ifname)) {
+               syslog(LOG_ERR, "failed to initialize: %s", strerror(errno));
+               return 3;
+       }
+
        if (daemonize) {
                openlog("odhcp6c", LOG_PID, LOG_DAEMON); // Disable LOG_PERROR
                if (daemon(0, 0)) {