Blame SPECS/openssl-1.1.1-reneg-no-extms.patch

Packit Service 084de1
diff -up openssl-1.1.1g/include/openssl/ssl3.h.reneg-no-extms openssl-1.1.1g/include/openssl/ssl3.h
Packit Service 084de1
--- openssl-1.1.1g/include/openssl/ssl3.h.reneg-no-extms	2020-04-21 14:22:39.000000000 +0200
Packit Service 084de1
+++ openssl-1.1.1g/include/openssl/ssl3.h	2020-06-05 15:20:22.090682776 +0200
Packit Service 084de1
@@ -292,6 +292,9 @@ extern "C" {
Packit Service 084de1
 
Packit Service 084de1
 # define TLS1_FLAGS_STATELESS                    0x0800
Packit Service 084de1
 
Packit Service 084de1
+/* Set if extended master secret extension required on renegotiation */
Packit Service 084de1
+# define TLS1_FLAGS_REQUIRED_EXTMS               0x1000
Packit Service 084de1
+
Packit Service 084de1
 # define SSL3_MT_HELLO_REQUEST                   0
Packit Service 084de1
 # define SSL3_MT_CLIENT_HELLO                    1
Packit Service 084de1
 # define SSL3_MT_SERVER_HELLO                    2
Packit Service 084de1
diff -up openssl-1.1.1g/ssl/statem/extensions.c.reneg-no-extms openssl-1.1.1g/ssl/statem/extensions.c
Packit Service 084de1
--- openssl-1.1.1g/ssl/statem/extensions.c.reneg-no-extms	2020-04-21 14:22:39.000000000 +0200
Packit Service 084de1
+++ openssl-1.1.1g/ssl/statem/extensions.c	2020-06-05 15:22:19.677653437 +0200
Packit Service 084de1
@@ -1168,14 +1168,26 @@ static int init_etm(SSL *s, unsigned int
Packit Service 084de1
 
Packit Service 084de1
 static int init_ems(SSL *s, unsigned int context)
Packit Service 084de1
 {
Packit Service 084de1
-    if (!s->server)
Packit Service 084de1
+    if (s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS) {
Packit Service 084de1
         s->s3->flags &= ~TLS1_FLAGS_RECEIVED_EXTMS;
Packit Service 084de1
+        s->s3->flags |= TLS1_FLAGS_REQUIRED_EXTMS;
Packit Service 084de1
+    }
Packit Service 084de1
 
Packit Service 084de1
     return 1;
Packit Service 084de1
 }
Packit Service 084de1
 
Packit Service 084de1
 static int final_ems(SSL *s, unsigned int context, int sent)
Packit Service 084de1
 {
Packit Service 084de1
+    /*
Packit Service 084de1
+     * Check extended master secret extension is not dropped on
Packit Service 084de1
+     * renegotiation.
Packit Service 084de1
+     */
Packit Service 084de1
+    if (!(s->s3->flags & TLS1_FLAGS_RECEIVED_EXTMS)
Packit Service 084de1
+        && (s->s3->flags & TLS1_FLAGS_REQUIRED_EXTMS)) {
Packit Service 084de1
+        SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_F_FINAL_EMS,
Packit Service 084de1
+                 SSL_R_INCONSISTENT_EXTMS);
Packit Service 084de1
+        return 0;
Packit Service 084de1
+    }
Packit Service 084de1
     if (!s->server && s->hit) {
Packit Service 084de1
         /*
Packit Service 084de1
          * Check extended master secret extension is consistent with