summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>1998-02-07 16:33:34 +0000
committerderaadt <deraadt@openbsd.org>1998-02-07 16:33:34 +0000
commit54f8ded4b84b4a011ddb86fc805d7a14ea9cc0c7 (patch)
treea3f7daea86007fa55d79588121c7b7c385a8e627
parento Don't put newlines in syslog() messages and use %m, not strerror() (diff)
downloadwireguard-openbsd-54f8ded4b84b4a011ddb86fc805d7a14ea9cc0c7.tar.xz
wireguard-openbsd-54f8ded4b84b4a011ddb86fc805d7a14ea9cc0c7.zip
emulate linux connect() braindamage even better -- only do so on async
sockets; pb@fasterix.freenix.org
-rw-r--r--sys/compat/linux/linux_socket.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/compat/linux/linux_socket.c b/sys/compat/linux/linux_socket.c
index 43d64c7a8ae..e44dd950242 100644
--- a/sys/compat/linux/linux_socket.c
+++ b/sys/compat/linux/linux_socket.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: linux_socket.c,v 1.9 1997/12/14 20:51:16 deraadt Exp $ */
+/* $OpenBSD: linux_socket.c,v 1.10 1998/02/07 16:33:34 deraadt Exp $ */
/* $NetBSD: linux_socket.c,v 1.14 1996/04/05 00:01:50 christos Exp $ */
/*
@@ -204,10 +204,18 @@ linux_connect(p, uap, retval)
if (error == EISCONN) {
struct sys_getsockopt_args bga;
+ struct sys_fcntl_args fca;
void *status, *statusl;
int stat, statl = sizeof stat;
caddr_t sg;
+ SCARG(&fca, fd) = lca.s;
+ SCARG(&fca, cmd) = F_GETFL;
+ SCARG(&fca, arg) = 0;
+ if (sys_getsockopt(p, &fca, retval) == -1 ||
+ (*retval & O_NONBLOCK) == 0)
+ return error;
+
sg = stackgap_init(p->p_emul);
status = stackgap_alloc(&sg, sizeof stat);
statusl = stackgap_alloc(&sg, sizeof statusl);