From: Mathis Marion Date: Tue, 7 Mar 2023 15:42:55 +0000 (+0100) Subject: linux-user: fix sockaddr_in6 endianness X-Git-Tag: qemu-xen-4.18.0-rc5^2~1^2~111 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=b57641e907acadd7593e0fec4ef52a21c9864aa7;p=qemu-xen.git linux-user: fix sockaddr_in6 endianness The sin6_scope_id field uses the host byte order, so there is a conversion to be made when host and target endianness differ. Signed-off-by: Mathis Marion Reviewed-by: Laurent Vivier Reviewed-by: Philippe Mathieu-Daudé Message-Id: <20230307154256.101528-2-Mathis.Marion@silabs.com> Signed-off-by: Laurent Vivier (cherry picked from commit 44cf6731d6b9a48bcd57392e8cd6f0f712aaa677) Signed-off-by: Michael Tokarev --- diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 24b25759be..106d5ed05b 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -1755,6 +1755,11 @@ static inline abi_long target_to_host_sockaddr(int fd, struct sockaddr *addr, lladdr = (struct target_sockaddr_ll *)addr; lladdr->sll_ifindex = tswap32(lladdr->sll_ifindex); lladdr->sll_hatype = tswap16(lladdr->sll_hatype); + } else if (sa_family == AF_INET6) { + struct sockaddr_in6 *in6addr; + + in6addr = (struct sockaddr_in6 *)addr; + in6addr->sin6_scope_id = tswap32(in6addr->sin6_scope_id); } unlock_user(target_saddr, target_addr, 0);