summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbeck <>2020-05-17 19:07:15 +0000
committerbeck <>2020-05-17 19:07:15 +0000
commit3f64337bd4976e6c77b4bad1903d910370470705 (patch)
treee74be150ac50d5de5b6b9f46abbb8530fde15396 /src
parent94f8dc4972c7ef3e485ec57a9a62ccb7c3720c1c (diff)
downloadopenbsd-3f64337bd4976e6c77b4bad1903d910370470705.tar.gz
openbsd-3f64337bd4976e6c77b4bad1903d910370470705.tar.bz2
openbsd-3f64337bd4976e6c77b4bad1903d910370470705.zip
Send alerts back correctly when handling key shares, including
sending back illegal parameter if our phh key share request type is not 0 or 1. ok jsing@ tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/tls13_lib.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c
index c1a0d89f81..3527539095 100644
--- a/src/lib/libssl/tls13_lib.c
+++ b/src/lib/libssl/tls13_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: tls13_lib.c,v 1.44 2020/05/17 18:22:30 beck Exp $ */ 1/* $OpenBSD: tls13_lib.c,v 1.45 2020/05/17 19:07:15 beck Exp $ */
2/* 2/*
3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org> 4 * Copyright (c) 2019 Bob Beck <beck@openbsd.org>
@@ -257,28 +257,41 @@ tls13_phh_limit_check(struct tls13_ctx *ctx)
257static ssize_t 257static ssize_t
258tls13_key_update_recv(struct tls13_ctx *ctx, CBS *cbs) 258tls13_key_update_recv(struct tls13_ctx *ctx, CBS *cbs)
259{ 259{
260 ssize_t ret = TLS13_IO_FAILURE; 260 uint8_t alert = TLS13_ALERT_INTERNAL_ERROR;
261 uint8_t key_update_request;
262 ssize_t ret;
261 263
262 if (!CBS_get_u8(cbs, &ctx->key_update_request)) 264 if (!CBS_get_u8(cbs, &key_update_request)) {
265 alert = TLS13_ALERT_DECODE_ERROR;
266 goto err;
267 }
268 if (CBS_len(cbs) != 0) {
269 alert = TLS13_ALERT_DECODE_ERROR;
263 goto err; 270 goto err;
264 if (CBS_len(cbs) != 0) 271 }
272 if (key_update_request > 1) {
273 alert = TLS13_ALERT_ILLEGAL_PARAMETER;
265 goto err; 274 goto err;
275 }
266 276
267 if (!tls13_phh_update_peer_traffic_secret(ctx)) 277 if (!tls13_phh_update_peer_traffic_secret(ctx))
268 goto err; 278 goto err;
269 279
270 if (ctx->key_update_request) { 280 if (key_update_request) {
271 CBB cbb; 281 CBB cbb;
272 CBS cbs; /* XXX */ 282 CBS cbs; /* XXX */
273 283
274 tls13_handshake_msg_free(ctx->hs_msg); 284 tls13_handshake_msg_free(ctx->hs_msg);
275 ctx->hs_msg = tls13_handshake_msg_new(); 285 ctx->hs_msg = tls13_handshake_msg_new();
286
276 if (!tls13_handshake_msg_start(ctx->hs_msg, &cbb, TLS13_MT_KEY_UPDATE)) 287 if (!tls13_handshake_msg_start(ctx->hs_msg, &cbb, TLS13_MT_KEY_UPDATE))
277 goto err; 288 goto err;
278 if (!CBB_add_u8(&cbb, 0)) 289 if (!CBB_add_u8(&cbb, 0))
279 goto err; 290 goto err;
280 if (!tls13_handshake_msg_finish(ctx->hs_msg)) 291 if (!tls13_handshake_msg_finish(ctx->hs_msg))
281 goto err; 292 goto err;
293
294 ctx->key_update_request = key_update_request;
282 tls13_handshake_msg_data(ctx->hs_msg, &cbs); 295 tls13_handshake_msg_data(ctx->hs_msg, &cbs);
283 ret = tls13_record_layer_phh(ctx->rl, &cbs); 296 ret = tls13_record_layer_phh(ctx->rl, &cbs);
284 297
@@ -289,9 +302,7 @@ tls13_key_update_recv(struct tls13_ctx *ctx, CBS *cbs)
289 302
290 return ret; 303 return ret;
291 err: 304 err:
292 ctx->key_update_request = 0; 305 return tls13_send_alert(ctx->rl, alert);
293 /* XXX alert */
294 return TLS13_IO_FAILURE;
295} 306}
296 307
297static void 308static void