Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4751675pxj; Wed, 12 May 2021 12:24:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyh866dWHl4qAIdyoKyROD1aRCQTdi2e9ROVQJ8xxr2s6rp+/qE+ZvJTORU7XLEFxLEnIpG X-Received: by 2002:a50:fd0f:: with SMTP id i15mr35234653eds.278.1620847454356; Wed, 12 May 2021 12:24:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620847454; cv=none; d=google.com; s=arc-20160816; b=iF8pxfvRswgR7NzHIvssi7p8l46GtWQaPuQH8ulLtC6/LeoswKtGJG0apaUu0UTN2Q xIdN4F6bvrSgph8cceoj1E9oS4KO1lMPzJ18GgCAWUVOx8GRY4J7rXKx0edihNL/DFao UtPoT09+VxVwWXvAZwTK2qU34DyhyscYYEYqUL/8a/DvttK3sHu+AaH61Y/+y9q1nuDE MAODiXbP8bVeHSLqo/MtQGrcnEpiLl6FswqbyfuC+GIq4+byPq2IliP0Btu0Yo38g4o1 lIhQkE680nkOSRYZdMrbwVc9YcT1CJeaIkyDra5e47diZU458jA5/HFMIPotjWQg9RVU 1D3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=iiSxgFPxQOb/EOQiR5pa9lIbyFnWoyb1cUXLh3vntBk=; b=evlSzyHKj5CKtM3OWccPFJ7NmYfmwHaqNm/oQZ1yJr+aSeXdiRQpWBnF4IOMBCv03/ F1m0Szg4N8uTk5dKr/ci2Q3SQKS9vO65kFhr+xWjM3V5zsFSQvi2n/nPwjVwxEyY3udo GOiU1oU410KBqRiFMdFXSMQlTy+4JGqlD4rdIVaU0PmYYdIq9B1fHx30QmZbaBqMk2x5 JgBDtEak0DLCZrfjFxJBfoe7RdYNUpDWOV/zCJj8a1RKsiIsI11Wbll3hSefGxUQc/+Q Dcml6EvmkSflmLLvPqtGiwsZ1R+ZAqsukoetfNisbMyy84oPg4Xtnp+NetO835zcixmz hYsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=h24lLl6N; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y19si459215edc.411.2021.05.12.12.23.50; Wed, 12 May 2021 12:24:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=h24lLl6N; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378652AbhELTRe (ORCPT + 99 others); Wed, 12 May 2021 15:17:34 -0400 Received: from mail.kernel.org ([198.145.29.99]:44182 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234941AbhELQqy (ORCPT ); Wed, 12 May 2021 12:46:54 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id C08B961E7A; Wed, 12 May 2021 16:15:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620836111; bh=9amb/3V8lWdpx0aTbJ/ZnSvIUVUiI3vL+xz3GFi5uUE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=h24lLl6NpduD9m2k0Gn3Sfbfw3DDPb9kjM2V2zJDdH2EHNn3tfnNqQlyFgTEleU3W Rq9H5xB/085805zBiyXRiLymjjaQf8a15vbJdjm3osZJ1wtidoQEAWFkDTlDzAd62u POPtzq48vQ7rhrWhJA37blpGzRfw6dn0Got8e93A= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Brijesh Singh , Borislav Petkov , Tom Lendacky , Christophe Leroy , Sean Christopherson , Paolo Bonzini , Sasha Levin Subject: [PATCH 5.12 615/677] crypto: ccp: Detect and reject "invalid" addresses destined for PSP Date: Wed, 12 May 2021 16:51:01 +0200 Message-Id: <20210512144857.804283257@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144837.204217980@linuxfoundation.org> References: <20210512144837.204217980@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sean Christopherson [ Upstream commit 74c1f1366eb7714b8b211554f6c5cee315ff3fbc ] Explicitly reject using pointers that are not virt_to_phys() friendly as the source for SEV commands that are sent to the PSP. The PSP works with physical addresses, and __pa()/virt_to_phys() will not return the correct address in these cases, e.g. for a vmalloc'd pointer. At best, the bogus address will cause the command to fail, and at worst lead to system instability. While it's unlikely that callers will deliberately use a bad pointer for SEV buffers, a caller can easily use a vmalloc'd pointer unknowingly when running with CONFIG_VMAP_STACK=y as it's not obvious that putting the command buffers on the stack would be bad. The command buffers are relative small and easily fit on the stack, and the APIs to do not document that the incoming pointer must be a physically contiguous, __pa() friendly pointer. Cc: Brijesh Singh Cc: Borislav Petkov Cc: Tom Lendacky Cc: Christophe Leroy Fixes: 200664d5237f ("crypto: ccp: Add Secure Encrypted Virtualization (SEV) command support") Signed-off-by: Sean Christopherson Message-Id: <20210406224952.4177376-3-seanjc@google.com> Reviewed-by: Brijesh Singh Acked-by: Tom Lendacky Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- drivers/crypto/ccp/sev-dev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/crypto/ccp/sev-dev.c b/drivers/crypto/ccp/sev-dev.c index cb9b4c4e371e..8fd43c1acac1 100644 --- a/drivers/crypto/ccp/sev-dev.c +++ b/drivers/crypto/ccp/sev-dev.c @@ -150,6 +150,9 @@ static int __sev_do_cmd_locked(int cmd, void *data, int *psp_ret) sev = psp->sev_data; + if (data && WARN_ON_ONCE(!virt_addr_valid(data))) + return -EINVAL; + /* Get the physical address of the command buffer */ phys_lsb = data ? lower_32_bits(__psp_pa(data)) : 0; phys_msb = data ? upper_32_bits(__psp_pa(data)) : 0; -- 2.30.2