@@ -1089,7 +1089,9 @@ void *umm_realloc(void *ptr, size_t size) {
1089
1089
STATS__FREE_BLOCKS_UPDATE (-prevBlockSize);
1090
1090
STATS__FREE_BLOCKS_ISR_MIN ();
1091
1091
blockSize += prevBlockSize;
1092
- POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size); // Fix new allocation so poison check from an ISR passes.
1092
+ // Fix new allocation such that poison checks from an ISR pass.
1093
+ size_t super_size = (blockSize * sizeof (umm_block)) - (sizeof (((umm_block *)0 )->header ));
1094
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), super_size);
1093
1095
UMM_CRITICAL_SUSPEND (id_realloc);
1094
1096
UMM_POISON_MEMMOVE ((void *)&UMM_DATA (c), ptr, curSize);
1095
1097
ptr = (void *)&UMM_DATA (c);
@@ -1111,7 +1113,8 @@ void *umm_realloc(void *ptr, size_t size) {
1111
1113
#else
1112
1114
blockSize += (prevBlockSize + nextBlockSize);
1113
1115
#endif
1114
- POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size);
1116
+ size_t super_size = (blockSize * sizeof (umm_block)) - (sizeof (((umm_block *)0 )->header ));
1117
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), super_size);
1115
1118
UMM_CRITICAL_SUSPEND (id_realloc);
1116
1119
UMM_POISON_MEMMOVE ((void *)&UMM_DATA (c), ptr, curSize);
1117
1120
ptr = (void *)&UMM_DATA (c);
@@ -1186,7 +1189,9 @@ void *umm_realloc(void *ptr, size_t size) {
1186
1189
blockSize = blocks;
1187
1190
#endif
1188
1191
}
1189
- POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), size);
1192
+ // Fix new allocation such that poison checks from an ISR pass.
1193
+ size_t super_size = (blockSize * sizeof (umm_block)) - (sizeof (((umm_block *)0 )->header ));
1194
+ POISON_CHECK_SET_POISON ((void *)&UMM_DATA (c), super_size);
1190
1195
UMM_CRITICAL_SUSPEND (id_realloc);
1191
1196
UMM_POISON_MEMMOVE ((void *)&UMM_DATA (c), ptr, curSize);
1192
1197
ptr = (void *)&UMM_DATA (c);
0 commit comments