Return errors even if the cookie validation has succeeded
In the DTLS ClientHello processing the return value is stored in |ret| which by default is -1. We wish to return 1 on success or 2 on success *and* we have validated the DTLS cookie. Previously on successful validation of the cookie we were setting |ret| to 2. Unfortunately if we later encounter an error then we can end up returning a successful (positive) return code from the function because we already set |ret| to a positive value. This does not appear to have a security consequence because the handshake just fails at a later point. Reviewed-by: Andy Polyakov <appro@openssl.org>
This commit is contained in:
parent
98b94544e5
commit
41d049e1cd
@ -966,7 +966,7 @@ int ssl3_check_client_hello(SSL *s)
|
|||||||
|
|
||||||
int ssl3_get_client_hello(SSL *s)
|
int ssl3_get_client_hello(SSL *s)
|
||||||
{
|
{
|
||||||
int i, j, ok, al, ret = -1;
|
int i, j, ok, al, ret = -1, cookie_valid = 0;;
|
||||||
unsigned int cookie_len;
|
unsigned int cookie_len;
|
||||||
long n;
|
long n;
|
||||||
unsigned long id;
|
unsigned long id;
|
||||||
@ -1154,8 +1154,7 @@ int ssl3_get_client_hello(SSL *s)
|
|||||||
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_COOKIE_MISMATCH);
|
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_COOKIE_MISMATCH);
|
||||||
goto f_err;
|
goto f_err;
|
||||||
}
|
}
|
||||||
|
cookie_valid = 1;
|
||||||
ret = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p += cookie_len;
|
p += cookie_len;
|
||||||
@ -1491,8 +1490,7 @@ int ssl3_get_client_hello(SSL *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret < 0)
|
ret = cookie_valid ? 2 : 1;
|
||||||
ret = 1;
|
|
||||||
if (0) {
|
if (0) {
|
||||||
f_err:
|
f_err:
|
||||||
ssl3_send_alert(s, SSL3_AL_FATAL, al);
|
ssl3_send_alert(s, SSL3_AL_FATAL, al);
|
||||||
@ -1502,7 +1500,7 @@ int ssl3_get_client_hello(SSL *s)
|
|||||||
|
|
||||||
if (ciphers != NULL)
|
if (ciphers != NULL)
|
||||||
sk_SSL_CIPHER_free(ciphers);
|
sk_SSL_CIPHER_free(ciphers);
|
||||||
return (ret);
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ssl3_send_server_hello(SSL *s)
|
int ssl3_send_server_hello(SSL *s)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user