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 | ||
