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