mirror of https://github.com/xemu-project/xemu.git
linux-user: convert sockaddr_ll from host to target
As we convert sockaddr for AF_PACKET family for sendto() (target to host) we need also to convert this for getsockname() (host to target). arping uses getsockname() to get the the interface address and uses this address with sendto(). Tested with: /sbin/arping -D -q -c2 -I eno1 192.168.122.88 ... getsockname(3, {sa_family=AF_PACKET, proto=0x806, if2, pkttype=PACKET_HOST, addr(6)={1, 10c37b6b9a76}, [18]) = 0 ... sendto(3, "..." 28, 0, {sa_family=AF_PACKET, proto=0x806, if2, pkttype=PACKET_HOST, addr(6)={1, ffffffffffff}, 20) = 28 ... Signed-off-by: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
This commit is contained in:
parent
c35e1f9c87
commit
a82ea9393d
|
@ -100,6 +100,7 @@ int __clone2(int (*fn)(void *), void *child_stack_base,
|
|||
#include <linux/route.h>
|
||||
#include <linux/filter.h>
|
||||
#include <linux/blkpg.h>
|
||||
#include <netpacket/packet.h>
|
||||
#include <linux/netlink.h>
|
||||
#ifdef CONFIG_RTNETLINK
|
||||
#include <linux/rtnetlink.h>
|
||||
|
@ -1383,6 +1384,10 @@ static inline abi_long host_to_target_sockaddr(abi_ulong target_addr,
|
|||
struct sockaddr_nl *target_nl = (struct sockaddr_nl *)target_saddr;
|
||||
target_nl->nl_pid = tswap32(target_nl->nl_pid);
|
||||
target_nl->nl_groups = tswap32(target_nl->nl_groups);
|
||||
} else if (addr->sa_family == AF_PACKET) {
|
||||
struct sockaddr_ll *target_ll = (struct sockaddr_ll *)target_saddr;
|
||||
target_ll->sll_ifindex = tswap32(target_ll->sll_ifindex);
|
||||
target_ll->sll_hatype = tswap16(target_ll->sll_hatype);
|
||||
}
|
||||
unlock_user(target_saddr, target_addr, len);
|
||||
|
||||
|
|
Loading…
Reference in New Issue