]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Initialize "autoreplace" in spa_ld_get_props()
authorMark Johnston <markj@FreeBSD.org>
Fri, 16 Jul 2021 13:19:59 +0000 (09:19 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 26 Jul 2021 18:53:47 +0000 (11:53 -0700)
spa_prop_find() may fail to find the specified property, in which case
it suppresses ENOENT from zap_lookup().  In this case, the return value
is left uninitialized, so spa_autoreplace was being initialized using an
uninitialized stack variable.

This was found using KMSAN.  It appears to be a regression from commit
9eb7b46ed0, which removed the initialization of "autoreplace" from the
definition.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Mark Johnston <markj@FreeBSD.org>
Closes #12383

module/zfs/spa.c

index 2a4db7d562b6f119f877c364dcfb64cdc724d2d7..8ca9b49ba3b38cb819ebf396f6de3315ce445600 100644 (file)
@@ -4183,7 +4183,7 @@ spa_ld_get_props(spa_t *spa)
                return (spa_vdev_err(rvd, VDEV_AUX_CORRUPT_DATA, EIO));
 
        if (error == 0) {
-               uint64_t autoreplace;
+               uint64_t autoreplace = 0;
 
                spa_prop_find(spa, ZPOOL_PROP_BOOTFS, &spa->spa_bootfs);
                spa_prop_find(spa, ZPOOL_PROP_AUTOREPLACE, &autoreplace);