From patchwork Tue Jan 31 23:03:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarkko Sakkinen X-Patchwork-Id: 9548769 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 CB83F60236 for ; Tue, 31 Jan 2017 23:03:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C1CDB2832B for ; Tue, 31 Jan 2017 23:03:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B39C3283EC; Tue, 31 Jan 2017 23:03:26 +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 696A12832B for ; Tue, 31 Jan 2017 23:03:26 +0000 (UTC) Received: from [127.0.0.1] (localhost [IPv6:::1]) by ml01.01.org (Postfix) with ESMTP id 5A40581F73 for ; Tue, 31 Jan 2017 15:03:26 -0800 (PST) X-Original-To: intel-sgx-kernel-dev@lists.01.org Delivered-To: intel-sgx-kernel-dev@lists.01.org Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 45B3881F73 for ; Tue, 31 Jan 2017 15:03:25 -0800 (PST) Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP; 31 Jan 2017 15:03:25 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos; i="5.33,316,1477983600"; d="scan'208"; a="1089455476" Received: from ljegan-mobl2.ger.corp.intel.com (HELO localhost) ([10.252.5.75]) by orsmga001.jf.intel.com with ESMTP; 31 Jan 2017 15:03:23 -0800 From: Jarkko Sakkinen To: intel-sgx-kernel-dev@lists.01.org Date: Wed, 1 Feb 2017 01:03:08 +0200 Message-Id: <20170131230308.7561-6-jarkko.sakkinen@linux.intel.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170131230308.7561-1-jarkko.sakkinen@linux.intel.com> References: <20170131230308.7561-1-jarkko.sakkinen@linux.intel.com> Subject: [intel-sgx-kernel-dev] [PATCH 5/5] 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 enclave 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 | 36 ++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/drivers/platform/x86/intel_sgx_page_cache.c b/drivers/platform/x86/intel_sgx_page_cache.c index 4c4eabc..72f8ef1 100644 --- a/drivers/platform/x86/intel_sgx_page_cache.c +++ b/drivers/platform/x86/intel_sgx_page_cache.c @@ -218,18 +218,38 @@ 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_crit(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) { - void *epc = sgx_get_epc_page(epc_page); - BUG_ON(__etrack(epc)); + void *epc; + int ret; + + epc = sgx_get_epc_page(encl->secs_page.epc_page); + ret = __etrack(epc); sgx_put_epc_page(epc); + + if (ret) { + sgx_crit(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 +338,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); /* EWB */ while (!list_empty(src)) {