All of lore.kernel.org
 help / color / mirror / Atom feed
From: Reinette Chatre <reinette.chatre@intel.com>
To: Jarkko Sakkinen <jarkko@kernel.org>,
	<dave.hansen@linux.intel.com>, <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: Re: [PATCH V4 16/31] x86/sgx: Support adding of pages to an initialized enclave
Date: Thu, 14 Apr 2022 09:31:46 -0700	[thread overview]
Message-ID: <009250f0-dd3b-ed4d-b6f0-f7b2d6f8c9cc@intel.com> (raw)
In-Reply-To: <8b36c54def8948747a704676491cc18dd08b48e9.camel@kernel.org>

Hi Jarkko,

On 4/14/2022 4:20 AM, Jarkko Sakkinen wrote:
> On Wed, 2022-04-13 at 14:10 -0700, Reinette Chatre wrote:
>> With SGX1 an enclave needs to be created with its maximum memory demands
>> allocated. Pages cannot be added to an enclave after it is initialized.
>> SGX2 introduces a new function, ENCLS[EAUG], that can be used to add
>> pages to an initialized enclave. With SGX2 the enclave still needs to
>> set aside address space for its maximum memory demands during enclave
>> creation, but all pages need not be added before enclave initialization.
>> Pages can be added during enclave runtime.
>>
>> Add support for dynamically adding pages to an initialized enclave,
>> architecturally limited to RW permission at creation but allowed to
>> obtain RWX permissions after trusted enclave runs EMODPE. Add pages
>> via the page fault handler at the time an enclave address without a
>> backing enclave page is accessed, potentially directly reclaiming
>> pages if no free pages are available.
>>
>> The enclave is still required to run ENCLU[EACCEPT] on the page before
>> it can be used. A useful flow is for the enclave to run ENCLU[EACCEPT]
>> on an uninitialized address. This will trigger the page fault handler
>> that will add the enclave page and return execution to the enclave to
>> repeat the ENCLU[EACCEPT] instruction, this time successful.
>>
>> If the enclave accesses an uninitialized address in another way, for
>> example by expanding the enclave stack to a page that has not yet been
>> added, then the page fault handler would add the page on the first
>> write but upon returning to the enclave the instruction that triggered
>> the page fault would be repeated and since ENCLU[EACCEPT] was not run
>> yet it would trigger a second page fault, this time with the SGX flag
>> set in the page fault error code. This can only be recovered by entering
>> the enclave again and directly running the ENCLU[EACCEPT] instruction on
>> the now initialized address.
>>
>> Accessing an uninitialized address from outside the enclave also
>> triggers this flow but the page will remain inaccessible (access will
>> result in #PF) until accepted from within the enclave via
>> ENCLU[EACCEPT].
>>
>> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
>> Tested-by: Jarkko Sakkinen <jarkko@kernel.org>
>> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
> 
> I'm presuming that Haitao tested with this applied, right?

Yes, I will move his Tested-by to this patch.

Reinette

  reply	other threads:[~2022-04-14 16:57 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-13 21:10 [PATCH V4 00/31] x86/sgx and selftests/sgx: Support SGX2 Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 01/31] x86/sgx: Add short descriptions to ENCLS wrappers Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 02/31] x86/sgx: Add wrapper for SGX2 EMODPR function Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 03/31] x86/sgx: Add wrapper for SGX2 EMODT function Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 04/31] x86/sgx: Add wrapper for SGX2 EAUG function Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 05/31] x86/sgx: Support loading enclave page without VMA permissions check Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 06/31] x86/sgx: Export sgx_encl_ewb_cpumask() Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 07/31] x86/sgx: Rename sgx_encl_ewb_cpumask() as sgx_encl_cpumask() Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 08/31] x86/sgx: Move PTE zap code to new sgx_zap_enclave_ptes() Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 09/31] x86/sgx: Make sgx_ipi_cb() available internally Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 10/31] x86/sgx: Create utility to validate user provided offset and length Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 11/31] x86/sgx: Keep record of SGX page type Reinette Chatre
2022-04-14 11:12   ` Jarkko Sakkinen
2022-04-14 16:27     ` Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 12/31] x86/sgx: Export sgx_encl_{grow,shrink}() Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 13/31] x86/sgx: Export sgx_encl_page_alloc() Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 14/31] x86/sgx: Support VA page allocation without reclaiming Reinette Chatre
2022-04-14 11:18   ` Jarkko Sakkinen
2022-04-14 16:30     ` Reinette Chatre
2022-04-15 13:54       ` Haitao Huang
2022-04-15 15:22         ` Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 15/31] x86/sgx: Support restricting of enclave page permissions Reinette Chatre
2022-04-14 11:19   ` Jarkko Sakkinen
2022-04-14 11:19     ` Jarkko Sakkinen
2022-04-14 16:31       ` Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 16/31] x86/sgx: Support adding of pages to an initialized enclave Reinette Chatre
2022-04-14 11:20   ` Jarkko Sakkinen
2022-04-14 16:31     ` Reinette Chatre [this message]
2022-04-13 21:10 ` [PATCH V4 17/31] x86/sgx: Tighten accessible memory range after enclave initialization Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 18/31] x86/sgx: Support modifying SGX page type Reinette Chatre
2022-04-14 11:11   ` Jarkko Sakkinen
2022-04-14 16:32     ` Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 19/31] x86/sgx: Support complete page removal Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 20/31] x86/sgx: Free up EPC pages directly to support large page ranges Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 21/31] Documentation/x86: Introduce enclave runtime management section Reinette Chatre
2022-04-14 11:21   ` Jarkko Sakkinen
2022-04-14 16:32     ` Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 22/31] selftests/sgx: Add test for EPCM permission changes Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 23/31] selftests/sgx: Add test for TCS page " Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 24/31] selftests/sgx: Test two different SGX2 EAUG flows Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 25/31] selftests/sgx: Introduce dynamic entry point Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 26/31] selftests/sgx: Introduce TCS initialization enclave operation Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 27/31] selftests/sgx: Test complete changing of page type flow Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 28/31] selftests/sgx: Test faulty enclave behavior Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 29/31] selftests/sgx: Test invalid access to removed enclave page Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 30/31] selftests/sgx: Test reclaiming of untouched page Reinette Chatre
2022-04-13 21:10 ` [PATCH V4 31/31] selftests/sgx: Page removal stress test Reinette Chatre
2022-04-14 11:25 ` [PATCH V4 00/31] x86/sgx and selftests/sgx: Support SGX2 Jarkko Sakkinen
2022-04-14 16:34   ` Reinette Chatre
2022-04-14 16:55     ` Jarkko Sakkinen
2022-04-14 18:35       ` Dhanraj, Vijay
2022-04-17 14:58         ` Jarkko Sakkinen
2022-04-21 23:46           ` Dhanraj, Vijay
2022-04-22  3:29             ` Reinette Chatre
2022-04-22  9:16               ` Jarkko Sakkinen
2022-04-22 13:17                 ` Jarkko Sakkinen
2022-04-25 20:17                 ` Dhanraj, Vijay
2022-04-25 23:56                   ` Reinette Chatre
2022-04-26  4:10                     ` Jarkko Sakkinen
2022-04-22  9:14             ` Jarkko Sakkinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=009250f0-dd3b-ed4d-b6f0-f7b2d6f8c9cc@intel.com \
    --to=reinette.chatre@intel.com \
    --cc=bp@alien8.de \
    --cc=cathy.zhang@intel.com \
    --cc=cedric.xing@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=haitao.huang@intel.com \
    --cc=hpa@zytor.com \
    --cc=jarkko@kernel.org \
    --cc=kai.huang@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-sgx@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mark.shanahan@intel.com \
    --cc=mingo@redhat.com \
    --cc=seanjc@google.com \
    --cc=shuah@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=vijay.dhanraj@intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.