From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E76DC61CE8 for ; Fri, 13 Jun 2025 00:57:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 93BCA6B009A; Thu, 12 Jun 2025 20:57:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8EC206B009B; Thu, 12 Jun 2025 20:57:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7B5D66B009C; Thu, 12 Jun 2025 20:57:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 5C6216B009A for ; Thu, 12 Jun 2025 20:57:16 -0400 (EDT) Received: from smtpin07.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 0C4E5BA7C6 for ; Fri, 13 Jun 2025 00:57:16 +0000 (UTC) X-FDA: 83548563672.07.DC2461B Received: from NAM10-BN7-obe.outbound.protection.outlook.com (mail-bn7nam10on2065.outbound.protection.outlook.com [40.107.92.65]) by imf04.hostedemail.com (Postfix) with ESMTP id 26B2140002 for ; Fri, 13 Jun 2025 00:57:12 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=pqReFbiJ; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf04.hostedemail.com: domain of Michael.Roth@amd.com designates 40.107.92.65 as permitted sender) smtp.mailfrom=Michael.Roth@amd.com; dmarc=pass (policy=quarantine) header.from=amd.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1749776233; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=XAZzbD9j3n8HWY3PrqVrnzusGcum50ZsLzNdeyLkIGI=; b=6TLayJVqD7w3OnMb1GJIhvXkGzdhqgDEOsoHyTnj+7y82zyqWKvUqVUhL0wHVti/XG+qG/ NsBc+r+0hP/mFBoLypl/PrNzhwUpz1ZA1k9xXNKOK66K3b4Ql5eWmLsIvCrOZjYUUg0nr8 0F8+17P1bcTadVJW9UmGua+V6NX1qnI= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1749776233; a=rsa-sha256; cv=pass; b=7lH2FF1c00e3osSI9LGWwrxq73BHHvp/gJ0bvNCWcDwUJg3fb+Oa04vcVVU6ZsbKWlIxWK 0PnBMeTiEF1X8X4g0dj0nuRI1ZLIBhNvDRJ4ATHLmRGRCtEu3qE8koIsrVj/I30vrKANFT GdVyqFvY+27Zg6Nze4Phd1urJ8IkYiI= ARC-Authentication-Results: i=2; imf04.hostedemail.com; dkim=pass header.d=amd.com header.s=selector1 header.b=pqReFbiJ; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf04.hostedemail.com: domain of Michael.Roth@amd.com designates 40.107.92.65 as permitted sender) smtp.mailfrom=Michael.Roth@amd.com; dmarc=pass (policy=quarantine) header.from=amd.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lR/UVPs3tF78Z5X1b57pqFroLql74xpSHIpP8dtTRZ+72HmKfQNu1LFyc86EnSIhqDdC69ASDw2i5FRKUpY/i3/5+NjyNBkbuYPDbBrHgJu7ES6F+X7UIhpnJU7XyaJwBdGzVC/ATm7gJ9oPhE/OhefKOJAHLy462LO2Cu5bq28R1XQm2qKKg6SQTLhy/ofB3qSsudwfa1qdD51NMS/wpQr06IpwbtdNwlY0Qf479bU8WLVpNICCkUL8kL+cfrb3KQXp0eaN4n9IGxIIl825RcQuejTX5nUEmkKl+5A8Y0LCeC2Y6jXsAA+8RdtFhwq2tAwimBSLhb8P//MiZUcibw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XAZzbD9j3n8HWY3PrqVrnzusGcum50ZsLzNdeyLkIGI=; b=Ju9H2a11j7p13DXVpt/sh1zGIsDFPj8iZTDYRWct6Q/PN6ETcAyjnBJacAjWM9lVFg8weFEWFrl0UR60CcbHljKs7zv1MpH+4z2e4MebEDmPnPgpuVEKUuNui3gNTb/Unk7PUMLxE5q+8ksEd2tcm+bRg0NPGZ1WbXLJZ7PUgp/S222VhyEylEZ0imglTvC7HpZZoz32BOSlqXimV1nEizGcREtmh5/i2V09uwZY9QsSbDnEFUqmE/6Ub69+pMRIxPFM38IKUkcpaH75GSKjRWeBWt9aFHRLvWKI9xTqn/ctgLgDVlu/7RvuH61kQ2fGMHrHvhP/j52FyXKtR7ayrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 165.204.84.17) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=amd.com; dmarc=pass (p=quarantine sp=quarantine pct=100) action=none header.from=amd.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XAZzbD9j3n8HWY3PrqVrnzusGcum50ZsLzNdeyLkIGI=; b=pqReFbiJQc2zJLI/P/3Q6i1bFFjBB3DMA18NqzMNKJHRGQcLUfrsUJc1ome9qjPvciatyJ9cmss1zROLgpnvkrqd3UiHthDRPultfECJD9w9tc7wXlGawhDQUR4FbkHJg+H+tiiXTe5D8ubffMZswbvwoE80HfSm+FiZnzFRNWM= Received: from SJ0PR05CA0106.namprd05.prod.outlook.com (2603:10b6:a03:334::21) by DS4PR12MB9660.namprd12.prod.outlook.com (2603:10b6:8:281::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.38; Fri, 13 Jun 2025 00:57:08 +0000 Received: from SJ5PEPF000001F6.namprd05.prod.outlook.com (2603:10b6:a03:334:cafe::de) by SJ0PR05CA0106.outlook.office365.com (2603:10b6:a03:334::21) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8835.25 via Frontend Transport; Fri, 13 Jun 2025 00:57:08 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 165.204.84.17) smtp.mailfrom=amd.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=amd.com; Received-SPF: Pass (protection.outlook.com: domain of amd.com designates 165.204.84.17 as permitted sender) receiver=protection.outlook.com; client-ip=165.204.84.17; helo=SATLEXMB04.amd.com; pr=C Received: from SATLEXMB04.amd.com (165.204.84.17) by SJ5PEPF000001F6.mail.protection.outlook.com (10.167.242.74) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.8835.15 via Frontend Transport; Fri, 13 Jun 2025 00:57:08 +0000 Received: from localhost (10.180.168.240) by SATLEXMB04.amd.com (10.181.40.145) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.39; Thu, 12 Jun 2025 19:57:05 -0500 From: Michael Roth To: CC: , , , , , , , , , , , , , , , , Subject: [PATCH RFC v1 5/5] KVM: SEV: Make SNP_LAUNCH_UPDATE ignore 'uaddr' if guest_memfd is shareable Date: Thu, 12 Jun 2025 19:54:00 -0500 Message-ID: <20250613005400.3694904-6-michael.roth@amd.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20250613005400.3694904-1-michael.roth@amd.com> References: <20250613005400.3694904-1-michael.roth@amd.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.180.168.240] X-ClientProxiedBy: SATLEXMB04.amd.com (10.181.40.145) To SATLEXMB04.amd.com (10.181.40.145) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ5PEPF000001F6:EE_|DS4PR12MB9660:EE_ X-MS-Office365-Filtering-Correlation-Id: 009874e5-a210-4d96-c938-08ddaa1538f4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|82310400026|36860700013|7416014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?bLA63iJkwiYyrnc8nk8CjZG26aptUYvvkcfj/dqAiTudZSGMSTZU5ieXhKA3?= =?us-ascii?Q?BLFTRKZZC1RZGtCta9BZRwpgVftBwBxCKMd6nO5Dwv2x698KNEbjbMlZk6WW?= =?us-ascii?Q?197uBlrN7bakTr8YPD+QdVAJxUwkErj1SRyFwGRVPdg8TJtFt17K14FyxqNh?= =?us-ascii?Q?x2qzCqLwQBGBMb066Ajz9OG9jrqjgnJk5/pL/mQvWUSPIeWLiU/xGf6vvD1/?= =?us-ascii?Q?KfMZEIz1ISI+TWUdizrFCFnB02fKvlvQWAI0RKcP+Ti/472aVhIi+iRa+xiy?= =?us-ascii?Q?CDPE/70w+BzDlX1ItlDvHk6aG017wzN3Jh2d2gXt9NHBmV9tAQ6Lcjgy4AkO?= =?us-ascii?Q?A+N65M+dxDW1UCT88+Qt/waIhNSqsB776v1vcYJfo/43KzwDD/CFnxxLfnpX?= =?us-ascii?Q?KLsfWt7LHb2pwZGmiGApqCslHdJvtHX2kQylMs0ZTJyXwYtZjB4x0FCLbyIN?= =?us-ascii?Q?nKxZZjeaL83wXRHB6C+DXIBVG/paLpsWcMXjcqgpEmqr8UD0ORITWnMQMJEg?= =?us-ascii?Q?iszY2D6F5eCi2x1S0FTF1Bicw/ZYMhO/ceNPsPl4AXsFXFJepOCd+xlDGVbD?= =?us-ascii?Q?N7nI+cNYs5NET5tPGq0d9Wk9Y8mNeYCr/DobyHNnz+pfmTpQ6DdB141aZp9o?= =?us-ascii?Q?9mX9MT91C/RwiPPDv2DyebxwLTTG+0keneMTXUTcN+Eqbj8vsj/7OvWLnz88?= =?us-ascii?Q?VNgY9g6NVtT6IIVRj2aB/5veTNlQ3I/+V7KjzUR7TFtB/BKsosWlZe6lTzzy?= =?us-ascii?Q?OKjxiCf8zc6le0/BFy7I3BIkOw/6kCUN/eUWvsLU13dUi8yeCwWC+6+nuhAx?= =?us-ascii?Q?8R/BIgTdgr+lXbrBQyTtiPIwbg6yfXfvgVZNEQ58hhBMzdTedHA6hDhZEZQt?= =?us-ascii?Q?F/3bwwkNWg7Zwo0CGizOlsN4Mr4UP1g455tC+wdiJvAUnGvOmp4eDMee0CQN?= =?us-ascii?Q?o5RCjeBAcGd5rThjpSa/Gd2eqICQBS27gyYLx5aK7esvgQEvSiGWkEqHhS6M?= =?us-ascii?Q?B4CZSwlMGi+OHUhmI6iNmd6f1ie0m5gTzrmveuuSEvA9Piqf3ESa5s9U5tjO?= =?us-ascii?Q?x9zKd9pWWe8+lSeQdhO7hB7/3pMAsAWidgQpLsPQliJXXlz93V7k+rzC1Gg9?= =?us-ascii?Q?niq+CPSHdKHAtV7xilbu0W6+f/X5lcOji2uMF4sTiLku/1+jC5zGTORdn68X?= =?us-ascii?Q?eysQprnU4P5JHalzWysizooikYKu1PFzK75NeuE36Hbh5JNdm/eYhvLzZ0bh?= =?us-ascii?Q?8wej5ISroypQGUeEKNv2fTxFiG8z8c7WlGQ+tmZjLpbR5L+sXvCXmc/1jCom?= =?us-ascii?Q?LdfgCNVGemPWRx73XJKqqSi3EdbLf16syaxKYC4PM9QQOMwGHyE0KwVQ/joK?= =?us-ascii?Q?KFWAQgijER09ZqXJbDyABzHT1/XqVvUWAHsIQL48C2vIsP7h6Ys+kVTNFu3S?= =?us-ascii?Q?paWO3lNmjSFmrbp0ktp7oxIoiwZkko2cLNqXhF9qx1A/+5SvgCmzKpTT+C61?= =?us-ascii?Q?LKDD8T7SrJqOC7k9T49v0opQAZXj/7MXh5HI?= X-Forefront-Antispam-Report: CIP:165.204.84.17;CTRY:US;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:SATLEXMB04.amd.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(376014)(82310400026)(36860700013)(7416014)(1800799024);DIR:OUT;SFP:1101; X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 00:57:08.1728 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 009874e5-a210-4d96-c938-08ddaa1538f4 X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.17];Helo=[SATLEXMB04.amd.com] X-MS-Exchange-CrossTenant-AuthSource: SJ5PEPF000001F6.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9660 X-Rspam-User: X-Rspamd-Queue-Id: 26B2140002 X-Stat-Signature: 4hijdg44se7dom1uqr37e6dcxtx75hqw X-Rspamd-Server: rspam04 X-HE-Tag: 1749776232-216991 X-HE-Meta: U2FsdGVkX19Jw7Mwb0S6kQKr+GrGc9tbJRQ6Ynum2am+cPAPPnawXY0epEuca+6Bt848m0AZgSowrjm7j/cM5dMK3I/htDHBY0DE3bQouOToGL1ud63WtepVyo/IYajvgxLisMrQ+/rrmYxSaKxxGWLpjUVpOPievfR9ok/NmSArIEbVMAIMjy1vx88NHsT8uj3+H4j4ZbT+Ar0qJSOLYcIoeq01xitIRtI6tlsNZaT899G/4Ky0rTRanarw3A42ZoA1oVqO79hogP0vsyzpvw+PZ9Kvy4H4uQNUs5ZH0xXSh+dm+LqVywxkq8cxUEP36QY0RuU/q/kh+vl/DJ+NV+cOlNHcBFaWwZP49oxjw74S6BeZu6aKRCODMtP0PvjPRTsg0EuXx1OImN6Wk+mgbnwNjNzYG5724Fmu6cvz2qMLfXwBUhiPdVxkQC5qbU6VIulqsDQ+xmTVVPdiprPMda4Yg6hRtLK/JHFfQSrsP6eVCIz2Z1MvKiDc28kxAIDuiCK8oyVNy+HJpp7zi0FltpWeJWUwJeHYNobIpuioYTq8cFWl4T4dzb3emJnynKtScLXe5r9Y4P3W7R7DxCDR9rq+dRCKlu027EneFcMcyrpjhHzGiwNxFv1DjH+kWXRlo070gwpClEF9MLFWialaxjti2/m/eZogILJv/WcW8XBNdCJNINujevE2FxOE1Cy2iIHnMq6OOLnOi9m4K6OF01355fgT2xnAAHn3uKUgKRGEiKynX4m2rN46v58nMbBtjn7jDRKCIkaE1wBJDyLZ5BvrX1yTbI8jnUBdIqiAD77KvUJegrLPN1I/1PPZM0+EzjdBmMIYfghBVNuzClMvVXeFrHdvnNTPWwhnUeTwL2Lqqc3Pufd6gPWUS/uGiQPn8V3F7BEkAS5s3smLjli/kA9qgdxVxz4rKCiIjmdf9OGM/K2U8IOplDe810bWYWyOskuVDKAqDrGDNsvDhXN dMMimmCy KN6MuF2HS/kxW3dOXUMnZuwVToy3R0l3AF7OfI17npSEkKEj3JdbLtDqPeLl5hCwH5RBtGGu5VyqHHemfJlzoRtE74NX8Uv77lQqvslSYLhvoHOJIPrfMbZpeQ/Znj+4tPEYxApLcD2h1ObfJmN6UBtTsjngxXMSsbB7znxgKfpRm6UdCHuuwKP51Caq6P/0U3PDMCwmqhkyOhaQ8X8mlCjESVHYpDJ9vg3fMkV061+H0jdbYDwG/pCqsJa6hmWVjmv4iTmL8wtOxIYiLvjsNUgFjSe3jQY+KEjLNPSs0C3r2GFrOxpOQnwL1i02NEWIrasFuGvUuutXyqY7UZsHOrP1Qzslw8W652MV3gTl2EmYk4iBNfr0gSqCvtGwu7v+FmBNDmP2j6d6QQO2wzuwNcVwxwwCt5WsEa9Y9B20B8s4hdqH+0CO5yBRveBFm9m2Yw5puVGyalVYSutC3bR/o9hNqBHwR8fIIxROJoBIVZONpoGB4tQsRNYoBkzAbonJc9YoVNcko/blo1k6zUZrOJRcV1lyWWoC6aTNlXPwqddvhC4yWNX8OH4a0aMITjIlAfvrJVhVr9uqZwtdU6DajPvQK0SDt70foJXbXkVH532fSQjZIOLSrzbCPrnJod49//+CYqKlTdb5A7p7uxVuMfmplvI/M9PRp2IeJFqsAQ0nqsVbZkQvcCCnvmjKAOOUBW5nI35i4f7Qg/4CO2hw2P/0reoBNVz+ImgP3I3RgP59VJtU= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: There is no need to copy in the data for initial guest memory payload in the case of shareable gmem instances since userspace can just initialize the contents directly. Ignore the 'uaddr' parameter in cases where KVM_MEMSLOT_SUPPORTS_SHARED is set for the GPA's memslot. Also incorporate similar expectations into kvm_gmem_populate() to avoid dealing with potential issues where guest_memfd's shared fault handler might trigger when issuing callbacks to populate pages and not know how to deal the index being marked as private. Signed-off-by: Michael Roth --- .../virt/kvm/x86/amd-memory-encryption.rst | 4 +++- arch/x86/kvm/svm/sev.c | 14 ++++++++++---- virt/kvm/guest_memfd.c | 8 ++++++++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Documentation/virt/kvm/x86/amd-memory-encryption.rst b/Documentation/virt/kvm/x86/amd-memory-encryption.rst index 1ddb6a86ce7f..399b331a523f 100644 --- a/Documentation/virt/kvm/x86/amd-memory-encryption.rst +++ b/Documentation/virt/kvm/x86/amd-memory-encryption.rst @@ -513,7 +513,9 @@ calling this command until those fields indicate the entire range has been processed, e.g. ``len`` is 0, ``gfn_start`` is equal to the last GFN in the range plus 1, and ``uaddr`` is the last byte of the userspace-provided source buffer address plus 1. In the case where ``type`` is KVM_SEV_SNP_PAGE_TYPE_ZERO, -``uaddr`` will be ignored completely. +``uaddr`` will be ignored completely. If the guest_memfd instance backing the +GFN range has the GUEST_MEMFD_FLAG_SUPPORT_SHARED flag set, then ``uaddr`` will +be ignored for all KVM_SEV_SNP_PAGE_TYPE_*'s. Parameters (in): struct kvm_sev_snp_launch_update diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c index ed85634eb2bd..6e4473e8db6d 100644 --- a/arch/x86/kvm/svm/sev.c +++ b/arch/x86/kvm/svm/sev.c @@ -2174,6 +2174,7 @@ struct sev_gmem_populate_args { __u8 type; int sev_fd; int fw_error; + bool gmem_supports_shared; }; static int sev_gmem_post_populate(struct kvm *kvm, gfn_t gfn_start, kvm_pfn_t pfn, @@ -2185,7 +2186,8 @@ static int sev_gmem_post_populate(struct kvm *kvm, gfn_t gfn_start, kvm_pfn_t pf int npages = (1 << order); gfn_t gfn; - if (WARN_ON_ONCE(sev_populate_args->type != KVM_SEV_SNP_PAGE_TYPE_ZERO && !src)) + if (WARN_ON_ONCE(sev_populate_args->type != KVM_SEV_SNP_PAGE_TYPE_ZERO && + !sev_populate_args->gmem_supports_shared && !src)) return -EINVAL; for (gfn = gfn_start, i = 0; gfn < gfn_start + npages; gfn++, i++) { @@ -2275,7 +2277,7 @@ static int snp_launch_update(struct kvm *kvm, struct kvm_sev_cmd *argp) struct kvm_sev_snp_launch_update params; struct kvm_memory_slot *memslot; long npages, count; - void __user *src; + void __user *src = NULL; int ret = 0; if (!sev_snp_guest(kvm) || !sev->snp_context) @@ -2326,7 +2328,10 @@ static int snp_launch_update(struct kvm *kvm, struct kvm_sev_cmd *argp) sev_populate_args.sev_fd = argp->sev_fd; sev_populate_args.type = params.type; - src = params.type == KVM_SEV_SNP_PAGE_TYPE_ZERO ? NULL : u64_to_user_ptr(params.uaddr); + sev_populate_args.gmem_supports_shared = kvm_gmem_memslot_supports_shared(memslot); + + if (!kvm_gmem_memslot_supports_shared(memslot)) + src = params.type == KVM_SEV_SNP_PAGE_TYPE_ZERO ? NULL : u64_to_user_ptr(params.uaddr); count = kvm_gmem_populate(kvm, params.gfn_start, src, npages, sev_gmem_post_populate, &sev_populate_args); @@ -2338,7 +2343,8 @@ static int snp_launch_update(struct kvm *kvm, struct kvm_sev_cmd *argp) } else { params.gfn_start += count; params.len -= count * PAGE_SIZE; - if (params.type != KVM_SEV_SNP_PAGE_TYPE_ZERO) + if (!kvm_gmem_memslot_supports_shared(memslot) && + params.type != KVM_SEV_SNP_PAGE_TYPE_ZERO) params.uaddr += count * PAGE_SIZE; ret = 0; diff --git a/virt/kvm/guest_memfd.c b/virt/kvm/guest_memfd.c index a912b00776f1..309455e44e96 100644 --- a/virt/kvm/guest_memfd.c +++ b/virt/kvm/guest_memfd.c @@ -1462,6 +1462,14 @@ long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn, void __user *src, long } } else { max_order = 0; + + /* + * If shared memory is available, it is expected that + * userspace will populate memory contents directly and + * not provide an intermediate buffer to copy from. + */ + if (src) + return -EINVAL; } p = src ? src + i * PAGE_SIZE : NULL; -- 2.25.1