Please Clang's sanitizer.
PR: #3424,#3423,#3422
This commit is contained in:
parent
c4f8efab34
commit
021e5043e5
@ -154,6 +154,8 @@
|
|||||||
|
|
||||||
#if defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)
|
#if defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)
|
||||||
#define ROTL(a,n) (_lrotl(a,n))
|
#define ROTL(a,n) (_lrotl(a,n))
|
||||||
|
#elif defined(PEDANTIC)
|
||||||
|
#define ROTL(a,n) ((((a)<<(n))&0xffffffffL)|((a)>>((32-(n))&31)))
|
||||||
#else
|
#else
|
||||||
#define ROTL(a,n) ((((a)<<(n))&0xffffffffL)|((a)>>(32-(n))))
|
#define ROTL(a,n) ((((a)<<(n))&0xffffffffL)|((a)>>(32-(n))))
|
||||||
#endif
|
#endif
|
||||||
|
@ -235,10 +235,10 @@
|
|||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
# if defined(__s390__) || defined(__s390x__)
|
||||||
#if defined(__s390__) || defined(__s390x__)
|
# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l))
|
||||||
# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l))
|
# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l))
|
||||||
# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l))
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef HOST_c2l
|
#ifndef HOST_c2l
|
||||||
@ -269,12 +269,12 @@
|
|||||||
(c)+=4; (l); })
|
(c)+=4; (l); })
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
|
||||||
#if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
|
# ifndef B_ENDIAN
|
||||||
# ifndef B_ENDIAN
|
/* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
|
||||||
/* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
|
# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l)
|
||||||
# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l)
|
# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l)
|
||||||
# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l)
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#ifndef STRICT_ALIGNMENT
|
#if !defined(STRICT_ALIGNMENT) && !defined(PEDANTIC)
|
||||||
# define STRICT_ALIGNMENT 0
|
# define STRICT_ALIGNMENT 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ typedef unsigned int u32;
|
|||||||
typedef unsigned char u8;
|
typedef unsigned char u8;
|
||||||
|
|
||||||
#define STRICT_ALIGNMENT 1
|
#define STRICT_ALIGNMENT 1
|
||||||
|
#ifndef PEDANTIC
|
||||||
#if defined(__i386) || defined(__i386__) || \
|
#if defined(__i386) || defined(__i386__) || \
|
||||||
defined(__x86_64) || defined(__x86_64__) || \
|
defined(__x86_64) || defined(__x86_64__) || \
|
||||||
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
|
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
|
||||||
@ -33,6 +34,7 @@ typedef unsigned char u8;
|
|||||||
defined(__s390__) || defined(__s390x__)
|
defined(__s390__) || defined(__s390x__)
|
||||||
# undef STRICT_ALIGNMENT
|
# undef STRICT_ALIGNMENT
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
|
||||||
#if defined(__GNUC__) && __GNUC__>=2
|
#if defined(__GNUC__) && __GNUC__>=2
|
||||||
|
@ -78,7 +78,7 @@ void RC4(RC4_KEY *key, size_t len, const unsigned char *indata,
|
|||||||
y=key->y;
|
y=key->y;
|
||||||
d=key->data;
|
d=key->data;
|
||||||
|
|
||||||
#if defined(RC4_CHUNK)
|
#if defined(RC4_CHUNK) && !defined(PEDANTIC)
|
||||||
/*
|
/*
|
||||||
* The original reason for implementing this(*) was the fact that
|
* The original reason for implementing this(*) was the fact that
|
||||||
* pre-21164a Alpha CPUs don't have byte load/store instructions
|
* pre-21164a Alpha CPUs don't have byte load/store instructions
|
||||||
|
@ -120,7 +120,7 @@ static void kboxinit(gost_ctx *c, const gost_subst_block *b)
|
|||||||
|
|
||||||
for (i = 0; i < 256; i++)
|
for (i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
c->k87[i] = (b->k8[i>>4] <<4 | b->k7 [i &15])<<24;
|
c->k87[i] = (word32)(b->k8[i>>4] <<4 | b->k7 [i &15])<<24;
|
||||||
c->k65[i] = (b->k6[i>>4] << 4 | b->k5 [i &15])<<16;
|
c->k65[i] = (b->k6[i>>4] << 4 | b->k5 [i &15])<<16;
|
||||||
c->k43[i] = (b->k4[i>>4] <<4 | b->k3 [i &15])<<8;
|
c->k43[i] = (b->k4[i>>4] <<4 | b->k3 [i &15])<<8;
|
||||||
c->k21[i] = b->k2[i>>4] <<4 | b->k1 [i &15];
|
c->k21[i] = b->k2[i>>4] <<4 | b->k1 [i &15];
|
||||||
@ -140,8 +140,8 @@ static word32 f(gost_ctx *c,word32 x)
|
|||||||
void gostcrypt(gost_ctx *c, const byte *in, byte *out)
|
void gostcrypt(gost_ctx *c, const byte *in, byte *out)
|
||||||
{
|
{
|
||||||
register word32 n1, n2; /* As named in the GOST */
|
register word32 n1, n2; /* As named in the GOST */
|
||||||
n1 = in[0]|(in[1]<<8)|(in[2]<<16)|(in[3]<<24);
|
n1 = in[0]|(in[1]<<8)|(in[2]<<16)|((word32)in[3]<<24);
|
||||||
n2 = in[4]|(in[5]<<8)|(in[6]<<16)|(in[7]<<24);
|
n2 = in[4]|(in[5]<<8)|(in[6]<<16)|((word32)in[7]<<24);
|
||||||
/* Instead of swapping halves, swap names each round */
|
/* Instead of swapping halves, swap names each round */
|
||||||
|
|
||||||
n2 ^= f(c,n1+c->k[0]); n1 ^= f(c,n2+c->k[1]);
|
n2 ^= f(c,n1+c->k[0]); n1 ^= f(c,n2+c->k[1]);
|
||||||
@ -173,8 +173,8 @@ void gostcrypt(gost_ctx *c, const byte *in, byte *out)
|
|||||||
void gostdecrypt(gost_ctx *c, const byte *in,byte *out)
|
void gostdecrypt(gost_ctx *c, const byte *in,byte *out)
|
||||||
{
|
{
|
||||||
register word32 n1, n2; /* As named in the GOST */
|
register word32 n1, n2; /* As named in the GOST */
|
||||||
n1 = in[0]|(in[1]<<8)|(in[2]<<16)|(in[3]<<24);
|
n1 = in[0]|(in[1]<<8)|(in[2]<<16)|((word32)in[3]<<24);
|
||||||
n2 = in[4]|(in[5]<<8)|(in[6]<<16)|(in[7]<<24);
|
n2 = in[4]|(in[5]<<8)|(in[6]<<16)|((word32)in[7]<<24);
|
||||||
|
|
||||||
n2 ^= f(c,n1+c->k[0]); n1 ^= f(c,n2+c->k[1]);
|
n2 ^= f(c,n1+c->k[0]); n1 ^= f(c,n2+c->k[1]);
|
||||||
n2 ^= f(c,n1+c->k[2]); n1 ^= f(c,n2+c->k[3]);
|
n2 ^= f(c,n1+c->k[2]); n1 ^= f(c,n2+c->k[3]);
|
||||||
@ -275,7 +275,7 @@ void gost_key(gost_ctx *c, const byte *k)
|
|||||||
int i,j;
|
int i,j;
|
||||||
for(i=0,j=0;i<8;i++,j+=4)
|
for(i=0,j=0;i<8;i++,j+=4)
|
||||||
{
|
{
|
||||||
c->k[i]=k[j]|(k[j+1]<<8)|(k[j+2]<<16)|(k[j+3]<<24);
|
c->k[i]=k[j]|(k[j+1]<<8)|(k[j+2]<<16)|((word32)k[j+3]<<24);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -323,8 +323,8 @@ void mac_block(gost_ctx *c,byte *buffer,const byte *block)
|
|||||||
{
|
{
|
||||||
buffer[i]^=block[i];
|
buffer[i]^=block[i];
|
||||||
}
|
}
|
||||||
n1 = buffer[0]|(buffer[1]<<8)|(buffer[2]<<16)|(buffer[3]<<24);
|
n1 = buffer[0]|(buffer[1]<<8)|(buffer[2]<<16)|((word32)buffer[3]<<24);
|
||||||
n2 = buffer[4]|(buffer[5]<<8)|(buffer[6]<<16)|(buffer[7]<<24);
|
n2 = buffer[4]|(buffer[5]<<8)|(buffer[6]<<16)|((word32)buffer[7]<<24);
|
||||||
/* Instead of swapping halves, swap names each round */
|
/* Instead of swapping halves, swap names each round */
|
||||||
|
|
||||||
n2 ^= f(c,n1+c->k[0]); n1 ^= f(c,n2+c->k[1]);
|
n2 ^= f(c,n1+c->k[0]); n1 ^= f(c,n2+c->k[1]);
|
||||||
|
@ -241,13 +241,13 @@ static void gost_cnt_next (void *ctx, unsigned char *iv, unsigned char *buf)
|
|||||||
{
|
{
|
||||||
memcpy(buf1,iv,8);
|
memcpy(buf1,iv,8);
|
||||||
}
|
}
|
||||||
g = buf1[0]|(buf1[1]<<8)|(buf1[2]<<16)|(buf1[3]<<24);
|
g = buf1[0]|(buf1[1]<<8)|(buf1[2]<<16)|((word32)buf1[3]<<24);
|
||||||
g += 0x01010101;
|
g += 0x01010101;
|
||||||
buf1[0]=(unsigned char)(g&0xff);
|
buf1[0]=(unsigned char)(g&0xff);
|
||||||
buf1[1]=(unsigned char)((g>>8)&0xff);
|
buf1[1]=(unsigned char)((g>>8)&0xff);
|
||||||
buf1[2]=(unsigned char)((g>>16)&0xff);
|
buf1[2]=(unsigned char)((g>>16)&0xff);
|
||||||
buf1[3]=(unsigned char)((g>>24)&0xff);
|
buf1[3]=(unsigned char)((g>>24)&0xff);
|
||||||
g = buf1[4]|(buf1[5]<<8)|(buf1[6]<<16)|(buf1[7]<<24);
|
g = buf1[4]|(buf1[5]<<8)|(buf1[6]<<16)|((word32)buf1[7]<<24);
|
||||||
go = g;
|
go = g;
|
||||||
g += 0x01010104;
|
g += 0x01010104;
|
||||||
if (go > g) /* overflow*/
|
if (go > g) /* overflow*/
|
||||||
|
@ -273,7 +273,8 @@ static int test_dtls1_not_bleeding()
|
|||||||
{
|
{
|
||||||
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
||||||
/* Three-byte pad at the beginning for type and payload length */
|
/* Three-byte pad at the beginning for type and payload length */
|
||||||
unsigned char payload_buf[] = " Not bleeding, sixteen spaces of padding"
|
unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS+4] =
|
||||||
|
" Not bleeding, sixteen spaces of padding"
|
||||||
" ";
|
" ";
|
||||||
const int payload_buf_len = honest_payload_size(payload_buf);
|
const int payload_buf_len = honest_payload_size(payload_buf);
|
||||||
|
|
||||||
@ -292,9 +293,9 @@ static int test_dtls1_not_bleeding_empty_payload()
|
|||||||
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
||||||
/* Three-byte pad at the beginning for type and payload length, plus a NUL
|
/* Three-byte pad at the beginning for type and payload length, plus a NUL
|
||||||
* at the end */
|
* at the end */
|
||||||
unsigned char payload_buf[4 + MIN_PADDING_SIZE];
|
unsigned char payload_buf[4 + MAX_PRINTABLE_CHARACTERS];
|
||||||
memset(payload_buf, ' ', sizeof(payload_buf));
|
memset(payload_buf, ' ', MIN_PADDING_SIZE+3);
|
||||||
payload_buf[sizeof(payload_buf) - 1] = '\0';
|
payload_buf[MIN_PADDING_SIZE+3] = '\0';
|
||||||
payload_buf_len = honest_payload_size(payload_buf);
|
payload_buf_len = honest_payload_size(payload_buf);
|
||||||
|
|
||||||
fixture.payload = &payload_buf[0];
|
fixture.payload = &payload_buf[0];
|
||||||
@ -309,7 +310,8 @@ static int test_dtls1_heartbleed()
|
|||||||
{
|
{
|
||||||
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
||||||
/* Three-byte pad at the beginning for type and payload length */
|
/* Three-byte pad at the beginning for type and payload length */
|
||||||
unsigned char payload_buf[] = " HEARTBLEED ";
|
unsigned char payload_buf[4+MAX_PRINTABLE_CHARACTERS] =
|
||||||
|
" HEARTBLEED ";
|
||||||
|
|
||||||
fixture.payload = &payload_buf[0];
|
fixture.payload = &payload_buf[0];
|
||||||
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
||||||
@ -324,9 +326,9 @@ static int test_dtls1_heartbleed_empty_payload()
|
|||||||
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
|
||||||
/* Excluding the NUL at the end, one byte short of type + payload length +
|
/* Excluding the NUL at the end, one byte short of type + payload length +
|
||||||
* minimum padding */
|
* minimum padding */
|
||||||
unsigned char payload_buf[MIN_PADDING_SIZE + 3];
|
unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS + 4];
|
||||||
memset(payload_buf, ' ', sizeof(payload_buf));
|
memset(payload_buf, ' ', MIN_PADDING_SIZE+2);
|
||||||
payload_buf[sizeof(payload_buf) - 1] = '\0';
|
payload_buf[MIN_PADDING_SIZE+2] = '\0';
|
||||||
|
|
||||||
fixture.payload = &payload_buf[0];
|
fixture.payload = &payload_buf[0];
|
||||||
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
||||||
@ -357,8 +359,9 @@ static int test_tls1_not_bleeding()
|
|||||||
{
|
{
|
||||||
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
||||||
/* Three-byte pad at the beginning for type and payload length */
|
/* Three-byte pad at the beginning for type and payload length */
|
||||||
unsigned char payload_buf[] = " Not bleeding, sixteen spaces of padding"
|
unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS+4] =
|
||||||
" ";
|
" Not bleeding, sixteen spaces of padding"
|
||||||
|
" ";
|
||||||
const int payload_buf_len = honest_payload_size(payload_buf);
|
const int payload_buf_len = honest_payload_size(payload_buf);
|
||||||
|
|
||||||
fixture.payload = &payload_buf[0];
|
fixture.payload = &payload_buf[0];
|
||||||
@ -376,9 +379,9 @@ static int test_tls1_not_bleeding_empty_payload()
|
|||||||
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
||||||
/* Three-byte pad at the beginning for type and payload length, plus a NUL
|
/* Three-byte pad at the beginning for type and payload length, plus a NUL
|
||||||
* at the end */
|
* at the end */
|
||||||
unsigned char payload_buf[4 + MIN_PADDING_SIZE];
|
unsigned char payload_buf[4 + MAX_PRINTABLE_CHARACTERS];
|
||||||
memset(payload_buf, ' ', sizeof(payload_buf));
|
memset(payload_buf, ' ', MIN_PADDING_SIZE+3);
|
||||||
payload_buf[sizeof(payload_buf) - 1] = '\0';
|
payload_buf[MIN_PADDING_SIZE+3] = '\0';
|
||||||
payload_buf_len = honest_payload_size(payload_buf);
|
payload_buf_len = honest_payload_size(payload_buf);
|
||||||
|
|
||||||
fixture.payload = &payload_buf[0];
|
fixture.payload = &payload_buf[0];
|
||||||
@ -393,7 +396,8 @@ static int test_tls1_heartbleed()
|
|||||||
{
|
{
|
||||||
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
||||||
/* Three-byte pad at the beginning for type and payload length */
|
/* Three-byte pad at the beginning for type and payload length */
|
||||||
unsigned char payload_buf[] = " HEARTBLEED ";
|
unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS+4] =
|
||||||
|
" HEARTBLEED ";
|
||||||
|
|
||||||
fixture.payload = &payload_buf[0];
|
fixture.payload = &payload_buf[0];
|
||||||
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
||||||
@ -408,9 +412,9 @@ static int test_tls1_heartbleed_empty_payload()
|
|||||||
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
|
||||||
/* Excluding the NUL at the end, one byte short of type + payload length +
|
/* Excluding the NUL at the end, one byte short of type + payload length +
|
||||||
* minimum padding */
|
* minimum padding */
|
||||||
unsigned char payload_buf[MIN_PADDING_SIZE + 3];
|
unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS + 4];
|
||||||
memset(payload_buf, ' ', sizeof(payload_buf));
|
memset(payload_buf, ' ', MIN_PADDING_SIZE+2);
|
||||||
payload_buf[sizeof(payload_buf) - 1] = '\0';
|
payload_buf[MIN_PADDING_SIZE+2] = '\0';
|
||||||
|
|
||||||
fixture.payload = &payload_buf[0];
|
fixture.payload = &payload_buf[0];
|
||||||
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user