aboutsummaryrefslogtreecommitdiff
path: root/ssl
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2020-11-04 14:36:38 +0100
committerRichard Levitte <levitte@openssl.org>2020-11-11 12:12:23 +0100
commite92519b5a6ad5fa1ca36316dd9256e65dcb2c6db (patch)
treeb1c957cbd9d23f548d97f92b8bbbb08d58f1db1b /ssl
parent6849b73ccc38ea95e4b9d50b01e1c94f5ce8bca7 (diff)
downloadopenssl-e92519b5a6ad5fa1ca36316dd9256e65dcb2c6db.zip
openssl-e92519b5a6ad5fa1ca36316dd9256e65dcb2c6db.tar.gz
openssl-e92519b5a6ad5fa1ca36316dd9256e65dcb2c6db.tar.bz2
SSL: refactor ossl_statem_fatal() and SSLfatal()
ossl_statem_fatal() is refactored to be an extended ERR_set_error(), and SSLfatal() is refactored to work like ERR_raise(). We also add SSLfatal_data() to work like ERR_raise_data(). Reviewed-by: Paul Dale <paul.dale@oracle.com> (Merged from https://github.com/openssl/openssl/pull/13316)
Diffstat (limited to 'ssl')
-rw-r--r--ssl/statem/statem.c15
-rw-r--r--ssl/statem/statem.h14
2 files changed, 16 insertions, 13 deletions
diff --git a/ssl/statem/statem.c b/ssl/statem/statem.c
index ac09e5f..23f73b7 100644
--- a/ssl/statem/statem.c
+++ b/ssl/statem/statem.c
@@ -112,14 +112,19 @@ void ossl_statem_set_renegotiate(SSL *s)
}
/*
- * Put the state machine into an error state and send an alert if appropriate.
+ * Error reporting building block that's used instead of ERR_set_error().
+ * In addition to what ERR_set_error() does, this puts the state machine
+ * into an error state and sends an alert if appropriate.
* This is a permanent error for the current connection.
*/
-void ossl_statem_fatal(SSL *s, int al, int func, int reason, const char *file,
- int line)
+void ossl_statem_fatal(SSL *s, int al, int reason, const char *fmt, ...)
{
- ERR_raise(ERR_LIB_SSL, reason);
- ERR_set_debug(file, line, NULL); /* Override what ERR_raise set */
+ va_list args;
+
+ va_start(args, fmt);
+ ERR_vset_error(ERR_LIB_SSL, reason, fmt, args);
+ va_end(args);
+
/* We shouldn't call SSLfatal() twice. Once is enough */
if (s->statem.in_init && s->statem.state == MSG_FLOW_ERROR)
return;
diff --git a/ssl/statem/statem.h b/ssl/statem/statem.h
index a9309c9..41f50d2 100644
--- a/ssl/statem/statem.h
+++ b/ssl/statem/statem.h
@@ -132,15 +132,13 @@ __owur int ossl_statem_accept(SSL *s);
__owur int ossl_statem_connect(SSL *s);
void ossl_statem_clear(SSL *s);
void ossl_statem_set_renegotiate(SSL *s);
-void ossl_statem_fatal(SSL *s, int al, int func, int reason, const char *file,
- int line);
+void ossl_statem_fatal(SSL *s, int al, int reason, const char *fmt, ...);
# define SSL_AD_NO_ALERT -1
-# ifndef OPENSSL_NO_ERR
-# define SSLfatal(s, al, f, r) ossl_statem_fatal((s), (al), (0), (r), \
- OPENSSL_FILE, OPENSSL_LINE)
-# else
-# define SSLfatal(s, al, f, r) ossl_statem_fatal((s), (al), (0), (r), NULL, 0)
-# endif
+# define SSLfatal(s, al, r) SSLfatal_data((s), (al), (r), NULL)
+# define SSLfatal_data \
+ (ERR_new(), \
+ ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \
+ ossl_statem_fatal)
int ossl_statem_in_error(const SSL *s);
void ossl_statem_set_in_init(SSL *s, int init);