re: net: dsa: mv88e6xxx: Add devlink regions

From: Colin King (gmail)
Date: Wed Oct 09 2024 - 12:28:24 EST


Hi Andrew,

Static analysis on linux-next has detected a potential issue with an function returning an uninitialized value from function mv88e6xxx_region_atu_snapshot in drivers/net/dsa/mv88e6xxx/devlink.c

The commit in question is:

commit bfb255428966e2ab2c406cf6c71d95e9e63241e4
Author: Andrew Lunn <andrew@xxxxxxx>
Date: Fri Sep 18 21:11:07 2020 +0200

net: dsa: mv88e6xxx: Add devlink regions

Variable err is not being initialized at the start of the function. In the following while-loop err is not being assigned if id == MV88E6XXX_N_FID because of the early break out of the loop. This can end up with the function returning an uninitialized value in err.

I'm not sure of this is ever going to happen, or if in this case this is an error condition or not, so I'm unsure if err should be initialized to zero or some other value.

while (1) {
fid = find_next_bit(chip->fid_bitmap, MV88E6XXX_N_FID, fid + 1);
if (fid == MV88E6XXX_N_FID)
break;

err = mv88e6xxx_region_atu_snapshot_fid(chip, fid, table,
&count);
if (err) {
kfree(table);
goto out;
}
}
*data = (u8 *)table;
out:
mv88e6xxx_reg_unlock(chip);

return err;

Regards,

Colin