lkml.org 
[lkml]   [2021]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/14] selftests/sgx: Assign source for each segment
    Date
    From: Jarkko Sakkinen <jarkko@kernel.org>

    Define source per segment so that enclave pages can be added from different
    sources, e.g. anonymous VMA for zero pages. In other words, add 'src' field
    to struct encl_segment, and assign it to 'encl->src' for pages inherited
    from the enclave binary.

    Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
    Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
    ---
    tools/testing/selftests/sgx/load.c | 5 +++--
    tools/testing/selftests/sgx/main.h | 1 +
    tools/testing/selftests/sgx/sigstruct.c | 8 ++++----
    3 files changed, 8 insertions(+), 6 deletions(-)

    diff --git a/tools/testing/selftests/sgx/load.c b/tools/testing/selftests/sgx/load.c
    index 3ebe5d1fe337..5605474aab73 100644
    --- a/tools/testing/selftests/sgx/load.c
    +++ b/tools/testing/selftests/sgx/load.c
    @@ -107,7 +107,7 @@ static bool encl_ioc_add_pages(struct encl *encl, struct encl_segment *seg)
    memset(&secinfo, 0, sizeof(secinfo));
    secinfo.flags = seg->flags;

    - ioc.src = (uint64_t)encl->src + seg->offset;
    + ioc.src = (uint64_t)seg->src;
    ioc.offset = seg->offset;
    ioc.length = seg->size;
    ioc.secinfo = (unsigned long)&secinfo;
    @@ -216,6 +216,7 @@ bool encl_load(const char *path, struct encl *encl)

    if (j == 0) {
    src_offset = phdr->p_offset & PAGE_MASK;
    + encl->src = encl->bin + src_offset;

    seg->prot = PROT_READ | PROT_WRITE;
    seg->flags = SGX_PAGE_TYPE_TCS << 8;
    @@ -228,13 +229,13 @@ bool encl_load(const char *path, struct encl *encl)

    seg->offset = (phdr->p_offset & PAGE_MASK) - src_offset;
    seg->size = (phdr->p_filesz + PAGE_SIZE - 1) & PAGE_MASK;
    + seg->src = encl->src + seg->offset;

    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;

    diff --git a/tools/testing/selftests/sgx/main.h b/tools/testing/selftests/sgx/main.h
    index 68672fd86cf9..452d11dc4889 100644
    --- a/tools/testing/selftests/sgx/main.h
    +++ b/tools/testing/selftests/sgx/main.h
    @@ -7,6 +7,7 @@
    #define MAIN_H

    struct encl_segment {
    + void *src;
    off_t offset;
    size_t size;
    unsigned int prot;
    diff --git a/tools/testing/selftests/sgx/sigstruct.c b/tools/testing/selftests/sgx/sigstruct.c
    index 92bbc5a15c39..202a96fd81bf 100644
    --- a/tools/testing/selftests/sgx/sigstruct.c
    +++ b/tools/testing/selftests/sgx/sigstruct.c
    @@ -289,14 +289,14 @@ static bool mrenclave_eextend(EVP_MD_CTX *ctx, uint64_t offset,
    static bool mrenclave_segment(EVP_MD_CTX *ctx, struct encl *encl,
    struct encl_segment *seg)
    {
    - uint64_t end = seg->offset + seg->size;
    + uint64_t end = seg->size;
    uint64_t offset;

    - for (offset = seg->offset; offset < end; offset += PAGE_SIZE) {
    - if (!mrenclave_eadd(ctx, offset, seg->flags))
    + for (offset = 0; offset < end; offset += PAGE_SIZE) {
    + if (!mrenclave_eadd(ctx, seg->offset + offset, seg->flags))
    return false;

    - if (!mrenclave_eextend(ctx, offset, encl->src + offset))
    + if (!mrenclave_eextend(ctx, seg->offset + offset, seg->src + offset))
    return false;
    }

    --
    2.25.1
    \
     
     \ /
      Last update: 2021-09-15 22:33    [W:4.395 / U:0.656 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site