@cryptotaxi247 / netdata-1 / commits / c2df2da48

Fix SIGSEGV in dbengine extent flush due to unacquired UUID reference (#21667)

Refactor UUID handling in page descriptor to use UUIDMAP_ID instead of nd_uuid_t (properly acquired and released)

Stelios Fragkakis committed Feb 11, 2026 at 13:11 UTC c2df2da48554d168db4dd4ab540847daf3527dea
3 files changed +4 -3
src/database/engine/pagecache.c
+1 -1
@@ -35,7 +35,7 @@ static void main_cache_flush_dirty_page_callback(PGC *cache __maybe_unused, PGC_
35 time_t end_time_s = entries_array[Index].end_time_s;
36 struct page_descr_with_data *descr = page_descriptor_get();
37
38 - descr->id = mrg_metric_uuid(main_mrg, (METRIC *) entries_array[Index].metric_id);
38 + descr->uuid_id = mrg_metric_uuidmap_id_dup(main_mrg, (METRIC *) entries_array[Index].metric_id);
39 descr->metric_id = entries_array[Index].metric_id;
40 descr->start_time_ut = start_time_s * USEC_PER_SEC;
41 descr->end_time_ut = end_time_s * USEC_PER_SEC;
src/database/engine/pagecache.h
+1 -1
@@ -18,7 +18,7 @@ struct rrdengine_instance;
18 extern struct rrdeng_cache_efficiency_stats rrdeng_cache_efficiency_stats;
19
20 struct page_descr_with_data {
21 - nd_uuid_t *id;
21 + UUIDMAP_ID uuid_id;
22 Word_t metric_id;
23 usec_t start_time_ut;
24 usec_t end_time_ut;
src/database/engine/rrdengine.c
+2 -1
@@ -333,6 +333,7 @@ struct page_descr_with_data *page_descriptor_get(void) {
333 }
334
335 static inline void page_descriptor_release(struct page_descr_with_data *descr) {
336 + uuidmap_free(descr->uuid_id);
337 aral_freez(rrdeng_main.descriptors.ar, descr);
338 }
339
@@ -950,7 +951,7 @@ datafile_extent_build(struct rrdengine_instance *ctx, struct page_descr_with_dat
951 for (i = 0 ; i < count ; ++i) {
952 descr = xt_io_descr->descr_array[i];
953 header->descr[i].type = descr->type;
953 - uuid_copy(*(nd_uuid_t *)header->descr[i].uuid, *descr->id);
954 + uuid_copy(*(nd_uuid_t *)header->descr[i].uuid, *uuidmap_uuid_ptr(descr->uuid_id));
955 header->descr[i].page_length = descr->page_length;
956 header->descr[i].start_time_ut = descr->start_time_ut;
957