From: Borislav Petkov <bp@alien8.de>
To: Jarkko Sakkinen <jarkko@kernel.org>
Cc: x86@kernel.org, linux-sgx@vger.kernel.org,
linux-kernel@vger.kernel.org, Shuah Khan <shuah@kernel.org>,
linux-kselftest@vger.kernel.org,
Jethro Beekman <jethro@fortanix.com>,
akpm@linux-foundation.org, andriy.shevchenko@linux.intel.com,
asapek@google.com, cedric.xing@intel.com,
chenalexchen@google.com, conradparker@google.com,
cyhanish@google.com, dave.hansen@intel.com,
haitao.huang@intel.com, kai.huang@intel.com, kai.svahn@intel.com,
kmoy@google.com, ludloff@google.com, luto@kernel.org,
nhorman@redhat.com, npmccallum@redhat.com, puiterwijk@redhat.com,
rientjes@google.com, sean.j.christopherson@intel.com,
tglx@linutronix.de, yaozhangx@google.com, mikko.ylinen@intel.com
Subject: Re: [PATCH v41 20/24] selftests/x86: Add a selftest for SGX
Date: Tue, 17 Nov 2020 18:26:50 +0100 [thread overview]
Message-ID: <20201117172650.GI5719@zn.tnic> (raw)
In-Reply-To: <20201112220135.165028-21-jarkko@kernel.org>
On Fri, Nov 13, 2020 at 12:01:31AM +0200, Jarkko Sakkinen wrote:
> +bool encl_load(const char *path, struct encl *encl)
> +{
> + Elf64_Phdr *phdr_tbl;
> + off_t src_offset;
> + Elf64_Ehdr *ehdr;
> + int i, j;
> + int ret;
> +
> + memset(encl, 0, sizeof(*encl));
> +
> + ret = open("/dev/sgx_enclave", O_RDWR);
> + if (ret < 0) {
> + fprintf(stderr, "Unable to open /dev/sgx_enclave\n");
> + goto err;
> + }
> +
> + encl->fd = ret;
> +
> + if (!encl_map_bin(path, encl))
> + goto err;
> +
> + ehdr = encl->bin;
> + phdr_tbl = encl->bin + ehdr->e_phoff;
> +
> + for (i = 0; i < ehdr->e_phnum; i++) {
> + Elf64_Phdr *phdr = &phdr_tbl[i];
> +
> + if (phdr->p_type == PT_LOAD)
> + encl->nr_segments++;
> + }
> +
> + encl->segment_tbl = calloc(encl->nr_segments,
> + sizeof(struct encl_segment));
> + if (!encl->segment_tbl)
> + goto err;
> +
> + for (i = 0, j = 0; i < ehdr->e_phnum; i++) {
> + Elf64_Phdr *phdr = &phdr_tbl[i];
> + unsigned int flags = phdr->p_flags;
> + struct encl_segment *seg;
> +
> + if (phdr->p_type != PT_LOAD)
> + continue;
> +
> + seg = &encl->segment_tbl[j];
> +
> + if (!!(flags & ~(PF_R | PF_W | PF_X))) {
> + fprintf(stderr,
> + "%d has invalid segment flags 0x%02x.\n", i,
> + phdr->p_flags);
> + goto err;
> + }
> +
> + if (j == 0 && flags != (PF_R | PF_W)) {
> + fprintf(stderr,
> + "TCS has invalid segment flags 0x%02x.\n",
> + phdr->p_flags);
> + goto err;
> + }
> +
> + if (j == 0) {
> + src_offset = (phdr->p_offset & PAGE_MASK) - src_offset;
> +
> + seg->prot = PROT_READ | PROT_WRITE;
> + seg->flags = SGX_PAGE_TYPE_TCS << 8;
> + } else {
> + seg->prot = (phdr->p_flags & PF_R) ? PROT_READ : 0;
> + seg->prot |= (phdr->p_flags & PF_W) ? PROT_WRITE : 0;
> + seg->prot |= (phdr->p_flags & PF_X) ? PROT_EXEC : 0;
> + seg->flags = (SGX_PAGE_TYPE_REG << 8) | seg->prot;
> + }
> +
> + seg->offset = (phdr->p_offset & PAGE_MASK) - src_offset;
> + seg->size = (phdr->p_filesz + PAGE_SIZE - 1) & PAGE_MASK;
> +
> + printf("0x%016lx 0x%016lx 0x%02x\n", seg->offset, seg->size,
> + seg->prot);
> +
> + j++;
> + }
> +
> + assert(j == encl->nr_segments);
> +
> + encl->src = encl->bin + src_offset;
> + encl->src_size = encl->segment_tbl[j - 1].offset +
> + encl->segment_tbl[j - 1].size;
> +
> + for (encl->encl_size = 4096; encl->encl_size < encl->src_size; )
> + encl->encl_size <<= 1;
Something's fishy. That selftest fails with
mmap: Cannot allocate memory
I sprinkled some printfs at this size computation above and here's what
it says:
0x00007fdd3b4ca190 0x0000000000002000 0x03
0x00007fdd3b4cc190 0x0000000000001000 0x05
0x00007fdd3b4cd190 0x0000000000003000 0x03
encl_load: encl->nr_segments: 3
encl_load: seg2 offset: 0x7fdd3b4cd190, seg2 size: 12288
encl_load: encl_size: 140737488355328, src_size: 140588159402384
encl_map_area: encl_size: 140737488355328
mmap: Cannot allocate memory
src_size is computed by adding the offset and size of the last segment
which is at index 2.
The loop computes encl_size to 0x0000800000000000 then and mmap tries to
map double that in encl_map_area(). Looks like too much to me too.
What's up?
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette
next prev parent reply other threads:[~2020-11-17 17:27 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-12 22:01 [PATCH v41 00/24] Intel SGX foundations Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 01/24] x86/sgx: Add SGX architectural data structures Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 02/24] x86/sgx: Add wrappers for ENCLS functions Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 03/24] x86/cpufeatures: x86/msr: Add Intel SGX hardware bits Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 04/24] x86/cpufeatures: x86/msr: Add Intel SGX Launch Control " Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 05/24] x86/sgx: Initialize metadata for Enclave Page Cache (EPC) sections Jarkko Sakkinen
2020-11-16 22:25 ` [PATCH] x86/sgx: clarify 'laundry_list' locking Dave Hansen
2020-11-17 19:29 ` Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 06/24] x86/mm: x86/sgx: Signal SIGSEGV with PF_SGX Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 07/24] x86/cpu/intel: Detect SGX support Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 08/24] x86/cpu/intel: Add nosgx kernel parameter Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 09/24] x86/sgx: Add SGX page allocator functions Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 10/24] mm: Add 'mprotect' hook to struct vm_operations_struct Jarkko Sakkinen
2020-11-13 10:25 ` Mel Gorman
2020-11-17 18:16 ` Jarkko Sakkinen
2020-11-15 17:08 ` Dr. Greg
2020-11-15 17:32 ` Matthew Wilcox
2020-11-15 18:36 ` Dave Hansen
2020-11-16 10:09 ` Mel Gorman
2020-11-17 19:15 ` Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 11/24] x86/sgx: Add SGX misc driver interface Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 12/24] x86/sgx: Add SGX_IOC_ENCLAVE_CREATE Jarkko Sakkinen
[not found] ` <20201115044044.11040-1-hdanton@sina.com>
2020-11-17 17:35 ` Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 13/24] x86/sgx: Add SGX_IOC_ENCLAVE_ADD_PAGES Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 14/24] x86/sgx: Add SGX_IOC_ENCLAVE_INIT Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 15/24] x86/sgx: Add SGX_IOC_ENCLAVE_PROVISION Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 16/24] x86/vdso: Add support for exception fixup in vDSO functions Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 17/24] x86/fault: Add helper function to sanitize error code Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 18/24] x86/traps: Attempt to fixup exceptions in vDSO before signaling Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 19/24] x86/vdso: Implement a vDSO for Intel SGX enclave call Jarkko Sakkinen
2020-11-17 13:14 ` Borislav Petkov
2020-11-17 19:41 ` Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 20/24] selftests/x86: Add a selftest for SGX Jarkko Sakkinen
2020-11-16 18:19 ` Shuah Khan
2020-11-17 13:22 ` Borislav Petkov
2020-11-17 19:42 ` Jarkko Sakkinen
2020-11-17 17:26 ` Borislav Petkov [this message]
2020-11-17 21:27 ` Jarkko Sakkinen
2020-11-17 21:38 ` Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 21/24] x86/sgx: Add a page reclaimer Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 22/24] x86/sgx: Add ptrace() support for the SGX driver Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 23/24] docs: x86/sgx: Document SGX kernel architecture Jarkko Sakkinen
2020-11-12 22:01 ` [PATCH v41 24/24] x86/sgx: Update MAINTAINERS Jarkko Sakkinen
2020-11-16 16:55 ` [PATCH v41 00/24] Intel SGX foundations Borislav Petkov
2020-11-16 17:21 ` Dave Hansen
2020-11-16 17:28 ` Borislav Petkov
2020-11-17 19:20 ` Jarkko Sakkinen
[not found] ` <20201114084211.5284-1-hdanton@sina.com>
2020-11-16 18:33 ` [PATCH v41 05/24] x86/sgx: Initialize metadata for Enclave Page Cache (EPC) sections Dave Hansen
[not found] ` <20201115040127.7804-1-hdanton@sina.com>
2020-11-16 21:11 ` [PATCH v41 11/24] x86/sgx: Add SGX misc driver interface Dave Hansen
[not found] ` <20201114090708.8684-1-hdanton@sina.com>
2020-11-17 18:12 ` [PATCH v41 06/24] x86/mm: x86/sgx: Signal SIGSEGV with PF_SGX Jarkko Sakkinen
[not found] ` <20201114093256.7800-1-hdanton@sina.com>
2020-11-17 18:14 ` [PATCH v41 09/24] x86/sgx: Add SGX page allocator functions Jarkko Sakkinen
[not found] ` <20201115030548.1572-1-hdanton@sina.com>
2020-11-17 18:22 ` [PATCH v41 10/24] mm: Add 'mprotect' hook to struct vm_operations_struct Jarkko Sakkinen
2020-12-15 5:38 ` [PATCH v41 00/24] Intel SGX foundations Hui, Chunyang
2020-12-15 5:43 ` Hui, Chunyang
2020-12-15 15:58 ` 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=20201117172650.GI5719@zn.tnic \
--to=bp@alien8.de \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=asapek@google.com \
--cc=cedric.xing@intel.com \
--cc=chenalexchen@google.com \
--cc=conradparker@google.com \
--cc=cyhanish@google.com \
--cc=dave.hansen@intel.com \
--cc=haitao.huang@intel.com \
--cc=jarkko@kernel.org \
--cc=jethro@fortanix.com \
--cc=kai.huang@intel.com \
--cc=kai.svahn@intel.com \
--cc=kmoy@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-sgx@vger.kernel.org \
--cc=ludloff@google.com \
--cc=luto@kernel.org \
--cc=mikko.ylinen@intel.com \
--cc=nhorman@redhat.com \
--cc=npmccallum@redhat.com \
--cc=puiterwijk@redhat.com \
--cc=rientjes@google.com \
--cc=sean.j.christopherson@intel.com \
--cc=shuah@kernel.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=yaozhangx@google.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).