device_linux.go 755 字节
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
package intelsgx // import "github.com/opencontainers/runc/libenclave/intelsgx"

/*
#cgo linux LDFLAGS: -ldl
#include <stdlib.h>
#include <dlfcn.h>
*/
import "C"

import (
	"unsafe"
)

// 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
// libsgx_launch.so, which means the container has to have it. In
// order to ensure all libraries dependent by Enclave Runtime PAL
// 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))
}

func init() {
	preloadSgxPswLib()
}