All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jo Van Bulck <jo.vanbulck@cs.kuleuven.be>
To: jarkko@kernel.org, kai.huang@intel.com,
	linux-sgx@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: dave.hansen@linux.intel.com, Jo Van Bulck <jo.vanbulck@cs.kuleuven.be>
Subject: [PATCH v7 07/13] selftests/sgx: Produce static-pie executable for test enclave
Date: Thu,  5 Oct 2023 17:38:48 +0200	[thread overview]
Message-ID: <20231005153854.25566-8-jo.vanbulck@cs.kuleuven.be> (raw)
In-Reply-To: <20231005153854.25566-1-jo.vanbulck@cs.kuleuven.be>

The current combination of -static and -fPIC creates a static executable
with position-dependent addresses for global variables. Use -static-pie
and -fPIE to create a proper static position independent executable that
can be loaded at any address without a dynamic linker.

When building the original "lea (encl_stack)(%rbx), %rax" assembly code
with -static-pie -fPIE, the linker complains about a relocation it cannot
resolve:

/usr/local/bin/ld: /tmp/cchIWyfG.o: relocation R_X86_64_32S against
`.data' can not be used when making a PIE object; recompile with -fPIE
collect2: error: ld returned 1 exit status

Thus, since only RIP-relative addressing is legit for local symbols, use
"encl_stack(%rip)" and declare an explicit "__encl_base" symbol at the
start of the linker script to be able to calculate the stack address
relative to the current TCS in the enclave assembly entry code.

Link: https://lore.kernel.org/all/f9c24d89-ed72-7d9e-c650-050d722c6b04@cs.kuleuven.be/
Signed-off-by: Jo Van Bulck <jo.vanbulck@cs.kuleuven.be>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Acked-by: Kai Huang <kai.huang@intel.com>
---
 tools/testing/selftests/sgx/Makefile              | 2 +-
 tools/testing/selftests/sgx/test_encl.lds         | 1 +
 tools/testing/selftests/sgx/test_encl_bootstrap.S | 9 ++++++---
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/sgx/Makefile b/tools/testing/selftests/sgx/Makefile
index 7eb890bdd3f0..8d2ba6adc92b 100644
--- a/tools/testing/selftests/sgx/Makefile
+++ b/tools/testing/selftests/sgx/Makefile
@@ -14,7 +14,7 @@ endif
 INCLUDES := -I$(top_srcdir)/tools/include
 HOST_CFLAGS := -Wall -Werror -g $(INCLUDES) -fPIC
 HOST_LDFLAGS := -z noexecstack -lcrypto
-ENCL_CFLAGS += -Wall -Werror -static -nostdlib -ffreestanding -fPIC \
+ENCL_CFLAGS += -Wall -Werror -static-pie -nostdlib -ffreestanding -fPIE \
 	       -fno-stack-protector -mrdrnd $(INCLUDES)
 ENCL_LDFLAGS := -Wl,-T,test_encl.lds,--build-id=none
 
diff --git a/tools/testing/selftests/sgx/test_encl.lds b/tools/testing/selftests/sgx/test_encl.lds
index a1ec64f7d91f..62d37160f59b 100644
--- a/tools/testing/selftests/sgx/test_encl.lds
+++ b/tools/testing/selftests/sgx/test_encl.lds
@@ -10,6 +10,7 @@ PHDRS
 SECTIONS
 {
 	. = 0;
+        __encl_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 e0ce993d3f2c..28fe5d2ac0af 100644
--- a/tools/testing/selftests/sgx/test_encl_bootstrap.S
+++ b/tools/testing/selftests/sgx/test_encl_bootstrap.S
@@ -42,9 +42,12 @@
 encl_entry:
 	# RBX contains the base address for TCS, which is the first address
 	# inside the enclave for TCS #1 and one page into the enclave for
-	# TCS #2. By adding the value of encl_stack to it, we get
-	# the absolute address for the stack.
-	lea	(encl_stack)(%rbx), %rax
+	# TCS #2. First make it relative by substracting __encl_base and
+	# then add the address of encl_stack to get the address for the stack.
+	lea __encl_base(%rip), %rax
+	sub %rax, %rbx
+	lea encl_stack(%rip), %rax
+	add %rbx, %rax
 	jmp encl_entry_core
 encl_dyn_entry:
 	# Entry point for dynamically created TCS page expected to follow
-- 
2.25.1


  parent reply	other threads:[~2023-10-05 16:18 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-05 15:38 [PATCH v7 00/13] selftests/sgx: Fix compilation errors Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 01/13] selftests/sgx: Fix uninitialized pointer dereference in error path Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 02/13] selftests/sgx: Fix uninitialized pointer dereferences in encl_get_entry Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 03/13] selftests/sgx: Include memory clobber for inline asm in test enclave Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 04/13] selftests/sgx: Separate linker options Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 05/13] selftests/sgx: Specify freestanding environment for enclave compilation Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 06/13] selftests/sgx: Remove redundant enclave base address save/restore Jo Van Bulck
2023-10-05 15:38 ` Jo Van Bulck [this message]
2023-10-05 15:38 ` [PATCH v7 08/13] selftests/sgx: Handle relocations in test enclave Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 09/13] selftests/sgx: Fix linker script asserts Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 10/13] selftests/sgx: Ensure test enclave buffer is entirely preserved Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 11/13] selftests/sgx: Ensure expected location of test enclave buffer Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 12/13] selftests/sgx: Discard unsupported ELF sections Jo Van Bulck
2023-10-05 15:38 ` [PATCH v7 13/13] selftests/sgx: Remove incomplete ABI sanitization code in test enclave Jo Van Bulck
2023-10-05 21:25 ` [PATCH v7 00/13] selftests/sgx: Fix compilation errors Huang, Kai
2023-10-06  9:51   ` Jo Van Bulck
2023-10-10  9:44     ` Jarkko Sakkinen
2023-10-10 12:11       ` Jarkko Sakkinen
2023-10-13 11:58         ` Jo Van Bulck
2023-10-13 11:45       ` Jo Van Bulck
2023-10-23 21:32         ` Jarkko Sakkinen
2023-11-08 20:31           ` Jo Van Bulck
2023-11-08 20:46             ` Dave Hansen
2023-11-09 12:47               ` Jo Van Bulck
2023-11-15 21:27               ` Jarkko Sakkinen
2023-11-15 21:26             ` 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=20231005153854.25566-8-jo.vanbulck@cs.kuleuven.be \
    --to=jo.vanbulck@cs.kuleuven.be \
    --cc=dave.hansen@linux.intel.com \
    --cc=jarkko@kernel.org \
    --cc=kai.huang@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sgx@vger.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.