* [PATCH v3 1/4] linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls
2020-12-18 19:32 [PATCH v3 0/4] fcntl and sockopt options Shu-Chun Weng via
@ 2020-12-18 19:32 ` Shu-Chun Weng via
2020-12-18 20:46 ` Laurent Vivier
2020-12-18 20:53 ` Laurent Vivier
2020-12-18 19:32 ` [PATCH v3 2/4] linux-user: add missing UDP get/setsockopt option Shu-Chun Weng via
` (2 subsequent siblings)
3 siblings, 2 replies; 7+ messages in thread
From: Shu-Chun Weng via @ 2020-12-18 19:32 UTC (permalink / raw)
To: qemu-devel, laurent; +Cc: Shu-Chun Weng
Also reorder blocks so that they are all in the same order everywhere.
Signed-off-by: Shu-Chun Weng <scw@google.com>
---
v1 -> v2:
Updated print_fcntl().
v2 -> v3:
Rebase to master on Dec 18, 2020
linux-user/strace.c | 39 ++++++++++++++++++++++++++++++++-------
linux-user/syscall.c | 10 ++++++++++
linux-user/syscall_defs.h | 14 ++++++++------
3 files changed, 50 insertions(+), 13 deletions(-)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index e00275fcb5..227812c07e 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -2066,11 +2066,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 +2101,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);
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 7bf99beb18..be39cf8215 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -6596,6 +6596,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;
@@ -6888,6 +6896,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;
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index b934d0b606..1beaa71d37 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2376,12 +2376,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"
--
2.29.2.684.gfbc64c5ab5-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/4] linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls
2020-12-18 19:32 ` [PATCH v3 1/4] linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls Shu-Chun Weng via
@ 2020-12-18 20:46 ` Laurent Vivier
2020-12-18 20:53 ` Laurent Vivier
1 sibling, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2020-12-18 20:46 UTC (permalink / raw)
To: Shu-Chun Weng, qemu-devel
Le 18/12/2020 à 20:32, Shu-Chun Weng via a écrit :
> Also reorder blocks so that they are all in the same order everywhere.
>
> Signed-off-by: Shu-Chun Weng <scw@google.com>
> ---
> v1 -> v2:
> Updated print_fcntl().
>
> v2 -> v3:
> Rebase to master on Dec 18, 2020
>
> linux-user/strace.c | 39 ++++++++++++++++++++++++++++++++-------
> linux-user/syscall.c | 10 ++++++++++
> linux-user/syscall_defs.h | 14 ++++++++------
> 3 files changed, 50 insertions(+), 13 deletions(-)
>
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index e00275fcb5..227812c07e 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -2066,11 +2066,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 +2101,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);
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 7bf99beb18..be39cf8215 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -6596,6 +6596,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;
> @@ -6888,6 +6896,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;
>
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index b934d0b606..1beaa71d37 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -2376,12 +2376,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"
>
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v3 1/4] linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls
2020-12-18 19:32 ` [PATCH v3 1/4] linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls Shu-Chun Weng via
2020-12-18 20:46 ` Laurent Vivier
@ 2020-12-18 20:53 ` Laurent Vivier
1 sibling, 0 replies; 7+ messages in thread
From: Laurent Vivier @ 2020-12-18 20:53 UTC (permalink / raw)
To: Shu-Chun Weng, qemu-devel
Le 18/12/2020 à 20:32, Shu-Chun Weng via a écrit :
> Also reorder blocks so that they are all in the same order everywhere.
>
> Signed-off-by: Shu-Chun Weng <scw@google.com>
> ---
> v1 -> v2:
> Updated print_fcntl().
>
> v2 -> v3:
> Rebase to master on Dec 18, 2020
>
> linux-user/strace.c | 39 ++++++++++++++++++++++++++++++++-------
> linux-user/syscall.c | 10 ++++++++++
> linux-user/syscall_defs.h | 14 ++++++++------
> 3 files changed, 50 insertions(+), 13 deletions(-)
>
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index e00275fcb5..227812c07e 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -2066,11 +2066,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 +2101,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);
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index 7bf99beb18..be39cf8215 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -6596,6 +6596,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;
> @@ -6888,6 +6896,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;
>
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index b934d0b606..1beaa71d37 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -2376,12 +2376,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"
>
>
Series applied to my linux-user-for-6.0 branch
Thanks,
Laurent
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 2/4] linux-user: add missing UDP get/setsockopt option
2020-12-18 19:32 [PATCH v3 0/4] fcntl and sockopt options Shu-Chun Weng via
2020-12-18 19:32 ` [PATCH v3 1/4] linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls Shu-Chun Weng via
@ 2020-12-18 19:32 ` Shu-Chun Weng via
2020-12-18 19:32 ` [PATCH v3 3/4] linux-user: add missing IPv6 " Shu-Chun Weng via
2020-12-18 19:32 ` [PATCH v3 4/4] linux-user: Add IPv6 options to do_print_sockopt() Shu-Chun Weng via
3 siblings, 0 replies; 7+ messages in thread
From: Shu-Chun Weng via @ 2020-12-18 19:32 UTC (permalink / raw)
To: qemu-devel, laurent; +Cc: Shu-Chun Weng
SOL_UDP manipulate options at UDP level. All six options currently defined
in linux source include/uapi/linux/udp.h take integer values.
Signed-off-by: Shu-Chun Weng <scw@google.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
v1 -> v2:
Split out SOL_UDP into own patch.
Updated do_print_sockopt().
v2 -> v3:
Rebase to master on Dec 18, 2020
linux-user/strace.c | 6 ++++++
linux-user/syscall.c | 7 +++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 227812c07e..64172de99d 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -7,6 +7,7 @@
#include <sys/mount.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
+#include <netinet/udp.h>
#include <linux/if_packet.h>
#include <linux/netlink.h>
#include <sched.h>
@@ -2644,6 +2645,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);
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index be39cf8215..8576ad24b7 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -53,6 +53,7 @@
//#include <sys/user.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>
@@ -2177,7 +2178,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;
@@ -2825,7 +2827,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;
--
2.29.2.684.gfbc64c5ab5-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 3/4] linux-user: add missing IPv6 get/setsockopt option
2020-12-18 19:32 [PATCH v3 0/4] fcntl and sockopt options Shu-Chun Weng via
2020-12-18 19:32 ` [PATCH v3 1/4] linux-user: Support F_ADD_SEALS and F_GET_SEALS fcntls Shu-Chun Weng via
2020-12-18 19:32 ` [PATCH v3 2/4] linux-user: add missing UDP get/setsockopt option Shu-Chun Weng via
@ 2020-12-18 19:32 ` Shu-Chun Weng via
2020-12-18 19:32 ` [PATCH v3 4/4] linux-user: Add IPv6 options to do_print_sockopt() Shu-Chun Weng via
3 siblings, 0 replies; 7+ messages in thread
From: Shu-Chun Weng via @ 2020-12-18 19:32 UTC (permalink / raw)
To: qemu-devel, laurent; +Cc: Shu-Chun Weng
IPV6_ADDR_PREFERENCES (RFC5014: Source address selection) was not supported.
Signed-off-by: Shu-Chun Weng <scw@google.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
v1 -> v2:
Split out IPV6 options into own patch.
do_print_sockopt() changes added in a separate patch since a large number of
unrelated changes are involved.
v2 -> v3:
Rebase to master on Dec 18, 2020
linux-user/syscall.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 8576ad24b7..cac4ec3b5a 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -51,6 +51,7 @@
#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>
@@ -2265,6 +2266,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
@@ -2919,6 +2921,7 @@ get_timeout:
case IPV6_RECVDSTOPTS:
case IPV6_2292DSTOPTS:
case IPV6_TCLASS:
+ case IPV6_ADDR_PREFERENCES:
#ifdef IPV6_RECVPATHMTU
case IPV6_RECVPATHMTU:
#endif
--
2.29.2.684.gfbc64c5ab5-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v3 4/4] linux-user: Add IPv6 options to do_print_sockopt()
2020-12-18 19:32 [PATCH v3 0/4] fcntl and sockopt options Shu-Chun Weng via
` (2 preceding siblings ...)
2020-12-18 19:32 ` [PATCH v3 3/4] linux-user: add missing IPv6 " Shu-Chun Weng via
@ 2020-12-18 19:32 ` Shu-Chun Weng via
3 siblings, 0 replies; 7+ messages in thread
From: Shu-Chun Weng via @ 2020-12-18 19:32 UTC (permalink / raw)
To: qemu-devel, laurent; +Cc: Shu-Chun Weng
Signed-off-by: Shu-Chun Weng <scw@google.com>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
v1 -> v2:
New: Add all IPV6 options to do_print_sockopt(), including the newly supported
IPV6_ADDR_PREFERENCES.
v2 -> v3:
Rebase to master on Dec 18, 2020
linux-user/strace.c | 108 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 108 insertions(+)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 64172de99d..bc3bb6b2f9 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -6,6 +6,7 @@
#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>
@@ -2761,6 +2762,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);
--
2.29.2.684.gfbc64c5ab5-goog
^ permalink raw reply related [flat|nested] 7+ messages in thread