forked from OSchip/llvm-project
[scudo][standalone] Allow sched_getaffinity to fail
Summary: In some configuration, `sched_getaffinity` can fail. Some reasons for that being the lack of `CAP_SYS_NICE` capability or some syscall filtering and so on. This should not be fatal to the allocator, so in this situation, we will fallback to the `MaxTSDCount` value specified in the allocator configuration. Reviewers: cferris, eugenis, hctim, morehouse, pcc Subscribers: #sanitizers, llvm-commits Tags: #sanitizers, #llvm Differential Revision: https://reviews.llvm.org/D73055
This commit is contained in:
parent
3ef169e586
commit
561fa84477
|
@ -126,6 +126,7 @@ inline uptr getPageSizeCached() {
|
|||
return getPageSizeSlow();
|
||||
}
|
||||
|
||||
// Returns 0 if the number of CPUs could not be determined.
|
||||
u32 getNumberOfCPUs();
|
||||
|
||||
const char *getEnv(const char *Name);
|
||||
|
|
|
@ -132,7 +132,10 @@ u64 getMonotonicTime() {
|
|||
|
||||
u32 getNumberOfCPUs() {
|
||||
cpu_set_t CPUs;
|
||||
CHECK_EQ(sched_getaffinity(0, sizeof(cpu_set_t), &CPUs), 0);
|
||||
// sched_getaffinity can fail for a variety of legitimate reasons (lack of
|
||||
// CAP_SYS_NICE, syscall filtering, etc), in which case we shall return 0.
|
||||
if (sched_getaffinity(0, sizeof(cpu_set_t), &CPUs) != 0)
|
||||
return 0;
|
||||
return static_cast<u32>(CPU_COUNT(&CPUs));
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,9 @@ template <class Allocator, u32 MaxTSDCount> struct TSDRegistrySharedT {
|
|||
void initLinkerInitialized(Allocator *Instance) {
|
||||
Instance->initLinkerInitialized();
|
||||
CHECK_EQ(pthread_key_create(&PThreadKey, nullptr), 0); // For non-TLS
|
||||
NumberOfTSDs = Min(Max(1U, getNumberOfCPUs()), MaxTSDCount);
|
||||
const u32 NumberOfCPUs = getNumberOfCPUs();
|
||||
NumberOfTSDs =
|
||||
(NumberOfCPUs == 0) ? MaxTSDCount : Min(NumberOfCPUs, MaxTSDCount);
|
||||
TSDs = reinterpret_cast<TSD<Allocator> *>(
|
||||
map(nullptr, sizeof(TSD<Allocator>) * NumberOfTSDs, "scudo:tsd"));
|
||||
for (u32 I = 0; I < NumberOfTSDs; I++)
|
||||
|
|
Loading…
Reference in New Issue