selftests/sgx: Include memory clobber for inline asm in test enclave
authorJo Van Bulck <jo.vanbulck@cs.kuleuven.be>
Thu, 5 Oct 2023 15:38:44 +0000 (17:38 +0200)
committerDave Hansen <dave.hansen@linux.intel.com>
Fri, 8 Dec 2023 18:05:26 +0000 (10:05 -0800)
Add the "memory" clobber to the EMODPE and EACCEPT asm blocks to tell the
compiler the assembly code accesses to the secinfo struct. This ensures
the compiler treats the asm block as a memory barrier and the write to
secinfo will be visible to ENCLU.

Fixes: 20404a808593 ("selftests/sgx: Add test for EPCM permission changes")
Signed-off-by: Jo Van Bulck <jo.vanbulck@cs.kuleuven.be>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>
Link: https://lore.kernel.org/all/20231005153854.25566-4-jo.vanbulck%40cs.kuleuven.be
tools/testing/selftests/sgx/test_encl.c

index c0d6397295e311499484e1332e4f7f7d05775bbb..ae791df3e5a5714fdb593f3e683f4da3af4342be 100644 (file)
@@ -24,10 +24,11 @@ static void do_encl_emodpe(void *_op)
        secinfo.flags = op->flags;
 
        asm volatile(".byte 0x0f, 0x01, 0xd7"
-                               :
+                               : /* no outputs */
                                : "a" (EMODPE),
                                  "b" (&secinfo),
-                                 "c" (op->epc_addr));
+                                 "c" (op->epc_addr)
+                               : "memory" /* read from secinfo pointer */);
 }
 
 static void do_encl_eaccept(void *_op)
@@ -42,7 +43,8 @@ static void do_encl_eaccept(void *_op)
                                : "=a" (rax)
                                : "a" (EACCEPT),
                                  "b" (&secinfo),
-                                 "c" (op->epc_addr));
+                                 "c" (op->epc_addr)
+                               : "memory" /* read from secinfo pointer */);
 
        op->ret = rax;
 }