Mon Mar 9 15:37:46 2020 UTC ()
external/cddl/osnet: Fix possible signed integer overflow

Detected by UBSan and fixed upstream

Cherry-pick:
From 05852b3467b44cdf88541ec67624cd1f5f2ded1d Mon Sep 17 00:00:00 2001
From: luozhengzheng <luo.zhengzheng@zte.com.cn>
Date: Fri, 14 Oct 2016 05:25:05 +0800
Subject: [PATCH] Fix coverity defects: CID 147571, 147574

CID 147571: Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN)
CID 147574: Unintentional integer overflow (OVERFLOW_BEFORE_WIDEN)

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: luozhengzheng <luo.zhengzheng@zte.com.cn>
Closes #5268

Reviewed by: kamil@


(fox)
diff -r1.4 -r1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c
diff -r1.10 -r1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c

cvs diff -r1.4 -r1.5 src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c (expand / switch to context diff)
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c 2019/06/21 10:59:50 1.4
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/dmu_tx.c 2020/03/09 15:37:46 1.5
@@ -412,7 +412,7 @@
 	dnode_t *dn = txh->txh_dnode;
 	dnode_t *mdn = DMU_META_DNODE(txh->txh_tx->tx_objset);
 	uint64_t space = mdn->dn_datablksz +
-	    ((mdn->dn_nlevels-1) << mdn->dn_indblkshift);
+	    ((uint64_t)(mdn->dn_nlevels-1) << mdn->dn_indblkshift);
 
 	if (dn && dn->dn_dbuf->db_blkptr &&
 	    dsl_dataset_block_freeable(dn->dn_objset->os_dsl_dataset,

cvs diff -r1.10 -r1.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c (expand / switch to context diff)
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c 2019/07/23 07:46:22 1.10
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/spa.c 2020/03/09 15:37:46 1.11
@@ -6293,7 +6293,7 @@
 	} else {
 		config_task_suspended =
 		    (gethrtime() - spa->spa_ccw_fail_time) <
-		    (zfs_ccw_retry_interval * NANOSEC);
+		    ((hrtime_t)zfs_ccw_retry_interval * NANOSEC);
 	}
 
 	return (non_config_tasks || (config_task && !config_task_suspended));