@@ -909,6 +909,8 @@ void *umm_malloc(size_t size) {
909
909
910
910
ptr = umm_malloc_core (_context, size);
911
911
912
+ ptr = POISON_CHECK_SET_POISON (ptr, size);
913
+
912
914
UMM_CRITICAL_EXIT (id_malloc);
913
915
914
916
return ptr;
@@ -1068,7 +1070,7 @@ void *umm_realloc(void *ptr, size_t size) {
1068
1070
// Case 2 - block + next block fits EXACTLY
1069
1071
} else if ((blockSize + nextBlockSize) == blocks) {
1070
1072
DBGLOG_DEBUG (" exact realloc using next block - %i\n " , blocks);
1071
- umm_assimilate_up (c);
1073
+ umm_assimilate_up (_context, c);
1072
1074
STATS__FREE_BLOCKS_UPDATE (-nextBlockSize);
1073
1075
blockSize += nextBlockSize;
1074
1076
@@ -1087,8 +1089,9 @@ void *umm_realloc(void *ptr, size_t size) {
1087
1089
STATS__FREE_BLOCKS_UPDATE (-prevBlockSize);
1088
1090
STATS__FREE_BLOCKS_ISR_MIN ();
1089
1091
blockSize += prevBlockSize;
1092
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size); // Fix allocation so ISR poison check is good
1090
1093
UMM_CRITICAL_SUSPEND (id_realloc);
1091
- memmove ((void *)&UMM_DATA (c), ptr, curSize);
1094
+ UMM_POISON_MEMMOVE ((void *)&UMM_DATA (c), ptr, curSize);
1092
1095
ptr = (void *)&UMM_DATA (c);
1093
1096
UMM_CRITICAL_RESUME (id_realloc);
1094
1097
// Case 5 - prev block + block + next block fits
@@ -1108,8 +1111,9 @@ void *umm_realloc(void *ptr, size_t size) {
1108
1111
#else
1109
1112
blockSize += (prevBlockSize + nextBlockSize);
1110
1113
#endif
1114
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size);
1111
1115
UMM_CRITICAL_SUSPEND (id_realloc);
1112
- memmove ((void *)&UMM_DATA (c), ptr, curSize);
1116
+ UMM_POISON_MEMMOVE ((void *)&UMM_DATA (c), ptr, curSize);
1113
1117
ptr = (void *)&UMM_DATA (c);
1114
1118
UMM_CRITICAL_RESUME (id_realloc);
1115
1119
@@ -1119,8 +1123,9 @@ void *umm_realloc(void *ptr, size_t size) {
1119
1123
void *oldptr = ptr;
1120
1124
if ((ptr = umm_malloc_core (_context, size))) {
1121
1125
DBGLOG_DEBUG (" realloc %i to a bigger block %i, copy, and free the old\n " , blockSize, blocks);
1126
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size);
1122
1127
UMM_CRITICAL_SUSPEND (id_realloc);
1123
- memcpy (ptr, oldptr, curSize);
1128
+ UMM_POISON_MEMCPY (ptr, oldptr, curSize);
1124
1129
UMM_CRITICAL_RESUME (id_realloc);
1125
1130
umm_free_core (_context, oldptr);
1126
1131
} else {
@@ -1181,8 +1186,9 @@ void *umm_realloc(void *ptr, size_t size) {
1181
1186
blockSize = blocks;
1182
1187
#endif
1183
1188
}
1189
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size);
1184
1190
UMM_CRITICAL_SUSPEND (id_realloc);
1185
- memmove ((void *)&UMM_DATA (c), ptr, curSize);
1191
+ UMM_POISON_MEMMOVE ((void *)&UMM_DATA (c), ptr, curSize);
1186
1192
ptr = (void *)&UMM_DATA (c);
1187
1193
UMM_CRITICAL_RESUME (id_realloc);
1188
1194
} else if (blockSize >= blocks) { // 2
@@ -1198,8 +1204,9 @@ void *umm_realloc(void *ptr, size_t size) {
1198
1204
void *oldptr = ptr;
1199
1205
if ((ptr = umm_malloc_core (_context, size))) {
1200
1206
DBGLOG_DEBUG (" realloc %d to a bigger block %d, copy, and free the old\n " , blockSize, blocks);
1207
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size);
1201
1208
UMM_CRITICAL_SUSPEND (id_realloc);
1202
- memcpy (ptr, oldptr, curSize);
1209
+ UMM_POISON_MEMCPY (ptr, oldptr, curSize);
1203
1210
UMM_CRITICAL_RESUME (id_realloc);
1204
1211
umm_free_core (_context, oldptr);
1205
1212
} else {
@@ -1223,8 +1230,9 @@ void *umm_realloc(void *ptr, size_t size) {
1223
1230
void *oldptr = ptr;
1224
1231
if ((ptr = umm_malloc_core (_context, size))) {
1225
1232
DBGLOG_DEBUG (" realloc %d to a bigger block %d, copy, and free the old\n " , blockSize, blocks);
1233
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size);
1226
1234
UMM_CRITICAL_SUSPEND (id_realloc);
1227
- memcpy (ptr, oldptr, curSize);
1235
+ UMM_POISON_MEMCPY (ptr, oldptr, curSize);
1228
1236
UMM_CRITICAL_RESUME (id_realloc);
1229
1237
umm_free_core (_context, oldptr);
1230
1238
} else {
@@ -1250,6 +1258,8 @@ void *umm_realloc(void *ptr, size_t size) {
1250
1258
1251
1259
STATS__FREE_BLOCKS_MIN ();
1252
1260
1261
+ ptr = POISON_CHECK_SET_POISON (ptr, size);
1262
+
1253
1263
/* Release the critical section... */
1254
1264
UMM_CRITICAL_EXIT (id_realloc);
1255
1265
@@ -1258,6 +1268,7 @@ void *umm_realloc(void *ptr, size_t size) {
1258
1268
1259
1269
/* ------------------------------------------------------------------------ */
1260
1270
1271
+ #if !defined(UMM_POISON_CHECK) && !defined(UMM_POISON_CHECK_LITE)
1261
1272
void *umm_calloc (size_t num, size_t item_size) {
1262
1273
void *ret;
1263
1274
@@ -1273,6 +1284,7 @@ void *umm_calloc(size_t num, size_t item_size) {
1273
1284
1274
1285
return ret;
1275
1286
}
1287
+ #endif
1276
1288
1277
1289
/* ------------------------------------------------------------------------ */
1278
1290
0 commit comments