Received: by 2002:a05:6a10:6d10:0:0:0:0 with SMTP id gq16csp988208pxb; Fri, 15 Apr 2022 17:32:12 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxXQ92MbUDy7HL8HSPslxA9gJDSBNxeitXaqGWhY6G4gSHPeXFmCYL8AXWeGmTTnNHlU61r X-Received: by 2002:a17:902:7244:b0:158:41d3:b79b with SMTP id c4-20020a170902724400b0015841d3b79bmr1459716pll.50.1650069130484; Fri, 15 Apr 2022 17:32:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650069130; cv=none; d=google.com; s=arc-20160816; b=BqP3kI++5DBCRsoMi/Ac1Us7Pxu+rBFvk3YfNl/nHGq1OLIQAdI5ae7SSsl+HZ61AG SunTEYXeIZg0ZGp2DrH8g7NA8RBDzWmczLQHENoHpHT2FyQn5DaiyfO7Quj8Rn3eaZr2 8CrskUZw6L3LHZeisHZpQ7FQknJowt4jOu/8sWHMmr9U5izxECXGZMYXth2bpw8c0OWI b2zJF7L16RPThnjqeY/RYSahBhoDSY4iH5T0kI2MqkJ5bJp3FcUPT1GWMbxiM1yl4+gc pz2dwI4j/UJWxhrsXrnJikLG5dA5VVFoyAAL56J2XJn0nHJJ1SSYxxzI0vPPZpvu7Lti 9fuQ== 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=CUnlfVy7UXlUS/OK8gFNMagJk2F6oDGhmb8U4anJJOQ=; b=wJ2RqnnmKtSEBEbsvHRJuy6wpZXFLgaRy3gRR1EJY/1TuYcv7Yve+CUmC0Wqx5Fz8H LSo2Jz5ArMkPQZQrsyPWP5HeC+YgtWLhl9r+UXV0u+ALdaebdrBMDpA0gyRH7cLk8RKB NpSdnu8fUxVxLCHU5ycuMoS4El72g13nTEZBUALRpiDaVZWzQEuWZvu7CfEnUXuWqJtI vms1R2rINL31QEJ0TwzxY4PTQs1Z7h8U4SSkkksdLoTSwy2XQziNFCFtp3QTvoCexTkP 5SFoFfcOkNpfjLp08+Qm/Z5M1encJQe79AXdNQNZzen8iNpidAkcHc5wEMiK7jlG2WHN b4Zg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=KPdP5ShM; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id f12-20020a170902ce8c00b00153b2d16641si2784989plg.585.2022.04.15.17.32.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Apr 2022 17:32:10 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=KPdP5ShM; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C0305F47D0; Fri, 15 Apr 2022 17:29:11 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239166AbiDMVPu (ORCPT + 99 others); Wed, 13 Apr 2022 17:15:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55392 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239056AbiDMVNN (ORCPT ); Wed, 13 Apr 2022 17:13:13 -0400 Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 930E53A5C1; Wed, 13 Apr 2022 14:10:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649884251; x=1681420251; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=vNBikG4gYkUyvIo7XiITqm12yzQ/ap2t7cXvNNbhqNA=; b=KPdP5ShMTuOTGKswzy+mEq7hWnAY6zY4+QZ+xrP/trFaD14zZpmJSUv3 Q1t7tuPmDo8obAAqVrxXzr6mypVw6zlX9H4dg1bKvWT9DWhcXSOOw1Dk/ wpUjKLjP2qE4yM4krGnho8TKvlTODYECHB8pj9DNIIsa7PqCcSh5MZn13 9tgtJ+pcGJfEZcZZZ+lfKyUArMOO9I34xXG47g2taMgsL8kmCQY5210C8 YG+7zxNqWja32uzRk+Qc70iBmYiT6y2lkJp6B3caKw+Hdbe3LoO8IVkg1 rBqZ1FFV4XX2QdT8+y7qk78ebOugqSXw//WozpsnJS3GvF7Hl1WbuG68O g==; X-IronPort-AV: E=McAfee;i="6400,9594,10316"; a="323219067" X-IronPort-AV: E=Sophos;i="5.90,257,1643702400"; d="scan'208";a="323219067" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2022 14:10:46 -0700 X-IronPort-AV: E=Sophos;i="5.90,257,1643702400"; d="scan'208";a="725054321" Received: from rchatre-ws.ostc.intel.com ([10.54.69.144]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Apr 2022 14:10:46 -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 V4 26/31] selftests/sgx: Introduce TCS initialization enclave operation Date: Wed, 13 Apr 2022 14:10:26 -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=-2.0 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=no 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 --- 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