24
24
#include " sanitizer_common/sanitizer_allocator_report.h"
25
25
#include " sanitizer_common/sanitizer_errno.h"
26
26
27
- namespace __msan {
27
+ using namespace __msan ;
28
28
29
+ namespace {
29
30
struct Metadata {
30
31
uptr requested_size;
31
32
};
@@ -47,7 +48,9 @@ struct MsanMapUnmapCallback {
47
48
}
48
49
}
49
50
};
51
+ } // namespace
50
52
53
+ namespace __msan {
51
54
// Note: to ensure that the allocator is compatible with the application memory
52
55
// layout (especially with high-entropy ASLR), kSpaceBeg and kSpaceSize must be
53
56
// duplicated as MappingDesc::ALLOCATOR in msan.h.
@@ -145,14 +148,15 @@ typedef SizeClassAllocator64<AP64> PrimaryAllocator;
145
148
#endif
146
149
typedef CombinedAllocator<PrimaryAllocator> Allocator;
147
150
typedef Allocator::AllocatorCache AllocatorCache;
151
+ } // namespace __msan
148
152
149
153
static Allocator allocator;
150
154
static AllocatorCache fallback_allocator_cache;
151
155
static StaticSpinMutex fallback_mutex;
152
156
153
157
static uptr max_malloc_size;
154
158
155
- void MsanAllocatorInit () {
159
+ void __msan:: MsanAllocatorInit () {
156
160
SetAllocatorMayReturnNull (common_flags ()->allocator_may_return_null );
157
161
allocator.Init (common_flags ()->allocator_release_to_os_interval_ms );
158
162
if (common_flags ()->max_allocation_size_mb )
@@ -162,9 +166,9 @@ void MsanAllocatorInit() {
162
166
max_malloc_size = kMaxAllowedMallocSize ;
163
167
}
164
168
165
- void LockAllocator () { allocator.ForceLock (); }
169
+ void __msan:: LockAllocator () { allocator.ForceLock (); }
166
170
167
- void UnlockAllocator () { allocator.ForceUnlock (); }
171
+ void __msan:: UnlockAllocator () { allocator.ForceUnlock (); }
168
172
169
173
AllocatorCache *GetAllocatorCache (MsanThreadLocalMallocStorage *ms) {
170
174
CHECK (ms);
@@ -235,7 +239,7 @@ static void *MsanAllocate(BufferedStackTrace *stack, uptr size, uptr alignment,
235
239
return allocated;
236
240
}
237
241
238
- void MsanDeallocate (BufferedStackTrace *stack, void *p) {
242
+ void __msan:: MsanDeallocate (BufferedStackTrace *stack, void *p) {
239
243
CHECK (p);
240
244
UnpoisonParam (1 );
241
245
RunFreeHooks (p);
@@ -327,15 +331,15 @@ static uptr AllocationSizeFast(const void *p) {
327
331
return reinterpret_cast <Metadata *>(allocator.GetMetaData (p))->requested_size ;
328
332
}
329
333
330
- void *msan_malloc (uptr size, BufferedStackTrace *stack) {
334
+ void *__msan:: msan_malloc (uptr size, BufferedStackTrace *stack) {
331
335
return SetErrnoOnNull (MsanAllocate (stack, size, sizeof (u64 ), false ));
332
336
}
333
337
334
- void *msan_calloc (uptr nmemb, uptr size, BufferedStackTrace *stack) {
338
+ void *__msan:: msan_calloc (uptr nmemb, uptr size, BufferedStackTrace *stack) {
335
339
return SetErrnoOnNull (MsanCalloc (stack, nmemb, size));
336
340
}
337
341
338
- void *msan_realloc (void *ptr, uptr size, BufferedStackTrace *stack) {
342
+ void *__msan:: msan_realloc (void *ptr, uptr size, BufferedStackTrace *stack) {
339
343
if (!ptr)
340
344
return SetErrnoOnNull (MsanAllocate (stack, size, sizeof (u64 ), false ));
341
345
if (size == 0 ) {
@@ -345,8 +349,8 @@ void *msan_realloc(void *ptr, uptr size, BufferedStackTrace *stack) {
345
349
return SetErrnoOnNull (MsanReallocate (stack, ptr, size, sizeof (u64 )));
346
350
}
347
351
348
- void *msan_reallocarray (void *ptr, uptr nmemb, uptr size,
349
- BufferedStackTrace *stack) {
352
+ void *__msan:: msan_reallocarray (void *ptr, uptr nmemb, uptr size,
353
+ BufferedStackTrace *stack) {
350
354
if (UNLIKELY (CheckForCallocOverflow (size, nmemb))) {
351
355
errno = errno_ENOMEM;
352
356
if (AllocatorMayReturnNull ())
@@ -357,11 +361,11 @@ void *msan_reallocarray(void *ptr, uptr nmemb, uptr size,
357
361
return msan_realloc (ptr, nmemb * size, stack);
358
362
}
359
363
360
- void *msan_valloc (uptr size, BufferedStackTrace *stack) {
364
+ void *__msan:: msan_valloc (uptr size, BufferedStackTrace *stack) {
361
365
return SetErrnoOnNull (MsanAllocate (stack, size, GetPageSizeCached (), false ));
362
366
}
363
367
364
- void *msan_pvalloc (uptr size, BufferedStackTrace *stack) {
368
+ void *__msan:: msan_pvalloc (uptr size, BufferedStackTrace *stack) {
365
369
uptr PageSize = GetPageSizeCached ();
366
370
if (UNLIKELY (CheckForPvallocOverflow (size, PageSize))) {
367
371
errno = errno_ENOMEM;
@@ -375,7 +379,8 @@ void *msan_pvalloc(uptr size, BufferedStackTrace *stack) {
375
379
return SetErrnoOnNull (MsanAllocate (stack, size, PageSize, false ));
376
380
}
377
381
378
- void *msan_aligned_alloc (uptr alignment, uptr size, BufferedStackTrace *stack) {
382
+ void *__msan::msan_aligned_alloc (uptr alignment, uptr size,
383
+ BufferedStackTrace *stack) {
379
384
if (UNLIKELY (!CheckAlignedAllocAlignmentAndSize (alignment, size))) {
380
385
errno = errno_EINVAL;
381
386
if (AllocatorMayReturnNull ())
@@ -386,7 +391,8 @@ void *msan_aligned_alloc(uptr alignment, uptr size, BufferedStackTrace *stack) {
386
391
return SetErrnoOnNull (MsanAllocate (stack, size, alignment, false ));
387
392
}
388
393
389
- void *msan_memalign (uptr alignment, uptr size, BufferedStackTrace *stack) {
394
+ void *__msan::msan_memalign (uptr alignment, uptr size,
395
+ BufferedStackTrace *stack) {
390
396
if (UNLIKELY (!IsPowerOfTwo (alignment))) {
391
397
errno = errno_EINVAL;
392
398
if (AllocatorMayReturnNull ())
@@ -397,8 +403,8 @@ void *msan_memalign(uptr alignment, uptr size, BufferedStackTrace *stack) {
397
403
return SetErrnoOnNull (MsanAllocate (stack, size, alignment, false ));
398
404
}
399
405
400
- int msan_posix_memalign (void **memptr, uptr alignment, uptr size,
401
- BufferedStackTrace *stack) {
406
+ int __msan:: msan_posix_memalign (void **memptr, uptr alignment, uptr size,
407
+ BufferedStackTrace *stack) {
402
408
if (UNLIKELY (!CheckPosixMemalignAlignment (alignment))) {
403
409
if (AllocatorMayReturnNull ())
404
410
return errno_EINVAL;
@@ -414,10 +420,7 @@ int msan_posix_memalign(void **memptr, uptr alignment, uptr size,
414
420
return 0 ;
415
421
}
416
422
417
- } // namespace __msan
418
-
419
- using namespace __msan ;
420
-
423
+ extern " C" {
421
424
uptr __sanitizer_get_current_allocated_bytes () {
422
425
uptr stats[AllocatorStatCount];
423
426
allocator.GetStats (stats);
@@ -452,3 +455,4 @@ uptr __sanitizer_get_allocated_size_fast(const void *p) {
452
455
}
453
456
454
457
void __sanitizer_purge_allocator () { allocator.ForceReleaseToOS (); }
458
+ }
0 commit comments