Mercurial > hg > dhcpcd
changeset 5291:d1e1fe84e3b3 draft
privsep: Double the size of the send buffer.
And ensure the buffer size is not reduced.
| author | Roy Marples <roy@marples.name> |
|---|---|
| date | Mon, 01 Jun 2020 15:33:05 +0100 |
| parents | fae6670fef23 |
| children | 2f2b53b05dc5 |
| files | src/privsep.c |
| diffstat | 1 files changed, 24 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/privsep.c Mon Jun 01 15:03:46 2020 +0100 +++ b/src/privsep.c Mon Jun 01 15:33:05 2020 +0100 @@ -132,12 +132,33 @@ } static int +ps_setbuf0(int fd, int ctl, int minlen) +{ + int len; + socklen_t slen; + + slen = sizeof(len); + if (getsockopt(fd, SOL_SOCKET, ctl, &len, &slen) == -1) + return -1; + +#ifdef __linux__ + len /= 2; +#endif + if (len >= minlen) + return 0; + + return setsockopt(fd, SOL_SOCKET, ctl, &minlen, sizeof(minlen)); +} + +static int ps_setbuf(int fd) { - socklen_t len = (socklen_t)sizeof(struct ps_msg); + /* Ensure we can receive a fully sized privsep message. + * Double the send buffer. */ + int minlen = (int)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) + if (ps_setbuf0(fd, SO_RCVBUF, minlen) == -1 || + ps_setbuf0(fd, SO_SNDBUF, minlen * 2) == -1) { logerr(__func__); return -1;
