[PATCH 4/6] cstp: AC_PKT_DISCONN payload length can be 0
Kevin Cernekee
cernekee at gmail.com
Sun Feb 8 14:20:39 PST 2015
Terminating ocserv while a connection is active can cause uninitialized
data to be printed to the terminal:
Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-128-GCM).
Received server disconnect: 00 '<bunch of junk chars>'
Send BYE packet: Server request
Session terminated by server; exiting.
If we get an AC_PKT_DISCONN message with no payload, just skip printing
the disconnect reason.
Signed-off-by: Kevin Cernekee <cernekee at gmail.com>
---
cstp.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/cstp.c b/cstp.c
index 99fdbd0fa62c..9004370d813e 100644
--- a/cstp.c
+++ b/cstp.c
@@ -871,14 +871,18 @@ int cstp_mainloop(struct openconnect_info *vpninfo, int *timeout)
case AC_PKT_DISCONN: {
int i;
- for (i = 1; i < payload_len; i++) {
- if (!isprint(vpninfo->cstp_pkt->data[i]))
- vpninfo->cstp_pkt->data[i] = '.';
+ if (payload_len >= 2) {
+ for (i = 1; i < payload_len; i++) {
+ if (!isprint(vpninfo->cstp_pkt->data[i]))
+ vpninfo->cstp_pkt->data[i] = '.';
+ }
+ vpninfo->cstp_pkt->data[payload_len] = 0;
+ vpn_progress(vpninfo, PRG_ERR,
+ _("Received server disconnect: %02x '%s'\n"),
+ vpninfo->cstp_pkt->data[0], vpninfo->cstp_pkt->data + 1);
+ } else {
+ vpn_progress(vpninfo, PRG_ERR, _("Received server disconnect\n"));
}
- vpninfo->cstp_pkt->data[payload_len] = 0;
- vpn_progress(vpninfo, PRG_ERR,
- _("Received server disconnect: %02x '%s'\n"),
- vpninfo->cstp_pkt->data[0], vpninfo->cstp_pkt->data + 1);
vpninfo->quit_reason = "Server request";
return -EPIPE;
}
--
2.2.2
More information about the openconnect-devel
mailing list