]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
privsep: shutdown read end of the write only sockets
authorRoy Marples <roy@marples.name>
Sat, 18 Jul 2020 11:40:30 +0000 (12:40 +0100)
committerRoy Marples <roy@marples.name>
Sat, 18 Jul 2020 11:40:30 +0000 (12:40 +0100)
Clearly shows our intent and hopefully is an optimisation
within the kernel.

src/privsep-root.c

index f1b4074531b4593eb7f39dc77af58e8d18f0f119..8c642e70fbe865482ec4bd459b20ab41b8544317 100644 (file)
@@ -635,7 +635,7 @@ ps_root_startcb(void *arg)
        ctx->ps_root_pid = getpid();
        ctx->options |= DHCPCD_PRIVSEPROOT;
 
-       /* Open network sockets for sending.
+       /* Open network sockets for sending only.
         * This is a small bit wasteful for non sandboxed OS's
         * but makes life very easy for unicasting DHCPv6 in non master
         * mode as we no longer care about address selection. */
@@ -645,6 +645,8 @@ ps_root_startcb(void *arg)
                    SOCK_RAW | SOCK_CXNB, IPPROTO_UDP);
                if (ctx->udp_wfd == -1)
                        logerr("%s: dhcp_openraw", __func__);
+               else if (shutdown(ctx->udp_wfd, SHUT_RD) == -1)
+                       logerr("%s: shutdown dhcp", __func__);
        }
 #endif
 #ifdef INET6
@@ -652,6 +654,8 @@ ps_root_startcb(void *arg)
                ctx->nd_fd = ipv6nd_open(false);
                if (ctx->nd_fd == -1)
                        logerr("%s: ipv6nd_open", __func__);
+               else if (shutdown(ctx->nd_fd, SHUT_RD) == -1)
+                       logerr("%s: shutdown nd", __func__);
        }
 #endif
 #ifdef DHCP6
@@ -659,6 +663,8 @@ ps_root_startcb(void *arg)
                ctx->dhcp6_wfd = dhcp6_openraw();
                if (ctx->dhcp6_wfd == -1)
                        logerr("%s: dhcp6_openraw", __func__);
+               else if (shutdown(ctx->dhcp6_wfd, SHUT_RD) == -1)
+                       logerr("%s: shutdown dhcp6", __func__);
        }
 #endif