diff options
author | djm@openbsd.org <djm@openbsd.org> | 2020-01-30 07:20:05 +0000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2020-01-30 18:22:34 +1100 |
commit | dce74eab0c0f9010dc84c62500a17771d0131ff3 (patch) | |
tree | b627f9c1db439625ef221b2ffb7b5c43fcb41744 | |
parent | 14ef4efe2bf4180e085ea6738fdbebc199458b0c (diff) |
upstream: have sshpkt_fatal() save/restore errno before we
potentially call strerror() (via ssh_err()); ok dtucker
OpenBSD-Commit-ID: 5590df31d21405498c848245b85c24acb84ad787
-rw-r--r-- | packet.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -1,4 +1,4 @@ -/* $OpenBSD: packet.c,v 1.289 2020/01/23 10:53:04 dtucker Exp $ */ +/* $OpenBSD: packet.c,v 1.290 2020/01/30 07:20:05 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -1850,6 +1850,7 @@ static void sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap) { char *tag = NULL, remote_id[512]; + int oerrno = errno; sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id)); @@ -1877,6 +1878,7 @@ sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap) case SSH_ERR_NO_HOSTKEY_ALG_MATCH: if (ssh && ssh->kex && ssh->kex->failed_choice) { ssh_packet_clear_keys(ssh); + errno = oerrno; logdie("Unable to negotiate with %s: %s. " "Their offer: %s", remote_id, ssh_err(r), ssh->kex->failed_choice); @@ -1889,6 +1891,7 @@ sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap) __func__); } ssh_packet_clear_keys(ssh); + errno = oerrno; logdie("%s%sConnection %s %s: %s", tag != NULL ? tag : "", tag != NULL ? ": " : "", ssh->state->server_side ? "from" : "to", |