87ebae8
Added to address RHBZ#1449689
87ebae8
87ebae8
Original patch notes from <hhorak@redhat.com> follows:
87ebae8
87ebae8
...
87ebae8
87ebae8
In FIPS mode there is no md5 by default, unless declared it is specifically
87ebae8
allowed. MD5 is used for non-crypto related things in MySQL (digests related
87ebae8
to performance schema and table list), so it is ok to use MD5 there.
87ebae8
87ebae8
However, there is also MD5() SQL function, that should still keep working,
87ebae8
but users should know they should avoid using it in FIPS mode.
87ebae8
87ebae8
RHBZ: #1351791
87ebae8
87ebae8
Upstream bug reports:
87ebae8
http://bugs.mysql.com/bug.php?id=83696
87ebae8
https://jira.mariadb.org/browse/MDEV-7788
87ebae8
87ebae8
87ebae8
diff -Naurp mysql-5.7.18_original/mysys_ssl/my_md5.cc mysql-5.7.18_patched/mysys_ssl/my_md5.cc
87ebae8
--- mysql-5.7.18_original/mysys_ssl/my_md5.cc	2017-03-18 08:45:14.000000000 +0100
87ebae8
+++ mysql-5.7.18_patched/mysys_ssl/my_md5.cc	2017-05-12 12:19:38.584814619 +0200
87ebae8
@@ -38,13 +38,22 @@ static void my_md5_hash(char *digest, co
87ebae8
 
87ebae8
 #elif defined(HAVE_OPENSSL)
87ebae8
 #include <openssl/md5.h>
87ebae8
+#include <openssl/evp.h>
87ebae8
 
87ebae8
 static void my_md5_hash(unsigned char* digest, unsigned const char *buf, int len)
87ebae8
 {
87ebae8
-  MD5_CTX ctx;
87ebae8
-  MD5_Init (&ctx;;
87ebae8
-  MD5_Update (&ctx, buf, len);
87ebae8
-  MD5_Final (digest, &ctx;;
87ebae8
+ EVP_MD_CTX *ctx;
87ebae8
+ ctx = EVP_MD_CTX_create();
87ebae8
+
87ebae8
+ #ifdef EVP_MD_CTX_FLAG_NON_FIPS_ALLOW
87ebae8
+  /* we will be using MD5, which is not allowed under FIPS */
87ebae8
+  EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
87ebae8
+ #endif
87ebae8
+
87ebae8
+ EVP_DigestInit_ex(ctx, EVP_md5(), NULL);
87ebae8
+ EVP_DigestUpdate(ctx, buf, len);
87ebae8
+ EVP_DigestFinal_ex(ctx, digest, NULL);
87ebae8
+ EVP_MD_CTX_destroy(ctx);
87ebae8
 }
87ebae8
 
87ebae8
 #endif /* HAVE_YASSL */