Received: by 2002:ab2:6203:0:b0:1f5:f2ab:c469 with SMTP id o3csp2624093lqt; Mon, 22 Apr 2024 17:12:05 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCW4emSakhXJk5GAlcSMLIRTfM6+vQhJK62yDY8H6r8sxjLV8/hNZ6JZ3jcuKsNpyFe7c9Eae9D7FrPGMZh18Z5Tc6nVhGYEmRpVAV0uew== X-Google-Smtp-Source: AGHT+IH9Tez7Ph0GkSS6YNuS+srO1hR65K8IJ8DvGvj/1orFA/a6LZVzssda4tjSrIhIlXdvFaCl X-Received: by 2002:a17:90a:740e:b0:2a4:752f:b7b7 with SMTP id a14-20020a17090a740e00b002a4752fb7b7mr10421094pjg.26.1713831124909; Mon, 22 Apr 2024 17:12:04 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713831124; cv=pass; d=google.com; s=arc-20160816; b=CN2mL99nZUHWd5oLn0Dknj1WLhXBfTYNMMGAx+cVj+wg6EE4zhZrTl/NfgcxFTfwAg WoljubTaTBjxlC4/rSAEmEHEQEoJbhqUZ0mPn2O+B0GBhZQFqQNrkVybsDuxuMBRauy9 mDVXcqnpK1tvatgO1zeQqj7b6KHBTe6fajgtcfE+6vx84Z+PdpxuIxjAB1YkPLZk4dIa B90AiktpYU3tEo/l5SNTc2fvPvu8VYqVw9eEpef6lCMXOzM5vY9NotMcKAAR2mqcTkX9 hOD0LQlHzncYzg8c5ooJfUunfuSzUD+N0h8lp8y8qUX2xsGq/LNM97HrB9QWy8iIMZhc VGVA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=fxKaCnhN1C0WoQi444K6lhA4ojK7fKRAUP1+ihC7GNY=; fh=GUrRWoeR1U9sFkVrGb0bjkRjxR8O3pa0ilewqsVtc/M=; b=O01iw/If9UNSjYxMuYio5XLqu+Moz4nl/e0XfAt3994SzLgGC/gVqExUgN7YYpUhHC n7HJmbnqyU9ZuUOD7GRGuMWEs3/+QgJjm0gEtbbDgu9UZdyzq00bFRFeovrSlE/psigM lgv9i+5OG3YjP7TnVURINfaoDQcIQ0OCMZQmNcvVctbvlI2QwLp00O9aTDin8VabfQCo vG0fmaHW2DdOrJMvSpLRdLtoxeT4QwwYXsQ9IIFIPATORb5ns0kmOoiBhCOafkTNn5Xv SnUxUt2RKXYID8r6oqUrtmQM6luvjJ2bd5yvMS+7WnPPKjLT9aRF9sy/BRjWkpXAsiXk Mr8g==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=CtdaYe4T; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-154285-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-154285-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id b17-20020a17090a991100b002a46f090421si8547383pjp.51.2024.04.22.17.12.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 17:12:04 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-154285-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=CtdaYe4T; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-154285-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-154285-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 9E361287BFD for ; Tue, 23 Apr 2024 00:09:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 284EA16F0EC; Mon, 22 Apr 2024 23:57:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CtdaYe4T" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C82916F0DB; Mon, 22 Apr 2024 23:57:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713830224; cv=none; b=VZ7yestXg5PfMtCnKRBSpTeT6L2vLFxv//EvwzE36dVxzSQSqkCP4sg7JaM3/aUM732Syiuf9YOjYDugJqLpQVeuwO6WNkoR5bcSwLChI1dC+PW7Xz9rwBFWnWc87lSnddxu9PafyC5r0C5+x48v+yXV3VOGhZ6jq5h4ZboFHek= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713830224; c=relaxed/simple; bh=Br00HspDo/PUXkA3cTfOzYeIV+YkhRAeB56gfT5Q6mM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=a2kq0t+44u93sylca0drUfchf0BtYURtq0J0mP7zTaIHsgS7zHvLD6hBTR3V2ZLsztg/lnszU9M3aMLLyp+EyugG21JSxcW+a1KbJFEaw4KEyZvfpQAUJiomso1ocV3y8m3Zss4COcOq1G2rpf4I2/4JRDMFAUhiwL54GLKeDEQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CtdaYe4T; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id E0413C32783; Mon, 22 Apr 2024 23:57:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1713830224; bh=Br00HspDo/PUXkA3cTfOzYeIV+YkhRAeB56gfT5Q6mM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CtdaYe4TvA/OzZX2JV2q97wp6fdVzmukCBqo7wwww+8SCf857A3eKwa7kCJfOi9TZ 1kbaapBqrURJfE00QoEaFyIdWLqCWElAxyo5BykCn0Nidyq9TxiNwZ8K+fw6skB6K/ j/poVXidG+JLuNP7BzxarWcymFOaeSntft6hSZgmqXYD9vCSkojgf8WTXsm6Kav8Jg zVfSEbmQvcXbgsdK0AoICfMDeuC/VEisU9i8a88pCGQnC+0v+Nna2tCrMUmy/UETFR +QnNUPwykGrurQTjmN7ryLizXzCn1rkfrR1w2iLasYNxA0jKE5knquSq85GyTPQ+Tm tDjPspJX59NkQ== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Rick Edgecombe , Michael Kelley , Kuppuswamy Sathyanarayanan , "Kirill A . Shutemov" , Wei Liu , Sasha Levin , kys@microsoft.com, haiyangz@microsoft.com, decui@microsoft.com, linux-hyperv@vger.kernel.org Subject: [PATCH AUTOSEL 6.6 24/29] Drivers: hv: vmbus: Track decrypted status in vmbus_gpadl Date: Mon, 22 Apr 2024 19:17:05 -0400 Message-ID: <20240422231730.1601976-24-sashal@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422231730.1601976-1-sashal@kernel.org> References: <20240422231730.1601976-1-sashal@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.6.28 Content-Transfer-Encoding: 8bit From: Rick Edgecombe [ Upstream commit 211f514ebf1ef5de37b1cf6df9d28a56cfd242ca ] In CoCo VMs it is possible for the untrusted host to cause set_memory_encrypted() or set_memory_decrypted() to fail such that an error is returned and the resulting memory is shared. Callers need to take care to handle these errors to avoid returning decrypted (shared) memory to the page allocator, which could lead to functional or security issues. In order to make sure callers of vmbus_establish_gpadl() and vmbus_teardown_gpadl() don't return decrypted/shared pages to allocators, add a field in struct vmbus_gpadl to keep track of the decryption status of the buffers. This will allow the callers to know if they should free or leak the pages. Signed-off-by: Rick Edgecombe Signed-off-by: Michael Kelley Reviewed-by: Kuppuswamy Sathyanarayanan Acked-by: Kirill A. Shutemov Link: https://lore.kernel.org/r/20240311161558.1310-3-mhklinux@outlook.com Signed-off-by: Wei Liu Message-ID: <20240311161558.1310-3-mhklinux@outlook.com> Signed-off-by: Sasha Levin --- drivers/hv/channel.c | 25 +++++++++++++++++++++---- include/linux/hyperv.h | 1 + 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c index 56f7e06c673e4..bb5abdcda18f8 100644 --- a/drivers/hv/channel.c +++ b/drivers/hv/channel.c @@ -472,9 +472,18 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel, (atomic_inc_return(&vmbus_connection.next_gpadl_handle) - 1); ret = create_gpadl_header(type, kbuffer, size, send_offset, &msginfo); - if (ret) + if (ret) { + gpadl->decrypted = false; return ret; + } + /* + * Set the "decrypted" flag to true for the set_memory_decrypted() + * success case. In the failure case, the encryption state of the + * memory is unknown. Leave "decrypted" as true to ensure the + * memory will be leaked instead of going back on the free list. + */ + gpadl->decrypted = true; ret = set_memory_decrypted((unsigned long)kbuffer, PFN_UP(size)); if (ret) { @@ -563,9 +572,15 @@ static int __vmbus_establish_gpadl(struct vmbus_channel *channel, kfree(msginfo); - if (ret) - set_memory_encrypted((unsigned long)kbuffer, - PFN_UP(size)); + if (ret) { + /* + * If set_memory_encrypted() fails, the decrypted flag is + * left as true so the memory is leaked instead of being + * put back on the free list. + */ + if (!set_memory_encrypted((unsigned long)kbuffer, PFN_UP(size))) + gpadl->decrypted = false; + } return ret; } @@ -886,6 +901,8 @@ int vmbus_teardown_gpadl(struct vmbus_channel *channel, struct vmbus_gpadl *gpad if (ret) pr_warn("Fail to set mem host visibility in GPADL teardown %d.\n", ret); + gpadl->decrypted = ret; + return ret; } EXPORT_SYMBOL_GPL(vmbus_teardown_gpadl); diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 6ef0557b4bff8..96ceb4095425e 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h @@ -832,6 +832,7 @@ struct vmbus_gpadl { u32 gpadl_handle; u32 size; void *buffer; + bool decrypted; }; struct vmbus_channel { -- 2.43.0