[master,2/2] util: zero msghdr structures

Submitted by Kir Kolyshkin on Feb. 4, 2017, 10:35 p.m.

Details

Message ID 20170204223549.13560-3-kir@openvz.org
State New
Headers show

Commit Message

Kir Kolyshkin Feb. 4, 2017, 10:35 p.m.
From: Andrei Vagin <avagin@virtuozzo.com>

musl-libc fixed inconsistency between posix and kernl msghdr structures
by adding pad-s.

It initializes all pad-s before calling recvmsg and sendmsg syscalls.
CRIU calls raw system calls from pie code, so we need to intialize pads too.

In addition, we don't initialize msg_flags and iov_len.

https://github.com/xemul/criu/issues/276

Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
---
 include/common/scm-code.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Patch hide | download patch | download mbox

diff --git a/include/common/scm-code.c b/include/common/scm-code.c
index 3a88cb4..351c405 100644
--- a/include/common/scm-code.c
+++ b/include/common/scm-code.c
@@ -50,7 +50,8 @@  static int *scm_fdset_init(struct scm_fdset *fdset, struct sockaddr_un *saddr,
 int send_fds(int sock, struct sockaddr_un *saddr, int len,
 		int *fds, int nr_fds, void *data, unsigned ch_size)
 {
-	struct scm_fdset fdset;
+	/* In musl_libc the msghdr structure has pads which has to be zeroed */
+	struct scm_fdset fdset = {};
 	int *cmsg_data;
 	int i, min_fd, ret;
 
@@ -73,7 +74,8 @@  int send_fds(int sock, struct sockaddr_un *saddr, int len,
 
 int __recv_fds(int sock, int *fds, int nr_fds, void *data, unsigned ch_size, int flags)
 {
-	struct scm_fdset fdset;
+	/* In musl_libc the msghdr structure has pads which has to be zeroed */
+	struct scm_fdset fdset = {};
 	struct cmsghdr *cmsg;
 	int *cmsg_data;
 	int ret;