Module Name:    src
Committed By:   riastradh
Date:           Fri Mar 15 18:10:37 UTC 2024

Modified Files:
        src/crypto/external/bsd/openssl/dist/crypto/evp: legacy_sha.c
        src/crypto/external/bsd/openssl/dist/include/crypto: sha.h
        src/crypto/external/bsd/openssl/dist/providers/implementations/digests:
            sha2_prov.c
        src/crypto/external/bsd/openssl/lib/libcrypto: libc-sha2xx.c
        src/tests/crypto/libcrypto: t_sha512trunc.c

Log Message:
libcrypto: Fix buffer overrun in truncated SHA-512 functions.

Further fallout from the libc/openssl sha2 symbol collision.

PR lib/58039


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.2 -r1.2 \
    src/crypto/external/bsd/openssl/dist/crypto/evp/legacy_sha.c
cvs rdiff -u -r1.1.1.2 -r1.2 \
    src/crypto/external/bsd/openssl/dist/include/crypto/sha.h
cvs rdiff -u -r1.1.1.1 -r1.2 \
    
src/crypto/external/bsd/openssl/dist/providers/implementations/digests/sha2_prov.c
cvs rdiff -u -r1.3 -r1.4 \
    src/crypto/external/bsd/openssl/lib/libcrypto/libc-sha2xx.c
cvs rdiff -u -r1.1 -r1.2 src/tests/crypto/libcrypto/t_sha512trunc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/crypto/external/bsd/openssl/dist/crypto/evp/legacy_sha.c
diff -u src/crypto/external/bsd/openssl/dist/crypto/evp/legacy_sha.c:1.1.1.2 src/crypto/external/bsd/openssl/dist/crypto/evp/legacy_sha.c:1.2
--- src/crypto/external/bsd/openssl/dist/crypto/evp/legacy_sha.c:1.1.1.2	Wed Oct 25 17:13:53 2023
+++ src/crypto/external/bsd/openssl/dist/crypto/evp/legacy_sha.c	Fri Mar 15 18:10:37 2024
@@ -49,9 +49,9 @@ static int nm##_init(EVP_MD_CTX *ctx)   
 #define sha512_256_Init    sha512_256_init
 
 #define sha512_224_Update  SHA512_Update
-#define sha512_224_Final   SHA512_Final
+#define sha512_224_Final   sha512_224_final /* XXX NetBSD libc sha2 */
 #define sha512_256_Update  SHA512_Update
-#define sha512_256_Final   SHA512_Final
+#define sha512_256_Final   sha512_256_final /* XXX NetBSD libc sha2 */
 
 IMPLEMENT_LEGACY_EVP_MD_METH(sha1, SHA1)
 IMPLEMENT_LEGACY_EVP_MD_METH(sha224, SHA224)

Index: src/crypto/external/bsd/openssl/dist/include/crypto/sha.h
diff -u src/crypto/external/bsd/openssl/dist/include/crypto/sha.h:1.1.1.2 src/crypto/external/bsd/openssl/dist/include/crypto/sha.h:1.2
--- src/crypto/external/bsd/openssl/dist/include/crypto/sha.h:1.1.1.2	Sun May  7 18:29:28 2023
+++ src/crypto/external/bsd/openssl/dist/include/crypto/sha.h	Fri Mar 15 18:10:37 2024
@@ -16,6 +16,8 @@
 
 int sha512_224_init(SHA512_CTX *);
 int sha512_256_init(SHA512_CTX *);
+int sha512_224_final(unsigned char *, SHA512_CTX *); /* XXX NetBSD libc sha2 */
+int sha512_256_final(unsigned char *, SHA512_CTX *); /* XXX NetBSD libc sha2 */
 int ossl_sha1_ctrl(SHA_CTX *ctx, int cmd, int mslen, void *ms);
 unsigned char *ossl_sha1(const unsigned char *d, size_t n, unsigned char *md);
 

Index: src/crypto/external/bsd/openssl/dist/providers/implementations/digests/sha2_prov.c
diff -u src/crypto/external/bsd/openssl/dist/providers/implementations/digests/sha2_prov.c:1.1.1.1 src/crypto/external/bsd/openssl/dist/providers/implementations/digests/sha2_prov.c:1.2
--- src/crypto/external/bsd/openssl/dist/providers/implementations/digests/sha2_prov.c:1.1.1.1	Sun May  7 18:29:30 2023
+++ src/crypto/external/bsd/openssl/dist/providers/implementations/digests/sha2_prov.c	Fri Mar 15 18:10:37 2024
@@ -86,10 +86,12 @@ IMPLEMENT_digest_functions(sha512, SHA51
 /* ossl_sha512_224_functions */
 IMPLEMENT_digest_functions(sha512_224, SHA512_CTX,
                            SHA512_CBLOCK, SHA224_DIGEST_LENGTH, SHA2_FLAGS,
-                           sha512_224_init, SHA512_Update, SHA512_Final)
+                           sha512_224_init, SHA512_Update,
+                           /* XXX NetBSD libc sha2 */sha512_224_final)
 
 /* ossl_sha512_256_functions */
 IMPLEMENT_digest_functions(sha512_256, SHA512_CTX,
                            SHA512_CBLOCK, SHA256_DIGEST_LENGTH, SHA2_FLAGS,
-                           sha512_256_init, SHA512_Update, SHA512_Final)
+                           sha512_256_init, SHA512_Update,
+                           /* XXX NetBSD libc sha2 */sha512_256_final)
 

Index: src/crypto/external/bsd/openssl/lib/libcrypto/libc-sha2xx.c
diff -u src/crypto/external/bsd/openssl/lib/libcrypto/libc-sha2xx.c:1.3 src/crypto/external/bsd/openssl/lib/libcrypto/libc-sha2xx.c:1.4
--- src/crypto/external/bsd/openssl/lib/libcrypto/libc-sha2xx.c:1.3	Sat May  6 17:07:23 2023
+++ src/crypto/external/bsd/openssl/lib/libcrypto/libc-sha2xx.c	Fri Mar 15 18:10:37 2024
@@ -47,6 +47,20 @@ sha512_224_init(SHA512_CTX *context)
 }
 
 extern int
+sha512_224_final(unsigned char *md, SHA512_CTX *context);
+int
+sha512_224_final(unsigned char *md, SHA512_CTX *context)
+{
+	unsigned char tmp[64];
+
+	SHA512_Final(tmp, context);
+	memcpy(md, tmp, 28);
+	explicit_memset(tmp, 0, sizeof(tmp));
+	return 1;
+
+}
+
+extern int
 sha512_256_init(SHA512_CTX *context);
 int
 sha512_256_init(SHA512_CTX *context)
@@ -61,3 +75,16 @@ sha512_256_init(SHA512_CTX *context)
 
 	return 1;
 }
+
+extern int
+sha512_256_final(unsigned char *md, SHA512_CTX *context);
+int
+sha512_256_final(unsigned char *md, SHA512_CTX *context)
+{
+	unsigned char tmp[64];
+
+	SHA512_Final(tmp, context);
+	memcpy(md, tmp, 32);
+	explicit_memset(tmp, 0, sizeof(tmp));
+	return 1;
+}

Index: src/tests/crypto/libcrypto/t_sha512trunc.c
diff -u src/tests/crypto/libcrypto/t_sha512trunc.c:1.1 src/tests/crypto/libcrypto/t_sha512trunc.c:1.2
--- src/tests/crypto/libcrypto/t_sha512trunc.c:1.1	Fri Mar 15 15:32:07 2024
+++ src/tests/crypto/libcrypto/t_sha512trunc.c	Fri Mar 15 18:10:37 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_sha512trunc.c,v 1.1 2024/03/15 15:32:07 riastradh Exp $	*/
+/*	$NetBSD: t_sha512trunc.c,v 1.2 2024/03/15 18:10:37 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: t_sha512trunc.c,v 1.1 2024/03/15 15:32:07 riastradh Exp $");
+__RCSID("$NetBSD: t_sha512trunc.c,v 1.2 2024/03/15 18:10:37 riastradh Exp $");
 
 #include <stddef.h>
 
@@ -123,8 +123,6 @@ ATF_TC_BODY(sha512_224, tc)
 		},
 	};
 
-	atf_tc_expect_fail("PR lib/58039:"
-	    " Buffer overflow when writing a SHA512_224 or SHA512_256 digest");
 	check(C, __arraycount(C), 28, EVP_sha512_224());
 }
 
@@ -159,8 +157,6 @@ ATF_TC_BODY(sha512_256, tc)
 		},
 	};
 
-	atf_tc_expect_fail("PR lib/58039:"
-	    " Buffer overflow when writing a SHA512_224 or SHA512_256 digest");
 	check(C, __arraycount(C), 32, EVP_sha512_256());
 }
 

Reply via email to