From nobody Thu May 16 02:51:10 2024 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) 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 1705677994223339.3414776598221; Fri, 19 Jan 2024 07:26:34 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E196C1A1E; Fri, 19 Jan 2024 10:26:32 -0500 (EST) Received: from lists.libvirt.org.85.43.8.in-addr.arpa (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 6D50A1A17; Fri, 19 Jan 2024 10:25:21 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 660631A16; Fri, 19 Jan 2024 10:25:18 -0500 (EST) 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 624BD1A17 for ; Fri, 19 Jan 2024 10:25:17 -0500 (EST) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-347-aorKr6GUNuinksol5mq6kA-1; Fri, 19 Jan 2024 10:25:13 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id F0E5883B86F for ; Fri, 19 Jan 2024 15:25:12 +0000 (UTC) Received: from maggie.brq.redhat.com (unknown [10.43.3.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9C55D51D5 for ; Fri, 19 Jan 2024 15:25:12 +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=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 X-MC-Unique: aorKr6GUNuinksol5mq6kA-1 From: Michal Privoznik To: devel@lists.libvirt.org Subject: [PATCH] domain_validate: Check for domain address conflicts fully Date: Fri, 19 Jan 2024 16:25:11 +0100 Message-ID: <5832a3a23a7d8ccce4ce320893fa40080af6399e.1705677911.git.mprivozn@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Message-ID-Hash: OLFRKKNI7JRPTCKJ5OY6QWPJACKGAYNY X-Message-ID-Hash: OLFRKKNI7JRPTCKJ5OY6QWPJACKGAYNY X-MailFrom: mprivozn@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: Content-Type: text/plain; charset="utf-8"; x-default="true" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1705677996146100005 Current implementation of virDomainMemoryDefCheckConflict() does only a one way comparison, i.e. if there's a memory device within def->mems[] which address falls in [mem->address, mem->address + mem->size] range (mem is basically an iterator within def->mems[]). And for static XML this works just fine. Problem is with hot/cold plugging of a memory device. Then mem points to freshly parsed memory device and these half checks are insufficient. Not only we must check whether an existing memory device doesn't clash with freshly parsed memory device, but also whether freshly parsed memory device does not fall into range of already existing memory device. Resolves: https://issues.redhat.com/browse/RHEL-4452 Signed-off-by: Michal Privoznik --- src/conf/domain_validate.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index d485ec4fb1..14148a18d3 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2264,6 +2264,7 @@ virDomainMemoryDefCheckConflict(const virDomainMemory= Def *mem, for (i =3D 0; i < def->nmems; i++) { const virDomainMemoryDef *other =3D def->mems[i]; unsigned long long otherStart =3D 0; + unsigned long long otherEnd =3D 0; =20 if (other =3D=3D mem) continue; @@ -2315,7 +2316,10 @@ virDomainMemoryDefCheckConflict(const virDomainMemor= yDef *mem, if (thisStart =3D=3D 0 || otherStart =3D=3D 0) continue; =20 - if (thisStart <=3D otherStart && thisEnd > otherStart) { + otherEnd =3D otherStart + other->size; + + if ((thisStart <=3D otherStart && thisEnd > otherStart) || + (otherStart <=3D thisStart && otherEnd > thisStart)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("memory device address [0x%1$llx:0x%2$llx] ov= erlaps with other memory device (0x%3$llx)"), thisStart, thisEnd, otherStart); --=20 2.43.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org