From 5966c2d2fe61a1cb6cd99b6a802340ed226934ba Mon Sep 17 00:00:00 2001 From: woonhak Date: Fri, 11 Nov 2016 16:48:43 -0500 Subject: [PATCH 1/3] fix local socket bind bug --- LibOS/shim/src/sys/shim_socket.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/LibOS/shim/src/sys/shim_socket.c b/LibOS/shim/src/sys/shim_socket.c index 14febf03..7d1914a9 100644 --- a/LibOS/shim/src/sys/shim_socket.c +++ b/LibOS/shim/src/sys/shim_socket.c @@ -450,13 +450,14 @@ int shim_do_bind (int sockfd, struct sockaddr * addr, socklen_t addrlen) sock->addr.un.data = data; sock->addr.un.dentry = dent; } + else { /* AF_INET/INET6 case */ + if (addrlen != ((sock->domain == AF_INET) ? sizeof(struct sockaddr_in) : + sizeof(struct sockaddr_in6))) + goto out; - if (addrlen != ((sock->domain == AF_INET) ? sizeof(struct sockaddr_in) : - sizeof(struct sockaddr_in6))) - goto out; - - inet_save_addr(sock->domain, &sock->addr.in.bind, addr); - inet_rebase_port(false, sock->domain, &sock->addr.in.bind, true); + inet_save_addr(sock->domain, &sock->addr.in.bind, addr); + inet_rebase_port(false, sock->domain, &sock->addr.in.bind, true); + } sock->sock_state = SOCK_BOUND; From e94285a5668267a69e87a9832aad7a483a4d2aa9 Mon Sep 17 00:00:00 2001 From: woonhak Date: Sun, 13 Nov 2016 23:14:59 -0500 Subject: [PATCH 2/3] fix bug connect AF_UNIX --- LibOS/shim/src/sys/shim_socket.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/LibOS/shim/src/sys/shim_socket.c b/LibOS/shim/src/sys/shim_socket.c index 7d1914a9..5ac7b6b5 100644 --- a/LibOS/shim/src/sys/shim_socket.c +++ b/LibOS/shim/src/sys/shim_socket.c @@ -700,12 +700,14 @@ int shim_do_connect (int sockfd, struct sockaddr * addr, int addrlen) hdl->pal_handle = NULL; } - if (addrlen != ((sock->domain == AF_INET) ? sizeof(struct sockaddr_in) : - sizeof(struct sockaddr_in6))) - goto out; + if (sock->domain != AF_UNIX) { + if (addrlen != ((sock->domain == AF_INET) ? sizeof(struct sockaddr_in) : + sizeof(struct sockaddr_in6))) + goto out; - inet_save_addr(sock->domain, &sock->addr.in.conn, addr); - inet_rebase_port(false, sock->domain, &sock->addr.in.conn, false); + inet_save_addr(sock->domain, &sock->addr.in.conn, addr); + inet_rebase_port(false, sock->domain, &sock->addr.in.conn, false); + } sock->sock_state = (state == SOCK_BOUND) ? SOCK_BOUNDCONNECTED : SOCK_CONNECTED; From 9743bcd43382d33062eb6e1b3969d9da8283418d Mon Sep 17 00:00:00 2001 From: woonhak Date: Sun, 13 Nov 2016 23:32:19 -0500 Subject: [PATCH 3/3] fix unix socket(pipe) test --- LibOS/shim/test/native/manifest.template | 2 ++ LibOS/shim/test/native/unix.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/LibOS/shim/test/native/manifest.template b/LibOS/shim/test/native/manifest.template index f08023bc..249e10c0 100644 --- a/LibOS/shim/test/native/manifest.template +++ b/LibOS/shim/test/native/manifest.template @@ -27,3 +27,5 @@ sgx.trusted_files.libm = file:$(LIBCDIR)/libm.so.6 sgx.trusted_files.libpthread = file:$(LIBCDIR)/libpthread.so.0 sgx.trusted_files.victim = file:exec_victim sgx.trusted_children.victim = file:exec_victim.sig + +sgx.trusted_files.unix_pipe = file:unix.c diff --git a/LibOS/shim/test/native/unix.c b/LibOS/shim/test/native/unix.c index 421fea4f..c5cbb829 100644 --- a/LibOS/shim/test/native/unix.c +++ b/LibOS/shim/test/native/unix.c @@ -151,7 +151,7 @@ int client(void) int main(int argc, char ** argv) { char fnamebuf[40]; - strcpy(fnamebuf, argv[0]); + strcpy(fnamebuf, "unix"); strcat(fnamebuf, ".c"); fname = fnamebuf;