From nobody Tue May 7 06:43:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1532444099454162.15607826416806; Tue, 24 Jul 2018 07:54:59 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0D0D7D2EF9; Tue, 24 Jul 2018 14:54:58 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CE531CD0CD; Tue, 24 Jul 2018 14:54:57 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7647F18037F2; Tue, 24 Jul 2018 14:54:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w6OEIFcx014744 for ; Tue, 24 Jul 2018 10:18:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id 033A710FFE4E; Tue, 24 Jul 2018 14:18:15 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.60]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1160910FFE4D; Tue, 24 Jul 2018 14:18:13 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Tue, 24 Jul 2018 15:18:09 +0100 Message-Id: <20180724141810.26143-2-berrange@redhat.com> In-Reply-To: <20180724141810.26143-1-berrange@redhat.com> References: <20180724141810.26143-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Cc: Olaf Hering Subject: [libvirt] [PATCH 1/2] socket: preserve real errno when socket/bind calls fail X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.27 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Tue, 24 Jul 2018 14:54:58 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 When reporting socket/bind failures we want to ensure any fatal error reported is as accurate as possible. We'll prefer reporting a bind() errno over a socket() errno, because if socket() works but bind() fails that is a more significant event. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Jiri Denemark --- src/rpc/virnetsocket.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index fee61ace60..8e04d61e98 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -310,8 +310,8 @@ int virNetSocketNewListenTCP(const char *nodename, struct addrinfo hints; int fd =3D -1; size_t i; - bool addrInUse =3D false; - bool familyNotSupported =3D false; + int socketErrno =3D 0; + int bindErrno =3D 0; virSocketAddr tmp_addr; =20 *retsocks =3D NULL; @@ -351,7 +351,7 @@ int virNetSocketNewListenTCP(const char *nodename, if ((fd =3D socket(runp->ai_family, runp->ai_socktype, runp->ai_protocol)) < 0) { if (errno =3D=3D EAFNOSUPPORT) { - familyNotSupported =3D true; + socketErrno =3D errno; runp =3D runp->ai_next; continue; } @@ -386,7 +386,7 @@ int virNetSocketNewListenTCP(const char *nodename, virReportSystemError(errno, "%s", _("Unable to bind to por= t")); goto error; } - addrInUse =3D true; + bindErrno =3D errno; VIR_FORCE_CLOSE(fd); runp =3D runp->ai_next; continue; @@ -409,14 +409,14 @@ int virNetSocketNewListenTCP(const char *nodename, fd =3D -1; } =20 - if (nsocks =3D=3D 0 && familyNotSupported) { - virReportSystemError(EAFNOSUPPORT, "%s", _("Unable to bind to port= ")); - goto error; - } - - if (nsocks =3D=3D 0 && - addrInUse) { - virReportSystemError(EADDRINUSE, "%s", _("Unable to bind to port")= ); + if (nsocks =3D=3D 0) { + if (bindErrno) { + virReportSystemError(bindErrno, "%s", _("Unable to bind to por= t")); + } else if (socketErrno) { + virReportSystemError(socketErrno, "%s", _("Unable to create so= cket")); + } else { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("No addresses t= o bind to")); + } goto error; } =20 --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Tue May 7 06:43:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1532444107006493.95409040245784; Tue, 24 Jul 2018 07:55:07 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 14C1C81DEE; Tue, 24 Jul 2018 14:54:58 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D35AB60BE0; Tue, 24 Jul 2018 14:54:57 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7DB5118037F8; Tue, 24 Jul 2018 14:54:57 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w6OEIGj7014749 for ; Tue, 24 Jul 2018 10:18:16 -0400 Received: by smtp.corp.redhat.com (Postfix) id 217AB10FFE4E; Tue, 24 Jul 2018 14:18:16 +0000 (UTC) Received: from t460.redhat.com (unknown [10.33.36.60]) by smtp.corp.redhat.com (Postfix) with ESMTP id 62A7310FFE4D; Tue, 24 Jul 2018 14:18:15 +0000 (UTC) From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Date: Tue, 24 Jul 2018 15:18:10 +0100 Message-Id: <20180724141810.26143-3-berrange@redhat.com> In-Reply-To: <20180724141810.26143-1-berrange@redhat.com> References: <20180724141810.26143-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Cc: Olaf Hering Subject: [libvirt] [PATCH 2/2] rpc: treat EADDRNOTAVAIL as non-fatal when listening X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 24 Jul 2018 14:54:58 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Consider creating a listener socket from a hostname that resolves to multiple addresses. It might be the case that the hostname resolves to both an IPv4 and IPv6 address because it is reachable over both protocols, but the IPv6 connectivity is provided off-host. In such a case no local NIC will have IPv6 and so bind() would fail with the EADDRNOTAVAIL errno. Thus it should be treated as non-fatal as long as at least one socket was succesfully bound. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Jiri Denemark --- src/rpc/virnetsocket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c index 8e04d61e98..044e6d8804 100644 --- a/src/rpc/virnetsocket.c +++ b/src/rpc/virnetsocket.c @@ -382,7 +382,7 @@ int virNetSocketNewListenTCP(const char *nodename, #endif =20 if (bind(fd, runp->ai_addr, runp->ai_addrlen) < 0) { - if (errno !=3D EADDRINUSE) { + if (errno !=3D EADDRINUSE && errno !=3D EADDRNOTAVAIL) { virReportSystemError(errno, "%s", _("Unable to bind to por= t")); goto error; } --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list