From patchwork Thu Jan 26 21:21:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarkko Sakkinen X-Patchwork-Id: 9540113 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 53B84604A0 for ; Thu, 26 Jan 2017 21:21:23 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 458A31FF87 for ; Thu, 26 Jan 2017 21:21:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3A47620952; Thu, 26 Jan 2017 21:21:23 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from ml01.01.org (ml01.01.org [198.145.21.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id F359D1FF87 for ; Thu, 26 Jan 2017 21:21:22 +0000 (UTC) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id EB3D481F7D for ; Thu, 26 Jan 2017 13:21:22 -0800 (PST) X-Original-To: intel-sgx-kernel-dev@lists.01.org Delivered-To: intel-sgx-kernel-dev@lists.01.org Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 3D2C381F86 for ; Thu, 26 Jan 2017 13:21:21 -0800 (PST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 26 Jan 2017 13:21:20 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos; i="5.33,291,1477983600"; d="scan'208"; a="1087691516" Received: from gerardan-mobl.ger.corp.intel.com (HELO localhost) ([10.252.16.178]) by orsmga001.jf.intel.com with ESMTP; 26 Jan 2017 13:21:19 -0800 From: Jarkko Sakkinen To: intel-sgx-kernel-dev@lists.01.org Date: Thu, 26 Jan 2017 23:21:09 +0200 Message-Id: <20170126212109.12922-4-jarkko.sakkinen@linux.intel.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170126212109.12922-1-jarkko.sakkinen@linux.intel.com> References: <20170126212109.12922-1-jarkko.sakkinen@linux.intel.com> Subject: [intel-sgx-kernel-dev] [PATCH 3/3] intel_sgx: fix error paths for EBLOCK and ETRACK X-BeenThere: intel-sgx-kernel-dev@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Project: Intel® Software Guard Extensions for Linux*: https://01.org/intel-software-guard-extensions" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-sgx-kernel-dev-bounces@lists.01.org Sender: "intel-sgx-kernel-dev" X-Virus-Scanned: ClamAV using ClamSMTP If the driver is operating correctly EBLOCK and ETRACK should never fail. This commit changes the error recovery from BUG() to killing the enclae if that ever happens as the use of BUG() is not favored in the mainline and also because this will ease the debugging in this situation. Signed-off-by: Jarkko Sakkinen --- drivers/platform/x86/intel_sgx_page_cache.c | 37 ++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/drivers/platform/x86/intel_sgx_page_cache.c b/drivers/platform/x86/intel_sgx_page_cache.c index 3fc8091..0c37e36 100644 --- a/drivers/platform/x86/intel_sgx_page_cache.c +++ b/drivers/platform/x86/intel_sgx_page_cache.c @@ -218,18 +218,39 @@ static void sgx_ipi_cb(void *info) { } -static void sgx_eblock(struct sgx_epc_page *epc_page) +static void sgx_eblock(struct sgx_encl *encl, + struct sgx_epc_page *epc_page) { - void *vaddr = sgx_get_epc_page(epc_page); - BUG_ON(__eblock((unsigned long)vaddr)); + void *vaddr; + int ret; + + vaddr = sgx_get_epc_page(epc_page); + ret = __eblock((unsigned long)vaddr); sgx_put_epc_page(vaddr); + + if (ret) { + sgx_err(encl, "EBLOCK returned %d\n", ret); + sgx_invalidate(encl); + smp_call_function(sgx_ipi_cb, NULL, 1); + } + } -static void sgx_etrack(struct sgx_epc_page *epc_page) +static void sgx_etrack(struct sgx_encl *encl, + struct sgx_epc_page *epc_page) { - void *epc = sgx_get_epc_page(epc_page); - BUG_ON(__etrack(epc)); + void *epc; + int ret; + + epc = sgx_get_epc_page(epc_page); + ret = __etrack(epc); sgx_put_epc_page(epc); + + if (ret) { + sgx_err(encl, "ETRACK returned %d\n", ret); + sgx_invalidate(encl); + smp_call_function(sgx_ipi_cb, NULL, 1); + } } static int __sgx_ewb(struct sgx_encl *encl, @@ -318,11 +339,11 @@ static void sgx_write_pages(struct sgx_encl *encl, struct list_head *src) } zap_vma_ptes(evma, entry->addr, PAGE_SIZE); - sgx_eblock(entry->epc_page); + sgx_eblock(encl, entry->epc_page); } /* ETRACK */ - sgx_etrack(encl->secs_page.epc_page); + sgx_etrack(encl, encl->secs_page.epc_page); /* EWB */ while (!list_empty(src)) {