Skip to content

Commit 68a9e16

Browse files
committed
Make sure TRACKER is not used after being destroyed
Make sure TRACKER is not used after being destroyed. Also add checks to umfMemoryTrackerGetPool() to detect if TRACKER or its map is not initialized. Signed-off-by: Lukasz Dorau <[email protected]>
1 parent f2b784a commit 68a9e16

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/libumf_linux.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ void __attribute__((constructor)) umfCreate(void) {
1919
}
2020

2121
void __attribute__((destructor)) umfDestroy(void) {
22-
umfMemoryTrackerDestroy(TRACKER);
22+
umf_memory_tracker_handle_t t = TRACKER;
23+
// make sure TRACKER is not used after being destroyed
24+
TRACKER = NULL;
25+
umfMemoryTrackerDestroy(t);
2326
}
2427

2528
void libumfInit(void) {

src/provider/provider_tracking.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,16 @@ static umf_result_t umfMemoryTrackerRemove(umf_memory_tracker_handle_t hTracker,
8181
umf_memory_pool_handle_t umfMemoryTrackerGetPool(const void *ptr) {
8282
assert(ptr);
8383

84+
if (TRACKER == NULL) {
85+
fprintf(stderr, "tracker is not created\n");
86+
return NULL;
87+
}
88+
89+
if (TRACKER->map == NULL) {
90+
fprintf(stderr, "tracker's map is not created\n");
91+
return NULL;
92+
}
93+
8494
uintptr_t rkey;
8595
tracker_value_t *rvalue;
8696
int found = critnib_find(TRACKER->map, (uintptr_t)ptr, FIND_LE,

0 commit comments

Comments
 (0)