@@ -192,25 +192,28 @@ class LargeChunkHeader {
192
192
}
193
193
};
194
194
195
+ static void FillChunk (AsanChunk *m) {
196
+ Flags &fl = *flags ();
197
+
198
+ if (fl.max_free_fill_size > 0 ) {
199
+ // We have to skip the chunk header, it contains free_context_id.
200
+ uptr scribble_start = (uptr)m + kChunkHeaderSize + kChunkHeader2Size ;
201
+ if (m->UsedSize () >= kChunkHeader2Size ) { // Skip Header2 in user area.
202
+ uptr size_to_fill = m->UsedSize () - kChunkHeader2Size ;
203
+ size_to_fill = Min (size_to_fill, (uptr)fl.max_free_fill_size );
204
+ REAL (memset)((void *)scribble_start, fl.free_fill_byte , size_to_fill);
205
+ }
206
+ }
207
+ }
208
+
195
209
struct QuarantineCallback {
196
210
QuarantineCallback (AllocatorCache *cache, BufferedStackTrace *stack)
197
211
: cache_(cache),
198
212
stack_ (stack) {
199
213
}
200
214
201
215
void PreQuarantine (AsanChunk *m) {
202
- Flags &fl = *flags ();
203
-
204
- if (fl.max_free_fill_size > 0 ) {
205
- // We have to skip the chunk header, it contains free_context_id.
206
- uptr scribble_start = (uptr)m + kChunkHeaderSize + kChunkHeader2Size ;
207
- if (m->UsedSize () >= kChunkHeader2Size ) { // Skip Header2 in user area.
208
- uptr size_to_fill = m->UsedSize () - kChunkHeader2Size ;
209
- size_to_fill = Min (size_to_fill, (uptr)fl.max_free_fill_size );
210
- REAL (memset)((void *)scribble_start, fl.free_fill_byte , size_to_fill);
211
- }
212
- }
213
-
216
+ FillChunk (m);
214
217
// Poison the region.
215
218
PoisonShadow (m->Beg (), RoundUpTo (m->UsedSize (), ASAN_SHADOW_GRANULARITY),
216
219
kAsanHeapFreeMagic );
0 commit comments