mirror of
https://github.com/qemu/qemu.git
synced 2026-07-08 17:56:38 +00:00
linux-user: Use abi_int for imr_ifindex in ip_mreqn struct
Peter Hartley noticed, that in the qemu code the imr_ifindex member of struct target_ip_mreq needs to be of type "int" instead of "long", which is what the Linux kernel uses on all architectures. Adjust the type accordingly, and add a QEMU_BUILD_BUG_ON() checker to prevent such issues in the future. This change should fix multicast issues when using hosts and guests with different endianess or bit size. Reported-by: Peter Hartley <peter@talesfromthearmchair.net> Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/2553 Signed-off-by: Helge Deller <deller@gmx.de>
This commit is contained in:
@@ -2161,6 +2161,8 @@ static abi_long do_setsockopt(int sockfd, int level, int optname,
|
||||
|
||||
QEMU_BUILD_BUG_ON(sizeof(struct ip_mreq) !=
|
||||
sizeof(struct target_ip_mreq));
|
||||
QEMU_BUILD_BUG_ON(sizeof(struct ip_mreqn) !=
|
||||
sizeof(struct target_ip_mreqn));
|
||||
|
||||
if (optname == IP_MULTICAST_IF) {
|
||||
min_size = sizeof(struct in_addr);
|
||||
|
||||
@@ -210,7 +210,7 @@ struct target_ip_mreq {
|
||||
struct target_ip_mreqn {
|
||||
struct target_in_addr imr_multiaddr;
|
||||
struct target_in_addr imr_address;
|
||||
abi_long imr_ifindex;
|
||||
abi_int imr_ifindex;
|
||||
};
|
||||
|
||||
struct target_ip_mreq_source {
|
||||
|
||||
Reference in New Issue
Block a user