[compiler-rt] [asan] Add experimental 'poison_history_size' flag (PR #133175)
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 8 10:38:15 PDT 2025
================
@@ -20,11 +20,70 @@
#include "sanitizer_common/sanitizer_flags.h"
#include "sanitizer_common/sanitizer_interface_internal.h"
#include "sanitizer_common/sanitizer_libc.h"
+#include "sanitizer_common/sanitizer_ring_buffer.h"
+#include "sanitizer_common/sanitizer_stackdepot.h"
namespace __asan {
+using PoisonRecordRingBuffer = RingBuffer<struct PoisonRecord>;
+
static atomic_uint8_t can_poison_memory;
+static Mutex poison_records_mutex;
+static PoisonRecordRingBuffer *poison_records = nullptr;
+
+void AddPoisonRecord(const PoisonRecord &new_record) {
+ if (flags()->poison_history_size <= 0)
+ return;
+
+ poison_records_mutex.Lock();
+
+ if (poison_records == nullptr)
+ poison_records = PoisonRecordRingBuffer::New(flags()->poison_history_size);
+
+ poison_records->push(new_record);
+
+ poison_records_mutex.Unlock();
+}
+
+bool FindPoisonRecord(uptr addr, const PoisonRecord &match) {
+ if (flags()->poison_history_size <= 0)
+ return false;
+
+ poison_records_mutex.Lock();
+
+ if (poison_records) {
+ for (unsigned int i = 0; i < poison_records->size(); i++) {
+ struct PoisonRecord record = (*poison_records)[i];
+ if (record.begin <= addr && addr < record.end) {
----------------
vitalybuka wrote:
-struct and in sizeoff
actually sizeoff is recommented by vairable: `sizeof(record)`
https://github.com/llvm/llvm-project/pull/133175
More information about the llvm-commits
mailing list