Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp610766pxb; Wed, 27 Jan 2021 16:42:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJysOFz6Krks9YTAGD1tJKf83LdfjO+Rr0HqVyEkE3+66Jg5t5AqlnNC2cODnhqYFREuGVwl X-Received: by 2002:a05:6402:34c5:: with SMTP id w5mr11472024edc.65.1611794545441; Wed, 27 Jan 2021 16:42:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611794545; cv=none; d=google.com; s=arc-20160816; b=So6oy+E7sPvHf2IP1QwwAQnMqS43DLpP502u4hFU2CF3wowrp9Kfg8WxgX5Yj6dbrZ 6g91RlBmBFhHLGUkRHXwu9G3QehsAlgX5+scPize1kfuzIZrLAY7qV213ocVPXKKAjRg XkDAv1ChLIgKsOzHPBIMswMs5H5PWP/874v7K9TGyvGQzsXtyVWB0dVTfg1AZvG2vtuO 531Se3EtvRnoLQMv3rQSfL7RCnSKfTXpk0+heCBqc6R3u3lNkQLwpbg7v5U3DL7V/cBw 4WI0FWOlk59LsgDDF7OmejCzE4zUc1pg6cchePLagj/Ee+S4nBSaWvcqvRzJVufZcK/h sLCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=QhoJaXcBLO+tF0usfswt07f3dqsQi5Fzviu82scMC4E=; b=t4ZDYuZe5bZCGuBXK2tsZnEr9gjqiZXUu9D1r93ELyTwU60EGJeKf94wgEgs5FPPEJ z3qfezaR0SODErXyg1D8bRHyPLt/yQFw7S+MlwUD3KgeV0S/ueENvaE2Wf92fYnpiSBt DHVft4MK1lzs9VOh+UYOzur0ChjwhPD0ysrp0huzarypilWyIgTzRBx1fz6raJx3741X Q6BjBRl4HJLDZMTI8g9y/pHww9WBBYiF7+pgu5Mvh9JjGd4gqZ0mtySxzJ0fYHXEFfEx i73yftT3e9VJ+eo2Nu9Reoe3MLV6W0t5hZqjGeQ7PpEJZk8nxXyv4OAC3Nvagy1PWeS4 qR7w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=Rc37eSOr; 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=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 c18si1927782ede.504.2021.01.27.16.42.01; Wed, 27 Jan 2021 16:42:25 -0800 (PST) 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=@google.com header.s=20161025 header.b=Rc37eSOr; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231511AbhA0VzW (ORCPT + 99 others); Wed, 27 Jan 2021 16:55:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234402AbhA0VzU (ORCPT ); Wed, 27 Jan 2021 16:55:20 -0500 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4DBEC061573 for ; Wed, 27 Jan 2021 13:54:39 -0800 (PST) Received: by mail-pj1-x102e.google.com with SMTP id gx1so2384590pjb.1 for ; Wed, 27 Jan 2021 13:54:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=QhoJaXcBLO+tF0usfswt07f3dqsQi5Fzviu82scMC4E=; b=Rc37eSOr2aNYJTUX0COdY4fMePBOXDX6j5spA7p2EF6kxytSBvfl53Ev63GQsuD9jy l3mo3Qtn9Ir8tAB6rHXWh3MXYO10/wVHmekmCjF5oarpaPqwoI/LkcSqZlpJEZZR929e TZatZqjvzDmDQmcpatwCwmZ5dyA/jhL8vREJBKV3VE0v7jeoAtt2Ufz4d5vzyKxEU/pX NKMQKXA25b6WVsk7oI4+UVt4ijkTSiLR7oo6U/3cvnE6TzYaCoePXLKcCjiJLe+8e5kz kc0MLqp/f6ZgCPB+VdPZQA0gQRGJM+F08hKL77eYoqvhuQrn4MH3xR0oSBs2GWoIX+On HVrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=QhoJaXcBLO+tF0usfswt07f3dqsQi5Fzviu82scMC4E=; b=GGhtIbbnQ/G9E6/ShhsDsdj3YHImC6TKEp2It94YoiRkpiFP+6RFPtLlehBuwYEn4S EmRET5muv4UZq/TVjxAX/pzZ5d9ydqSwO+SK4e4o3QKFEQckuJ/VHaP1gFSHBY60PNjZ zu3YK+UaSSdCgq/xt8MG9BnhL/QsKIxq5axYbZFSGy/RwCDi0N33JLy/p6vsgsreMuOK DOQyhuWfqeXHacGWeZzJhRVuc9HcmRTDtwSIOoHSb8Y1CkTp80zAArhmibhE2kK7f84t GwZlFowu+mu25JmwAKKid1aTzM8JKcWUvamN+U8at0D3VVbRzV13K4O7lHf0rhj4Vw8I OZSA== X-Gm-Message-State: AOAM530GndU/KQhZgouvFPrG4MZJVk1EqTgTdD9c/efm8qHkdAhQnPWf 69ZzJWmllMUx9HYtz1uPZf409A== X-Received: by 2002:a17:90a:a483:: with SMTP id z3mr8085808pjp.140.1611784479079; Wed, 27 Jan 2021 13:54:39 -0800 (PST) Received: from google.com ([2620:15c:f:10:1ea0:b8ff:fe73:50f5]) by smtp.gmail.com with ESMTPSA id q12sm3431952pgj.24.2021.01.27.13.54.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 27 Jan 2021 13:54:38 -0800 (PST) Date: Wed, 27 Jan 2021 13:54:31 -0800 From: Sean Christopherson To: Peter Gonda Cc: kvm@vger.kernel.org, Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Paolo Bonzini , Joerg Roedel , Tom Lendacky , Brijesh Singh , x86@kernel.org, stable@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH V2] Fix unsynchronized access to sev members through svm_register_enc_region Message-ID: References: <20210127161524.2832400-1-pgonda@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210127161524.2832400-1-pgonda@google.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jan 27, 2021, Peter Gonda wrote: > Grab kvm->lock before pinning memory when registering an encrypted > region; sev_pin_memory() relies on kvm->lock being held to ensure > correctness when checking and updating the number of pinned pages. > > Add a lockdep assertion to help prevent future regressions. > > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: "H. Peter Anvin" > Cc: Paolo Bonzini > Cc: Joerg Roedel > Cc: Tom Lendacky > Cc: Brijesh Singh > Cc: Sean Christopherson > Cc: x86@kernel.org > Cc: kvm@vger.kernel.org > Cc: stable@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Fixes: 1e80fdc09d12 ("KVM: SVM: Pin guest memory when SEV is active") > Signed-off-by: Peter Gonda > > V2 > - Fix up patch description > - Correct file paths svm.c -> sev.c > - Add unlock of kvm->lock on sev_pin_memory error > > V1 > - https://lore.kernel.org/kvm/20210126185431.1824530-1-pgonda@google.com/ Put version info, and anything else that shouldn't be in the final commit, below the three dashes. AFAIK that requires manually editing the patch file before sending it. > > --- Version info goes here. > arch/x86/kvm/svm/sev.c | 17 ++++++++++------- > 1 file changed, 10 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c > index c8ffdbc81709..b80e9bf0a31b 100644 > --- a/arch/x86/kvm/svm/sev.c > +++ b/arch/x86/kvm/svm/sev.c > @@ -342,6 +342,8 @@ static struct page **sev_pin_memory(struct kvm *kvm, unsigned long uaddr, > unsigned long first, last; > int ret; > > + lockdep_assert_held(&kvm->lock); > + > if (ulen == 0 || uaddr + ulen < uaddr) > return ERR_PTR(-EINVAL); > > @@ -1119,12 +1121,20 @@ int svm_register_enc_region(struct kvm *kvm, > if (!region) > return -ENOMEM; > > + mutex_lock(&kvm->lock); > region->pages = sev_pin_memory(kvm, range->addr, range->size, ®ion->npages, 1); > if (IS_ERR(region->pages)) { > ret = PTR_ERR(region->pages); > + mutex_unlock(&kvm->lock); > goto e_free; > } > > + region->uaddr = range->addr; > + region->size = range->size; > + > + list_add_tail(®ion->list, &sev->regions_list); > + mutex_unlock(&kvm->lock); > + > /* > * The guest may change the memory encryption attribute from C=0 -> C=1 > * or vice versa for this memory range. Lets make sure caches are > @@ -1133,13 +1143,6 @@ int svm_register_enc_region(struct kvm *kvm, > */ > sev_clflush_pages(region->pages, region->npages); I don't think it actually matters, but it feels like the flush should be done before adding the region to the list. That would also make this sequence consistent with the other flows. Tom, any thoughts? > > - region->uaddr = range->addr; > - region->size = range->size; > - > - mutex_lock(&kvm->lock); > - list_add_tail(®ion->list, &sev->regions_list); > - mutex_unlock(&kvm->lock); > - > return ret; > > e_free: > -- > 2.30.0.280.ga3ce27912f-goog >