• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1From: Dan Gohman <dev@sunfishcode.online>
2Subject: [PATCH] Avoid storing unexpected values for `SO_RCVTIMEO_NEW` etc.
3
4This issue is reported upstream [here].
5
6[here]: https://gitlab.com/qemu-project/qemu/-/issues/885
7
8---
9 linux-user/generic/sockbits.h | 2 ++
10 linux-user/mips/sockbits.h    | 2 ++
11 linux-user/sparc/sockbits.h   | 2 ++
12 linux-user/syscall.c          | 6 ++++++
13 4 files changed, 12 insertions(+)
14
15diff --git a/linux-user/generic/sockbits.h b/linux-user/generic/sockbits.h
16index b3b4a8e44c..f95747e3cc 100644
17--- a/linux-user/generic/sockbits.h
18+++ b/linux-user/generic/sockbits.h
19@@ -36,6 +36,8 @@
20 #define TARGET_SO_SNDLOWAT     19
21 #define TARGET_SO_RCVTIMEO     20
22 #define TARGET_SO_SNDTIMEO     21
23+#define TARGET_SO_RCVTIMEO_NEW 66
24+#define TARGET_SO_SNDTIMEO_NEW 67
25
26 /* Security levels - as per NRL IPv6 - don't actually do anything */
27 #define TARGET_SO_SECURITY_AUTHENTICATION              22
28diff --git a/linux-user/mips/sockbits.h b/linux-user/mips/sockbits.h
29index 562cad88e2..4d411f7b61 100644
30--- a/linux-user/mips/sockbits.h
31+++ b/linux-user/mips/sockbits.h
32@@ -39,6 +39,8 @@
33 #define TARGET_SO_RCVLOWAT     0x1004  /* receive low-water mark */
34 #define TARGET_SO_SNDTIMEO     0x1005  /* send timeout */
35 #define TARGET_SO_RCVTIMEO     0x1006  /* receive timeout */
36+#define TARGET_SO_RCVTIMEO_NEW 66
37+#define TARGET_SO_SNDTIMEO_NEW 67
38 #define TARGET_SO_ACCEPTCONN   0x1009
39 #define TARGET_SO_PROTOCOL     0x1028  /* protocol type */
40 #define TARGET_SO_DOMAIN       0x1029  /* domain/socket family */
41diff --git a/linux-user/sparc/sockbits.h b/linux-user/sparc/sockbits.h
42index 0a822e3e1f..8420ef9953 100644
43--- a/linux-user/sparc/sockbits.h
44+++ b/linux-user/sparc/sockbits.h
45@@ -26,6 +26,8 @@
46 #define TARGET_SO_SNDLOWAT     0x1000
47 #define TARGET_SO_RCVTIMEO     0x2000
48 #define TARGET_SO_SNDTIMEO     0x4000
49+#define TARGET_SO_RCVTIMEO_NEW 68
50+#define TARGET_SO_SNDTIMEO_NEW 69
51 #define TARGET_SO_ACCEPTCONN   0x8000
52
53 #define TARGET_SO_SNDBUF       0x1001
54diff --git a/linux-user/syscall.c b/linux-user/syscall.c
55index a8eae3c4ac..8326e03a19 100644
56--- a/linux-user/syscall.c
57+++ b/linux-user/syscall.c
58@@ -2348,6 +2348,9 @@ set_timeout:
59         case TARGET_SO_SNDTIMEO:
60                 optname = SO_SNDTIMEO;
61                 goto set_timeout;
62+        case TARGET_SO_RCVTIMEO_NEW:
63+        case TARGET_SO_SNDTIMEO_NEW:
64+                return -TARGET_ENOPROTOOPT;
65         case TARGET_SO_ATTACH_FILTER:
66         {
67                 struct target_sock_fprog *tfprog;
68@@ -2595,6 +2598,9 @@ get_timeout:
69         case TARGET_SO_SNDTIMEO:
70             optname = SO_SNDTIMEO;
71             goto get_timeout;
72+        case TARGET_SO_RCVTIMEO_NEW:
73+        case TARGET_SO_SNDTIMEO_NEW:
74+            return -TARGET_ENOPROTOOPT;
75         case TARGET_SO_PEERCRED: {
76             struct ucred cr;
77             socklen_t crlen;
78--
792.32.0
80
81