mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Merge commit d0b9c2c56476 from llvm git (by David CARLIER):
[compiler-rt] Remove SHA2 interceptions for NetBSD/FreeBSD. (#110246)
To Fix #110215
Interceptors introduced with 18a7ebda99044473fdbce6376993714ff54e6690
This fixes undesirable runtime failures when using -fsanitize=-address
in combination with -lcrypto.
Direct commit to stable/14, because main already got this change as part
of the llvm-19 import.
Approved by: re (cperciva)
Reported by: Theo Buehler <tb@openbsd.org>
PR: 281685
(cherry picked from commit 4f1754bcce)
This commit is contained in:
parent
0ff73c7796
commit
57921ae825
2 changed files with 0 additions and 182 deletions
|
|
@ -8809,83 +8809,6 @@ INTERCEPTOR(char *, RMD160Data, u8 *data, SIZE_T len, char *buf) {
|
|||
#define INIT_RMD160
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_MD5
|
||||
INTERCEPTOR(void, MD5Init, void *context) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Init, context);
|
||||
REAL(MD5Init)(context);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, MD5_CTX_sz);
|
||||
}
|
||||
|
||||
INTERCEPTOR(void, MD5Update, void *context, const unsigned char *data,
|
||||
unsigned int len) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Update, context, data, len);
|
||||
if (data && len > 0)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, MD5_CTX_sz);
|
||||
REAL(MD5Update)(context, data, len);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, MD5_CTX_sz);
|
||||
}
|
||||
|
||||
INTERCEPTOR(void, MD5Final, unsigned char digest[16], void *context) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Final, digest, context);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, MD5_CTX_sz);
|
||||
REAL(MD5Final)(digest, context);
|
||||
if (digest)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, digest, sizeof(unsigned char) * 16);
|
||||
}
|
||||
|
||||
INTERCEPTOR(char *, MD5End, void *context, char *buf) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5End, context, buf);
|
||||
if (context)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, MD5_CTX_sz);
|
||||
char *ret = REAL(MD5End)(context, buf);
|
||||
if (ret)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, MD5_return_length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
INTERCEPTOR(char *, MD5File, const char *filename, char *buf) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5File, filename, buf);
|
||||
if (filename)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, filename, internal_strlen(filename) + 1);
|
||||
char *ret = REAL(MD5File)(filename, buf);
|
||||
if (ret)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, MD5_return_length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
INTERCEPTOR(char *, MD5Data, const unsigned char *data, unsigned int len,
|
||||
char *buf) {
|
||||
void *ctx;
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, MD5Data, data, len, buf);
|
||||
if (data && len > 0)
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len);
|
||||
char *ret = REAL(MD5Data)(data, len, buf);
|
||||
if (ret)
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, MD5_return_length);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define INIT_MD5 \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Init); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Update); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Final); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5End); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5File); \
|
||||
COMMON_INTERCEPT_FUNCTION(MD5Data)
|
||||
#else
|
||||
#define INIT_MD5
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_FSEEK
|
||||
INTERCEPTOR(int, fseek, __sanitizer_FILE *stream, long int offset, int whence) {
|
||||
void *ctx;
|
||||
|
|
@ -9016,107 +8939,6 @@ INTERCEPTOR(char *, MD2Data, const unsigned char *data, unsigned int len,
|
|||
#define INIT_MD2
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_SHA2
|
||||
#define SHA2_INTERCEPTORS(LEN, SHA2_STATE_T) \
|
||||
INTERCEPTOR(void, SHA##LEN##_Init, void *context) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Init, context); \
|
||||
REAL(SHA##LEN##_Init)(context); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
} \
|
||||
INTERCEPTOR(void, SHA##LEN##_Update, void *context, \
|
||||
const u8 *data, SIZE_T len) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Update, context, data, len); \
|
||||
if (data && len > 0) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
REAL(SHA##LEN##_Update)(context, data, len); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
} \
|
||||
INTERCEPTOR(void, SHA##LEN##_Final, u8 digest[LEN/8], \
|
||||
void *context) { \
|
||||
void *ctx; \
|
||||
CHECK_EQ(SHA##LEN##_digest_length, LEN/8); \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Final, digest, context); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
REAL(SHA##LEN##_Final)(digest, context); \
|
||||
if (digest) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, digest, \
|
||||
sizeof(digest[0]) * \
|
||||
SHA##LEN##_digest_length); \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_End, void *context, char *buf) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_End, context, buf); \
|
||||
if (context) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
|
||||
char *ret = REAL(SHA##LEN##_End)(context, buf); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_File, const char *filename, char *buf) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_File, filename, buf); \
|
||||
if (filename) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, filename, internal_strlen(filename) + 1);\
|
||||
char *ret = REAL(SHA##LEN##_File)(filename, buf); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_FileChunk, const char *filename, char *buf, \
|
||||
OFF_T offset, OFF_T length) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_FileChunk, filename, buf, offset, \
|
||||
length); \
|
||||
if (filename) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, filename, internal_strlen(filename) + 1);\
|
||||
char *ret = REAL(SHA##LEN##_FileChunk)(filename, buf, offset, length); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
} \
|
||||
INTERCEPTOR(char *, SHA##LEN##_Data, u8 *data, SIZE_T len, char *buf) { \
|
||||
void *ctx; \
|
||||
COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Data, data, len, buf); \
|
||||
if (data && len > 0) \
|
||||
COMMON_INTERCEPTOR_READ_RANGE(ctx, data, len); \
|
||||
char *ret = REAL(SHA##LEN##_Data)(data, len, buf); \
|
||||
if (ret) \
|
||||
COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ret, SHA##LEN##_return_length); \
|
||||
return ret; \
|
||||
}
|
||||
|
||||
SHA2_INTERCEPTORS(224, u32)
|
||||
SHA2_INTERCEPTORS(256, u32)
|
||||
SHA2_INTERCEPTORS(384, u64)
|
||||
SHA2_INTERCEPTORS(512, u64)
|
||||
|
||||
#define INIT_SHA2_INTECEPTORS(LEN) \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Init); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Update); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Final); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_End); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_File); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_FileChunk); \
|
||||
COMMON_INTERCEPT_FUNCTION(SHA##LEN##_Data)
|
||||
|
||||
#define INIT_SHA2 \
|
||||
INIT_SHA2_INTECEPTORS(224); \
|
||||
INIT_SHA2_INTECEPTORS(256); \
|
||||
INIT_SHA2_INTECEPTORS(384); \
|
||||
INIT_SHA2_INTECEPTORS(512)
|
||||
#undef SHA2_INTERCEPTORS
|
||||
#else
|
||||
#define INIT_SHA2
|
||||
#endif
|
||||
|
||||
#if SANITIZER_INTERCEPT_VIS
|
||||
INTERCEPTOR(char *, vis, char *dst, int c, int flag, int nextc) {
|
||||
void *ctx;
|
||||
|
|
@ -10542,10 +10364,8 @@ static void InitializeCommonInterceptors() {
|
|||
INIT_SHA1;
|
||||
INIT_MD4;
|
||||
INIT_RMD160;
|
||||
INIT_MD5;
|
||||
INIT_FSEEK;
|
||||
INIT_MD2;
|
||||
INIT_SHA2;
|
||||
INIT_VIS;
|
||||
INIT_CDB;
|
||||
INIT_GETFSENT;
|
||||
|
|
|
|||
|
|
@ -559,10 +559,8 @@
|
|||
#define SANITIZER_INTERCEPT_SHA1 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_MD4 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_RMD160 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_MD5 (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_FSEEK (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_MD2 SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_SHA2 (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_CDB SI_NETBSD
|
||||
#define SANITIZER_INTERCEPT_VIS (SI_NETBSD || SI_FREEBSD)
|
||||
#define SANITIZER_INTERCEPT_POPEN SI_POSIX
|
||||
|
|
|
|||
Loading…
Reference in a new issue