From nobody Fri Dec 19 18:46:19 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=randomman.co.uk ARC-Seal: i=1; a=rsa-sha256; t=1751558679; cv=none; d=zohomail.com; s=zohoarc; b=Ut7egPzE2IOjyGIB5fXWs5fyBRTrpsmSQYZR/wOKqUPJBdvP/+8pL9XQ0rG5vcGu9BfQeazAvQoaoG8LVF1mSwYXuXZ7uvIJbPGguiDFmoti5t40eD/qQvW7I833G43u3pnwhgjpjSRbEkRCVfaRpAcOP8kyAy9bHkmRSffSpHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751558679; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=k2k/+UR0VLBVSDy5z34871THQwzaqFyfo60bqdKNHCM=; b=mBKRIYILUMlaTP9uYJbIGsx35PILkMIMIZGhEOTXTHaSVOl62o7Rjwo5mz1KuYBAtvPLXbz+M2VmopjdbD4jzomqH7C7fS3thG0XSVioxZQZuXzO6WGBo3D2a5UadnI1VcgVLbQmYvLZ+t+SPhsvvBEi5M8Y4QTpUKFdaKvya98= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751558678949468.77646934366; Thu, 3 Jul 2025 09:04:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXMOo-0003QL-1J; Thu, 03 Jul 2025 12:02:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXMOm-0003Q9-0V for qemu-devel@nongnu.org; Thu, 03 Jul 2025 12:02:56 -0400 Received: from smtp-out-60.livemail.co.uk ([213.171.216.60] helo=dkim.livemail.co.uk) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXMOk-0004FG-4q for qemu-devel@nongnu.org; Thu, 03 Jul 2025 12:02:55 -0400 Received: from smtp.livemail.co.uk (unknown [10.44.132.82]) by dkim.livemail.co.uk (Postfix) with ESMTPS id CCA0240140; Thu, 3 Jul 2025 17:02:51 +0100 (BST) Received: from localhost.localdomain (unknown [145.40.191.116]) (Authenticated sender: roy.hopkins@randomman.co.uk) by smtp.livemail.co.uk (Postfix) with ESMTPSA id 5BF1BC0291; Thu, 3 Jul 2025 17:02:47 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=randomman.co.uk; s=livemail2; t=1751558571; bh=kf2NzQpGqsvElw9O300yk+DDc2EBxP/5S82yiDV/Bvk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=V5f7PrTxV1kYWO0c3H8ABnx0hilWccdKfqIJLFyJp8CU7KBhX81VvRZRFYaA5bPXx WcgpEqcTvzB5CoFvPMjaBNt0/l8lhLkDmCaiVOml9yH8HruzWjWiJYG+vKTe4p9yeN yPH6kA4wtPwooglDQaf1uT+cciAe2eAkmDDgivwg= From: Roy Hopkins To: qemu-devel@nongnu.org Cc: Roy Hopkins , Paolo Bonzini , "Daniel P . Berrange" , Stefano Garzarella , Marcelo Tosatti , "Michael S . Tsirkin" , Cornelia Huck , Marcel Apfelbaum , Sergio Lopez , Eduardo Habkost , Alistair Francis , Peter Xu , David Hildenbrand , Igor Mammedov , Tom Lendacky , Michael Roth , Ani Sinha , Gerd Hoffman , Pankaj Gupta , Joerg Roedel Subject: [PATCH v9 12/16] backends/confidential-guest-support: Add set_guest_policy() function Date: Thu, 3 Jul 2025 17:02:20 +0100 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=213.171.216.60; envelope-from=roy.hopkins@randomman.co.uk; helo=dkim.livemail.co.uk X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.237, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @randomman.co.uk) X-ZM-MESSAGEID: 1751558681569116600 For confidential guests a policy can be provided that defines the security level, debug status, expected launch measurement and other parameters that define the configuration of the confidential platform. This commit adds a new function named set_guest_policy() that can be implemented by each confidential platform, such as AMD SEV to set the policy. This will allow configuration of the policy from a multi-platform resource such as an IGVM file without the IGVM processor requiring specific implementation details for each platform. Signed-off-by: Roy Hopkins Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Stefano Garzarella Reviewed-by: Ani Sinha Acked-by: Michael S. Tsirkin Acked-by: Gerd Hoffman --- backends/confidential-guest-support.c | 12 ++++++++++++ include/system/confidential-guest-support.h | 21 +++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/backends/confidential-guest-support.c b/backends/confidential-= guest-support.c index c5bef1fbfa..156dd15e66 100644 --- a/backends/confidential-guest-support.c +++ b/backends/confidential-guest-support.c @@ -38,6 +38,17 @@ static int set_guest_state(hwaddr gpa, uint8_t *ptr, uin= t64_t len, return -1; } =20 +static int set_guest_policy(ConfidentialGuestPolicyType policy_type, + uint64_t policy, + void *policy_data1, uint32_t policy_data1_size, + void *policy_data2, uint32_t policy_data2_size, + Error **errp) +{ + error_setg(errp, + "Setting confidential guest policy is not supported for thi= s platform"); + return -1; +} + static int get_mem_map_entry(int index, ConfidentialGuestMemoryMapEntry *e= ntry, Error **errp) { @@ -53,6 +64,7 @@ static void confidential_guest_support_class_init(ObjectC= lass *oc, ConfidentialGuestSupportClass *cgsc =3D CONFIDENTIAL_GUEST_SUPPORT_CLA= SS(oc); cgsc->check_support =3D check_support; cgsc->set_guest_state =3D set_guest_state; + cgsc->set_guest_policy =3D set_guest_policy; cgsc->get_mem_map_entry =3D get_mem_map_entry; } =20 diff --git a/include/system/confidential-guest-support.h b/include/system/c= onfidential-guest-support.h index 79ecd21f42..0cc8b26e64 100644 --- a/include/system/confidential-guest-support.h +++ b/include/system/confidential-guest-support.h @@ -57,6 +57,10 @@ typedef enum ConfidentialGuestPageType { CGS_PAGE_TYPE_REQUIRED_MEMORY, } ConfidentialGuestPageType; =20 +typedef enum ConfidentialGuestPolicyType { + GUEST_POLICY_SEV, +} ConfidentialGuestPolicyType; + struct ConfidentialGuestSupport { Object parent; =20 @@ -123,6 +127,23 @@ typedef struct ConfidentialGuestSupportClass { ConfidentialGuestPageType memory_type, uint16_t cpu_index, Error **errp); =20 + /* + * Set the guest policy. The policy can be used to configure the + * confidential platform, such as if debug is enabled or not and can c= ontain + * information about expected launch measurements, signed verification= of + * guest configuration and other platform data. + * + * The format of the policy data is specific to each platform. For exa= mple, + * SEV-SNP uses a policy bitfield in the 'policy' argument and provide= s an + * ID block and ID authentication in the 'policy_data' parameters. The= type + * of policy data is identified by the 'policy_type' argument. + */ + int (*set_guest_policy)(ConfidentialGuestPolicyType policy_type, + uint64_t policy, + void *policy_data1, uint32_t policy_data1_size, + void *policy_data2, uint32_t policy_data2_size, + Error **errp); + /* * Iterate the system memory map, getting the entry with the given ind= ex * that can be populated into guest memory. --=20 2.43.0