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:
parent
3830858c5c
commit
4c59fde1f5
|
@ -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. */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue