From nobody Tue May 13 12:17:51 2025 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 1538681026034493.6533893795329; Thu, 4 Oct 2018 12:23:46 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0D7B080F7C; Thu, 4 Oct 2018 19:23:42 +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 A8F1218EF8; Thu, 4 Oct 2018 19:23:41 +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 57C9C18005B3; Thu, 4 Oct 2018 19:23:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w94JNAWq028156 for ; Thu, 4 Oct 2018 15:23:10 -0400 Received: by smtp.corp.redhat.com (Postfix) id F389F18EFE; Thu, 4 Oct 2018 19:23:09 +0000 (UTC) Received: from icr.brq.redhat.com (unknown [10.43.2.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 748E960191 for ; Thu, 4 Oct 2018 19:23:04 +0000 (UTC) From: =?UTF-8?q?J=C3=A1n=20Tomko?= To: libvir-list@redhat.com Date: Thu, 4 Oct 2018 21:22:43 +0200 Message-Id: In-Reply-To: References: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 15/15] qemuOpenChrChardevUNIXSocket: move to qemu_process 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.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Thu, 04 Oct 2018 19:23:43 +0000 (UTC) X-ZohoMail: RDMRC_0 RSF_0 Z_629925259 SPT_0 Move it closer to its new user. Left exported because it needs to be mocked and it might be used for hotplug in the future. Signed-off-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 57 --------------------------------------------= -- src/qemu/qemu_command.h | 4 ---- src/qemu/qemu_process.c | 59 ++++++++++++++++++++++++++++++++++++++++++++= +++- src/qemu/qemu_process.h | 3 +++ tests/qemuxml2argvmock.c | 3 ++- 5 files changed, 63 insertions(+), 63 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 94bb5d184d..0b2d8d29fa 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4991,63 +4991,6 @@ qemuBuildChrChardevReconnectStr(virBufferPtr buf, } =20 =20 -int -qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev) -{ - struct sockaddr_un addr; - socklen_t addrlen =3D sizeof(addr); - int fd; - - if ((fd =3D socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { - virReportSystemError(errno, "%s", - _("Unable to create UNIX socket")); - goto error; - } - - memset(&addr, 0, sizeof(addr)); - addr.sun_family =3D AF_UNIX; - if (virStrcpyStatic(addr.sun_path, dev->data.nix.path) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("UNIX socket path '%s' too long"), - dev->data.nix.path); - goto error; - } - - if (unlink(dev->data.nix.path) < 0 && errno !=3D ENOENT) { - virReportSystemError(errno, - _("Unable to unlink %s"), - dev->data.nix.path); - goto error; - } - - if (bind(fd, (struct sockaddr *)&addr, addrlen) < 0) { - virReportSystemError(errno, - _("Unable to bind to UNIX socket path '%s'"), - dev->data.nix.path); - goto error; - } - - if (listen(fd, 1) < 0) { - virReportSystemError(errno, - _("Unable to listen to UNIX socket path '%s'"= ), - dev->data.nix.path); - goto error; - } - - /* We run QEMU with umask 0002. Compensate for the umask - * libvirtd might be running under to get the same permission - * QEMU would have. */ - if (virFileUpdatePerm(dev->data.nix.path, 0002, 0664) < 0) - goto error; - - return fd; - - error: - VIR_FORCE_CLOSE(fd); - return -1; -} - - enum { QEMU_BUILD_CHARDEV_TCP_NOWAIT =3D (1 << 0), QEMU_BUILD_CHARDEV_FILE_LOGD =3D (1 << 1), diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 3f4a660e87..96cfa563bb 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -72,10 +72,6 @@ int qemuBuildTLSx509BackendProps(const char *tlspath, virQEMUCapsPtr qemuCaps, virJSONValuePtr *propsret); =20 -/* Open a UNIX socket for chardev FD passing */ -int -qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev); - /* Generate '-device' string for chardev device */ int qemuBuildChrDeviceStr(char **deviceStr, diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 9519178603..ae1bac8ecb 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -6136,6 +6136,63 @@ qemuProcessOpenVhostVsock(virDomainVsockDefPtr vsock) } =20 =20 +int +qemuProcessOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev) +{ + struct sockaddr_un addr; + socklen_t addrlen =3D sizeof(addr); + int fd; + + if ((fd =3D socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { + virReportSystemError(errno, "%s", + _("Unable to create UNIX socket")); + goto error; + } + + memset(&addr, 0, sizeof(addr)); + addr.sun_family =3D AF_UNIX; + if (virStrcpyStatic(addr.sun_path, dev->data.nix.path) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("UNIX socket path '%s' too long"), + dev->data.nix.path); + goto error; + } + + if (unlink(dev->data.nix.path) < 0 && errno !=3D ENOENT) { + virReportSystemError(errno, + _("Unable to unlink %s"), + dev->data.nix.path); + goto error; + } + + if (bind(fd, (struct sockaddr *)&addr, addrlen) < 0) { + virReportSystemError(errno, + _("Unable to bind to UNIX socket path '%s'"), + dev->data.nix.path); + goto error; + } + + if (listen(fd, 1) < 0) { + virReportSystemError(errno, + _("Unable to listen to UNIX socket path '%s'"= ), + dev->data.nix.path); + goto error; + } + + /* We run QEMU with umask 0002. Compensate for the umask + * libvirtd might be running under to get the same permission + * QEMU would have. */ + if (virFileUpdatePerm(dev->data.nix.path, 0002, 0664) < 0) + goto error; + + return fd; + + error: + VIR_FORCE_CLOSE(fd); + return -1; +} + + static int qemuProcessMaybeOpenChrSource(virDomainObjPtr vm, const virDomainChrSourceDef *src) @@ -6158,7 +6215,7 @@ qemuProcessMaybeOpenChrSource(virDomainObjPtr vm, =20 if (qemuSecuritySetSocketLabel(driver->securityManager, vm->def) < 0) goto cleanup; - fd =3D qemuOpenChrChardevUNIXSocket(src); + fd =3D qemuProcessOpenChrChardevUNIXSocket(src); if (qemuSecurityClearSocketLabel(driver->securityManager, vm->def) < 0) goto cleanup; =20 diff --git a/src/qemu/qemu_process.h b/src/qemu/qemu_process.h index c2f7c2b5d2..1135556a5a 100644 --- a/src/qemu/qemu_process.h +++ b/src/qemu/qemu_process.h @@ -116,6 +116,9 @@ int qemuProcessPrepareDomain(virQEMUDriverPtr driver, unsigned int flags); =20 int qemuProcessOpenVhostVsock(virDomainVsockDefPtr vsock); +/* Open a UNIX socket for chardev FD passing */ +int qemuProcessOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev); + =20 int qemuProcessPrepareHost(virQEMUDriverPtr driver, virDomainObjPtr vm, diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c index 79152d928e..dadf0f0a62 100644 --- a/tests/qemuxml2argvmock.c +++ b/tests/qemuxml2argvmock.c @@ -38,6 +38,7 @@ #include "virutil.h" #include "qemu/qemu_interface.h" #include "qemu/qemu_command.h" +#include "qemu/qemu_process.h" #include #include #include @@ -233,7 +234,7 @@ qemuInterfaceOpenVhostNet(virDomainDefPtr def ATTRIBUTE= _UNUSED, =20 =20 int -qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev ATTRIBUTE_UN= USED) +qemuProcessOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev ATTRI= BUTE_UNUSED) =20 { /* We need to return an FD number for a UNIX listener socket, --=20 2.16.4 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list