Skip to content

Commit 5a2cff7

Browse files
Liblorcopybara-github
authored andcommitted
Add bindings to log alloc-token instrumented [0,1,2] allocations which are planed
for security mitigations. [0] https://clang.llvm.org/docs/AllocToken.html [1] https://discourse.llvm.org/t/rfc-a-framework-for-allocator-partitioning-hints/87434 [2] llvm/llvm-project#156838 PiperOrigin-RevId: 831408191 Change-Id: Ia880212f99313ee5185bb0894164f39d4f5d0bee
1 parent 850899b commit 5a2cff7

File tree

6 files changed

+447
-150
lines changed

6 files changed

+447
-150
lines changed

tcmalloc/allocation_sampling.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,7 @@ ABSL_ATTRIBUTE_NOINLINE sized_ptr_t SampleifyAllocation(
122122
stack_trace.requested_size_returning = policy.size_returning();
123123
stack_trace.access_hint = static_cast<uint8_t>(policy.access());
124124
stack_trace.weight = weight;
125-
// TODO: b/446814339 - Complete populating this.
126-
stack_trace.token_id = TokenId::kNoAllocToken;
125+
stack_trace.token_id = policy.token_id();
127126

128127
// How many allocations does this sample represent, given the sampling
129128
// frequency (weight) and its size.

tcmalloc/libc_override.h

Lines changed: 0 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -217,110 +217,6 @@ alloc_result_t alloc_at_least(size_t min_size) TCMALLOC_NOTHROW
217217
alloc_result_t aligned_alloc_at_least(size_t alignment,
218218
size_t min_size) TCMALLOC_NOTHROW
219219
TCMALLOC_ALIAS(TCMallocInternalAlignedAllocAtLeast);
220-
221-
//
222-
// Partitioned Variants for Clang's -fsanitize=alloc-token.
223-
//
224-
#ifdef __SANITIZE_ALLOC_TOKEN__
225-
#define DEFINE_ALLOC_TOKEN_NEW(id) \
226-
void* __alloc_token_##id##__Znwm(size_t) \
227-
TCMALLOC_ALIAS(TCMallocInternalNew); \
228-
void* __alloc_token_##id##__Znam(size_t) \
229-
TCMALLOC_ALIAS(TCMallocInternalNewArray); \
230-
void* __alloc_token_##id##__ZnwmRKSt9nothrow_t(size_t, \
231-
const std::nothrow_t&) \
232-
TCMALLOC_ALIAS(TCMallocInternalNewNothrow); \
233-
void* __alloc_token_##id##__ZnamRKSt9nothrow_t(size_t, \
234-
const std::nothrow_t&) \
235-
TCMALLOC_ALIAS(TCMallocInternalNewArrayNothrow); \
236-
void* __alloc_token_##id##__ZnwmSt11align_val_t(size_t, std::align_val_t) \
237-
TCMALLOC_ALIAS(TCMallocInternalNewAligned); \
238-
void* __alloc_token_##id##__ZnamSt11align_val_t(size_t, std::align_val_t) \
239-
TCMALLOC_ALIAS(TCMallocInternalNewArrayAligned); \
240-
void* __alloc_token_##id##__ZnwmSt11align_val_tRKSt9nothrow_t( \
241-
size_t, std::align_val_t, const std::nothrow_t&) \
242-
TCMALLOC_ALIAS(TCMallocInternalNewAlignedNothrow); \
243-
void* __alloc_token_##id##__ZnamSt11align_val_tRKSt9nothrow_t( \
244-
size_t, std::align_val_t, const std::nothrow_t&) \
245-
TCMALLOC_ALIAS(TCMallocInternalNewArrayAlignedNothrow);
246-
247-
#ifndef TCMALLOC_INTERNAL_METHODS_ONLY
248-
#define DEFINE_ALLOC_TOKEN_NEW_EXTENSION(id) \
249-
void* __alloc_token_##id##__Znwm12__hot_cold_t(size_t, __hot_cold_t) \
250-
TCMALLOC_ALIAS(_Znwm12__hot_cold_t); \
251-
void* __alloc_token_##id##__ZnwmRKSt9nothrow_t12__hot_cold_t( \
252-
size_t, const std::nothrow_t&, \
253-
__hot_cold_t) noexcept TCMALLOC_ALIAS(_ZnwmRKSt9nothrow_t12__hot_cold_t); \
254-
void* __alloc_token_##id##__ZnwmSt11align_val_t12__hot_cold_t( \
255-
size_t, std::align_val_t, __hot_cold_t) \
256-
TCMALLOC_ALIAS(_ZnwmSt11align_val_t12__hot_cold_t); \
257-
void* __alloc_token_##id##__ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t( \
258-
size_t, std::align_val_t, const std::nothrow_t&, \
259-
__hot_cold_t) noexcept TCMALLOC_ALIAS(_ZnwmSt11align_val_tRKSt9nothrow_t12__hot_cold_t); \
260-
void* __alloc_token_##id##__Znam12__hot_cold_t(size_t, __hot_cold_t) \
261-
TCMALLOC_ALIAS(_Znam12__hot_cold_t); \
262-
void* __alloc_token_##id##__ZnamRKSt9nothrow_t12__hot_cold_t( \
263-
size_t, const std::nothrow_t&, \
264-
__hot_cold_t) noexcept TCMALLOC_ALIAS(_ZnamRKSt9nothrow_t12__hot_cold_t); \
265-
void* __alloc_token_##id##__ZnamSt11align_val_t12__hot_cold_t( \
266-
size_t, std::align_val_t, __hot_cold_t) \
267-
TCMALLOC_ALIAS(_ZnamSt11align_val_t12__hot_cold_t); \
268-
void* __alloc_token_##id##__ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t( \
269-
size_t, std::align_val_t, const std::nothrow_t&, \
270-
__hot_cold_t) noexcept TCMALLOC_ALIAS(_ZnamSt11align_val_tRKSt9nothrow_t12__hot_cold_t); \
271-
__sized_ptr_t __alloc_token_##id##___size_returning_new(size_t) \
272-
TCMALLOC_ALIAS(__size_returning_new); \
273-
__sized_ptr_t __alloc_token_##id##___size_returning_new_aligned( \
274-
size_t, std::align_val_t) TCMALLOC_ALIAS(__size_returning_new_aligned); \
275-
__sized_ptr_t __alloc_token_##id##___size_returning_new_hot_cold( \
276-
size_t, __hot_cold_t) TCMALLOC_ALIAS(__size_returning_new_hot_cold); \
277-
__sized_ptr_t __alloc_token_##id##___size_returning_new_aligned_hot_cold( \
278-
size_t, std::align_val_t, __hot_cold_t) \
279-
TCMALLOC_ALIAS(__size_returning_new_aligned_hot_cold);
280-
#else
281-
#define ALLOC_TOKEN_NEW_EXTENSION(id)
282-
#endif // TCMALLOC_INTERNAL_METHODS_ONLY
283-
284-
#define DEFINE_ALLOC_TOKEN_STDLIB(id) \
285-
void* __alloc_token_##id##_malloc(size_t) \
286-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalMalloc); \
287-
void* __alloc_token_##id##_realloc(void*, size_t) \
288-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalRealloc); \
289-
void* __alloc_token_##id##_reallocarray(void*, size_t, size_t) \
290-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalReallocArray); \
291-
void* __alloc_token_##id##_calloc(size_t, size_t) \
292-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalCalloc); \
293-
void* __alloc_token_##id##_memalign(size_t, size_t) \
294-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalMemalign); \
295-
void* __alloc_token_##id##_aligned_alloc(size_t, size_t) \
296-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalAlignedAlloc); \
297-
void* __alloc_token_##id##_valloc(size_t) \
298-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalValloc); \
299-
void* __alloc_token_##id##_pvalloc(size_t) \
300-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalPvalloc); \
301-
int __alloc_token_##id##_posix_memalign(void**, size_t, size_t) \
302-
TCMALLOC_NOTHROW TCMALLOC_ALIAS(TCMallocInternalPosixMemalign);
303-
304-
#define DEFINE_ALLOC_TOKEN_VARIANTS(id) \
305-
DEFINE_ALLOC_TOKEN_NEW(id) \
306-
DEFINE_ALLOC_TOKEN_NEW_EXTENSION(id) \
307-
DEFINE_ALLOC_TOKEN_STDLIB(id)
308-
309-
#ifndef ALLOC_TOKEN_MAX
310-
#error "Define ALLOC_TOKEN_MAX to match -falloc-token-max=<max number of IDs>"
311-
#endif
312-
static_assert(ALLOC_TOKEN_MAX == 2);
313-
DEFINE_ALLOC_TOKEN_VARIANTS(0)
314-
DEFINE_ALLOC_TOKEN_VARIANTS(1)
315-
#ifdef ALLOC_TOKEN_FALLBACK
316-
// Define the functions for the fallback token ID if overridden with -mllvm
317-
// -alloc-token-fallback=N; should fall outside the range of normal token IDs.
318-
static_assert(ALLOC_TOKEN_FALLBACK >= ALLOC_TOKEN_MAX);
319-
DEFINE_ALLOC_TOKEN_VARIANTS(ALLOC_TOKEN_FALLBACK)
320-
#endif
321-
322-
#endif // __SANITIZE_ALLOC_TOKEN__
323-
324220
} // extern "C"
325221

326222
// NOLINTEND(misc-definitions-in-headers)

0 commit comments

Comments
 (0)