summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2014-12-01 23:57:44 +0000
committerMatt Caswell <matt@openssl.org>2014-12-03 09:31:39 +0000
commitc0b90b3237b337e4b1abb7c352952ebe3ef9ca03 (patch)
tree2bca80677d5ab6bb97017211981ecafa0b0c86f0 /apps
parent788a5bad17ef488a0b5bcd7d6e3468fca2717911 (diff)
downloadopenssl-new-c0b90b3237b337e4b1abb7c352952ebe3ef9ca03.tar.gz
Updates to s_client and s_server to remove the constant 28 (for IPv4 header
and UDP header) when setting an mtu. This constant is not always correct (e.g. if using IPv6). Use the new DTLS_CTRL functions instead. Reviewed-by: Tim Hudson <tjh@openssl.org> (cherry picked from commit 464ce92026bd0c79186cbefa75470f39607110be)
Diffstat (limited to 'apps')
-rw-r--r--apps/s_client.c16
-rw-r--r--apps/s_server.c18
2 files changed, 30 insertions, 4 deletions
diff --git a/apps/s_client.c b/apps/s_client.c
index a19c829bf0..43737fdcce 100644
--- a/apps/s_client.c
+++ b/apps/s_client.c
@@ -1501,10 +1501,22 @@ re_start:
BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout);
}
- if (socket_mtu > 28)
+ if (socket_mtu)
{
+ if(socket_mtu < DTLS_get_link_min_mtu(con))
+ {
+ BIO_printf(bio_err,"MTU too small. Must be at least %ld\n",
+ DTLS_get_link_min_mtu(con));
+ BIO_free(sbio);
+ goto shut;
+ }
SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
- SSL_set_mtu(con, socket_mtu - 28);
+ if(!DTLS_set_link_mtu(con, socket_mtu))
+ {
+ BIO_printf(bio_err, "Failed to set MTU\n");
+ BIO_free(sbio);
+ goto shut;
+ }
}
else
/* want to do MTU discovery */
diff --git a/apps/s_server.c b/apps/s_server.c
index dbc4373044..5eab0b5823 100644
--- a/apps/s_server.c
+++ b/apps/s_server.c
@@ -2253,10 +2253,24 @@ static int sv_body(char *hostname, int s, int stype, unsigned char *context)
BIO_ctrl(sbio, BIO_CTRL_DGRAM_SET_SEND_TIMEOUT, 0, &timeout);
}
- if (socket_mtu > 28)
+ if (socket_mtu)
{
+ if(socket_mtu < DTLS_get_link_min_mtu(con))
+ {
+ BIO_printf(bio_err,"MTU too small. Must be at least %ld\n",
+ DTLS_get_link_min_mtu(con));
+ ret = -1;
+ BIO_free(sbio);
+ goto err;
+ }
SSL_set_options(con, SSL_OP_NO_QUERY_MTU);
- SSL_set_mtu(con, socket_mtu - 28);
+ if(!DTLS_set_link_mtu(con, socket_mtu))
+ {
+ BIO_printf(bio_err, "Failed to set MTU\n");
+ ret = -1;
+ BIO_free(sbio);
+ goto err;
+ }
}
else
/* want to do MTU discovery */