mbed TLS Build

Dependents:   Slave-prot-prod

Committer:
williequesada
Date:
Tue Jun 04 16:03:38 2019 +0000
Revision:
1:1a219dea6cb5
Parent:
0:cdf462088d13
compartir a Pablo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markrad 0:cdf462088d13 1 /* BEGIN_HEADER */
markrad 0:cdf462088d13 2 #include "mbedtls/memory_buffer_alloc.h"
markrad 0:cdf462088d13 3 #define TEST_SUITE_MEMORY_BUFFER_ALLOC
markrad 0:cdf462088d13 4
markrad 0:cdf462088d13 5 /* END_HEADER */
markrad 0:cdf462088d13 6
markrad 0:cdf462088d13 7 /* BEGIN_DEPENDENCIES
markrad 0:cdf462088d13 8 * depends_on:MBEDTLS_MEMORY_BUFFER_ALLOC_C
markrad 0:cdf462088d13 9 * END_DEPENDENCIES
markrad 0:cdf462088d13 10 */
markrad 0:cdf462088d13 11
markrad 0:cdf462088d13 12 /* BEGIN_SUITE_HELPERS */
markrad 0:cdf462088d13 13 static int check_pointer( void *p )
markrad 0:cdf462088d13 14 {
markrad 0:cdf462088d13 15 if( p == NULL )
markrad 0:cdf462088d13 16 return( -1 );
markrad 0:cdf462088d13 17
markrad 0:cdf462088d13 18 if( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 )
markrad 0:cdf462088d13 19 return( -1 );
markrad 0:cdf462088d13 20
markrad 0:cdf462088d13 21 return( 0 );
markrad 0:cdf462088d13 22 }
markrad 0:cdf462088d13 23 /* END_SUITE_HELPERS */
markrad 0:cdf462088d13 24
markrad 0:cdf462088d13 25 /* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
markrad 0:cdf462088d13 26 void mbedtls_memory_buffer_alloc_self_test( )
markrad 0:cdf462088d13 27 {
markrad 0:cdf462088d13 28 TEST_ASSERT( mbedtls_memory_buffer_alloc_self_test( 1 ) == 0 );
markrad 0:cdf462088d13 29 }
markrad 0:cdf462088d13 30 /* END_CASE */
markrad 0:cdf462088d13 31
markrad 0:cdf462088d13 32 /* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
markrad 0:cdf462088d13 33 void memory_buffer_alloc_free_alloc( int a_bytes, int b_bytes, int c_bytes,
markrad 0:cdf462088d13 34 int d_bytes,
markrad 0:cdf462088d13 35 int free_a, int free_b, int free_c,
markrad 0:cdf462088d13 36 int free_d,
markrad 0:cdf462088d13 37 int e_bytes, int f_bytes )
markrad 0:cdf462088d13 38 {
markrad 0:cdf462088d13 39 unsigned char buf[1024];
markrad 0:cdf462088d13 40 unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL, *ptr_d = NULL,
markrad 0:cdf462088d13 41 *ptr_e = NULL, *ptr_f = NULL;
markrad 0:cdf462088d13 42
markrad 0:cdf462088d13 43 size_t reported_blocks;
markrad 0:cdf462088d13 44 size_t allocated_bytes = 0, reported_bytes;
markrad 0:cdf462088d13 45
markrad 0:cdf462088d13 46 mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
markrad 0:cdf462088d13 47
markrad 0:cdf462088d13 48 mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS );
markrad 0:cdf462088d13 49
markrad 0:cdf462088d13 50 if( a_bytes > 0 )
markrad 0:cdf462088d13 51 {
markrad 0:cdf462088d13 52 ptr_a = mbedtls_calloc( a_bytes, sizeof(char) );
markrad 0:cdf462088d13 53 TEST_ASSERT( check_pointer( ptr_a ) == 0 );
markrad 0:cdf462088d13 54
markrad 0:cdf462088d13 55 allocated_bytes += a_bytes * sizeof(char);
markrad 0:cdf462088d13 56 }
markrad 0:cdf462088d13 57
markrad 0:cdf462088d13 58 if( b_bytes > 0 )
markrad 0:cdf462088d13 59 {
markrad 0:cdf462088d13 60 ptr_b = mbedtls_calloc( b_bytes, sizeof(char) );
markrad 0:cdf462088d13 61 TEST_ASSERT( check_pointer( ptr_b ) == 0 );
markrad 0:cdf462088d13 62
markrad 0:cdf462088d13 63 allocated_bytes += b_bytes * sizeof(char);
markrad 0:cdf462088d13 64 }
markrad 0:cdf462088d13 65
markrad 0:cdf462088d13 66 if( c_bytes > 0 )
markrad 0:cdf462088d13 67 {
markrad 0:cdf462088d13 68 ptr_c = mbedtls_calloc( c_bytes, sizeof(char) );
markrad 0:cdf462088d13 69 TEST_ASSERT( check_pointer( ptr_c ) == 0 );
markrad 0:cdf462088d13 70
markrad 0:cdf462088d13 71 allocated_bytes += c_bytes * sizeof(char);
markrad 0:cdf462088d13 72 }
markrad 0:cdf462088d13 73
markrad 0:cdf462088d13 74 if( d_bytes > 0 )
markrad 0:cdf462088d13 75 {
markrad 0:cdf462088d13 76 ptr_d = mbedtls_calloc( d_bytes, sizeof(char) );
markrad 0:cdf462088d13 77 TEST_ASSERT( check_pointer( ptr_d ) == 0 );
markrad 0:cdf462088d13 78
markrad 0:cdf462088d13 79 allocated_bytes += d_bytes * sizeof(char);
markrad 0:cdf462088d13 80 }
markrad 0:cdf462088d13 81
markrad 0:cdf462088d13 82 mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
markrad 0:cdf462088d13 83 TEST_ASSERT( reported_bytes == allocated_bytes );
markrad 0:cdf462088d13 84
markrad 0:cdf462088d13 85 if( free_a )
markrad 0:cdf462088d13 86 {
markrad 0:cdf462088d13 87 mbedtls_free( ptr_a );
markrad 0:cdf462088d13 88 ptr_a = NULL;
markrad 0:cdf462088d13 89 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 90
markrad 0:cdf462088d13 91 allocated_bytes -= a_bytes * sizeof(char);
markrad 0:cdf462088d13 92 }
markrad 0:cdf462088d13 93
markrad 0:cdf462088d13 94 if( free_b )
markrad 0:cdf462088d13 95 {
markrad 0:cdf462088d13 96 mbedtls_free( ptr_b );
markrad 0:cdf462088d13 97 ptr_b = NULL;
markrad 0:cdf462088d13 98 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 99
markrad 0:cdf462088d13 100 allocated_bytes -= b_bytes * sizeof(char);
markrad 0:cdf462088d13 101 }
markrad 0:cdf462088d13 102
markrad 0:cdf462088d13 103 if( free_c )
markrad 0:cdf462088d13 104 {
markrad 0:cdf462088d13 105 mbedtls_free( ptr_c );
markrad 0:cdf462088d13 106 ptr_c = NULL;
markrad 0:cdf462088d13 107 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 108
markrad 0:cdf462088d13 109 allocated_bytes -= c_bytes * sizeof(char);
markrad 0:cdf462088d13 110 }
markrad 0:cdf462088d13 111
markrad 0:cdf462088d13 112 if( free_d )
markrad 0:cdf462088d13 113 {
markrad 0:cdf462088d13 114 mbedtls_free( ptr_d );
markrad 0:cdf462088d13 115 ptr_d = NULL;
markrad 0:cdf462088d13 116 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 117
markrad 0:cdf462088d13 118 allocated_bytes -= d_bytes * sizeof(char);
markrad 0:cdf462088d13 119 }
markrad 0:cdf462088d13 120
markrad 0:cdf462088d13 121 mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
markrad 0:cdf462088d13 122 TEST_ASSERT( reported_bytes == allocated_bytes );
markrad 0:cdf462088d13 123
markrad 0:cdf462088d13 124 if( e_bytes > 0 )
markrad 0:cdf462088d13 125 {
markrad 0:cdf462088d13 126 ptr_e = mbedtls_calloc( e_bytes, sizeof(char) );
markrad 0:cdf462088d13 127 TEST_ASSERT( check_pointer( ptr_e ) == 0 );
markrad 0:cdf462088d13 128 }
markrad 0:cdf462088d13 129
markrad 0:cdf462088d13 130 if( f_bytes > 0 )
markrad 0:cdf462088d13 131 {
markrad 0:cdf462088d13 132 ptr_f = mbedtls_calloc( f_bytes, sizeof(char) );
markrad 0:cdf462088d13 133 TEST_ASSERT( check_pointer( ptr_f ) == 0 );
markrad 0:cdf462088d13 134 }
markrad 0:cdf462088d13 135
markrad 0:cdf462088d13 136 /* Once blocks are reallocated, the block allocated to the memory request
markrad 0:cdf462088d13 137 * may be bigger than the request itself, which is indicated by the reported
markrad 0:cdf462088d13 138 * bytes, and makes it hard to know what the reported size will be, so
markrad 0:cdf462088d13 139 * we don't check the size after blocks have been reallocated. */
markrad 0:cdf462088d13 140
markrad 0:cdf462088d13 141 if( ptr_a != NULL )
markrad 0:cdf462088d13 142 {
markrad 0:cdf462088d13 143 mbedtls_free( ptr_a );
markrad 0:cdf462088d13 144 ptr_a = NULL;
markrad 0:cdf462088d13 145 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 146 }
markrad 0:cdf462088d13 147
markrad 0:cdf462088d13 148 if( ptr_b != NULL )
markrad 0:cdf462088d13 149 {
markrad 0:cdf462088d13 150 mbedtls_free( ptr_b );
markrad 0:cdf462088d13 151 ptr_b = NULL;
markrad 0:cdf462088d13 152 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 153 }
markrad 0:cdf462088d13 154
markrad 0:cdf462088d13 155 if( ptr_c != NULL )
markrad 0:cdf462088d13 156 {
markrad 0:cdf462088d13 157 mbedtls_free( ptr_c );
markrad 0:cdf462088d13 158 ptr_c = NULL;
markrad 0:cdf462088d13 159 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 160 }
markrad 0:cdf462088d13 161
markrad 0:cdf462088d13 162 if( ptr_d != NULL )
markrad 0:cdf462088d13 163 {
markrad 0:cdf462088d13 164 mbedtls_free( ptr_d );
markrad 0:cdf462088d13 165 ptr_d = NULL;
markrad 0:cdf462088d13 166 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 167 }
markrad 0:cdf462088d13 168
markrad 0:cdf462088d13 169 if( ptr_e != NULL )
markrad 0:cdf462088d13 170 {
markrad 0:cdf462088d13 171 mbedtls_free( ptr_e );
markrad 0:cdf462088d13 172 ptr_e = NULL;
markrad 0:cdf462088d13 173 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 174 }
markrad 0:cdf462088d13 175
markrad 0:cdf462088d13 176 if( ptr_f != NULL )
markrad 0:cdf462088d13 177 {
markrad 0:cdf462088d13 178 mbedtls_free( ptr_f );
markrad 0:cdf462088d13 179 ptr_f = NULL;
markrad 0:cdf462088d13 180 }
markrad 0:cdf462088d13 181
markrad 0:cdf462088d13 182 mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
markrad 0:cdf462088d13 183 TEST_ASSERT( reported_bytes == 0 );
markrad 0:cdf462088d13 184
markrad 0:cdf462088d13 185 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 186
markrad 0:cdf462088d13 187 exit:
markrad 0:cdf462088d13 188 mbedtls_memory_buffer_alloc_free( );
markrad 0:cdf462088d13 189 }
markrad 0:cdf462088d13 190 /* END_CASE */
markrad 0:cdf462088d13 191
markrad 0:cdf462088d13 192 /* BEGIN_CASE depends_on:MBEDTLS_MEMORY_DEBUG */
markrad 0:cdf462088d13 193 void memory_buffer_alloc_oom_test()
markrad 0:cdf462088d13 194 {
markrad 0:cdf462088d13 195 unsigned char buf[1024];
markrad 0:cdf462088d13 196 unsigned char *ptr_a = NULL, *ptr_b = NULL, *ptr_c = NULL;
markrad 0:cdf462088d13 197 size_t reported_blocks, reported_bytes;
markrad 0:cdf462088d13 198
markrad 0:cdf462088d13 199 (void)ptr_c;
markrad 0:cdf462088d13 200
markrad 0:cdf462088d13 201 mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) );
markrad 0:cdf462088d13 202
markrad 0:cdf462088d13 203 mbedtls_memory_buffer_set_verify( MBEDTLS_MEMORY_VERIFY_ALWAYS );
markrad 0:cdf462088d13 204
markrad 0:cdf462088d13 205 ptr_a = mbedtls_calloc( 432, sizeof(char) );
markrad 0:cdf462088d13 206 TEST_ASSERT( check_pointer( ptr_a ) == 0 );
markrad 0:cdf462088d13 207
markrad 0:cdf462088d13 208 ptr_b = mbedtls_calloc( 432, sizeof(char) );
markrad 0:cdf462088d13 209 TEST_ASSERT( check_pointer( ptr_b ) == 0 );
markrad 0:cdf462088d13 210
markrad 0:cdf462088d13 211 ptr_c = mbedtls_calloc( 431, sizeof(char) );
markrad 0:cdf462088d13 212 TEST_ASSERT( ptr_c == NULL );
markrad 0:cdf462088d13 213
markrad 0:cdf462088d13 214 mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
markrad 0:cdf462088d13 215 TEST_ASSERT( reported_bytes >= 864 && reported_bytes <= sizeof(buf) );
markrad 0:cdf462088d13 216
markrad 0:cdf462088d13 217 mbedtls_free( ptr_a );
markrad 0:cdf462088d13 218 ptr_a = NULL;
markrad 0:cdf462088d13 219 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 220
markrad 0:cdf462088d13 221 mbedtls_free( ptr_b );
markrad 0:cdf462088d13 222 ptr_b = NULL;
markrad 0:cdf462088d13 223 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 224
markrad 0:cdf462088d13 225 mbedtls_memory_buffer_alloc_cur_get( &reported_bytes, &reported_blocks );
markrad 0:cdf462088d13 226 TEST_ASSERT( reported_bytes == 0 );
markrad 0:cdf462088d13 227
markrad 0:cdf462088d13 228 TEST_ASSERT( mbedtls_memory_buffer_alloc_verify() == 0 );
markrad 0:cdf462088d13 229
markrad 0:cdf462088d13 230 exit:
markrad 0:cdf462088d13 231 mbedtls_memory_buffer_alloc_free( );
markrad 0:cdf462088d13 232 }
markrad 0:cdf462088d13 233 /* END_CASE */
markrad 0:cdf462088d13 234