@cryptotaxi247 / netdata-1 / commits / 8df421378

Fix coverity issues (#14480)

* Fix coverity issues 382921 382924 382927 382928 382932 382933 382950 382990 383123 382952 382906 382908 382912 382914 382917 382918 382919 * 381508 Unchecked return value * 382965 Dereference after null check

Stelios Fragkakis committed Feb 10, 2023 at 09:56 UTC 8df421378ecfca6525ef07a2a9c37e1161f65f54
10 files changed +35 -24
database/engine/cache.c
+1 -1
@@ -1946,7 +1946,7 @@ time_t pgc_page_update_every_s(PGC_PAGE *page) {
1946
1947 time_t pgc_page_fix_update_every(PGC_PAGE *page, time_t update_every_s) {
1948 if(page->update_every_s == 0)
1949 - page->update_every_s = update_every_s;
1949 + page->update_every_s = (uint32_t) update_every_s;
1950
1951 return page->update_every_s;
1952 }
database/engine/journalfile.c
+3 -3
@@ -40,7 +40,7 @@ static void update_metric_retention_and_granularity_by_uuid(
40 .section = (Word_t) ctx,
41 .first_time_s = first_time_s,
42 .last_time_s = last_time_s,
43 - .latest_update_every_s = update_every_s
43 + .latest_update_every_s = (uint32_t) update_every_s
44 };
45 uuid_copy(entry.uuid, *uuid);
46 metric = mrg_metric_add_and_acquire(main_mrg, entry, &added);
@@ -617,7 +617,7 @@ static void journalfile_restore_extent_metadata(struct rrdengine_instance *ctx,
617 .section = (Word_t)ctx,
618 .first_time_s = vd.start_time_s,
619 .last_time_s = vd.end_time_s,
620 - .latest_update_every_s = vd.update_every_s,
620 + .latest_update_every_s = (uint32_t) vd.update_every_s,
621 };
622 uuid_copy(entry.uuid, *temp_id);
623
@@ -1128,7 +1128,7 @@ void *journalfile_v2_write_data_page(struct journal_v2_header *j2_header, void *
1128 data_page->delta_end_s = (uint32_t) (page_info->end_time_s - (time_t) (j2_header->start_time_ut) / USEC_PER_SEC);
1129 data_page->extent_index = page_info->extent_index;
1130
1131 - data_page->update_every_s = page_info->update_every_s;
1131 + data_page->update_every_s = (uint32_t) page_info->update_every_s;
1132 data_page->page_length = (uint16_t) (ei ? ei->page_length : page_info->page_length);
1133 data_page->type = 0;
1134
database/engine/metric.c
+4 -4
@@ -412,10 +412,10 @@ void mrg_metric_expand_retention(MRG *mrg __maybe_unused, METRIC *metric, time_t
412 metric->latest_time_s_clean = last_time_s;
413
414 if(likely(update_every_s))
415 - metric->latest_update_every_s = update_every_s;
415 + metric->latest_update_every_s = (uint32_t) update_every_s;
416 }
417 else if(unlikely(!metric->latest_update_every_s && update_every_s))
418 - metric->latest_update_every_s = update_every_s;
418 + metric->latest_update_every_s = (uint32_t) update_every_s;
419
420 metric_has_retention_unsafe(mrg, metric);
421 netdata_spinlock_unlock(&metric->spinlock);
@@ -578,7 +578,7 @@ bool mrg_metric_set_update_every(MRG *mrg __maybe_unused, METRIC *metric, time_t
578 return false;
579
580 netdata_spinlock_lock(&metric->spinlock);
581 - metric->latest_update_every_s = update_every_s;
581 + metric->latest_update_every_s = (uint32_t) update_every_s;
582 netdata_spinlock_unlock(&metric->spinlock);
583
584 return true;
@@ -590,7 +590,7 @@ bool mrg_metric_set_update_every_s_if_zero(MRG *mrg __maybe_unused, METRIC *metr
590
591 netdata_spinlock_lock(&metric->spinlock);
592 if(!metric->latest_update_every_s)
593 - metric->latest_update_every_s = update_every_s;
593 + metric->latest_update_every_s = (uint32_t) update_every_s;
594 netdata_spinlock_unlock(&metric->spinlock);
595
596 return true;
database/engine/pagecache.c
+6 -5
@@ -310,7 +310,7 @@ static size_t get_page_list_from_pgc(PGC *cache, METRIC *metric, struct rrdengin
310 pd->first_time_s = page_start_time_s;
311 pd->last_time_s = page_end_time_s;
312 pd->page_length = page_length;
313 - pd->update_every_s = page_update_every_s;
313 + pd->update_every_s = (uint32_t) page_update_every_s;
314 pd->page = (open_cache_mode) ? NULL : page;
315 pd->status |= tags;
316
@@ -581,7 +581,7 @@ static size_t get_page_list_from_journal_v2(struct rrdengine_instance *ctx, METR
581 .metric_id = metric_id,
582 .start_time_s = page_first_time_s,
583 .end_time_s = page_last_time_s,
584 - .update_every_s = page_update_every_s,
584 + .update_every_s = (uint32_t) page_update_every_s,
585 .data = datafile,
586 .size = 0,
587 .custom_data = (uint8_t *) &ei,
@@ -635,7 +635,7 @@ void add_page_details_from_journal_v2(PGC_PAGE *page, void *JudyL_pptr) {
635 pd->last_time_s = pgc_page_end_time_s(page);
636 pd->datafile.ptr = datafile;
637 pd->page_length = ei->page_length;
638 - pd->update_every_s = pgc_page_update_every_s(page);
638 + pd->update_every_s = (uint32_t) pgc_page_update_every_s(page);
639 pd->metric_id = metric_id;
640 pd->status |= PDC_PAGE_DISK_PENDING | PDC_PAGE_SOURCE_JOURNAL_V2 | PDC_PAGE_DATAFILE_ACQUIRED;
641 }
@@ -924,7 +924,8 @@ struct pgc_page *pg_cache_lookup_next(
924 else {
925 if (unlikely(page_update_every_s <= 0 || page_update_every_s > 86400)) {
926 __atomic_add_fetch(&rrdeng_cache_efficiency_stats.pages_invalid_update_every_fixed, 1, __ATOMIC_RELAXED);
927 - pd->update_every_s = page_update_every_s = pgc_page_fix_update_every(page, last_update_every_s);
927 + page_update_every_s = pgc_page_fix_update_every(page, last_update_every_s);
928 + pd->update_every_s = (uint32_t) page_update_every_s;
929 }
930
931 size_t entries_by_size = page_entries_by_size(page_length, CTX_POINT_SIZE_BYTES(ctx));
@@ -1009,7 +1010,7 @@ void pgc_open_add_hot_page(Word_t section, Word_t metric_id, time_t start_time_s
1010 .metric_id = metric_id,
1011 .start_time_s = start_time_s,
1012 .end_time_s = end_time_s,
1012 - .update_every_s = update_every_s,
1013 + .update_every_s = (uint32_t) update_every_s,
1014 .size = 0,
1015 .data = datafile,
1016 .custom_data = (uint8_t *) &ext_io_data,
database/engine/pdc.c
+3 -3
@@ -835,7 +835,7 @@ static void epdl_extent_loading_error_log(struct rrdengine_instance *ctx, EPDL *
835 uuid_unparse_lower(descr->uuid, uuid);
836 used_descr = true;
837 }
838 - else if (epdl) {
838 + else {
839 struct page_details *pd = NULL;
840
841 Word_t start = 0;
@@ -855,7 +855,7 @@ static void epdl_extent_loading_error_log(struct rrdengine_instance *ctx, EPDL *
855 }
856 }
857
858 - if(!used_epdl && !used_descr && epdl && epdl->pdc) {
858 + if(!used_epdl && !used_descr && epdl->pdc) {
859 start_time_s = epdl->pdc->start_time_s;
860 end_time_s = epdl->pdc->end_time_s;
861 }
@@ -1059,7 +1059,7 @@ static bool epdl_populate_pages_from_extent_data(
1059 .metric_id = metric_id,
1060 .start_time_s = vd.start_time_s,
1061 .end_time_s = vd.end_time_s,
1062 - .update_every_s = vd.update_every_s,
1062 + .update_every_s = (uint32_t) vd.update_every_s,
1063 .size = (size_t) ((page_data == DBENGINE_EMPTY_PAGE) ? 0 : vd.page_length),
1064 .data = page_data
1065 };
database/engine/rrdengine.c
+9 -2
@@ -1087,13 +1087,20 @@ void find_uuid_first_time(
1087 }
1088
1089 static void update_metrics_first_time_s(struct rrdengine_instance *ctx, struct rrdengine_datafile *datafile_to_delete, struct rrdengine_datafile *first_datafile_remaining, bool worker) {
1090 - __atomic_add_fetch(&rrdeng_cache_efficiency_stats.metrics_retention_started, 1, __ATOMIC_RELAXED);
1091 -
1090 if(worker)
1091 worker_is_busy(UV_EVENT_DBENGINE_FIND_ROTATED_METRICS);
1092
1093 struct rrdengine_journalfile *journalfile = datafile_to_delete->journalfile;
1094 struct journal_v2_header *j2_header = journalfile_v2_data_acquire(journalfile, NULL, 0, 0);
1095 +
1096 + if (unlikely(!j2_header)) {
1097 + if (worker)
1098 + worker_is_idle();
1099 + return;
1100 + }
1101 +
1102 + __atomic_add_fetch(&rrdeng_cache_efficiency_stats.metrics_retention_started, 1, __ATOMIC_RELAXED);
1103 +
1104 struct journal_metric_list *uuid_list = (struct journal_metric_list *)((uint8_t *) j2_header + j2_header->metric_offset);
1105
1106 size_t count = j2_header->metric_count;
database/engine/rrdengineapi.c
+1 -1
@@ -371,7 +371,7 @@ static void rrdeng_store_metric_create_new_page(struct rrdeng_collect_handle *ha
371 .end_time_s = point_in_time_s,
372 .size = data_size,
373 .data = data,
374 - .update_every_s = update_every_s,
374 + .update_every_s = (uint32_t) update_every_s,
375 .hot = true
376 };
377
database/rrdset.c
+3 -3
@@ -1981,8 +1981,8 @@ time_t rrdset_set_update_every_s(RRDSET *st, time_t update_every_s) {
1981 internal_error(true, "RRDSET '%s' switching update every from %d to %d",
1982 rrdset_id(st), (int)st->update_every, (int)update_every_s);
1983
1984 - time_t prev_update_every_s = st->update_every;
1985 - st->update_every = update_every_s;
1984 + time_t prev_update_every_s = (time_t) st->update_every;
1985 + st->update_every = (int) update_every_s;
1986
1987 // switch update every to the storage engine
1988 RRDDIM *rd;
@@ -1992,7 +1992,7 @@ time_t rrdset_set_update_every_s(RRDSET *st, time_t update_every_s) {
1992 rd->tiers[tier].collect_ops->change_collection_frequency(rd->tiers[tier].db_collection_handle, (int)(st->rrdhost->db[tier].tier_grouping * st->update_every));
1993 }
1994
1995 - assert(rd->update_every == prev_update_every_s &&
1995 + assert(rd->update_every == (int) prev_update_every_s &&
1996 "chart's update every differs from the update every of its dimensions");
1997 rd->update_every = st->update_every;
1998 }
database/sqlite/sqlite_metadata.c
+1 -1
@@ -1419,7 +1419,7 @@ static void *metadata_unittest_threads(void)
1419 unittest_queue_metadata,
1420 &tu);
1421 }
1422 - uv_async_send(&metasync_worker.async);
1422 + (void) uv_async_send(&metasync_worker.async);
1423 sleep_usec(seconds_to_run * USEC_PER_SEC);
1424
1425 __atomic_store_n(&tu.join, 1, __ATOMIC_RELAXED);
libnetdata/circular_buffer/circular_buffer.c
+4 -1
@@ -16,7 +16,10 @@ struct circular_buffer *cbuffer_new(size_t initial, size_t max, size_t *statisti
16 }
17
18 void cbuffer_free(struct circular_buffer *buf) {
19 - if(buf && buf->statistics)
19 + if (unlikely(!buf))
20 + return;
21 +
22 + if(buf->statistics)
23 __atomic_sub_fetch(buf->statistics, sizeof(struct circular_buffer) + buf->size, __ATOMIC_RELAXED);
24
25 freez(buf->data);