summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortobias <tobias@openbsd.org>2015-03-26 21:22:50 +0000
committertobias <tobias@openbsd.org>2015-03-26 21:22:50 +0000
commit0a2929149fa9c8b1537bf60542d3e0163a9a0777 (patch)
tree42c40c16c72bb382de7dd4b5852030e6c643c15c
parentFix error message in case of write failure. (diff)
downloadwireguard-openbsd-0a2929149fa9c8b1537bf60542d3e0163a9a0777.tar.xz
wireguard-openbsd-0a2929149fa9c8b1537bf60542d3e0163a9a0777.zip
The code in socks.c writes multiple times in a row to a socket. If the
socket becomes invalid between these calls (e.g. connection closed), write will throw SIGPIPE. With this patch, SIGPIPE is ignored so we can handle write's -1 return value (errno will be EPIPE). Ultimately, it leads to program exit, too -- but with nicer error message. :) with input by and ok djm
-rw-r--r--usr.bin/nc/netcat.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/usr.bin/nc/netcat.c b/usr.bin/nc/netcat.c
index 88a2a25053f..905ae4ea6d9 100644
--- a/usr.bin/nc/netcat.c
+++ b/usr.bin/nc/netcat.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: netcat.c,v 1.128 2015/03/26 10:36:03 tobias Exp $ */
+/* $OpenBSD: netcat.c,v 1.129 2015/03/26 21:22:50 tobias Exp $ */
/*
* Copyright (c) 2001 Eric Jackson <ericj@monkey.org>
*
@@ -44,15 +44,16 @@
#include <err.h>
#include <errno.h>
+#include <fcntl.h>
+#include <limits.h>
#include <netdb.h>
#include <poll.h>
+#include <signal.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <fcntl.h>
-#include <limits.h>
#include "atomicio.h"
#ifndef SUN_LEN
@@ -141,6 +142,8 @@ main(int argc, char *argv[])
uport = NULL;
sv = NULL;
+ signal(SIGPIPE, SIG_IGN);
+
while ((ch = getopt(argc, argv,
"46DdFhI:i:klNnO:P:p:rSs:tT:UuV:vw:X:x:z")) != -1) {
switch (ch) {