The mixing of libc and kernel versions of the layout of the `msghdr` struct causes EMSGSIZE to be returned by sendmsg if the `msghdr` struct is not zero-initialized (such that padding bytes comprise of uninitialized memory).
Other parts of the QEMU codebase appear to zero-initialize the `msghdr` struct to workaround these struct layout issues, except for do_sendrecvmsg_locked in linux-user/syscall.c. This patch zero-initializes the `msghdr` struct in do_sendrecvmsg_locked. Signed-off-by: Kenta Iwasaki <ke...@lithdew.net> --- linux-user/syscall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 95d79ddc43..f60b7e04d5 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -3337,7 +3337,7 @@ static abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr *msgp, int flags, int send) { abi_long ret, len; - struct msghdr msg; + struct msghdr msg = { 0 }; abi_ulong count; struct iovec *vec; abi_ulong target_vec; -- 2.31.0