diff options
| author | jsing <> | 2019-02-26 17:32:47 +0000 |
|---|---|---|
| committer | jsing <> | 2019-02-26 17:32:47 +0000 |
| commit | 3fca1fab6088ee67b30c2f9bc54f0d9669d75296 (patch) | |
| tree | 3c430b276af6c2bc0df271cf915ea45a1440f92a | |
| parent | 1f47278563d3f6dc3ec73137e3dc06e9b0fc3fb0 (diff) | |
| download | openbsd-3fca1fab6088ee67b30c2f9bc54f0d9669d75296.tar.gz openbsd-3fca1fab6088ee67b30c2f9bc54f0d9669d75296.tar.bz2 openbsd-3fca1fab6088ee67b30c2f9bc54f0d9669d75296.zip | |
Correctly handle tls_read() and tls_write() failures.
Otherwise a TLS error (for example the remote end sent a fatal alert) is
silently ignored.
ok bluhm@ tb@
Diffstat (limited to '')
| -rw-r--r-- | src/usr.bin/nc/netcat.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/usr.bin/nc/netcat.c b/src/usr.bin/nc/netcat.c index afa02343d9..048502bd1e 100644 --- a/src/usr.bin/nc/netcat.c +++ b/src/usr.bin/nc/netcat.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: netcat.c,v 1.202 2019/01/10 12:44:54 mestre Exp $ */ | 1 | /* $OpenBSD: netcat.c,v 1.203 2019/02/26 17:32:47 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> | 3 | * Copyright (c) 2001 Eric Jackson <ericj@monkey.org> |
| 4 | * Copyright (c) 2015 Bob Beck. All rights reserved. | 4 | * Copyright (c) 2015 Bob Beck. All rights reserved. |
| @@ -1267,9 +1267,11 @@ drainbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls) | |||
| 1267 | ssize_t n; | 1267 | ssize_t n; |
| 1268 | ssize_t adjust; | 1268 | ssize_t adjust; |
| 1269 | 1269 | ||
| 1270 | if (tls) | 1270 | if (tls) { |
| 1271 | n = tls_write(tls, buf, *bufpos); | 1271 | n = tls_write(tls, buf, *bufpos); |
| 1272 | else { | 1272 | if (n == -1) |
| 1273 | errx(1, "tls write failed (%s)", tls_error(tls)); | ||
| 1274 | } else { | ||
| 1273 | n = write(fd, buf, *bufpos); | 1275 | n = write(fd, buf, *bufpos); |
| 1274 | /* don't treat EAGAIN, EINTR as error */ | 1276 | /* don't treat EAGAIN, EINTR as error */ |
| 1275 | if (n == -1 && (errno == EAGAIN || errno == EINTR)) | 1277 | if (n == -1 && (errno == EAGAIN || errno == EINTR)) |
| @@ -1291,9 +1293,11 @@ fillbuf(int fd, unsigned char *buf, size_t *bufpos, struct tls *tls) | |||
| 1291 | size_t num = BUFSIZE - *bufpos; | 1293 | size_t num = BUFSIZE - *bufpos; |
| 1292 | ssize_t n; | 1294 | ssize_t n; |
| 1293 | 1295 | ||
| 1294 | if (tls) | 1296 | if (tls) { |
| 1295 | n = tls_read(tls, buf + *bufpos, num); | 1297 | n = tls_read(tls, buf + *bufpos, num); |
| 1296 | else { | 1298 | if (n == -1) |
| 1299 | errx(1, "tls read failed (%s)", tls_error(tls)); | ||
| 1300 | } else { | ||
| 1297 | n = read(fd, buf + *bufpos, num); | 1301 | n = read(fd, buf + *bufpos, num); |
| 1298 | /* don't treat EAGAIN, EINTR as error */ | 1302 | /* don't treat EAGAIN, EINTR as error */ |
| 1299 | if (n == -1 && (errno == EAGAIN || errno == EINTR)) | 1303 | if (n == -1 && (errno == EAGAIN || errno == EINTR)) |
