From 5699e4c2d470a12c922c4b7c86a8987837911626 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 7 Oct 2024 13:03:51 +0200 Subject: [PATCH 1/2] resolved: fix fastopen fallback We should not invalidate the socket address size before we use it. Fixes: #34579 --- src/resolve/resolved-dns-stream.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c index 8c1512006a..c3e825abf4 100644 --- a/src/resolve/resolved-dns-stream.c +++ b/src/resolve/resolved-dns-stream.c @@ -205,6 +205,7 @@ static int dns_stream_identify(DnsStream *s) { ssize_t dns_stream_writev(DnsStream *s, const struct iovec *iov, size_t iovcnt, int flags) { ssize_t m; + int r; assert(s); assert(iov); @@ -224,12 +225,14 @@ ssize_t dns_stream_writev(DnsStream *s, const struct iovec *iov, size_t iovcnt, m = sendmsg(s->fd, &hdr, MSG_FASTOPEN); if (m < 0) { - if (errno == EOPNOTSUPP) { - s->tfo_salen = 0; - if (connect(s->fd, &s->tfo_address.sa, s->tfo_salen) < 0) - return -errno; + if (ERRNO_IS_NOT_SUPPORTED(errno)) { + /* MSG_FASTOPEN not supported? Then try to connect() traditionally */ + r = RET_NERRNO(connect(s->fd, &s->tfo_address.sa, s->tfo_salen)); + s->tfo_salen = 0; /* connection is made */ + if (r < 0 && r != -EINPROGRESS) + return r; - return -EAGAIN; + return -EAGAIN; /* In case of EINPROGRESS, EAGAIN or success: return EAGAIN, so that caller calls us again */ } if (errno == EINPROGRESS) return -EAGAIN; From 86eb9b4f3837f96dd59abbc39e62979ede489f5a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 7 Oct 2024 13:04:29 +0200 Subject: [PATCH 2/2] resolved: use SOCKADDR_LEN() where appropriate --- src/resolve/resolved-dns-stream.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/resolve/resolved-dns-stream.c b/src/resolve/resolved-dns-stream.c index c3e825abf4..e57af66221 100644 --- a/src/resolve/resolved-dns-stream.c +++ b/src/resolve/resolved-dns-stream.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include #include #include @@ -568,7 +569,7 @@ int dns_stream_new( if (tfo_address) { s->tfo_address = *tfo_address; - s->tfo_salen = tfo_address->sa.sa_family == AF_INET6 ? sizeof(tfo_address->in6) : sizeof(tfo_address->in); + s->tfo_salen = SOCKADDR_LEN(*tfo_address); } *ret = TAKE_PTR(s);