From: Mathis Marion <mathis.marion@silabs.com>
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 <mathis.marion@silabs.com>
---
linux-user/syscall.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 247e20572d..bafa77d353 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1713,6 +1713,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);
--
2.39.2
On 7/3/23 16:42, Mathis Marion wrote: > From: Mathis Marion <mathis.marion@silabs.com> > > 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 <mathis.marion@silabs.com> > --- > linux-user/syscall.c | 5 +++++ > 1 file changed, 5 insertions(+) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Le 07/03/2023 à 16:42, Mathis Marion a écrit :
> From: Mathis Marion <mathis.marion@silabs.com>
>
> 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 <mathis.marion@silabs.com>
> ---
> linux-user/syscall.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 247e20572d..bafa77d353 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -1713,6 +1713,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);
>
Applied to my linux-user-for-8.0 branch.
Thanks,
Laurent
Le 07/03/2023 à 16:42, Mathis Marion a écrit :
> From: Mathis Marion <mathis.marion@silabs.com>
>
> 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 <mathis.marion@silabs.com>
> ---
> linux-user/syscall.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 247e20572d..bafa77d353 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -1713,6 +1713,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);
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
© 2016 - 2026 Red Hat, Inc.