diff options
author | jsing <> | 2015-09-12 15:03:39 +0000 |
---|---|---|
committer | jsing <> | 2015-09-12 15:03:39 +0000 |
commit | 55878a118f9914f78e196c906ef6d76b6f2e269c (patch) | |
tree | f43b2c4f0a83343ac09872bb9dd4075c5d209246 /src/lib | |
parent | bb3dc274c59720dc1e231a536edf176cf9687b2e (diff) | |
download | openbsd-55878a118f9914f78e196c906ef6d76b6f2e269c.tar.gz openbsd-55878a118f9914f78e196c906ef6d76b6f2e269c.tar.bz2 openbsd-55878a118f9914f78e196c906ef6d76b6f2e269c.zip |
Move handshake message header length determination into a separate
ssl3_handshake_msg_hdr_len() function. Use this to correct several places
that have magic numbers with header lengths hardcoded as '4'.
ok beck@
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libssl/s3_both.c | 13 | ||||
-rw-r--r-- | src/lib/libssl/s3_lib.c | 21 | ||||
-rw-r--r-- | src/lib/libssl/s3_srvr.c | 13 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_both.c | 13 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_lib.c | 21 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_srvr.c | 13 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_locl.h | 3 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 3 |
8 files changed, 54 insertions, 46 deletions
diff --git a/src/lib/libssl/s3_both.c b/src/lib/libssl/s3_both.c index 49b1e50659..cfd0fb9b4b 100644 --- a/src/lib/libssl/s3_both.c +++ b/src/lib/libssl/s3_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_both.c,v 1.47 2015/09/11 18:08:21 jsing Exp $ */ | 1 | /* $OpenBSD: s3_both.c,v 1.48 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -326,6 +326,7 @@ ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) | |||
326 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); | 326 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); |
327 | return (-1); | 327 | return (-1); |
328 | } | 328 | } |
329 | /* XXX */ | ||
329 | p = (unsigned char *)&(buf->data[*l]); | 330 | p = (unsigned char *)&(buf->data[*l]); |
330 | l2n3(n, p); | 331 | l2n3(n, p); |
331 | i2d_X509(x, &p); | 332 | i2d_X509(x, &p); |
@@ -338,10 +339,10 @@ unsigned long | |||
338 | ssl3_output_cert_chain(SSL *s, X509 *x) | 339 | ssl3_output_cert_chain(SSL *s, X509 *x) |
339 | { | 340 | { |
340 | unsigned char *p; | 341 | unsigned char *p; |
341 | int i; | 342 | unsigned long l = ssl3_handshake_msg_hdr_len(s) + 3; |
342 | unsigned long l = 7; | ||
343 | BUF_MEM *buf; | 343 | BUF_MEM *buf; |
344 | int no_chain; | 344 | int no_chain; |
345 | int i; | ||
345 | 346 | ||
346 | if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || s->ctx->extra_certs) | 347 | if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || s->ctx->extra_certs) |
347 | no_chain = 1; | 348 | no_chain = 1; |
@@ -350,7 +351,7 @@ ssl3_output_cert_chain(SSL *s, X509 *x) | |||
350 | 351 | ||
351 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ | 352 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ |
352 | buf = s->init_buf; | 353 | buf = s->init_buf; |
353 | if (!BUF_MEM_grow_clean(buf, 10)) { | 354 | if (!BUF_MEM_grow_clean(buf, ssl3_handshake_msg_hdr_len(s) + 6)) { |
354 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); | 355 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); |
355 | return (0); | 356 | return (0); |
356 | } | 357 | } |
@@ -388,14 +389,14 @@ ssl3_output_cert_chain(SSL *s, X509 *x) | |||
388 | return (0); | 389 | return (0); |
389 | } | 390 | } |
390 | 391 | ||
391 | l -= 7; | 392 | l -= ssl3_handshake_msg_hdr_len(s) + 3; |
392 | p = (unsigned char *)&(buf->data[4]); | 393 | p = (unsigned char *)&(buf->data[4]); |
393 | l2n3(l, p); | 394 | l2n3(l, p); |
394 | l += 3; | 395 | l += 3; |
395 | p = (unsigned char *)&(buf->data[0]); | 396 | p = (unsigned char *)&(buf->data[0]); |
396 | *(p++) = SSL3_MT_CERTIFICATE; | 397 | *(p++) = SSL3_MT_CERTIFICATE; |
397 | l2n3(l, p); | 398 | l2n3(l, p); |
398 | l += 4; | 399 | l += 4; /* XXX */ |
399 | return (l); | 400 | return (l); |
400 | } | 401 | } |
401 | 402 | ||
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 1a619e3d30..912ac8dbdb 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.104 2015/09/11 18:08:21 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.105 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1947,22 +1947,25 @@ ssl3_pending(const SSL *s) | |||
1947 | s->s3->rrec.length : 0; | 1947 | s->s3->rrec.length : 0; |
1948 | } | 1948 | } |
1949 | 1949 | ||
1950 | int | ||
1951 | ssl3_handshake_msg_hdr_len(SSL *s) | ||
1952 | { | ||
1953 | return (SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH : | ||
1954 | SSL3_HM_HEADER_LENGTH); | ||
1955 | } | ||
1956 | |||
1950 | unsigned char * | 1957 | unsigned char * |
1951 | ssl3_handshake_msg_start(SSL *s, uint8_t msg_type) | 1958 | ssl3_handshake_msg_start(SSL *s, uint8_t msg_type) |
1952 | { | 1959 | { |
1953 | unsigned char *d, *p; | 1960 | unsigned char *d, *p; |
1954 | int hdr_len; | ||
1955 | 1961 | ||
1956 | d = p = (unsigned char *)s->init_buf->data; | 1962 | d = p = (unsigned char *)s->init_buf->data; |
1957 | 1963 | ||
1958 | hdr_len = SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH : | ||
1959 | SSL3_HM_HEADER_LENGTH; | ||
1960 | |||
1961 | /* Handshake message type and length. */ | 1964 | /* Handshake message type and length. */ |
1962 | *(p++) = msg_type; | 1965 | *(p++) = msg_type; |
1963 | l2n3(0, p); | 1966 | l2n3(0, p); |
1964 | 1967 | ||
1965 | return (d + hdr_len); | 1968 | return (d + ssl3_handshake_msg_hdr_len(s)); |
1966 | } | 1969 | } |
1967 | 1970 | ||
1968 | void | 1971 | void |
@@ -1970,18 +1973,14 @@ ssl3_handshake_msg_finish(SSL *s, unsigned int len) | |||
1970 | { | 1973 | { |
1971 | unsigned char *d, *p; | 1974 | unsigned char *d, *p; |
1972 | uint8_t msg_type; | 1975 | uint8_t msg_type; |
1973 | int hdr_len; | ||
1974 | 1976 | ||
1975 | d = p = (unsigned char *)s->init_buf->data; | 1977 | d = p = (unsigned char *)s->init_buf->data; |
1976 | 1978 | ||
1977 | hdr_len = SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH : | ||
1978 | SSL3_HM_HEADER_LENGTH; | ||
1979 | |||
1980 | /* Handshake message length. */ | 1979 | /* Handshake message length. */ |
1981 | msg_type = *(p++); | 1980 | msg_type = *(p++); |
1982 | l2n3(len, p); | 1981 | l2n3(len, p); |
1983 | 1982 | ||
1984 | s->init_num = hdr_len + (int)len; | 1983 | s->init_num = ssl3_handshake_msg_hdr_len(s) + (int)len; |
1985 | s->init_off = 0; | 1984 | s->init_off = 0; |
1986 | 1985 | ||
1987 | if (SSL_IS_DTLS(s)) { | 1986 | if (SSL_IS_DTLS(s)) { |
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c index e9496f9b9d..dbcbc9b709 100644 --- a/src/lib/libssl/s3_srvr.c +++ b/src/lib/libssl/s3_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_srvr.c,v 1.119 2015/09/12 13:03:06 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.120 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1398,7 +1398,8 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1398 | kn = 0; | 1398 | kn = 0; |
1399 | } | 1399 | } |
1400 | 1400 | ||
1401 | if (!BUF_MEM_grow_clean(buf, n + 4 + kn)) { | 1401 | if (!BUF_MEM_grow_clean(buf, ssl3_handshake_msg_hdr_len(s) + |
1402 | n + kn)) { | ||
1402 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, | 1403 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, |
1403 | ERR_LIB_BUF); | 1404 | ERR_LIB_BUF); |
1404 | goto err; | 1405 | goto err; |
@@ -1570,7 +1571,9 @@ ssl3_send_certificate_request(SSL *s) | |||
1570 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { | 1571 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { |
1571 | name = sk_X509_NAME_value(sk, i); | 1572 | name = sk_X509_NAME_value(sk, i); |
1572 | j = i2d_X509_NAME(name, NULL); | 1573 | j = i2d_X509_NAME(name, NULL); |
1573 | if (!BUF_MEM_grow_clean(buf, 4 + n + j + 2)) { | 1574 | if (!BUF_MEM_grow_clean(buf, |
1575 | ssl3_handshake_msg_hdr_len(s) + n + j | ||
1576 | + 2)) { | ||
1574 | SSLerr( | 1577 | SSLerr( |
1575 | SSL_F_SSL3_SEND_CERTIFICATE_REQUEST, | 1578 | SSL_F_SSL3_SEND_CERTIFICATE_REQUEST, |
1576 | ERR_R_BUF_LIB); | 1579 | ERR_R_BUF_LIB); |
@@ -2523,8 +2526,8 @@ ssl3_send_newsession_ticket(SSL *s) | |||
2523 | * session_length + max_enc_block_size (max encrypted session | 2526 | * session_length + max_enc_block_size (max encrypted session |
2524 | * length) + max_md_size (HMAC). | 2527 | * length) + max_md_size (HMAC). |
2525 | */ | 2528 | */ |
2526 | if (!BUF_MEM_grow(s->init_buf, | 2529 | if (!BUF_MEM_grow(s->init_buf, ssl3_handshake_msg_hdr_len(s) + |
2527 | 26 + EVP_MAX_IV_LENGTH + EVP_MAX_BLOCK_LENGTH + | 2530 | 22 + EVP_MAX_IV_LENGTH + EVP_MAX_BLOCK_LENGTH + |
2528 | EVP_MAX_MD_SIZE + slen)) { | 2531 | EVP_MAX_MD_SIZE + slen)) { |
2529 | free(senc); | 2532 | free(senc); |
2530 | return (-1); | 2533 | return (-1); |
diff --git a/src/lib/libssl/src/ssl/s3_both.c b/src/lib/libssl/src/ssl/s3_both.c index 49b1e50659..cfd0fb9b4b 100644 --- a/src/lib/libssl/src/ssl/s3_both.c +++ b/src/lib/libssl/src/ssl/s3_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_both.c,v 1.47 2015/09/11 18:08:21 jsing Exp $ */ | 1 | /* $OpenBSD: s3_both.c,v 1.48 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -326,6 +326,7 @@ ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x) | |||
326 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); | 326 | SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB); |
327 | return (-1); | 327 | return (-1); |
328 | } | 328 | } |
329 | /* XXX */ | ||
329 | p = (unsigned char *)&(buf->data[*l]); | 330 | p = (unsigned char *)&(buf->data[*l]); |
330 | l2n3(n, p); | 331 | l2n3(n, p); |
331 | i2d_X509(x, &p); | 332 | i2d_X509(x, &p); |
@@ -338,10 +339,10 @@ unsigned long | |||
338 | ssl3_output_cert_chain(SSL *s, X509 *x) | 339 | ssl3_output_cert_chain(SSL *s, X509 *x) |
339 | { | 340 | { |
340 | unsigned char *p; | 341 | unsigned char *p; |
341 | int i; | 342 | unsigned long l = ssl3_handshake_msg_hdr_len(s) + 3; |
342 | unsigned long l = 7; | ||
343 | BUF_MEM *buf; | 343 | BUF_MEM *buf; |
344 | int no_chain; | 344 | int no_chain; |
345 | int i; | ||
345 | 346 | ||
346 | if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || s->ctx->extra_certs) | 347 | if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || s->ctx->extra_certs) |
347 | no_chain = 1; | 348 | no_chain = 1; |
@@ -350,7 +351,7 @@ ssl3_output_cert_chain(SSL *s, X509 *x) | |||
350 | 351 | ||
351 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ | 352 | /* TLSv1 sends a chain with nothing in it, instead of an alert */ |
352 | buf = s->init_buf; | 353 | buf = s->init_buf; |
353 | if (!BUF_MEM_grow_clean(buf, 10)) { | 354 | if (!BUF_MEM_grow_clean(buf, ssl3_handshake_msg_hdr_len(s) + 6)) { |
354 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); | 355 | SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB); |
355 | return (0); | 356 | return (0); |
356 | } | 357 | } |
@@ -388,14 +389,14 @@ ssl3_output_cert_chain(SSL *s, X509 *x) | |||
388 | return (0); | 389 | return (0); |
389 | } | 390 | } |
390 | 391 | ||
391 | l -= 7; | 392 | l -= ssl3_handshake_msg_hdr_len(s) + 3; |
392 | p = (unsigned char *)&(buf->data[4]); | 393 | p = (unsigned char *)&(buf->data[4]); |
393 | l2n3(l, p); | 394 | l2n3(l, p); |
394 | l += 3; | 395 | l += 3; |
395 | p = (unsigned char *)&(buf->data[0]); | 396 | p = (unsigned char *)&(buf->data[0]); |
396 | *(p++) = SSL3_MT_CERTIFICATE; | 397 | *(p++) = SSL3_MT_CERTIFICATE; |
397 | l2n3(l, p); | 398 | l2n3(l, p); |
398 | l += 4; | 399 | l += 4; /* XXX */ |
399 | return (l); | 400 | return (l); |
400 | } | 401 | } |
401 | 402 | ||
diff --git a/src/lib/libssl/src/ssl/s3_lib.c b/src/lib/libssl/src/ssl/s3_lib.c index 1a619e3d30..912ac8dbdb 100644 --- a/src/lib/libssl/src/ssl/s3_lib.c +++ b/src/lib/libssl/src/ssl/s3_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_lib.c,v 1.104 2015/09/11 18:08:21 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.105 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1947,22 +1947,25 @@ ssl3_pending(const SSL *s) | |||
1947 | s->s3->rrec.length : 0; | 1947 | s->s3->rrec.length : 0; |
1948 | } | 1948 | } |
1949 | 1949 | ||
1950 | int | ||
1951 | ssl3_handshake_msg_hdr_len(SSL *s) | ||
1952 | { | ||
1953 | return (SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH : | ||
1954 | SSL3_HM_HEADER_LENGTH); | ||
1955 | } | ||
1956 | |||
1950 | unsigned char * | 1957 | unsigned char * |
1951 | ssl3_handshake_msg_start(SSL *s, uint8_t msg_type) | 1958 | ssl3_handshake_msg_start(SSL *s, uint8_t msg_type) |
1952 | { | 1959 | { |
1953 | unsigned char *d, *p; | 1960 | unsigned char *d, *p; |
1954 | int hdr_len; | ||
1955 | 1961 | ||
1956 | d = p = (unsigned char *)s->init_buf->data; | 1962 | d = p = (unsigned char *)s->init_buf->data; |
1957 | 1963 | ||
1958 | hdr_len = SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH : | ||
1959 | SSL3_HM_HEADER_LENGTH; | ||
1960 | |||
1961 | /* Handshake message type and length. */ | 1964 | /* Handshake message type and length. */ |
1962 | *(p++) = msg_type; | 1965 | *(p++) = msg_type; |
1963 | l2n3(0, p); | 1966 | l2n3(0, p); |
1964 | 1967 | ||
1965 | return (d + hdr_len); | 1968 | return (d + ssl3_handshake_msg_hdr_len(s)); |
1966 | } | 1969 | } |
1967 | 1970 | ||
1968 | void | 1971 | void |
@@ -1970,18 +1973,14 @@ ssl3_handshake_msg_finish(SSL *s, unsigned int len) | |||
1970 | { | 1973 | { |
1971 | unsigned char *d, *p; | 1974 | unsigned char *d, *p; |
1972 | uint8_t msg_type; | 1975 | uint8_t msg_type; |
1973 | int hdr_len; | ||
1974 | 1976 | ||
1975 | d = p = (unsigned char *)s->init_buf->data; | 1977 | d = p = (unsigned char *)s->init_buf->data; |
1976 | 1978 | ||
1977 | hdr_len = SSL_IS_DTLS(s) ? DTLS1_HM_HEADER_LENGTH : | ||
1978 | SSL3_HM_HEADER_LENGTH; | ||
1979 | |||
1980 | /* Handshake message length. */ | 1979 | /* Handshake message length. */ |
1981 | msg_type = *(p++); | 1980 | msg_type = *(p++); |
1982 | l2n3(len, p); | 1981 | l2n3(len, p); |
1983 | 1982 | ||
1984 | s->init_num = hdr_len + (int)len; | 1983 | s->init_num = ssl3_handshake_msg_hdr_len(s) + (int)len; |
1985 | s->init_off = 0; | 1984 | s->init_off = 0; |
1986 | 1985 | ||
1987 | if (SSL_IS_DTLS(s)) { | 1986 | if (SSL_IS_DTLS(s)) { |
diff --git a/src/lib/libssl/src/ssl/s3_srvr.c b/src/lib/libssl/src/ssl/s3_srvr.c index e9496f9b9d..dbcbc9b709 100644 --- a/src/lib/libssl/src/ssl/s3_srvr.c +++ b/src/lib/libssl/src/ssl/s3_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_srvr.c,v 1.119 2015/09/12 13:03:06 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.120 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1398,7 +1398,8 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1398 | kn = 0; | 1398 | kn = 0; |
1399 | } | 1399 | } |
1400 | 1400 | ||
1401 | if (!BUF_MEM_grow_clean(buf, n + 4 + kn)) { | 1401 | if (!BUF_MEM_grow_clean(buf, ssl3_handshake_msg_hdr_len(s) + |
1402 | n + kn)) { | ||
1402 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, | 1403 | SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, |
1403 | ERR_LIB_BUF); | 1404 | ERR_LIB_BUF); |
1404 | goto err; | 1405 | goto err; |
@@ -1570,7 +1571,9 @@ ssl3_send_certificate_request(SSL *s) | |||
1570 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { | 1571 | for (i = 0; i < sk_X509_NAME_num(sk); i++) { |
1571 | name = sk_X509_NAME_value(sk, i); | 1572 | name = sk_X509_NAME_value(sk, i); |
1572 | j = i2d_X509_NAME(name, NULL); | 1573 | j = i2d_X509_NAME(name, NULL); |
1573 | if (!BUF_MEM_grow_clean(buf, 4 + n + j + 2)) { | 1574 | if (!BUF_MEM_grow_clean(buf, |
1575 | ssl3_handshake_msg_hdr_len(s) + n + j | ||
1576 | + 2)) { | ||
1574 | SSLerr( | 1577 | SSLerr( |
1575 | SSL_F_SSL3_SEND_CERTIFICATE_REQUEST, | 1578 | SSL_F_SSL3_SEND_CERTIFICATE_REQUEST, |
1576 | ERR_R_BUF_LIB); | 1579 | ERR_R_BUF_LIB); |
@@ -2523,8 +2526,8 @@ ssl3_send_newsession_ticket(SSL *s) | |||
2523 | * session_length + max_enc_block_size (max encrypted session | 2526 | * session_length + max_enc_block_size (max encrypted session |
2524 | * length) + max_md_size (HMAC). | 2527 | * length) + max_md_size (HMAC). |
2525 | */ | 2528 | */ |
2526 | if (!BUF_MEM_grow(s->init_buf, | 2529 | if (!BUF_MEM_grow(s->init_buf, ssl3_handshake_msg_hdr_len(s) + |
2527 | 26 + EVP_MAX_IV_LENGTH + EVP_MAX_BLOCK_LENGTH + | 2530 | 22 + EVP_MAX_IV_LENGTH + EVP_MAX_BLOCK_LENGTH + |
2528 | EVP_MAX_MD_SIZE + slen)) { | 2531 | EVP_MAX_MD_SIZE + slen)) { |
2529 | free(senc); | 2532 | free(senc); |
2530 | return (-1); | 2533 | return (-1); |
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h index 130482dbba..cb7889ffb7 100644 --- a/src/lib/libssl/src/ssl/ssl_locl.h +++ b/src/lib/libssl/src/ssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.126 2015/09/12 14:32:24 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.127 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -641,6 +641,7 @@ long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)); | |||
641 | long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp)(void)); | 641 | long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp)(void)); |
642 | int ssl3_pending(const SSL *s); | 642 | int ssl3_pending(const SSL *s); |
643 | 643 | ||
644 | int ssl3_handshake_msg_hdr_len(SSL *s); | ||
644 | unsigned char *ssl3_handshake_msg_start(SSL *s, uint8_t htype); | 645 | unsigned char *ssl3_handshake_msg_start(SSL *s, uint8_t htype); |
645 | void ssl3_handshake_msg_finish(SSL *s, unsigned int len); | 646 | void ssl3_handshake_msg_finish(SSL *s, unsigned int len); |
646 | int ssl3_handshake_write(SSL *s); | 647 | int ssl3_handshake_write(SSL *s); |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 130482dbba..cb7889ffb7 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.126 2015/09/12 14:32:24 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.127 2015/09/12 15:03:39 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -641,6 +641,7 @@ long ssl3_callback_ctrl(SSL *s, int cmd, void (*fp)(void)); | |||
641 | long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp)(void)); | 641 | long ssl3_ctx_callback_ctrl(SSL_CTX *s, int cmd, void (*fp)(void)); |
642 | int ssl3_pending(const SSL *s); | 642 | int ssl3_pending(const SSL *s); |
643 | 643 | ||
644 | int ssl3_handshake_msg_hdr_len(SSL *s); | ||
644 | unsigned char *ssl3_handshake_msg_start(SSL *s, uint8_t htype); | 645 | unsigned char *ssl3_handshake_msg_start(SSL *s, uint8_t htype); |
645 | void ssl3_handshake_msg_finish(SSL *s, unsigned int len); | 646 | void ssl3_handshake_msg_finish(SSL *s, unsigned int len); |
646 | int ssl3_handshake_write(SSL *s); | 647 | int ssl3_handshake_write(SSL *s); |