rune/libenclave: Change to preload libsgx_launch.so.1 instead of libsgx_launch.so
The official psw installer from Intel doesn't create a symbol link libsgx_launch.so to libsgx_launch.so.1, leading to pal init failure.
@@ -3,6 +3,7 @@ package intelsgx // import "github.com/opencontainers/runc/libenclave/intelsgx"
/*
#cgo linux LDFLAGS: -ldl
#include <stdlib.h>
+#include <stdio.h>
#include <dlfcn.h>
*/
import "C"
@@ -11,6 +12,15 @@ import (
"unsafe"
)
+func loadLibrary(p string) {
+ path := C.CString(p)
+ dl := C.dlopen(path, C.RTLD_NOW)
+ if dl == nil {
+ C.perror(C.CString("failed to load library " + p))
+ }
+ C.free(unsafe.Pointer(path))
+}
+
// Due to the design of runelet, the Enclave Runtime PAL is loaded
// in host but launched in container. The fact that certain libraries
// from Intel SGX PSW would use dlopen() to further load
@@ -19,9 +29,7 @@ import (
// are completely loaded in host, preload them prior to switch
// into container.
func preloadSgxPswLib() {
- path := C.CString("libsgx_launch.so")
- C.dlopen(path, C.RTLD_NOW)
- C.free(unsafe.Pointer(path))
+ loadLibrary("libsgx_launch.so.1")
}
func init() {
