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:
Peter Maydell 2021-01-22 10:35:55 +00:00
commit 0e32462630
5 changed files with 174 additions and 24 deletions

View File

@ -33,8 +33,6 @@
#define TARGET_F_RDLCK 1 #define TARGET_F_RDLCK 1
#define TARGET_F_WRLCK 2 #define TARGET_F_WRLCK 2
#define TARGET_F_UNLCK 8 #define TARGET_F_UNLCK 8
#define TARGET_F_EXLCK 16
#define TARGET_F_SHLCK 32
#include "../generic/fcntl.h" #include "../generic/fcntl.h"
#endif #endif

View File

@ -119,11 +119,6 @@ struct target_f_owner_ex {
#define TARGET_F_UNLCK 2 #define TARGET_F_UNLCK 2
#endif #endif
#ifndef TARGET_F_EXLCK
#define TARGET_F_EXLCK 4
#define TARGET_F_SHLCK 8
#endif
#ifndef TARGET_HAVE_ARCH_STRUCT_FLOCK #ifndef TARGET_HAVE_ARCH_STRUCT_FLOCK
#ifndef TARGET_ARCH_FLOCK_PAD #ifndef TARGET_ARCH_FLOCK_PAD
#define TARGET_ARCH_FLOCK_PAD #define TARGET_ARCH_FLOCK_PAD

View File

@ -6,8 +6,11 @@
#include <sys/select.h> #include <sys/select.h>
#include <sys/mount.h> #include <sys/mount.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/tcp.h> #include <netinet/tcp.h>
#include <netinet/udp.h>
#include <linux/if_packet.h> #include <linux/if_packet.h>
#include <linux/in6.h>
#include <linux/netlink.h> #include <linux/netlink.h>
#include <sched.h> #include <sched.h>
#include "qemu.h" #include "qemu.h"
@ -2066,11 +2069,34 @@ print_fcntl(void *cpu_env, const struct syscallname *name,
break; break;
case TARGET_F_SETLEASE: case TARGET_F_SETLEASE:
qemu_log("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; break;
case TARGET_F_GETLEASE: case TARGET_F_GETLEASE:
qemu_log("F_GETLEASE"); qemu_log("F_GETLEASE");
break; 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: case TARGET_F_SETPIPE_SZ:
qemu_log("F_SETPIPE_SZ,"); qemu_log("F_SETPIPE_SZ,");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1); 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: case TARGET_F_GETPIPE_SZ:
qemu_log("F_GETPIPE_SZ"); qemu_log("F_GETPIPE_SZ");
break; break;
case TARGET_F_DUPFD_CLOEXEC: #endif
qemu_log("F_DUPFD_CLOEXEC,"); #ifdef F_ADD_SEALS
print_raw_param(TARGET_ABI_FMT_ld, arg2, 1); case TARGET_F_ADD_SEALS:
qemu_log("F_ADD_SEALS,");
print_raw_param("0x"TARGET_ABI_FMT_lx, arg2, 1);
break; break;
case TARGET_F_NOTIFY: case TARGET_F_GET_SEALS:
qemu_log("F_NOTIFY,"); qemu_log("F_GET_SEALS");
print_raw_param(TARGET_ABI_FMT_ld, arg2, 0);
break; break;
#endif
default: default:
print_raw_param(TARGET_ABI_FMT_ld, arg1, 0); print_raw_param(TARGET_ABI_FMT_ld, arg1, 0);
print_pointer(arg2, 1); 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_raw_param(TARGET_ABI_FMT_ld, optname, 0);
print_pointer(optval, 0); print_pointer(optval, 0);
break; 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: case SOL_IP:
qemu_log("SOL_IP,"); qemu_log("SOL_IP,");
print_raw_param(TARGET_ABI_FMT_ld, optname, 0); print_raw_param(TARGET_ABI_FMT_ld, optname, 0);
@ -2730,6 +2763,113 @@ print_optint:
break; break;
} }
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: default:
print_raw_param(TARGET_ABI_FMT_ld, level, 0); print_raw_param(TARGET_ABI_FMT_ld, level, 0);
print_raw_param(TARGET_ABI_FMT_ld, optname, 0); print_raw_param(TARGET_ABI_FMT_ld, optname, 0);

View File

@ -51,12 +51,15 @@
#include <sys/sysinfo.h> #include <sys/sysinfo.h>
#include <sys/signalfd.h> #include <sys/signalfd.h>
//#include <sys/user.h> //#include <sys/user.h>
#include <netinet/in.h>
#include <netinet/ip.h> #include <netinet/ip.h>
#include <netinet/tcp.h> #include <netinet/tcp.h>
#include <netinet/udp.h>
#include <linux/wireless.h> #include <linux/wireless.h>
#include <linux/icmp.h> #include <linux/icmp.h>
#include <linux/icmpv6.h> #include <linux/icmpv6.h>
#include <linux/if_tun.h> #include <linux/if_tun.h>
#include <linux/in6.h>
#include <linux/errqueue.h> #include <linux/errqueue.h>
#include <linux/random.h> #include <linux/random.h>
#ifdef CONFIG_TIMERFD #ifdef CONFIG_TIMERFD
@ -2184,7 +2187,8 @@ static abi_long do_setsockopt(int sockfd, int level, int optname,
switch(level) { switch(level) {
case SOL_TCP: 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)) if (optlen < sizeof(uint32_t))
return -TARGET_EINVAL; return -TARGET_EINVAL;
@ -2270,6 +2274,7 @@ static abi_long do_setsockopt(int sockfd, int level, int optname,
case IPV6_RECVDSTOPTS: case IPV6_RECVDSTOPTS:
case IPV6_2292DSTOPTS: case IPV6_2292DSTOPTS:
case IPV6_TCLASS: case IPV6_TCLASS:
case IPV6_ADDR_PREFERENCES:
#ifdef IPV6_RECVPATHMTU #ifdef IPV6_RECVPATHMTU
case IPV6_RECVPATHMTU: case IPV6_RECVPATHMTU:
#endif #endif
@ -2832,7 +2837,8 @@ get_timeout:
} }
break; break;
case SOL_TCP: case SOL_TCP:
/* TCP options all take an 'int' value. */ case SOL_UDP:
/* TCP and UDP options all take an 'int' value. */
int_case: int_case:
if (get_user_u32(len, optlen)) if (get_user_u32(len, optlen))
return -TARGET_EFAULT; return -TARGET_EFAULT;
@ -2923,6 +2929,7 @@ get_timeout:
case IPV6_RECVDSTOPTS: case IPV6_RECVDSTOPTS:
case IPV6_2292DSTOPTS: case IPV6_2292DSTOPTS:
case IPV6_TCLASS: case IPV6_TCLASS:
case IPV6_ADDR_PREFERENCES:
#ifdef IPV6_RECVPATHMTU #ifdef IPV6_RECVPATHMTU
case IPV6_RECVPATHMTU: case IPV6_RECVPATHMTU:
#endif #endif
@ -6639,6 +6646,14 @@ static int target_to_host_fcntl_cmd(int cmd)
case TARGET_F_GETPIPE_SZ: case TARGET_F_GETPIPE_SZ:
ret = F_GETPIPE_SZ; ret = F_GETPIPE_SZ;
break; 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 #endif
default: default:
ret = -TARGET_EINVAL; ret = -TARGET_EINVAL;
@ -6664,8 +6679,6 @@ static int target_to_host_fcntl_cmd(int cmd)
TRANSTBL_CONVERT(F_RDLCK); \ TRANSTBL_CONVERT(F_RDLCK); \
TRANSTBL_CONVERT(F_WRLCK); \ TRANSTBL_CONVERT(F_WRLCK); \
TRANSTBL_CONVERT(F_UNLCK); \ TRANSTBL_CONVERT(F_UNLCK); \
TRANSTBL_CONVERT(F_EXLCK); \
TRANSTBL_CONVERT(F_SHLCK); \
} }
static int target_to_host_flock(int type) 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_GETLEASE:
case TARGET_F_SETPIPE_SZ: case TARGET_F_SETPIPE_SZ:
case TARGET_F_GETPIPE_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)); ret = get_errno(safe_fcntl(fd, host_cmd, arg));
break; break;

View File

@ -2408,12 +2408,14 @@ struct target_statfs64 {
#endif #endif
#define TARGET_F_LINUX_SPECIFIC_BASE 1024 #define TARGET_F_LINUX_SPECIFIC_BASE 1024
#define TARGET_F_SETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 0) #define TARGET_F_SETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 0)
#define TARGET_F_GETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 1) #define TARGET_F_GETLEASE (TARGET_F_LINUX_SPECIFIC_BASE + 1)
#define TARGET_F_DUPFD_CLOEXEC (TARGET_F_LINUX_SPECIFIC_BASE + 6) #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_NOTIFY (TARGET_F_LINUX_SPECIFIC_BASE + 2)
#define TARGET_F_GETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 8) #define TARGET_F_SETPIPE_SZ (TARGET_F_LINUX_SPECIFIC_BASE + 7)
#define TARGET_F_NOTIFY (TARGET_F_LINUX_SPECIFIC_BASE+2) #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" #include "target_fcntl.h"