-
Notifications
You must be signed in to change notification settings - Fork 11.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Sanitizers] intercept md5 and sha* apis on FreeBSD.
Reviewed By: vitalybuka Differential Revision: https://reviews.llvm.org/D110989
- Loading branch information
Showing
5 changed files
with
372 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -69,6 +69,11 @@ | |
#include <semaphore.h> | ||
#include <signal.h> | ||
#include <stddef.h> | ||
#include <md5.h> | ||
#include <sha224.h> | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
devnexen
Author
Member
|
||
#include <sha256.h> | ||
#include <sha384.h> | ||
#include <sha512.h> | ||
#include <stdio.h> | ||
#include <stringlist.h> | ||
#include <term.h> | ||
|
@@ -361,6 +366,22 @@ const int si_SEGV_MAPERR = SEGV_MAPERR; | |
const int si_SEGV_ACCERR = SEGV_ACCERR; | ||
const int unvis_valid = UNVIS_VALID; | ||
const int unvis_validpush = UNVIS_VALIDPUSH; | ||
|
||
const unsigned MD5_CTX_sz = sizeof(MD5_CTX); | ||
const unsigned MD5_return_length = MD5_DIGEST_STRING_LENGTH; | ||
|
||
#define SHA2_CONST(LEN) \ | ||
const unsigned SHA##LEN##_CTX_sz = sizeof(SHA##LEN##_CTX); \ | ||
const unsigned SHA##LEN##_return_length = SHA##LEN##_DIGEST_STRING_LENGTH; \ | ||
const unsigned SHA##LEN##_block_length = SHA##LEN##_BLOCK_LENGTH; \ | ||
const unsigned SHA##LEN##_digest_length = SHA##LEN##_DIGEST_LENGTH | ||
|
||
SHA2_CONST(224); | ||
SHA2_CONST(256); | ||
SHA2_CONST(384); | ||
SHA2_CONST(512); | ||
|
||
#undef SHA2_CONST | ||
} // namespace __sanitizer | ||
|
||
using namespace __sanitizer; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
119 changes: 119 additions & 0 deletions
119
compiler-rt/test/sanitizer_common/TestCases/FreeBSD/md5.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
// RUN: %clangxx -O0 -g %s -o %t -lmd && %run %t 2>&1 | FileCheck %s | ||
|
||
#include <sys/param.h> | ||
|
||
#include <assert.h> | ||
#include <md5.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
|
||
void test1() { | ||
MD5_CTX ctx; | ||
uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; | ||
uint8_t digest[MD5_DIGEST_LENGTH]; | ||
size_t entropysz = sizeof(entropy); | ||
size_t digestsz = sizeof(digest); | ||
|
||
MD5Init(&ctx); | ||
MD5Update(&ctx, entropy, entropysz); | ||
MD5Final(digest, &ctx); | ||
|
||
printf("test1: '"); | ||
for (size_t i = 0; i < digestsz; i++) | ||
printf("%02x", digest[i]); | ||
printf("'\n"); | ||
} | ||
|
||
void test2() { | ||
MD5_CTX ctx; | ||
uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; | ||
char digest[MD5_DIGEST_STRING_LENGTH]; | ||
size_t entropysz = sizeof(entropy); | ||
|
||
MD5Init(&ctx); | ||
MD5Update(&ctx, entropy, entropysz); | ||
char *p = MD5End(&ctx, digest); | ||
assert(p); | ||
|
||
printf("test2: '%s'\n", digest); | ||
} | ||
|
||
void test3() { | ||
MD5_CTX ctx; | ||
uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; | ||
size_t entropysz = sizeof(entropy); | ||
|
||
MD5Init(&ctx); | ||
MD5Update(&ctx, entropy, entropysz); | ||
char *p = MD5End(&ctx, NULL); | ||
assert(strlen(p) == MD5_DIGEST_STRING_LENGTH - 1); | ||
|
||
printf("test3: '%s'\n", p); | ||
|
||
free(p); | ||
} | ||
|
||
void test4() { | ||
char digest[MD5_DIGEST_STRING_LENGTH]; | ||
|
||
char *p = MD5File("/etc/fstab", digest); | ||
assert(p == digest); | ||
|
||
printf("test4: '%s'\n", p); | ||
} | ||
|
||
void test5() { | ||
char *p = MD5File("/etc/fstab", NULL); | ||
assert(strlen(p) == MD5_DIGEST_STRING_LENGTH - 1); | ||
|
||
printf("test5: '%s'\n", p); | ||
|
||
free(p); | ||
} | ||
|
||
void test6() { | ||
uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; | ||
char digest[MD5_DIGEST_STRING_LENGTH]; | ||
size_t entropysz = sizeof(entropy); | ||
|
||
char *p = MD5Data(entropy, entropysz, digest); | ||
assert(p == digest); | ||
|
||
printf("test6: '%s'\n", p); | ||
} | ||
|
||
void test7() { | ||
uint8_t entropy[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; | ||
size_t entropysz = sizeof(entropy); | ||
|
||
char *p = MD5Data(entropy, entropysz, NULL); | ||
assert(strlen(p) == MD5_DIGEST_STRING_LENGTH - 1); | ||
|
||
printf("test7: '%s'\n", p); | ||
|
||
free(p); | ||
} | ||
|
||
int main(void) { | ||
printf("MD5\n"); | ||
|
||
test1(); | ||
test2(); | ||
test3(); | ||
test4(); | ||
test5(); | ||
test6(); | ||
test7(); | ||
|
||
// CHECK: MD5 | ||
// CHECK: test1: '86e65b1ef4a830af347ac05ab4f0e999' | ||
// CHECK: test2: '86e65b1ef4a830af347ac05ab4f0e999' | ||
// CHECK: test3: '86e65b1ef4a830af347ac05ab4f0e999' | ||
// CHECK: test4: '{{.*}}' | ||
// CHECK: test5: '{{.*}}' | ||
// CHECK: test6: '86e65b1ef4a830af347ac05ab4f0e999' | ||
// CHECK: test7: '86e65b1ef4a830af347ac05ab4f0e999' | ||
|
||
return 0; | ||
} |
Oops, something went wrong.
This breaks building on pre-FreeBSD 12.0 due to unconditional include of sha224.h. Reported to GCC https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105347 .