Hi!
From: Nathan Chancellor natechancellor@gmail.com
[ Upstream commit 0df3e42167caaf9f8c7b64de3da40a459979afe8 ]
When building with -Wsometimes-uninitialized, clang warns:
drivers/pci/hotplug/rpaphp_core.c:243:14: warning: variable 'fndit' is used uninitialized whenever 'for' loop exits because its condition is false [-Wsometimes-uninitialized] for (j = 0; j < entries; j++) { ^~~~~~~~~~~
...
fndit is only used to gate a sprintf call, which can be moved into the loop to simplify the code and eliminate the local variable, which will fix this warning.
Well, you fixed the warning, but the code is still buggy:
+++ b/drivers/pci/hotplug/rpaphp_core.c @@ -230,7 +230,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name, struct of_drc_info drc; const __be32 *value; char cell_drc_name[MAX_DRC_NAME_LEN];
- int j, fndit;
- int j;
info = of_find_property(dn->parent, "ibm,drc-info", NULL); if (info == NULL) @@ -245,17 +245,13 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name, /* Should now know end of current entry */
if (my_index > drc.last_drc_index)
continue;
fndit = 1;
break;
/* Found it */
if (my_index <= drc.last_drc_index) {
sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
my_index);
break;
}}
- /* Found it */
- if (fndit)
sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix,
my_index);
if (((drc_name == NULL) || (drc_name && !strcmp(drc_name, cell_drc_name))) &&
In case we do not find it, cell_drc_name is not initialized, yet we use it in strcmp(). Same bug exists in the mainline.
Best regards, Pavel