Skip to content

Commit

Permalink
src: checks to avoid divisions by zero
Browse files Browse the repository at this point in the history
Ticket: #5920
  • Loading branch information
catenacyber committed Jul 19, 2023
1 parent b67780f commit 820d4f2
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 11 deletions.
5 changes: 3 additions & 2 deletions src/flow.c
Original file line number Diff line number Diff line change
Expand Up @@ -606,9 +606,10 @@ void FlowInitConfig(bool quiet)
FatalError("Invalid value for flow.hash-size: NULL");
}

if (StringParseUint32(&configval, 10, strlen(conf_val),
conf_val) > 0) {
if (StringParseUint32(&configval, 10, strlen(conf_val), conf_val) > 0 || configval == 0) {
flow_config.hash_size = configval;
} else {
FatalError("Invalid value for flow.hash-size");
}
}
if ((ConfGet("flow.prealloc", &conf_val)) == 1)
Expand Down
6 changes: 6 additions & 0 deletions src/source-dpdk.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,18 @@ static void DPDKFreeMbufArray(struct rte_mbuf **mbuf_array, uint16_t mbuf_cnt, u
static uint64_t CyclesToMicroseconds(const uint64_t cycles)
{
const uint64_t ticks_per_us = rte_get_tsc_hz() / 1000000;
if (ticks_per_us == 0) {
return 0;
}
return cycles / ticks_per_us;
}

static uint64_t CyclesToSeconds(const uint64_t cycles)
{
const uint64_t ticks_per_s = rte_get_tsc_hz();
if (ticks_per_s == 0) {
return 0;
}
return cycles / ticks_per_s;
}

Expand Down
6 changes: 4 additions & 2 deletions src/source-windivert.c
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,10 @@ static SCTime_t WinDivertTimestampToTimeStamp(WinDivertThreadVars *wd_tv, INT64
struct timeval tv;

int64_t qpc_delta = (int64_t)timestamp_count - wd_tv->qpc_start_count;
int64_t unix_usec =
wd_tv->qpc_start_time + (qpc_delta / wd_tv->qpc_freq_usec);
int64_t unix_usec = wd_tv->qpc_start_time;
if (wd_tv->qpc_freq_usec) {
unix_usec += qpc_delta / wd_tv->qpc_freq_usec;
}

tv.tv_sec = (long)(unix_usec / (1000 * 1000));
tv.tv_usec = (long)(unix_usec - (int64_t)tv.tv_sec * (1000 * 1000));
Expand Down
14 changes: 8 additions & 6 deletions src/util-pool.c
Original file line number Diff line number Diff line change
Expand Up @@ -378,12 +378,14 @@ void PoolReturn(Pool *p, void *data)

void PoolPrintSaturation(Pool *p)
{
SCLogDebug("pool %p is using %" PRIu32 " out of %" PRIu32 " items (%02.1f%%), max %" PRIu32
" (%02.1f%%): pool struct memory %" PRIu64 ".",
p, p->outstanding, p->max_buckets,
(float)(p->outstanding) / (float)(p->max_buckets) * 100, p->max_outstanding,
(float)(p->max_outstanding) / (float)(p->max_buckets) * 100,
(uint64_t)(p->max_buckets * sizeof(PoolBucket)));
if (p->max_buckets > 0) {
SCLogDebug("pool %p is using %" PRIu32 " out of %" PRIu32 " items (%02.1f%%), max %" PRIu32
" (%02.1f%%): pool struct memory %" PRIu64 ".",
p, p->outstanding, p->max_buckets,
(float)(p->outstanding) / (float)(p->max_buckets) * 100, p->max_outstanding,
(float)(p->max_outstanding) / (float)(p->max_buckets) * 100,
(uint64_t)(p->max_buckets * sizeof(PoolBucket)));
}
}

/*
Expand Down
2 changes: 1 addition & 1 deletion src/util-profiling-rules.c
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,7 @@ static void *SCProfilingRuleDump(SCProfileDetectCtx *rules_ctx, int file_output)
summary[i].ticks = rules_ctx->data[i].ticks_match + rules_ctx->data[i].ticks_no_match;
summary[i].checks = rules_ctx->data[i].checks;

if (summary[i].ticks > 0) {
if (summary[i].checks > 0) {
summary[i].avgticks = (long double)summary[i].ticks / (long double)summary[i].checks;
}

Expand Down

0 comments on commit 820d4f2

Please sign in to comment.