Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp3283730pxb; Tue, 19 Jan 2021 19:59:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJxQ2f4lMeVM2GOiDd/0L1ofJmbCGnyix67c8YE76bZv48fNqzZvo1L5eBT53aa18xYIcXtp X-Received: by 2002:a05:6402:22a8:: with SMTP id cx8mr6003369edb.32.1611115141477; Tue, 19 Jan 2021 19:59:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611115141; cv=none; d=google.com; s=arc-20160816; b=ozPO+dK6mVTCrwO+L6s4tJgg94pFFunzpwOYWmx67yjvkzG4pc/XRIRf2BFdy35XKs rqXc0+QsPqrmfZDCGqWUB3tINZXgOwx/cH0/PeMtPKYkCuN/D7smDk5pXw3T8V3Y0Frb MEaQOaymU8L4sxpqjmvVgZph034RT1T9Bsc7k4+7D8KXdaF3YXNGBkRZf+YvPuRHaBk7 cuxFKO/UnNYCWVcSv8yXKL3Bg3t/25k4WsQK1yS6W6jOmhaylXJmFL06kpJ0VRpSCN48 45sgEDSPi3d4iL9KO3Ome6YANsuvcK0QhFaT9fb6RE7fM4yTv1yNU4FLVyRsIwS/rnoo QMDg== 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 :message-id:date:subject:cc:to:from; bh=KSzIWhte6wHVaPlISf4dmtePiwSgW7MUkM2AG+NM/nA=; b=0nHhRYc11LCBG0vI8vzWJ8sH3Of75rYX51C4rymyUSN0JivGzrdZ+nLS8R9GhPVixk mWy/mKyhSGIQYdcD7xR3dEpHIA4vwEdTm3mfPxv8VB2JBXgDofMA5NjVHEm5SwkLGUoO C9YAfwHPScHH84vaG9efBVN2h/DqaTlpGxbyJY6S3863jybDipq40QXALGhh1CJgXTAr qqeZ086aXQVNS5t00uZrVFXMPXCDgzlul/4QmuRD6iYRObZaz3wnqb2mTaJr3P7GZoPy buWx0qVoNMbDidYA2ftqJ3m0QZO/71Fbl4FL56Ri/tog4tWhZ7vQpTp0loZoCGFG81x1 fe/g== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a23si347285edn.292.2021.01.19.19.58.33; Tue, 19 Jan 2021 19:59:01 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729348AbhATD5k (ORCPT + 99 others); Tue, 19 Jan 2021 22:57:40 -0500 Received: from out30-44.freemail.mail.aliyun.com ([115.124.30.44]:52413 "EHLO out30-44.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730883AbhATDyG (ORCPT ); Tue, 19 Jan 2021 22:54:06 -0500 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R171e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04394;MF=tianjia.zhang@linux.alibaba.com;NM=1;PH=DS;RN=11;SR=0;TI=SMTPD_---0UMIdG1w_1611114800; Received: from localhost(mailfrom:tianjia.zhang@linux.alibaba.com fp:SMTPD_---0UMIdG1w_1611114800) by smtp.aliyun-inc.com(127.0.0.1); Wed, 20 Jan 2021 11:53:20 +0800 From: Tianjia Zhang To: Jarkko Sakkinen , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Sean Christopherson , x86@kernel.org, linux-sgx@vger.kernel.org, linux-kernel@vger.kernel.org, Jia Zhang Cc: Tianjia Zhang Subject: [PATCH v2] x86/sgx: Fix free_cnt counting logic in epc section Date: Wed, 20 Jan 2021 11:53:20 +0800 Message-Id: <20210120035320.19709-1-tianjia.zhang@linux.alibaba.com> X-Mailer: git-send-email 2.19.1.3.ge56e4f7 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Increase `section->free_cnt` in sgx_sanitize_section() is more reasonable, which is called in ksgxd kernel thread, instead of assigning it to epc section pages number at initialization. Although this is unlikely to fail, these pages cannot be allocated after initialization, and which need to be reset by ksgxd. At the same time, taking section->lock could be moved inside the !ret flow so that EREMOVE is done without holding the lock. it's theoretically possible that ksgxd hasn't finished sanitizing the EPC when userspace starts creating enclaves. Reported-by: Jia Zhang Suggested-by: Sean Christopherson Reviewed-by: Sean Christopherson Signed-off-by: Tianjia Zhang --- arch/x86/kernel/cpu/sgx/main.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c index c519fc5f6948..34a72a147983 100644 --- a/arch/x86/kernel/cpu/sgx/main.c +++ b/arch/x86/kernel/cpu/sgx/main.c @@ -41,16 +41,18 @@ static void sgx_sanitize_section(struct sgx_epc_section *section) if (kthread_should_stop()) return; - /* needed for access to ->page_list: */ - spin_lock(§ion->lock); - page = list_first_entry(§ion->init_laundry_list, struct sgx_epc_page, list); ret = __eremove(sgx_get_epc_virt_addr(page)); - if (!ret) + + /* needed for access to ->page_list: */ + spin_lock(§ion->lock); + + if (!ret) { list_move(&page->list, §ion->page_list); - else + section->free_cnt += 1; + } else list_move_tail(&page->list, &dirty); spin_unlock(§ion->lock); @@ -646,7 +648,6 @@ static bool __init sgx_setup_epc_section(u64 phys_addr, u64 size, list_add_tail(§ion->pages[i].list, §ion->init_laundry_list); } - section->free_cnt = nr_pages; return true; } -- 2.19.1.3.ge56e4f7