From nobody Mon Feb 9 08:14:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1747667979; cv=none; d=zohomail.com; s=zohoarc; b=M4SHAxFfwPk1c4nb8Jg9Ym6FCaWqj0e5v3qjNujSkgV5RPqnaD2mG0qP0oTUeP9R4kIobvvUcKAlUd/vLI1obWBUGgBWv6m0yg9htXNfyxm4jdK1pHU9io93DXIZR+Uz/GBdjo15JHhnRz27km2zrf45kkV2ayGxkxgEFC5h6cQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747667979; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=MqZ9reN/mh7MUE9q6ekaQ3H9P8RjhLyfcaqcN5WKN/I=; b=l72lOZwQCDVqDOrGPGHyYZvr8+Flgapt3tGIpzyzErkjGfj6VOB04k+XdB2/DViFfC2QZdWhSybbKBRvlrgx5uCVtF+iquHBYdau4HEgZxojBUDYGBHyBHAQAc2vsit36kk56eqBCfprbe5gj1KTQQL1bowY8eDOhO6O1+V0Pw4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1747667979026719.0728524806649; Mon, 19 May 2025 08:19:39 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 14A2E140E; Mon, 19 May 2025 11:19:38 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 36093178B; Mon, 19 May 2025 11:18:32 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id BE20D15E4; Mon, 19 May 2025 11:18:27 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 9029415A1 for ; Mon, 19 May 2025 11:18:22 -0400 (EDT) Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-553-N70xkhZ5MBuTPIhrDYDQOw-1; Mon, 19 May 2025 11:18:20 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E4FAF180036F for ; Mon, 19 May 2025 15:18:19 +0000 (UTC) Received: from speedmetal.lan (unknown [10.44.22.37]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2DB0F18003FC for ; Mon, 19 May 2025 15:18:18 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747667902; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=9o3dJGEv24A8BYcV8tKzHw4krPC3QK9i5vPwCX4a9mo=; b=KzCAVrL2rFfqzgUARrXHTM18h/8d/fT9tUD/Y1qbRGQYYBZWFtkKfwW80ZZYsDpBFRFsbD 3cDCsLLzAZlq9lOrZLH0u1QzS6gpf5ZoADEDm77rMdRAV8Wa2a0UgIGgqn02g0ZJO7hI+n WyU+Zly4Ici8DXShr2xM7FG78X3rMsw= X-MC-Unique: N70xkhZ5MBuTPIhrDYDQOw-1 X-Mimecast-MFC-AGG-ID: N70xkhZ5MBuTPIhrDYDQOw_1747667900 To: devel@lists.libvirt.org Subject: [PATCH 3/3] qemu: fd: Log information about passed file descriptor Date: Mon, 19 May 2025 17:18:13 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: jLZ-V6GyVPgdtjQw8QXIztEzn3LBaiFZOi0DiUWbtQc_1747667900 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: RYWVOACJEUFI67ISEDZLRV3YXN5S42RE X-Message-ID-Hash: RYWVOACJEUFI67ISEDZLRV3YXN5S42RE X-MailFrom: pkrempa@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Peter Krempa via Devel Reply-To: Peter Krempa X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1747667979793116600 Content-Type: text/plain; charset="utf-8" From: Peter Krempa Log information (type, label, etc) about FDs passed to qemu via APIs from this module. This does "spill" the selinux library code into this module, but acessing it via the security driver would require passing much more context to this module. Since it's for logging only it can be easily removed if necessary. Signed-off-by: Peter Krempa Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_fd.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/qemu/qemu_fd.c b/src/qemu/qemu_fd.c index 333f9b128e..ef0a8d8127 100644 --- a/src/qemu/qemu_fd.c +++ b/src/qemu/qemu_fd.c @@ -25,6 +25,11 @@ #include "virfile.h" #include "virlog.h" +/* Used strictly for logging selinux context of passed FD */ +#ifdef WITH_SECDRIVER_SELINUX +# include +#endif + #define VIR_FROM_THIS VIR_FROM_QEMU VIR_LOG_INIT("qemu.qemu_fd"); @@ -44,6 +49,56 @@ struct _qemuFDPass { }; +static void +qemuFDPassLogFDInfo(const char *name, + size_t idx, + int fd) +{ + struct stat st; + const char *type =3D "error"; + g_autofree char *selinux =3D NULL; + g_autofree char *tmp =3D NULL; + + if (fstat(fd, &st) =3D=3D 0) { + switch (st.st_mode & S_IFMT) { + case S_IFBLK: + type =3D "block"; + break; + case S_IFCHR: + type =3D "char"; + break; + case S_IFDIR: + type =3D "directory"; + break; + case S_IFIFO: + type =3D "pipe"; + break; + case S_IFLNK: + type =3D "symlink"; + break; + case S_IFREG: + type =3D "file"; + break; + case S_IFSOCK: + type =3D "socket"; + break; + default: + type =3D tmp =3D g_strdup_printf("unknown:'0x%x')", st.st_m= ode & S_IFMT); + break; + } + } + +#ifdef WITH_SECDRIVER_SELINUX + ignore_value(fgetfilecon_raw(fd, &selinux)); +#else + selinux =3D g_strdup("N/A"); +#endif + + VIR_DEBUG("passing fd:'%i', name:'%s'(%zu) type:'%s' selinux:'%s'", + fd, name, idx, type, selinux); +} + + void qemuFDPassFree(qemuFDPass *fdpass) { @@ -234,6 +289,8 @@ qemuFDPassTransferCommand(qemuFDPass *fdpass, fdpass->fds[i].fd, fdpass->fds[i].opaque); + qemuFDPassLogFDInfo(fdpass->fds[i].opaque, i, fdpass->fds[i].fd); + virCommandPassFD(cmd, fdpass->fds[i].fd, VIR_COMMAND_PASS_FD_CLOSE= _PARENT); fdpass->fds[i].fd =3D -1; virCommandAddArgList(cmd, "-add-fd", arg, NULL); @@ -274,6 +331,8 @@ qemuFDPassTransferMonitor(qemuFDPass *fdpass, } for (i =3D 0; i < fdpass->nfds; i++) { + qemuFDPassLogFDInfo(fdpass->fds[i].opaque, i, fdpass->fds[i].fd); + if (qemuMonitorAddFileHandleToSet(mon, fdpass->fds[i].fd, fdpass->fdSetID, @@ -381,6 +440,7 @@ qemuFDPassDirectTransferCommand(qemuFDPassDirect *fdpas= s, if (!fdpass) return; + qemuFDPassLogFDInfo(fdpass->name, 0, fdpass->fd); virCommandPassFD(cmd, fdpass->fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); g_free(fdpass->name); fdpass->name =3D g_strdup_printf("%d", fdpass->fd); @@ -403,6 +463,8 @@ qemuFDPassDirectTransferMonitor(qemuFDPassDirect *fdpas= s, if (!fdpass) return 0; + qemuFDPassLogFDInfo(fdpass->name, 0, fdpass->fd); + if (qemuMonitorSendFileHandle(mon, fdpass->name, fdpass->fd) < 0) return -1; --=20 2.49.0