summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorderaadt <>2020-05-22 16:11:23 +0000
committerderaadt <>2020-05-22 16:11:23 +0000
commite3b013782277e76aed5bd5e586a0cbab98ef90e7 (patch)
treebf00683968bdfa77a46aa495e421b707ff08679a /src
parentcfa7c7d8ea22f50276f89f901780ab7885f495a4 (diff)
downloadopenbsd-e3b013782277e76aed5bd5e586a0cbab98ef90e7.tar.gz
openbsd-e3b013782277e76aed5bd5e586a0cbab98ef90e7.tar.bz2
openbsd-e3b013782277e76aed5bd5e586a0cbab98ef90e7.zip
sockaddr should be sockaddr_storage, otherwise "openssl s_client -6 -dtls1"
(gurn) copies getsockname() retrieves a truncated result and 14 bytes of stack garbage get copied onwards. ok tb
Diffstat (limited to 'src')
-rw-r--r--src/usr.bin/openssl/s_client.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/usr.bin/openssl/s_client.c b/src/usr.bin/openssl/s_client.c
index 27516ae5db..88b098286a 100644
--- a/src/usr.bin/openssl/s_client.c
+++ b/src/usr.bin/openssl/s_client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: s_client.c,v 1.44 2020/04/26 01:59:27 inoguchi Exp $ */ 1/* $OpenBSD: s_client.c,v 1.45 2020/05/22 16:11:23 deraadt Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -331,7 +331,7 @@ s_client_main(int argc, char **argv)
331 const char *groups_in = NULL; 331 const char *groups_in = NULL;
332 char *sess_in = NULL; 332 char *sess_in = NULL;
333 char *sess_out = NULL; 333 char *sess_out = NULL;
334 struct sockaddr peer; 334 struct sockaddr_storage peer;
335 int peerlen = sizeof(peer); 335 int peerlen = sizeof(peer);
336 int enable_timeouts = 0; 336 int enable_timeouts = 0;
337 long socket_mtu = 0; 337 long socket_mtu = 0;
@@ -776,7 +776,8 @@ re_start:
776 if (SSL_version(con) == DTLS1_VERSION) { 776 if (SSL_version(con) == DTLS1_VERSION) {
777 777
778 sbio = BIO_new_dgram(s, BIO_NOCLOSE); 778 sbio = BIO_new_dgram(s, BIO_NOCLOSE);
779 if (getsockname(s, &peer, (void *) &peerlen) == -1) { 779 if (getsockname(s, (struct sockaddr *)&peer,
780 (void *)&peerlen) == -1) {
780 BIO_printf(bio_err, "getsockname:errno=%d\n", 781 BIO_printf(bio_err, "getsockname:errno=%d\n",
781 errno); 782 errno);
782 shutdown(s, SHUT_RD); 783 shutdown(s, SHUT_RD);