From 4ca9c1de129f8250c446c2355349e6b300d84586 Mon Sep 17 00:00:00 2001 From: Gvozden Neskovic Date: Fri, 2 Sep 2016 15:07:00 +0200 Subject: [PATCH] Explicit integer promotion for bit shift operations Explicitly promote variables to correct type. Undefined behavior is reported because length of int is not well defined by C standard. Issue #4883 Signed-off-by: Gvozden Neskovic --- module/zfs/sha256.c | 3 ++- module/zfs/spa_stats.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/module/zfs/sha256.c b/module/zfs/sha256.c index cf9dd8fcb..57f5b7daf 100644 --- a/module/zfs/sha256.c +++ b/module/zfs/sha256.c @@ -76,7 +76,8 @@ SHA256Transform(uint32_t *H, const uint8_t *cp) uint32_t a, b, c, d, e, f, g, h, t, T1, T2, W[64]; for (t = 0; t < 16; t++, cp += 4) - W[t] = (cp[0] << 24) | (cp[1] << 16) | (cp[2] << 8) | cp[3]; + W[t] = ((uint32_t)cp[0] << 24) | ((uint32_t)cp[1] << 16) | + ((uint32_t)cp[2] << 8) | (uint32_t)cp[3]; for (t = 16; t < 64; t++) W[t] = sigma1(W[t - 2]) + W[t - 7] + diff --git a/module/zfs/spa_stats.c b/module/zfs/spa_stats.c index 2b8559b5d..c3d1c3b95 100644 --- a/module/zfs/spa_stats.c +++ b/module/zfs/spa_stats.c @@ -600,7 +600,7 @@ spa_tx_assign_add_nsecs(spa_t *spa, uint64_t nsecs) spa_stats_history_t *ssh = &spa->spa_stats.tx_assign_histogram; uint64_t idx = 0; - while (((1 << idx) < nsecs) && (idx < ssh->size - 1)) + while (((1ULL << idx) < nsecs) && (idx < ssh->size - 1)) idx++; atomic_inc_64(&((kstat_named_t *)ssh->private)[idx].value.ui64);