From d90522bc4ef003a3f643d53f390b77bc1e27b234 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 15 Dec 2024 16:07:20 +0100 Subject: [BOX32] Rollback simplied alignment of msghdr as cmsg also needs alignment (some docs are eroneous about cmsg_len field type) --- src/libtools/libc_net32.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/libtools/libc_net32.c') diff --git a/src/libtools/libc_net32.c b/src/libtools/libc_net32.c index 0dd1ca37..0c222e5c 100644 --- a/src/libtools/libc_net32.c +++ b/src/libtools/libc_net32.c @@ -42,7 +42,8 @@ EXPORT ssize_t my32_recvmsg(x64emu_t* emu, int socket, struct i386_msghdr* msg, { struct iovec iov[msg->msg_iovlen]; struct msghdr m; - AlignMsgHdr_32(&m, iov, msg); + uint8_t buff[msg->msg_controllen+256]; + AlignMsgHdr_32(&m, iov, buff, msg, 0); ssize_t ret = recvmsg(socket, &m, flags); UnalignMsgHdr_32(msg, &m); return ret; @@ -52,7 +53,8 @@ EXPORT ssize_t my32_sendmsg(x64emu_t* emu, int socket, struct i386_msghdr* msg, { struct iovec iov[msg->msg_iovlen]; struct msghdr m; - AlignMsgHdr_32(&m, iov, msg); + uint8_t buff[msg->msg_controllen+256]; + AlignMsgHdr_32(&m, iov, buff, msg, 1); ssize_t ret = sendmsg(socket, &m, flags); UnalignMsgHdr_32(msg, &m); return ret; @@ -62,13 +64,16 @@ EXPORT int my32_recvmmsg(x64emu_t* emu, int socket, struct i386_mmsghdr* msgs, u { struct mmsghdr m[vlen]; uint32_t iovlen = 0; + size_t ctrlen = 0; for(uint32_t i=0; iiovlen) iovlen = msgs[i].msg_hdr.msg_iovlen; + if(msgs[i].msg_hdr.msg_controllen>ctrlen) ctrlen = msgs[i].msg_hdr.msg_controllen; m[i].msg_len = msgs[i].msg_len; } struct iovec iov[vlen][iovlen]; + uint8_t buff[vlen][ctrlen+256]; for(uint32_t i=0; iiovlen) iovlen = msgs[i].msg_hdr.msg_iovlen; + if(msgs[i].msg_hdr.msg_controllen>ctrlen) ctrlen = msgs[i].msg_hdr.msg_controllen; m[i].msg_len = msgs[i].msg_len; } struct iovec iov[vlen][iovlen]; + uint8_t buff[vlen][ctrlen+256]; for(uint32_t i=0; i