defrag: improve thread safety in config logging

CID 1554235: (#1 of 1): Data race condition (MISSING_LOCK)
missing_lock: Accessing defragtracker_spare_q.len without holding lock DefragTrackerStack_.m. Elsewhere, DefragTrackerStack_.len is written to with DefragTrackerStack_.m held 2 out of 2 times.
This commit is contained in:
Victor Julien
2025-06-21 21:32:54 +02:00
committed by Victor Julien
parent a472b24d17
commit f332b3e571
3 changed files with 15 additions and 1 deletions
+2 -1
View File
@@ -275,7 +275,8 @@ void DefragInitConfig(bool quiet)
}
if (!quiet) {
SCLogConfig("preallocated %" PRIu32 " defrag trackers of size %" PRIuMAX "",
defragtracker_spare_q.len, (uintmax_t)sizeof(DefragTracker));
DefragTrackerStackSize(&defragtracker_spare_q),
(uintmax_t)sizeof(DefragTracker));
}
}
}
+12
View File
@@ -98,3 +98,15 @@ DefragTracker *DefragTrackerDequeue(DefragTrackerStack *q)
DQLOCK_UNLOCK(q);
return dt;
}
/**
* \brief return stack size
*/
uint32_t DefragTrackerStackSize(DefragTrackerStack *q)
{
uint32_t len;
DQLOCK_LOCK(q);
len = q->len;
DQLOCK_UNLOCK(q);
return len;
}
+1
View File
@@ -75,5 +75,6 @@ void DefragTrackerStackDestroy(DefragTrackerStack *);
void DefragTrackerEnqueue(DefragTrackerStack *, DefragTracker *);
DefragTracker *DefragTrackerDequeue(DefragTrackerStack *);
uint32_t DefragTrackerStackSize(DefragTrackerStack *q);
#endif /* SURICATA_DEFRAG_QUEUE_H */