diff --git a/libcontainer/nsenter/ipc.c b/libcontainer/nsenter/ipc.c deleted file mode 100644 index 01321a718..000000000 --- a/libcontainer/nsenter/ipc.c +++ /dev/null @@ -1,84 +0,0 @@ -#define _GNU_SOURCE -#include -#include -#include -#include -#include "ipc.h" -#include "log.h" - -int receive_fd(int sockfd) -{ - int bytes_read; - struct msghdr msg = { }; - struct cmsghdr *cmsg; - struct iovec iov = { }; - char null_byte = '\0'; - int ret; - int fd_count; - - iov.iov_base = &null_byte; - iov.iov_len = 1; - - msg.msg_iov = &iov; - msg.msg_iovlen = 1; - - msg.msg_controllen = CMSG_SPACE(sizeof(int)); - msg.msg_control = malloc(msg.msg_controllen); - if (msg.msg_control == NULL) { - bail("Can't allocate memory to receive fd."); - } - - memset(msg.msg_control, 0, msg.msg_controllen); - - bytes_read = recvmsg(sockfd, &msg, MSG_CMSG_CLOEXEC); - if (bytes_read != 1) - bail("failed to receive fd from unix socket %d", sockfd); - if (msg.msg_flags & MSG_CTRUNC) - bail("received truncated control message from unix socket %d", sockfd); - - cmsg = CMSG_FIRSTHDR(&msg); - if (!cmsg) - bail("received message from unix socket %d without control message", sockfd); - - if (cmsg->cmsg_level != SOL_SOCKET) - bail("received unknown control message from unix socket %d: cmsg_level=%d", sockfd, cmsg->cmsg_level); - - if (cmsg->cmsg_type != SCM_RIGHTS) - bail("received unknown control message from unix socket %d: cmsg_type=%d", sockfd, cmsg->cmsg_type); - - fd_count = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int); - if (fd_count != 1) - bail("received control message from unix socket %d with too many fds: %d", sockfd, fd_count); - - ret = *(int *)CMSG_DATA(cmsg); - free(msg.msg_control); - return ret; -} - -int send_fd(int sockfd, int fd) -{ - struct msghdr msg = { }; - struct cmsghdr *cmsg; - struct iovec iov[1] = { }; - char null_byte = '\0'; - - iov[0].iov_base = &null_byte; - iov[0].iov_len = 1; - - msg.msg_iov = iov; - msg.msg_iovlen = 1; - - /* We send only one fd as specified by cmsg->cmsg_len below, even - * though msg.msg_controllen might have more space due to alignment. */ - msg.msg_controllen = CMSG_SPACE(sizeof(int)); - msg.msg_control = alloca(msg.msg_controllen); - memset(msg.msg_control, 0, msg.msg_controllen); - - cmsg = CMSG_FIRSTHDR(&msg); - cmsg->cmsg_level = SOL_SOCKET; - cmsg->cmsg_type = SCM_RIGHTS; - cmsg->cmsg_len = CMSG_LEN(sizeof(int)); - memcpy(CMSG_DATA(cmsg), &fd, sizeof(int)); - - return sendmsg(sockfd, &msg, 0); -} diff --git a/libcontainer/nsenter/ipc.h b/libcontainer/nsenter/ipc.h deleted file mode 100644 index 6e5972697..000000000 --- a/libcontainer/nsenter/ipc.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef NSENTER_IPC_H -#define NSENTER_IPC_H - -int receive_fd(int sockfd); - -/* - * send_fd passes the open file descriptor fd to another process via the UNIX - * domain socket sockfd. The return value of the sendmsg(2) call is returned. - */ -int send_fd(int sockfd, int fd); - -#endif /* NSENTER_IPC_H */ diff --git a/libcontainer/nsenter/nsexec.c b/libcontainer/nsenter/nsexec.c index bfc6a79a8..c771ac7e1 100644 --- a/libcontainer/nsenter/nsexec.c +++ b/libcontainer/nsenter/nsexec.c @@ -4,7 +4,6 @@ #include #include #include -#include #include #include #include @@ -28,7 +27,6 @@ #include #include "getenv.h" -#include "ipc.h" #include "log.h" /* Get all of the CLONE_NEW* flags. */ #include "namespace.h"