Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp543245pxf; Wed, 7 Apr 2021 06:05:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyAudMJHXim4NIb+ANajY1o9P5pXDi4zl9l1wwklSuhBT5RAu28nm2ziYqdvU01kVZa7Ul0 X-Received: by 2002:a17:907:76b3:: with SMTP id jw19mr3563683ejc.202.1617800756811; Wed, 07 Apr 2021 06:05:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617800756; cv=none; d=google.com; s=arc-20160816; b=Fsu4PAAhV3O5WJLUZXQ43/GHPEq9ZKOGGfJvgagHO730kqqLS9vkY18MQRENKnHd2G UFKnx3MrxECTzS+Nxnw/J47xDdIFhKD32GQEZVfApRnqNw68TV9mtENSMGzUlJH83kVZ swrFjC0s8BzF2lCE+dJsjdNwp2pKNSo9NZ8oUNO9ksb6nwzH9PXEAXbT6veWjTFu+D1w v0tJmtOI/hf30Eu0DLSwL2zfc/A8xN5zgeNkY/JY3qKLvZ4SvpqL2RGSjQaJyeB2vezU GK8IA45HtjsiP0SZXHX40V36LiOn8RfOJLs3iiJpK5MNHc14MTllFB3T4D1ZigtC5Ddv NPMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:reply-to:dkim-signature; bh=rbJKuZiYmoPztANxesWQ34dxBaTXzqRp8iyZHN+wEGM=; b=gz+w93XzUifbL1fDeHvl9ISx6KZKVsEpVSMEhTmNOL/PlQYkQH3S0UcCzr7ScfTh/s mzb8HbyEWQNv3y6sm5rC60HvrtDNEl9YncKCYDl+3bcKHOiEcvmMb7HgWoah0u8a1l3+ 5X1wpXhhHipfeYCaZhyiiJDsre3eXTF+5BvdGVVbfyFr+5LKCNXbLTZ1vhb6tiA5BhRs BiVc5siT+jTD/XFkK+mrbFJy2gSsaTFzcZtNucTUMj9QPWCJbzKG/lU2ooAWou00iXUX 02BHZP/0aRa5cXGAqIwYgfX3ftyPGlRxDBWHW6WcddsVilQa2yVaFcYHJ+SHhQEQgAzF BsAQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=nAKAuPL8; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a13si3550532ejg.478.2021.04.07.06.05.27; Wed, 07 Apr 2021 06:05:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-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=@google.com header.s=20161025 header.b=nAKAuPL8; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344268AbhDFWuZ (ORCPT + 99 others); Tue, 6 Apr 2021 18:50:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344222AbhDFWuT (ORCPT ); Tue, 6 Apr 2021 18:50:19 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 449D4C061761 for ; Tue, 6 Apr 2021 15:50:10 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id v136so13604431qkb.9 for ; Tue, 06 Apr 2021 15:50:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=reply-to:date:in-reply-to:message-id:mime-version:references :subject:from:to:cc; bh=rbJKuZiYmoPztANxesWQ34dxBaTXzqRp8iyZHN+wEGM=; b=nAKAuPL8B+BdMLeg3F3EAJJ5PNzAtP7SbEN0VteWmXGIHeiK0Vq4YArK0VahJJo7I8 6X0PqiNu5YzhkVeNZ7T8gQofgQAJuimJ26X2/4FdbkEwRVIG14txaPcJxGJ5UF+dOF6+ I1toJgcJaO5y/dhvYCJ0a3na0F8JLZkmOQ6XDdSfALJ8/G0QGWoHGOsQO3zxCfgrM9Te vBsPm6RoAlnd52uD0yGE36Kwhp0AHyEYg1+zBcdYGygwmlncS48emDP3tDbxVKjs6bDe /svO2xmQG8rYo++QHEBBNz+CXAP3ZfRc7fiTR8Vcd2hWPKz0O2fSDtMcj2Wxa6NuEIr8 ZraA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:date:in-reply-to:message-id :mime-version:references:subject:from:to:cc; bh=rbJKuZiYmoPztANxesWQ34dxBaTXzqRp8iyZHN+wEGM=; b=HyNc7NCeghqCJb4RAKkGpjVpwPZmOgQKOX2ddAA2kRG3pXlDcrngv6uKx696XC252C kEgt2BhVtaJasbteZpW7GsHs/r2tPfcmKlX/XQoOHdEr+CI4Ag+l0d7DS/gsGG4p0Kju fphRR0wLx+bdRKajRvWvelTtaWhDZt86ssYijkRB0rJj+sy0a0O8IMVmvwBS66J3CKg+ 9FhUSzFO8JxZwjfETH5hxwf84k/atGgTGEXweTnbcwoV68VDq71dxOLAWDqDbQuZxRE5 MK9Ujdq3UvaaDKv/olJyGMNa50Mb98nr0ekpZoRnSIZU5Hs/VCe8Uub19vcRNKPLLNFI 2vzQ== X-Gm-Message-State: AOAM530vsTj8du+nzBU8fQiqqoHMVAfzOqmz1HKRMNlc1ZVuZxNM1imV m2XcT2ei2/Aoz24O1QJNyTaSxor72B8= X-Received: from seanjc798194.pdx.corp.google.com ([2620:15c:f:10:24a1:90fb:182b:777c]) (user=seanjc job=sendgmr) by 2002:a0c:f30a:: with SMTP id j10mr528109qvl.20.1617749409335; Tue, 06 Apr 2021 15:50:09 -0700 (PDT) Reply-To: Sean Christopherson Date: Tue, 6 Apr 2021 15:49:46 -0700 In-Reply-To: <20210406224952.4177376-1-seanjc@google.com> Message-Id: <20210406224952.4177376-3-seanjc@google.com> Mime-Version: 1.0 References: <20210406224952.4177376-1-seanjc@google.com> X-Mailer: git-send-email 2.31.0.208.g409f899ff0-goog Subject: [PATCH v2 2/8] crypto: ccp: Detect and reject "invalid" addresses destined for PSP From: Sean Christopherson To: Paolo Bonzini , Brijesh Singh , Tom Lendacky , John Allen Cc: Sean Christopherson , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org, Borislav Petkov , Christophe Leroy Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org 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 --- 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 ba240d33d26e..3e0d1d6922ba 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.31.0.208.g409f899ff0-goog