Mercurial > hg > dhcpcd
changeset 5290:fae6670fef23 draft
privsep: Ensure socketpair IPC buffers are large enough.
For at least one fully sized message.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Mon, 01 Jun 2020 15:03:46 +0100 |
| parents | b32000689362 |
| children | d1e1fe84e3b3 |
| files | src/privsep.c |
| diffstat | 1 files changed, 16 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/privsep.c Mon Jun 01 13:57:31 2020 +0100 +++ b/src/privsep.c Mon Jun 01 15:03:46 2020 +0100 @@ -131,6 +131,20 @@ 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 @@ case 0: *priv_fd = fd[1]; close(fd[0]); + ps_setbuf(*priv_fd); break; default: *priv_pid = pid; @@ -181,6 +196,7 @@ logerr("%s: eloop_event_add", __func__); return -1; } + ps_setbuf(*priv_fd); return pid; }
