From nobody Thu Sep 19 00:59:05 2024 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=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1721835564467134.82541207278268; Wed, 24 Jul 2024 08:39:24 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 5FCA8DCE; Wed, 24 Jul 2024 11:39:23 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id C2236122B; Wed, 24 Jul 2024 11:35:12 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 21FDA108A; Wed, 24 Jul 2024 11:35:03 -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 1949711DD for ; Wed, 24 Jul 2024 11:34:49 -0400 (EDT) Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-67-Aa1LFyikNCykBGwgUN47Dw-1; Wed, 24 Jul 2024 11:34:46 -0400 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (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-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 127191955D4F for ; Wed, 24 Jul 2024 15:34:46 +0000 (UTC) Received: from speedmetal.lan (unknown [10.45.242.23]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 404601955D4A for ; Wed, 24 Jul 2024 15:34:45 +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=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,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=1721835288; 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=eGPY1ADUN/gT4w96s3J0ncrQdKANBbIbnM8snU5cORc=; b=BEXFp49AcEBXPFypX2WNufJhLvFrkmEgsp/XkdaiSnoQodtZ4nk+2tiy9NE0GHcyU66Vmy tvCU6MJf2xts0lfkxPwKKvJy3tB751/LJiOkr6B2ZuS9UGaCqkqF+dRjNY08iDYTcJLON9 M0XkzMZC3OP9kkjl+zV/+VPdKPZbuHQ= X-MC-Unique: Aa1LFyikNCykBGwgUN47Dw-1 From: Peter Krempa To: devel@lists.libvirt.org Subject: [PATCH 8/8] qemu: migration: Don't remember seclabel for images shared from current host Date: Wed, 24 Jul 2024 17:34:32 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: PSVNYFPEVKCCBY2XE3EPSZNPDMBS3LCG X-Message-ID-Hash: PSVNYFPEVKCCBY2XE3EPSZNPDMBS3LCG 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: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1721835565276116600 Content-Type: text/plain; charset="utf-8" In case when the user exports images from current host and there is an incoming migration from a remote host, security label remembering would be possible but would attempt to remember the label allowing access to the image as the image is already used by a VM on remote host. To prevent remembering the wrong label, we'll skip the remembering of the label for any shared resource, so that the code behaves identically regardless of how the image is accessed. Signed-off-by: Peter Krempa --- src/qemu/qemu_migration.c | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 2c462fd5f5..ec8b77bab9 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -533,6 +533,53 @@ qemuMigrationDstPrepareStorage(virDomainObj *vm, } +static void +qemuMigrationDstPrepareDiskSeclabels(virDomainObj *vm, + size_t nmigrate_disks, + const char **migrate_disks, + unsigned int flags) +{ + qemuDomainObjPrivate *priv =3D vm->privateData; + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(priv->dr= iver); + size_t i; + + /* In case when storage is exported from this host, security label + * remembering would behave differently compared to the host which mou= nts + * the exported filesystem. Specifically for incoming migration rememb= ering + * a seclabel would remember a seclabel already allowing access to the= image, + * which is not desired. Thus we skip remembering of seclabels for ima= ges + * which are local to this host but accessed in a shared way from anot= her + * host. + */ + if (!cfg->sharedFilesystems || + cfg->sharedFilesystems[0] =3D=3D NULL) + return; + + for (i =3D 0; i < vm->def->ndisks; i++) { + virDomainDiskDef *disk =3D vm->def->disks[i]; + + /* We care only about existing local storage */ + if (virStorageSourceIsEmpty(disk->src) || + !virStorageSourceIsLocalStorage(disk->src)) + continue; + + /* Only paths which are on local filesystem but shared elsewhere a= re + * relevant */ + if (!virFileIsSharedFSOverride(disk->src->path, cfg->sharedFilesys= tems)) + continue; + + /* Any storage that was migrated via NBD is technically fully loca= l so + * we want seclabels remembered */ + if (flags & (VIR_MIGRATE_NON_SHARED_DISK | VIR_MIGRATE_NON_SHARED_= INC)) { + if (qemuMigrationAnyCopyDisk(disk, nmigrate_disks, migrate_dis= ks)) + continue; + } + + disk->src->seclabelSkipRemeber =3D true; + } +} + + /** * qemuMigrationDstStartNBDServer: * @driver: qemu driver @@ -3154,6 +3201,8 @@ qemuMigrationDstPrepareActive(virQEMUDriver *driver, dataFD[0]))) goto error; + qemuMigrationDstPrepareDiskSeclabels(vm, nmigrate_disks, migrate_disks= , flags); + if (qemuProcessPrepareDomain(driver, vm, startFlags) < 0) goto error; --=20 2.45.2