lkml.org 
[lkml]   [2023]   [Aug]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 2/5] selftests/sgx: Fix function pointer relocation in test enclave.
    Date
    On Mon, 2023-07-24 at 18:58 +0200, Jo Van Bulck wrote:
    > Relocate encl_op_array entries at runtime relative to the enclave base to
    > ensure correct function pointer when compiling the test enclave with -Os.

    Putting aside whether we should consider building the selftests using "-Os", it
    would be helpful to explain how can the "-Os" break the existing code, so that
    we can review why this fix is reasonable. Perhaps it's obvious to others but
    it's not obvious to me what can go wrong here.

    >
    > Signed-off-by: Jo Van Bulck <jo.vanbulck@cs.kuleuven.be>
    > ---
    > tools/testing/selftests/sgx/test_encl.c | 6 ++++--
    > tools/testing/selftests/sgx/test_encl.lds | 1 +
    > tools/testing/selftests/sgx/test_encl_bootstrap.S | 5 +++++
    > 3 files changed, 10 insertions(+), 2 deletions(-)
    >
    > diff --git a/tools/testing/selftests/sgx/test_encl.c b/tools/testing/selftests/sgx/test_encl.c
    > index c0d6397295e3..4e31a6c3d673 100644
    > --- a/tools/testing/selftests/sgx/test_encl.c
    > +++ b/tools/testing/selftests/sgx/test_encl.c
    > @@ -119,9 +119,11 @@ static void do_encl_op_nop(void *_op)
    >
    > }
    >
    > +uint64_t get_enclave_base(void);
    > +
    > void encl_body(void *rdi, void *rsi)
    > {
    > - const void (*encl_op_array[ENCL_OP_MAX])(void *) = {
    > + static void (*encl_op_array[ENCL_OP_MAX])(void *) = {
    > do_encl_op_put_to_buf,
    > do_encl_op_get_from_buf,
    > do_encl_op_put_to_addr,
    > @@ -135,5 +137,5 @@ void encl_body(void *rdi, void *rsi)
    > struct encl_op_header *op = (struct encl_op_header *)rdi;
    >
    > if (op->type < ENCL_OP_MAX)
    > - (*encl_op_array[op->type])(op);
    > + (*(get_enclave_base() + encl_op_array[op->type]))(op);
    > }
    > diff --git a/tools/testing/selftests/sgx/test_encl.lds b/tools/testing/selftests/sgx/test_encl.lds
    > index a1ec64f7d91f..ca659db2a534 100644
    > --- a/tools/testing/selftests/sgx/test_encl.lds
    > +++ b/tools/testing/selftests/sgx/test_encl.lds
    > @@ -10,6 +10,7 @@ PHDRS
    > SECTIONS
    > {
    > . = 0;
    > + __enclave_base = .;
    > .tcs : {
    > *(.tcs*)
    > } : tcs
    > diff --git a/tools/testing/selftests/sgx/test_encl_bootstrap.S b/tools/testing/selftests/sgx/test_encl_bootstrap.S
    > index 03ae0f57e29d..6126dbd7ad1c 100644
    > --- a/tools/testing/selftests/sgx/test_encl_bootstrap.S
    > +++ b/tools/testing/selftests/sgx/test_encl_bootstrap.S
    > @@ -86,6 +86,11 @@ encl_entry_core:
    > mov $4, %rax
    > enclu
    >
    > + .global get_enclave_base
    > +get_enclave_base:
    > + lea __enclave_base(%rip), %rax
    > + ret
    > +
    > .section ".data", "aw"
    >
    > encl_ssa_tcs1:

    \
     
     \ /
      Last update: 2023-08-03 05:59    [W:2.338 / U:2.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site