Skip to content

Commit b6229e3

Browse files
authored
Merge pull request #149 from gilles-peskine-arm/havege-asan-crypto
Fix misuse of signed ints in the HAVEGE module
2 parents e78cd62 + bc2adf9 commit b6229e3

File tree

2 files changed

+16
-13
lines changed

2 files changed

+16
-13
lines changed

include/mbedtls/havege.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#endif
3232

3333
#include <stddef.h>
34+
#include <stdint.h>
3435

3536
#define MBEDTLS_HAVEGE_COLLECT_SIZE 1024
3637

@@ -43,9 +44,9 @@ extern "C" {
4344
*/
4445
typedef struct mbedtls_havege_state
4546
{
46-
int PT1, PT2, offset[2];
47-
int pool[MBEDTLS_HAVEGE_COLLECT_SIZE];
48-
int WALK[8192];
47+
uint32_t PT1, PT2, offset[2];
48+
uint32_t pool[MBEDTLS_HAVEGE_COLLECT_SIZE];
49+
uint32_t WALK[8192];
4950
}
5051
mbedtls_havege_state;
5152

library/havege.c

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "mbedtls/timing.h"
3939
#include "mbedtls/platform_util.h"
4040

41+
#include <stdint.h>
4142
#include <string.h>
4243

4344
/* ------------------------------------------------------------------------
@@ -54,7 +55,7 @@
5455
* ------------------------------------------------------------------------
5556
*/
5657

57-
#define SWAP(X,Y) { int *T = (X); (X) = (Y); (Y) = T; }
58+
#define SWAP(X,Y) { uint32_t *T = (X); (X) = (Y); (Y) = T; }
5859

5960
#define TST1_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1;
6061
#define TST2_ENTER if( PTEST & 1 ) { PTEST ^= 3; PTEST >>= 1;
@@ -77,7 +78,7 @@
7778
PTX = (PT1 >> 18) & 7; \
7879
PT1 &= 0x1FFF; \
7980
PT2 &= 0x1FFF; \
80-
CLK = (int) mbedtls_timing_hardclock(); \
81+
CLK = (uint32_t) mbedtls_timing_hardclock(); \
8182
\
8283
i = 0; \
8384
A = &WALK[PT1 ]; RES[i++] ^= *A; \
@@ -100,7 +101,7 @@
100101
\
101102
IN = (*A >> (5)) ^ (*A << (27)) ^ CLK; \
102103
*A = (*B >> (6)) ^ (*B << (26)) ^ CLK; \
103-
*B = IN; CLK = (int) mbedtls_timing_hardclock(); \
104+
*B = IN; CLK = (uint32_t) mbedtls_timing_hardclock(); \
104105
*C = (*C >> (7)) ^ (*C << (25)) ^ CLK; \
105106
*D = (*D >> (8)) ^ (*D << (24)) ^ CLK; \
106107
\
@@ -158,10 +159,11 @@
158159
*/
159160
static void havege_fill( mbedtls_havege_state *hs )
160161
{
161-
int i, n = 0;
162-
int U1, U2, *A, *B, *C, *D;
163-
int PT1, PT2, *WALK, RES[16];
164-
int PTX, PTY, CLK, PTEST, IN;
162+
size_t n = 0;
163+
size_t i;
164+
uint32_t U1, U2, *A, *B, *C, *D;
165+
uint32_t PT1, PT2, *WALK, RES[16];
166+
uint32_t PTX, PTY, CLK, PTEST, IN;
165167

166168
WALK = hs->WALK;
167169
PT1 = hs->PT1;
@@ -212,16 +214,16 @@ void mbedtls_havege_free( mbedtls_havege_state *hs )
212214
*/
213215
int mbedtls_havege_random( void *p_rng, unsigned char *buf, size_t len )
214216
{
215-
int val;
217+
uint32_t val;
216218
size_t use_len;
217219
mbedtls_havege_state *hs = (mbedtls_havege_state *) p_rng;
218220
unsigned char *p = buf;
219221

220222
while( len > 0 )
221223
{
222224
use_len = len;
223-
if( use_len > sizeof(int) )
224-
use_len = sizeof(int);
225+
if( use_len > sizeof( val ) )
226+
use_len = sizeof( val );
225227

226228
if( hs->offset[1] >= MBEDTLS_HAVEGE_COLLECT_SIZE )
227229
havege_fill( hs );

0 commit comments

Comments
 (0)