1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
Description: implements accept via accept4 without breaking userspace
Index: uts/usr/src/uts/common/fs/sockfs/socksyscalls.c
===================================================================
--- uts.orig/usr/src/uts/common/fs/sockfs/socksyscalls.c 2014-03-01 16:18:28.000000000 +0400
+++ uts/usr/src/uts/common/fs/sockfs/socksyscalls.c 2014-04-02 17:54:58.629494896 +0400
@@ -623,7 +623,7 @@
/*ARGSUSED3*/
int
-accept(int sock, struct sockaddr *name, socklen_t *namelenp, int version,
+accept4(int sock, struct sockaddr *name, socklen_t *namelenp, int version,
int flags)
{
struct sonode *so;
@@ -638,7 +638,7 @@
struct sockaddr *addrp;
socklen_t addrlen;
- dprint(1, ("accept(%d, %p, %p)\n",
+ dprint(1, ("accept4(%d, %p, %p)\n",
sock, (void *)name, (void *)namelenp));
if (flags & ~(SOCK_CLOEXEC|SOCK_NONBLOCK|SOCK_NDELAY)) {
@@ -769,6 +769,12 @@
}
int
+accept(int sock, struct sockaddr *name, socklen_t *namelenp, int version)
+{
+ return accept4(sock, name, namelenp, version, 0);
+}
+
+int
connect(int sock, struct sockaddr *name, socklen_t namelen, int version)
{
struct sonode *so;
Index: uts/usr/src/uts/common/os/sysent.c
===================================================================
--- uts.orig/usr/src/uts/common/os/sysent.c 2014-04-02 17:54:58.387485689 +0400
+++ uts/usr/src/uts/common/os/sysent.c 2014-04-02 17:54:58.632725887 +0400
@@ -310,7 +310,8 @@
int so_socketpair(int[2]);
int bind(int, struct sockaddr *, socklen_t, int);
int listen(int, int, int);
-int accept(int, struct sockaddr *, socklen_t *, int, int);
+int accept(int, struct sockaddr *, socklen_t *, int);
+int accept4(int, struct sockaddr *, socklen_t *, int, int);
int connect(int, struct sockaddr *, socklen_t, int);
int shutdown(int, int, int);
ssize_t recv(int, void *, size_t, int);
@@ -720,7 +721,7 @@
/* 223 */ IF_LP64(
SYSENT_NOSYS(),
SYSENT_CI("pwrite64", pwrite64, 5)),
- /* 224 */ SYSENT_LOADABLE(), /* (was creat64) */
+ /* 224 */ SYSENT_CI("accept4", accept4, 5),
/* 225 */ IF_LP64(
SYSENT_NOSYS(),
SYSENT_CI("open64", open64, 3)),
@@ -732,7 +733,7 @@
/* 231 */ SYSENT_CI("so_socketpair", so_socketpair, 1),
/* 232 */ SYSENT_CI("bind", bind, 4),
/* 233 */ SYSENT_CI("listen", listen, 3),
- /* 234 */ SYSENT_CI("accept", accept, 5),
+ /* 234 */ SYSENT_CI("accept", accept, 4),
/* 235 */ SYSENT_CI("connect", connect, 4),
/* 236 */ SYSENT_CI("shutdown", shutdown, 3),
/* 237 */ SYSENT_CL("recv", recv, 4),
@@ -1047,7 +1048,7 @@
/* 221 */ SYSENT_CI("getrlimit64", getrlimit64, 2),
/* 222 */ SYSENT_CI("pread64", pread64, 5),
/* 223 */ SYSENT_CI("pwrite64", pwrite64, 5),
- /* 224 */ SYSENT_LOADABLE32(), /* (was creat64) */
+ /* 224 */ SYSENT_CI("accept4", accept4, 5),
/* 225 */ SYSENT_CI("open64", open64, 3),
/* 226 */ SYSENT_LOADABLE32(), /* rpcsys */
/* 227 */ SYSENT_CI("zone", zone, 6),
@@ -1057,7 +1058,7 @@
/* 231 */ SYSENT_CI("so_socketpair", so_socketpair, 1),
/* 232 */ SYSENT_CI("bind", bind, 4),
/* 233 */ SYSENT_CI("listen", listen, 3),
- /* 234 */ SYSENT_CI("accept", accept, 5),
+ /* 234 */ SYSENT_CI("accept", accept, 4),
/* 235 */ SYSENT_CI("connect", connect, 4),
/* 236 */ SYSENT_CI("shutdown", shutdown, 3),
/* 237 */ SYSENT_CI("recv", recv32, 4),
Index: uts/usr/src/uts/intel/os/name_to_sysnum
===================================================================
--- uts.orig/usr/src/uts/intel/os/name_to_sysnum 2014-04-02 17:54:58.389432182 +0400
+++ uts/usr/src/uts/intel/os/name_to_sysnum 2014-04-02 17:54:58.634351005 +0400
@@ -207,6 +207,7 @@
getrlimit64 221
pread64 222
pwrite64 223
+accept4 224
open64 225
rpcmod 226
zone 227
Index: uts/usr/src/uts/sparc/os/name_to_sysnum
===================================================================
--- uts.orig/usr/src/uts/sparc/os/name_to_sysnum 2014-04-02 17:54:58.391531631 +0400
+++ uts/usr/src/uts/sparc/os/name_to_sysnum 2014-04-02 17:54:58.635722618 +0400
@@ -206,6 +206,7 @@
getrlimit64 221
pread64 222
pwrite64 223
+accept4 224
open64 225
rpcmod 226
zone 227
Index: uts/usr/src/uts/intel/ia32/ml/modstubs.s
===================================================================
--- uts.orig/usr/src/uts/intel/ia32/ml/modstubs.s 2014-04-02 17:54:49.803486497 +0400
+++ uts/usr/src/uts/intel/ia32/ml/modstubs.s 2014-04-02 17:54:58.638276404 +0400
@@ -470,6 +470,7 @@
NO_UNLOAD_STUB(sockfs, bind, nomod_zero);
NO_UNLOAD_STUB(sockfs, listen, nomod_zero);
NO_UNLOAD_STUB(sockfs, accept, nomod_zero);
+ NO_UNLOAD_STUB(sockfs, accept4, nomod_zero);
NO_UNLOAD_STUB(sockfs, connect, nomod_zero);
NO_UNLOAD_STUB(sockfs, shutdown, nomod_zero);
NO_UNLOAD_STUB(sockfs, recv, nomod_zero);
Index: uts/usr/src/uts/sparc/ml/modstubs.s
===================================================================
--- uts.orig/usr/src/uts/sparc/ml/modstubs.s 2014-04-02 17:54:49.815030700 +0400
+++ uts/usr/src/uts/sparc/ml/modstubs.s 2014-04-02 17:54:58.640779224 +0400
@@ -358,6 +358,7 @@
SCALL_NU_STUB(sockfs, bind, nomod_zero);
SCALL_NU_STUB(sockfs, listen, nomod_zero);
SCALL_NU_STUB(sockfs, accept, nomod_zero);
+ SCALL_NU_STUB(sockfs, accept4, nomod_zero);
SCALL_NU_STUB(sockfs, connect, nomod_zero);
SCALL_NU_STUB(sockfs, shutdown, nomod_zero);
SCALL_NU_STUB(sockfs, recv, nomod_zero);
Index: uts/usr/src/uts/common/sys/syscall.h
===================================================================
--- uts.orig/usr/src/uts/common/sys/syscall.h 2014-04-02 17:54:58.380386336 +0400
+++ uts/usr/src/uts/common/sys/syscall.h 2014-04-03 15:18:24.521689317 +0400
@@ -442,6 +442,7 @@
#define SYS_getrlimit64 221
#define SYS_pread64 222
#define SYS_pwrite64 223
+#define SYS_accept4 224
#define SYS_open64 225
#define SYS_rpcsys 226
#define SYS_zone 227
|