Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp6605760iob; Wed, 11 May 2022 00:59:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzx0GM9+Rc71/hQxKZkMNxTQCOxnD44Ye3q3pdgPEEbmUSyLycJrl/kZoUyywlBc5zyX/Cb X-Received: by 2002:a05:6402:1107:b0:416:439a:6a9e with SMTP id u7-20020a056402110700b00416439a6a9emr27135772edv.382.1652255958013; Wed, 11 May 2022 00:59:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1652255958; cv=none; d=google.com; s=arc-20160816; b=vPSqvubsONDpQ3ICJWlGFl8dd7ltwzHoD9YkKwWwr5jwJp+qH2sEEhECA2l5mHbt03 dtpJgUbETpTbYLXOihgIt67b9+L70KIVneKb6q6bBglVpGXYv7lbFtDq9sD2k907OO1c uYMrUudAwAHOWid91tnjq6JFwhDimZEwQX36OzWsdg9xbGmR3PhaE+608CSeCTToivjY 20oApjMP1ic/x7/MBorEg15S0bAGLxK0pmtQNnOq9s2fW3WgIqLz8gVYRx6XbpZ+tUjF lhlHr5kH8tH9VtnQvBskIb2U4DHUfemU5mZnqXbM/37LIaevSQ3KqmMa16QiPyRX2BnU tacw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=d3xtrFh7c5tJRtwjuVAoXYsgvgB/2yauYYzThYvqMsA=; b=J4M+3Y4NFvvMmZsWoOqZ1AhMLILsLsfcgEF/A+F1xv3ecbj/QDXTY3CoZ7XXotuFes mlEatzbCkQ69HBYd14J3DB+qVjFOjpDHTOMxxVS4xI0VZZu4eozLnkn1xp7SQEWahFf2 0PQWdD1LU47DfyrKEji9vmAd4V77/83k0AELBEUKkMGkZuMIeYa+hqB/iyLN/6cvNQMe Om3bCbafG3QL8PotxK1Dka6gfQOZ0jdv3gEf3iezY+61WXmPC23MO4mWEwHt6KaIeP4c VjpUNmMYvC50Wh+ZG84/nr9ihjK20Os5wHXHY18XM2dHRZv9KwqBs7R6powMq92w5K1o 7m3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lNX9K07i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a16-20020a056402169000b0041c7cdefc6asi1374278edv.487.2022.05.11.00.58.53; Wed, 11 May 2022 00:59:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=lNX9K07i; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349063AbiEJSQN (ORCPT + 99 others); Tue, 10 May 2022 14:16:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348617AbiEJSN2 (ORCPT ); Tue, 10 May 2022 14:13:28 -0400 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0307E29C8B; Tue, 10 May 2022 11:09:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652206170; x=1683742170; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=j0qrGvZ9jrjhyxuQKOyHaqpxXM49XxYgoCNu5L/UkIU=; b=lNX9K07iPts6qoZRcmOToJf/paMzFSuEYcxYk+FtbV1wR5tviFfqejrn iBv/sPkfob08G2GmeG96ZVxwPe0Ih9GnkXW8cCtlv2i4dwfxuO5aMfn0h E0cxPW0A6ZcAMp3nuqrcFOoZZCwsSSS7lvUY0OZ+GA9UlH7VO4I6Zv/zZ St0NFrK3Xzh4mQOguBhMgykNwEjuIEC9R/CoGW4L63EqYzBA+yiSxNjCw HjKe1I3swm0qnsEg/kXkQQOGbr1WHA4bgvCe+k8BnhlmX0sH5SoiC5+s/ seD3lu27c9o8YJ4JLb3MEQfBRzu/QfzvKIIj+NgFGjGZ1JbiOBBsOWyU0 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10343"; a="330057552" X-IronPort-AV: E=Sophos;i="5.91,214,1647327600"; d="scan'208";a="330057552" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2022 11:09:17 -0700 X-IronPort-AV: E=Sophos;i="5.91,214,1647327600"; d="scan'208";a="541908836" Received: from rchatre-ws.ostc.intel.com ([10.54.69.144]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 May 2022 11:09:17 -0700 From: Reinette Chatre To: dave.hansen@linux.intel.com, jarkko@kernel.org, tglx@linutronix.de, bp@alien8.de, luto@kernel.org, mingo@redhat.com, linux-sgx@vger.kernel.org, x86@kernel.org, shuah@kernel.org, linux-kselftest@vger.kernel.org Cc: seanjc@google.com, kai.huang@intel.com, cathy.zhang@intel.com, cedric.xing@intel.com, haitao.huang@intel.com, mark.shanahan@intel.com, vijay.dhanraj@intel.com, hpa@zytor.com, linux-kernel@vger.kernel.org Subject: [PATCH V5 26/31] selftests/sgx: Introduce TCS initialization enclave operation Date: Tue, 10 May 2022 11:09:02 -0700 Message-Id: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The Thread Control Structure (TCS) contains meta-data used by the hardware to save and restore thread specific information when entering/exiting the enclave. A TCS can be added to an initialized enclave by first adding a new regular enclave page, initializing the content of the new page from within the enclave, and then changing that page's type to a TCS. Support the initialization of a TCS from within the enclave. The variable information needed that should be provided from outside the enclave is the address of the TCS, address of the State Save Area (SSA), and the entry point that the thread should use to enter the enclave. With this information provided all needed fields of a TCS can be initialized. Acked-by: Jarkko Sakkinen Signed-off-by: Reinette Chatre --- No changes since V4. Changes since V3: - Add Jarkko's Acked-by tag. tools/testing/selftests/sgx/defines.h | 8 +++++++ tools/testing/selftests/sgx/test_encl.c | 30 +++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/tools/testing/selftests/sgx/defines.h b/tools/testing/selftests/sgx/defines.h index b638eb98c80c..d8587c971941 100644 --- a/tools/testing/selftests/sgx/defines.h +++ b/tools/testing/selftests/sgx/defines.h @@ -26,6 +26,7 @@ enum encl_op_type { ENCL_OP_NOP, ENCL_OP_EACCEPT, ENCL_OP_EMODPE, + ENCL_OP_INIT_TCS_PAGE, ENCL_OP_MAX, }; @@ -68,4 +69,11 @@ struct encl_op_emodpe { uint64_t flags; }; +struct encl_op_init_tcs_page { + struct encl_op_header header; + uint64_t tcs_page; + uint64_t ssa; + uint64_t entry; +}; + #endif /* DEFINES_H */ diff --git a/tools/testing/selftests/sgx/test_encl.c b/tools/testing/selftests/sgx/test_encl.c index 5b6c65331527..c0d6397295e3 100644 --- a/tools/testing/selftests/sgx/test_encl.c +++ b/tools/testing/selftests/sgx/test_encl.c @@ -57,6 +57,35 @@ static void *memcpy(void *dest, const void *src, size_t n) return dest; } +static void *memset(void *dest, int c, size_t n) +{ + size_t i; + + for (i = 0; i < n; i++) + ((char *)dest)[i] = c; + + return dest; +} + +static void do_encl_init_tcs_page(void *_op) +{ + struct encl_op_init_tcs_page *op = _op; + void *tcs = (void *)op->tcs_page; + uint32_t val_32; + + memset(tcs, 0, 16); /* STATE and FLAGS */ + memcpy(tcs + 16, &op->ssa, 8); /* OSSA */ + memset(tcs + 24, 0, 4); /* CSSA */ + val_32 = 1; + memcpy(tcs + 28, &val_32, 4); /* NSSA */ + memcpy(tcs + 32, &op->entry, 8); /* OENTRY */ + memset(tcs + 40, 0, 24); /* AEP, OFSBASE, OGSBASE */ + val_32 = 0xFFFFFFFF; + memcpy(tcs + 64, &val_32, 4); /* FSLIMIT */ + memcpy(tcs + 68, &val_32, 4); /* GSLIMIT */ + memset(tcs + 72, 0, 4024); /* Reserved */ +} + static void do_encl_op_put_to_buf(void *op) { struct encl_op_put_to_buf *op2 = op; @@ -100,6 +129,7 @@ void encl_body(void *rdi, void *rsi) do_encl_op_nop, do_encl_eaccept, do_encl_emodpe, + do_encl_init_tcs_page, }; struct encl_op_header *op = (struct encl_op_header *)rdi; -- 2.25.1