diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libssl/ssl_tlsext.c | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c index 340ebeda5c..abc012d3af 100644 --- a/src/lib/libssl/ssl_tlsext.c +++ b/src/lib/libssl/ssl_tlsext.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_tlsext.c,v 1.14 2017/08/29 19:20:13 doug Exp $ */ | 1 | /* $OpenBSD: ssl_tlsext.c,v 1.15 2017/08/30 16:44:37 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> |
4 | * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> | 4 | * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> |
@@ -1300,11 +1300,12 @@ static struct tls_extension tls_extensions[] = { | |||
1300 | int | 1300 | int |
1301 | tlsext_clienthello_build(SSL *s, CBB *cbb) | 1301 | tlsext_clienthello_build(SSL *s, CBB *cbb) |
1302 | { | 1302 | { |
1303 | CBB extensions, extension_data; | ||
1303 | struct tls_extension *tlsext; | 1304 | struct tls_extension *tlsext; |
1304 | CBB extension_data; | ||
1305 | size_t i; | 1305 | size_t i; |
1306 | 1306 | ||
1307 | memset(&extension_data, 0, sizeof(extension_data)); | 1307 | if (!CBB_add_u16_length_prefixed(cbb, &extensions)) |
1308 | return 0; | ||
1308 | 1309 | ||
1309 | for (i = 0; i < N_TLS_EXTENSIONS; i++) { | 1310 | for (i = 0; i < N_TLS_EXTENSIONS; i++) { |
1310 | tlsext = &tls_extensions[i]; | 1311 | tlsext = &tls_extensions[i]; |
@@ -1312,16 +1313,17 @@ tlsext_clienthello_build(SSL *s, CBB *cbb) | |||
1312 | if (!tlsext->clienthello_needs(s)) | 1313 | if (!tlsext->clienthello_needs(s)) |
1313 | continue; | 1314 | continue; |
1314 | 1315 | ||
1315 | if (!CBB_add_u16(cbb, tlsext->type)) | 1316 | if (!CBB_add_u16(&extensions, tlsext->type)) |
1316 | return 0; | 1317 | return 0; |
1317 | if (!CBB_add_u16_length_prefixed(cbb, &extension_data)) | 1318 | if (!CBB_add_u16_length_prefixed(&extensions, &extension_data)) |
1318 | return 0; | 1319 | return 0; |
1319 | if (!tls_extensions[i].clienthello_build(s, &extension_data)) | 1320 | if (!tls_extensions[i].clienthello_build(s, &extension_data)) |
1320 | return 0; | 1321 | return 0; |
1321 | if (!CBB_flush(cbb)) | ||
1322 | return 0; | ||
1323 | } | 1322 | } |
1324 | 1323 | ||
1324 | if (!CBB_flush(cbb)) | ||
1325 | return 0; | ||
1326 | |||
1325 | return 1; | 1327 | return 1; |
1326 | } | 1328 | } |
1327 | 1329 | ||
@@ -1353,11 +1355,12 @@ tlsext_clienthello_parse_one(SSL *s, CBS *cbs, uint16_t type, int *alert) | |||
1353 | int | 1355 | int |
1354 | tlsext_serverhello_build(SSL *s, CBB *cbb) | 1356 | tlsext_serverhello_build(SSL *s, CBB *cbb) |
1355 | { | 1357 | { |
1358 | CBB extensions, extension_data; | ||
1356 | struct tls_extension *tlsext; | 1359 | struct tls_extension *tlsext; |
1357 | CBB extension_data; | ||
1358 | size_t i; | 1360 | size_t i; |
1359 | 1361 | ||
1360 | memset(&extension_data, 0, sizeof(extension_data)); | 1362 | if (!CBB_add_u16_length_prefixed(cbb, &extensions)) |
1363 | return 0; | ||
1361 | 1364 | ||
1362 | for (i = 0; i < N_TLS_EXTENSIONS; i++) { | 1365 | for (i = 0; i < N_TLS_EXTENSIONS; i++) { |
1363 | tlsext = &tls_extensions[i]; | 1366 | tlsext = &tls_extensions[i]; |
@@ -1365,16 +1368,17 @@ tlsext_serverhello_build(SSL *s, CBB *cbb) | |||
1365 | if (!tlsext->serverhello_needs(s)) | 1368 | if (!tlsext->serverhello_needs(s)) |
1366 | continue; | 1369 | continue; |
1367 | 1370 | ||
1368 | if (!CBB_add_u16(cbb, tlsext->type)) | 1371 | if (!CBB_add_u16(&extensions, tlsext->type)) |
1369 | return 0; | 1372 | return 0; |
1370 | if (!CBB_add_u16_length_prefixed(cbb, &extension_data)) | 1373 | if (!CBB_add_u16_length_prefixed(&extensions, &extension_data)) |
1371 | return 0; | 1374 | return 0; |
1372 | if (!tlsext->serverhello_build(s, &extension_data)) | 1375 | if (!tlsext->serverhello_build(s, &extension_data)) |
1373 | return 0; | 1376 | return 0; |
1374 | if (!CBB_flush(cbb)) | ||
1375 | return 0; | ||
1376 | } | 1377 | } |
1377 | 1378 | ||
1379 | if (!CBB_flush(cbb)) | ||
1380 | return 0; | ||
1381 | |||
1378 | return 1; | 1382 | return 1; |
1379 | } | 1383 | } |
1380 | 1384 | ||