From cd5083c00c6215f4f15c04e30feeb5f9457ec896 Mon Sep 17 00:00:00 2001 From: Don Brady Date: Tue, 7 Feb 2017 10:29:47 -0700 Subject: [PATCH] Fix coverity defects: CID 155928 CID 155928: Integer handling issues (DIVIDE_BY_ZERO) In the current vdev label, the leaf count is always non-zero but it doesn't hurt to check the count for future proofing. Reviewed-by: George Melikov Reviewed-by: Giuseppe Di Natale Reviewed-by: Brian Behlendorf Signed-off-by: Don Brady Closes #5749 --- cmd/zdb/zdb.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cmd/zdb/zdb.c b/cmd/zdb/zdb.c index d53cb2184..94b359029 100644 --- a/cmd/zdb/zdb.c +++ b/cmd/zdb/zdb.c @@ -2303,7 +2303,7 @@ dump_nvlist_stats(nvlist_t *nvl, size_t cap) { zdb_nvl_stats_t stats = { 0 }; size_t size, sum = 0, total; - size_t noise, average; + size_t noise; /* requires nvlist with non-unique names for stat collection */ VERIFY0(nvlist_alloc(&stats.zns_string, 0, 0)); @@ -2344,15 +2344,18 @@ dump_nvlist_stats(nvlist_t *nvl, size_t cap) (void) printf("%12s %4d %6d bytes (%5.2f%%)\n\n", "nvlists:", stats.zns_list_count, (int)size, 100.0 * size / total); - average = stats.zns_leaf_total / stats.zns_leaf_count; - (void) printf("%12s %4d %6d bytes average\n", - "leaf vdevs:", stats.zns_leaf_count, (int)average); - (void) printf("%24d bytes largest\n", (int)stats.zns_leaf_largest); + if (stats.zns_leaf_count > 0) { + size_t average = stats.zns_leaf_total / stats.zns_leaf_count; - if (dump_opt['l'] >= 3) - (void) printf(" space for %d additional leaf vdevs\n", - (int)((cap - total) / average)); + (void) printf("%12s %4d %6d bytes average\n", "leaf vdevs:", + stats.zns_leaf_count, (int)average); + (void) printf("%24d bytes largest\n", + (int)stats.zns_leaf_largest); + if (dump_opt['l'] >= 3 && average > 0) + (void) printf(" space for %d additional leaf vdevs\n", + (int)((cap - total) / average)); + } (void) printf("\n"); nvlist_free(stats.zns_string);