]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
privsep: Ensure socketpair IPC buffers are large enough.
authorRoy Marples <roy@marples.name>
Mon, 1 Jun 2020 14:03:46 +0000 (15:03 +0100)
committerRoy Marples <roy@marples.name>
Mon, 1 Jun 2020 14:03:46 +0000 (15:03 +0100)
For at least one fully sized message.

src/privsep.c

index ce4f056510813b0f0cc2dc8b656857e819716bbd..ce84ff806e0a74611dcf1b050225e433cacbf3a7 100644 (file)
@@ -131,6 +131,20 @@ ps_dropprivs(struct dhcpcd_ctx *ctx)
        return 0;
 }
 
+static int
+ps_setbuf(int fd)
+{
+       socklen_t len = (socklen_t)sizeof(struct ps_msg);
+
+       if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &len, sizeof(len)) == -1 ||
+           setsockopt(fd, SOL_SOCKET, SO_SNDBUF, &len, sizeof(len)) == -1)
+       {
+               logerr(__func__);
+               return -1;
+       }
+       return 0;
+}
+
 pid_t
 ps_dostart(struct dhcpcd_ctx *ctx,
     pid_t *priv_pid, int *priv_fd,
@@ -160,6 +174,7 @@ ps_dostart(struct dhcpcd_ctx *ctx,
        case 0:
                *priv_fd = fd[1];
                close(fd[0]);
+               ps_setbuf(*priv_fd);
                break;
        default:
                *priv_pid = pid;
@@ -181,6 +196,7 @@ ps_dostart(struct dhcpcd_ctx *ctx,
                        logerr("%s: eloop_event_add", __func__);
                        return -1;
                }
+               ps_setbuf(*priv_fd);
                return pid;
        }