linux-user pull request 20210119-v3
Remove obsolete F_SHLCK and F_EXLCK translation Update sockopt Add F_ADD_SEALS and F_GET_SEALS -----BEGIN PGP SIGNATURE----- iQJGBAABCAAwFiEEzS913cjjpNwuT1Fz8ww4vT8vvjwFAmAJdIASHGxhdXJlbnRA dml2aWVyLmV1AAoJEPMMOL0/L748s9sQAJ4P5UqUya5NeIlZPpFlrb72D+7ZCW4d nOJ8gwa54XRnMkp0Fy/yLEf/+5+OJidBiDJA9F8jr5rUsFfCH1hRw6dlyPJlHAh7 4PssUIlTBU/oqUzqlttToQAJ/Hzr9HAIBBEghVPgVqvu62gGipa/TvHouOO5rXuD W0nANWqUX4X+qTA/u9DGln1b5TuL+bo380Lc4RGx8/fZH4aNXPkEmBNibnQmfJCH jnhcPUM1o+BZJIFSQ1NlzM1nORJP+dya7Q3BklRyZO7kor1Spn57dzeVQHLNIQWb XG3Z15UtxnYdL1wBH3F3CwsyqvRWxH6Zz9jvhMwbW6zOnuD6gcknfjRufNb75zXe +WzsyU3MR3R+OumdnshNRcg83BJAXWKMaATsEup2gSqLRcC3VLGN74U7kUZbOQ6A m2TgfdrQ5OeTEAXIM2RmJlhLatDiVHzeEpsV2iid71K7hI4H36kTiedF29rUOr9I 3tkaEXe3caTMAWClg4AgDxgvXPG7VaK7Efl/x4YZPG8QZY9KJyjfFZzs7q0nytkX eckpwfelyqXY3hiao/yAui7jUQh83igq443BLolRQ0iq/yzhud5kv5SL1UYTOe1P UGRXWGgnAMMjGcgbKMhT6RnJFxrQS+kD2Gy6F9UdqBy7iYNy+S6k3A5ByfgJt14C 3GCX5uFGPgaK =eLdz -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-6.0-pull-request' into staging linux-user pull request 20210119-v3 Remove obsolete F_SHLCK and F_EXLCK translation Update sockopt Add F_ADD_SEALS and F_GET_SEALS # gpg: Signature made Thu 21 Jan 2021 12:33:04 GMT # gpg: using RSA key CD2F75DDC8E3A4DC2E4F5173F30C38BD3F2FBE3C # gpg: issuer "laurent@vivier.eu" # gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [full] # gpg: aka "Laurent Vivier <laurent@vivier.eu>" [full] # gpg: aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [full] # Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F 5173 F30C 38BD 3F2F BE3C * remotes/vivier2/tags/linux-user-for-6.0-pull-request: linux-user: Remove obsolete F_SHLCK and F_EXLCK translation linux-user: Add IPv6 options to do_print_sockopt() linux-user: add missing IPv6 get/setsockopt option linux-user: add missing UDP get/setsockopt option linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
0e32462630
@ -33,8 +33,6 @@
|
||||
#define TARGET_F_RDLCK 1
|
||||
#define TARGET_F_WRLCK 2
|
||||
#define TARGET_F_UNLCK 8
|
||||
#define TARGET_F_EXLCK 16
|
||||
#define TARGET_F_SHLCK 32
|
||||
|
||||
#include "../generic/fcntl.h"
|
||||
#endif
|
||||
|
@ -119,11 +119,6 @@ struct target_f_owner_ex {
|
||||
#define TARGET_F_UNLCK 2
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_F_EXLCK
|
||||
#define TARGET_F_EXLCK 4
|
||||
#define TARGET_F_SHLCK 8
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_HAVE_ARCH_STRUCT_FLOCK
|
||||
#ifndef TARGET_ARCH_FLOCK_PAD
|
||||
#define TARGET_ARCH_FLOCK_PAD
|
||||
|
@ -6,8 +6,11 @@
|
||||
#include <sys/select.h>
|
||||
#include <sys/mount.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <netinet/udp.h>
|
||||
#include <linux/if_packet.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/netlink.h>
|
||||
#include <sched.h>
|
||||
#include "qemu.h"
|
||||
@ -2066,11 +2069,34 @@ print_fcntl(void *cpu_env, const struct syscallname *name,
|
||||
break;
|
||||
case TARGET_F_SETLEASE:
|
||||
qemu_log("F_SETLEASE,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
|
||||
break;
|
||||
case TARGET_F_GETLEASE:
|
||||
qemu_log("F_GETLEASE");
|
||||
break;
|
||||
#ifdef F_DUPFD_CLOEXEC
|
||||
case TARGET_F_DUPFD_CLOEXEC:
|
||||
qemu_log("F_DUPFD_CLOEXEC,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
|
||||
break;
|
||||
#endif
|
||||
case TARGET_F_NOTIFY:
|
||||
qemu_log("F_NOTIFY,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
|
||||
break;
|
||||
#ifdef F_GETOWN_EX
|
||||
case TARGET_F_GETOWN_EX:
|
||||
qemu_log("F_GETOWN_EX,");
|
||||
print_pointer(arg2, 1);
|
||||
break;
|
||||
#endif
|
||||
#ifdef F_SETOWN_EX
|
||||
case TARGET_F_SETOWN_EX:
|
||||
qemu_log("F_SETOWN_EX,");
|
||||
print_pointer(arg2, 1);
|
||||
break;
|
||||
#endif
|
||||
#ifdef F_SETPIPE_SZ
|
||||
case TARGET_F_SETPIPE_SZ:
|
||||
qemu_log("F_SETPIPE_SZ,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
|
||||
@ -2078,14 +2104,16 @@ print_fcntl(void *cpu_env, const struct syscallname *name,
|
||||
case TARGET_F_GETPIPE_SZ:
|
||||
qemu_log("F_GETPIPE_SZ");
|
||||
break;
|
||||
case TARGET_F_DUPFD_CLOEXEC:
|
||||
qemu_log("F_DUPFD_CLOEXEC,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1);
|
||||
#endif
|
||||
#ifdef F_ADD_SEALS
|
||||
case TARGET_F_ADD_SEALS:
|
||||
qemu_log("F_ADD_SEALS,");
|
||||
print_raw_param("0x"TARGET_ABI_FMT_lx, arg2, 1);
|
||||
break;
|
||||
case TARGET_F_NOTIFY:
|
||||
qemu_log("F_NOTIFY,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
|
||||
case TARGET_F_GET_SEALS:
|
||||
qemu_log("F_GET_SEALS");
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
|
||||
print_pointer(arg2, 1);
|
||||
@ -2619,6 +2647,11 @@ static void do_print_sockopt(const char *name, abi_long arg1)
|
||||
print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
|
||||
print_pointer(optval, 0);
|
||||
break;
|
||||
case SOL_UDP:
|
||||
qemu_log("SOL_UDP,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
|
||||
print_pointer(optval, 0);
|
||||
break;
|
||||
case SOL_IP:
|
||||
qemu_log("SOL_IP,");
|
||||
print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
|
||||
@ -2730,6 +2763,113 @@ print_optint:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case SOL_IPV6:
|
||||
qemu_log("SOL_IPV6,");
|
||||
switch (optname) {
|
||||
case IPV6_MTU_DISCOVER:
|
||||
qemu_log("IPV6_MTU_DISCOVER,");
|
||||
goto print_optint;
|
||||
case IPV6_MTU:
|
||||
qemu_log("IPV6_MTU,");
|
||||
goto print_optint;
|
||||
case IPV6_V6ONLY:
|
||||
qemu_log("IPV6_V6ONLY,");
|
||||
goto print_optint;
|
||||
case IPV6_RECVPKTINFO:
|
||||
qemu_log("IPV6_RECVPKTINFO,");
|
||||
goto print_optint;
|
||||
case IPV6_UNICAST_HOPS:
|
||||
qemu_log("IPV6_UNICAST_HOPS,");
|
||||
goto print_optint;
|
||||
case IPV6_MULTICAST_HOPS:
|
||||
qemu_log("IPV6_MULTICAST_HOPS,");
|
||||
goto print_optint;
|
||||
case IPV6_MULTICAST_LOOP:
|
||||
qemu_log("IPV6_MULTICAST_LOOP,");
|
||||
goto print_optint;
|
||||
case IPV6_RECVERR:
|
||||
qemu_log("IPV6_RECVERR,");
|
||||
goto print_optint;
|
||||
case IPV6_RECVHOPLIMIT:
|
||||
qemu_log("IPV6_RECVHOPLIMIT,");
|
||||
goto print_optint;
|
||||
case IPV6_2292HOPLIMIT:
|
||||
qemu_log("IPV6_2292HOPLIMIT,");
|
||||
goto print_optint;
|
||||
case IPV6_CHECKSUM:
|
||||
qemu_log("IPV6_CHECKSUM,");
|
||||
goto print_optint;
|
||||
case IPV6_ADDRFORM:
|
||||
qemu_log("IPV6_ADDRFORM,");
|
||||
goto print_optint;
|
||||
case IPV6_2292PKTINFO:
|
||||
qemu_log("IPV6_2292PKTINFO,");
|
||||
goto print_optint;
|
||||
case IPV6_RECVTCLASS:
|
||||
qemu_log("IPV6_RECVTCLASS,");
|
||||
goto print_optint;
|
||||
case IPV6_RECVRTHDR:
|
||||
qemu_log("IPV6_RECVRTHDR,");
|
||||
goto print_optint;
|
||||
case IPV6_2292RTHDR:
|
||||
qemu_log("IPV6_2292RTHDR,");
|
||||
goto print_optint;
|
||||
case IPV6_RECVHOPOPTS:
|
||||
qemu_log("IPV6_RECVHOPOPTS,");
|
||||
goto print_optint;
|
||||
case IPV6_2292HOPOPTS:
|
||||
qemu_log("IPV6_2292HOPOPTS,");
|
||||
goto print_optint;
|
||||
case IPV6_RECVDSTOPTS:
|
||||
qemu_log("IPV6_RECVDSTOPTS,");
|
||||
goto print_optint;
|
||||
case IPV6_2292DSTOPTS:
|
||||
qemu_log("IPV6_2292DSTOPTS,");
|
||||
goto print_optint;
|
||||
case IPV6_TCLASS:
|
||||
qemu_log("IPV6_TCLASS,");
|
||||
goto print_optint;
|
||||
case IPV6_ADDR_PREFERENCES:
|
||||
qemu_log("IPV6_ADDR_PREFERENCES,");
|
||||
goto print_optint;
|
||||
#ifdef IPV6_RECVPATHMTU
|
||||
case IPV6_RECVPATHMTU:
|
||||
qemu_log("IPV6_RECVPATHMTU,");
|
||||
goto print_optint;
|
||||
#endif
|
||||
#ifdef IPV6_TRANSPARENT
|
||||
case IPV6_TRANSPARENT:
|
||||
qemu_log("IPV6_TRANSPARENT,");
|
||||
goto print_optint;
|
||||
#endif
|
||||
#ifdef IPV6_FREEBIND
|
||||
case IPV6_FREEBIND:
|
||||
qemu_log("IPV6_FREEBIND,");
|
||||
goto print_optint;
|
||||
#endif
|
||||
#ifdef IPV6_RECVORIGDSTADDR
|
||||
case IPV6_RECVORIGDSTADDR:
|
||||
qemu_log("IPV6_RECVORIGDSTADDR,");
|
||||
goto print_optint;
|
||||
#endif
|
||||
case IPV6_PKTINFO:
|
||||
qemu_log("IPV6_PKTINFO,");
|
||||
print_pointer(optval, 0);
|
||||
break;
|
||||
case IPV6_ADD_MEMBERSHIP:
|
||||
qemu_log("IPV6_ADD_MEMBERSHIP,");
|
||||
print_pointer(optval, 0);
|
||||
break;
|
||||
case IPV6_DROP_MEMBERSHIP:
|
||||
qemu_log("IPV6_DROP_MEMBERSHIP,");
|
||||
print_pointer(optval, 0);
|
||||
break;
|
||||
default:
|
||||
print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
|
||||
print_pointer(optval, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
print_raw_param(TARGET_ABI_FMT_ld, level, 0);
|
||||
print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
|
||||
|
@ -51,12 +51,15 @@
|
||||
#include <sys/sysinfo.h>
|
||||
#include <sys/signalfd.h>
|
||||
//#include <sys/user.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netinet/ip.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <netinet/udp.h>
|
||||
#include <linux/wireless.h>
|
||||
#include <linux/icmp.h>
|
||||
#include <linux/icmpv6.h>
|
||||
#include <linux/if_tun.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/errqueue.h>
|
||||
#include <linux/random.h>
|
||||
#ifdef CONFIG_TIMERFD
|
||||
@ -2184,7 +2187,8 @@ static abi_long do_setsockopt(int sockfd, int level, int optname,
|
||||
|
||||
switch(level) {
|
||||
case SOL_TCP:
|
||||
/* TCP options all take an 'int' value. */
|
||||
case SOL_UDP:
|
||||
/* TCP and UDP options all take an 'int' value. */
|
||||
if (optlen < sizeof(uint32_t))
|
||||
return -TARGET_EINVAL;
|
||||
|
||||
@ -2270,6 +2274,7 @@ static abi_long do_setsockopt(int sockfd, int level, int optname,
|
||||
case IPV6_RECVDSTOPTS:
|
||||
case IPV6_2292DSTOPTS:
|
||||
case IPV6_TCLASS:
|
||||
case IPV6_ADDR_PREFERENCES:
|
||||
#ifdef IPV6_RECVPATHMTU
|
||||
case IPV6_RECVPATHMTU:
|
||||
#endif
|
||||
@ -2832,7 +2837,8 @@ get_timeout:
|
||||
}
|
||||
break;
|
||||
case SOL_TCP:
|
||||
/* TCP options all take an 'int' value. */
|
||||
case SOL_UDP:
|
||||
/* TCP and UDP options all take an 'int' value. */
|
||||
int_case:
|
||||
if (get_user_u32(len, optlen))
|
||||
return -TARGET_EFAULT;
|
||||
@ -2923,6 +2929,7 @@ get_timeout:
|
||||
case IPV6_RECVDSTOPTS:
|
||||
case IPV6_2292DSTOPTS:
|
||||
case IPV6_TCLASS:
|
||||
case IPV6_ADDR_PREFERENCES:
|
||||
#ifdef IPV6_RECVPATHMTU
|
||||
case IPV6_RECVPATHMTU:
|
||||
#endif
|
||||
@ -6639,6 +6646,14 @@ static int target_to_host_fcntl_cmd(int cmd)
|
||||
case TARGET_F_GETPIPE_SZ:
|
||||
ret = F_GETPIPE_SZ;
|
||||
break;
|
||||
#endif
|
||||
#ifdef F_ADD_SEALS
|
||||
case TARGET_F_ADD_SEALS:
|
||||
ret = F_ADD_SEALS;
|
||||
break;
|
||||
case TARGET_F_GET_SEALS:
|
||||
ret = F_GET_SEALS;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
ret = -TARGET_EINVAL;
|
||||
@ -6664,8 +6679,6 @@ static int target_to_host_fcntl_cmd(int cmd)
|
||||
TRANSTBL_CONVERT(F_RDLCK); \
|
||||
TRANSTBL_CONVERT(F_WRLCK); \
|
||||
TRANSTBL_CONVERT(F_UNLCK); \
|
||||
TRANSTBL_CONVERT(F_EXLCK); \
|
||||
TRANSTBL_CONVERT(F_SHLCK); \
|
||||
}
|
||||
|
||||
static int target_to_host_flock(int type)
|
||||
@ -6931,6 +6944,8 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
|
||||
case TARGET_F_GETLEASE:
|
||||
case TARGET_F_SETPIPE_SZ:
|
||||
case TARGET_F_GETPIPE_SZ:
|
||||
case TARGET_F_ADD_SEALS:
|
||||
case TARGET_F_GET_SEALS:
|
||||
ret = get_errno(safe_fcntl(fd, host_cmd, arg));
|
||||
break;
|
||||
|
||||
|
@ -2408,12 +2408,14 @@ struct target_statfs64 {
|
||||
#endif
|
||||
|
||||
#define TARGET_F_LINUX_SPECIFIC_BASE 1024
|
||||
#define TARGET_F_SETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 0)
|
||||
#define TARGET_F_GETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 1)
|
||||
#define TARGET_F_DUPFD_CLOEXEC (TARGET_F_LINUX_SPECIFIC_BASE + 6)
|
||||
#define TARGET_F_SETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 7)
|
||||
#define TARGET_F_GETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 8)
|
||||
#define TARGET_F_NOTIFY (TARGET_F_LINUX_SPECIFIC_BASE+2)
|
||||
#define TARGET_F_SETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 0)
|
||||
#define TARGET_F_GETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 1)
|
||||
#define TARGET_F_DUPFD_CLOEXEC (TARGET_F_LINUX_SPECIFIC_BASE + 6)
|
||||
#define TARGET_F_NOTIFY (TARGET_F_LINUX_SPECIFIC_BASE + 2)
|
||||
#define TARGET_F_SETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 7)
|
||||
#define TARGET_F_GETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 8)
|
||||
#define TARGET_F_ADD_SEALS (TARGET_F_LINUX_SPECIFIC_BASE + 9)
|
||||
#define TARGET_F_GET_SEALS (TARGET_F_LINUX_SPECIFIC_BASE + 10)
|
||||
|
||||
#include "target_fcntl.h"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user