commit c6c253305a9975a7ebcbe0dbf0531b5e758a389a
parent 0314521658f1e55cd2cdef8261d4ec525c886d1b
Author: Joris Vink <joris@coders.se>
Date:   Thu, 26 Sep 2019 07:52:31 +0000
swap sockets to use send/recv and update seccomp.
Diffstat:
4 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/src/keymgr.c b/src/keymgr.c
@@ -60,6 +60,7 @@ static struct sock_filter filter_keymgr[] = {
 	/* Required to deal with private keys and certs. */
 	KORE_SYSCALL_ALLOW(open),
 	KORE_SYSCALL_ALLOW(read),
+	KORE_SYSCALL_ALLOW(write),
 	KORE_SYSCALL_ALLOW(close),
 	KORE_SYSCALL_ALLOW(fstat),
 	KORE_SYSCALL_ALLOW(futex),
@@ -67,8 +68,8 @@ static struct sock_filter filter_keymgr[] = {
 
 	/* Net related. */
 	KORE_SYSCALL_ALLOW(poll),
-	KORE_SYSCALL_ALLOW(read),
-	KORE_SYSCALL_ALLOW(write),
+	KORE_SYSCALL_ALLOW(sendto),
+	KORE_SYSCALL_ALLOW(recvfrom),
 	KORE_SYSCALL_ALLOW(epoll_wait),
 
 	/* Process things. */
diff --git a/src/net.c b/src/net.c
@@ -424,7 +424,7 @@ net_write(struct connection *c, size_t len, size_t *written)
 {
 	ssize_t		r;
 
-	r = write(c->fd, (c->snb->buf + c->snb->s_off), len);
+	r = send(c->fd, (c->snb->buf + c->snb->s_off), len, 0);
 	if (r == -1) {
 		switch (errno) {
 		case EINTR:
@@ -449,8 +449,8 @@ net_read(struct connection *c, size_t *bytes)
 {
 	ssize_t		r;
 
-	r = read(c->fd, (c->rnb->buf + c->rnb->s_off),
-	    (c->rnb->b_len - c->rnb->s_off));
+	r = recv(c->fd, (c->rnb->buf + c->rnb->s_off),
+	    (c->rnb->b_len - c->rnb->s_off), 0);
 	if (r == -1) {
 		switch (errno) {
 		case EINTR:
diff --git a/src/seccomp.c b/src/seccomp.c
@@ -76,8 +76,10 @@ static struct sock_filter filter_kore[] = {
 
 	/* Net related. */
 	KORE_SYSCALL_ALLOW(poll),
+	KORE_SYSCALL_ALLOW(sendto),
 	KORE_SYSCALL_ALLOW(accept),
 	KORE_SYSCALL_ALLOW(sendfile),
+	KORE_SYSCALL_ALLOW(recvfrom),
 	KORE_SYSCALL_ALLOW(epoll_ctl),
 	KORE_SYSCALL_ALLOW(setsockopt),
 	KORE_SYSCALL_ALLOW(epoll_wait),
diff --git a/src/tasks.c b/src/tasks.c
@@ -279,7 +279,7 @@ task_channel_write(int fd, void *data, u_int32_t len)
 	d = data;
 	offset = 0;
 	while (offset != len) {
-		r = write(fd, d + offset, len - offset);
+		r = send(fd, d + offset, len - offset, 0);
 		if (r == -1 && errno == EINTR)
 			continue;
 		if (r == -1)