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);