Fix theoretical use of uninitialized values

Clang's static analyzer complains about this.

In get_configs(), if we have an invalid configuration that has no top
level vdevs, we can read a couple of uninitialized variables. Aborting
upon seeing this would break the userland tools for healthy pools, so we
instead initialize the two variables to 0 to allow the userland tools to
continue functioning for the pools with valid configurations.

In zfs_do_wait(), if no wait activities are enabled, we read an
uninitialized error variable.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Closes #14043
This commit is contained in:
Richard Yao 2022-10-15 18:27:03 -04:00 committed by Tony Hutter
parent 3830858c5c
commit 4c59fde1f5
2 changed files with 3 additions and 4 deletions

View File

@ -8535,7 +8535,7 @@ static int
zfs_do_wait(int argc, char **argv) zfs_do_wait(int argc, char **argv)
{ {
boolean_t enabled[ZFS_WAIT_NUM_ACTIVITIES]; boolean_t enabled[ZFS_WAIT_NUM_ACTIVITIES];
int error, i; int error = 0, i;
int c; int c;
/* By default, wait for all types of activity. */ /* By default, wait for all types of activity. */

View File

@ -467,11 +467,9 @@ get_configs(libpc_handle_t *hdl, pool_list_t *pl, boolean_t active_ok,
uint64_t guid; uint64_t guid;
uint_t children = 0; uint_t children = 0;
nvlist_t **child = NULL; nvlist_t **child = NULL;
uint_t holes;
uint64_t *hole_array, max_id; uint64_t *hole_array, max_id;
uint_t c; uint_t c;
boolean_t isactive; boolean_t isactive;
uint64_t hostid;
nvlist_t *nvl; nvlist_t *nvl;
boolean_t valid_top_config = B_FALSE; boolean_t valid_top_config = B_FALSE;
@ -479,7 +477,8 @@ get_configs(libpc_handle_t *hdl, pool_list_t *pl, boolean_t active_ok,
goto nomem; goto nomem;
for (pe = pl->pools; pe != NULL; pe = pe->pe_next) { for (pe = pl->pools; pe != NULL; pe = pe->pe_next) {
uint64_t id, max_txg = 0; uint64_t id, max_txg = 0, hostid = 0;
uint_t holes = 0;
if (nvlist_alloc(&config, NV_UNIQUE_NAME, 0) != 0) if (nvlist_alloc(&config, NV_UNIQUE_NAME, 0) != 0)
goto nomem; goto nomem;