On Tue, Jul 15, 2025 at 09:45:51AM -0300, Fabiano Rosas wrote: > Coverity has caught a bug in the formatting of time intervals for > postcopy latency distribution display in 'info migrate'. > > While bounds checking the labels array, sizeof is incorrectly being > used. ARRAY_SIZE is the correct form of obtaining the size of an > array. > > Fixes: 3345fb3b6d ("migration/postcopy: Add latency distribution report for > blocktime") > Resolves: Coverity CID 1612248 > Suggested-by: Peter Maydell <peter.mayd...@linaro.org> > Signed-off-by: Fabiano Rosas <faro...@suse.de> > --- > migration/migration-hmp-cmds.c | 6 ++---- > 1 file changed, 2 insertions(+), 4 deletions(-) > > diff --git a/migration/migration-hmp-cmds.c b/migration/migration-hmp-cmds.c > index cef5608210..bb954881d7 100644 > --- a/migration/migration-hmp-cmds.c > +++ b/migration/migration-hmp-cmds.c > @@ -57,11 +57,9 @@ static const gchar *format_time_str(uint64_t us) > const char *units[] = {"us", "ms", "sec"}; > int index = 0; > > - while (us > 1000) { > + while (us > 1000 && index + 1 < ARRAY_SIZE(units)) { > us /= 1000; > - if (++index >= (sizeof(units) - 1)) { > - break; > - } > + index++; > } > > return g_strdup_printf("%"PRIu64" %s", us, units[index]);
It occurrs to me that this is the same basic algorithmic problem as converting storage sizes from bytes to KB/MB/GB/etc. We have size_to_str() which does this conversion without needing any loop at all. Then there is freq_to_str() which has similar purpose but still uses a loop, instead of the shortcut size_to_str has. IMHO we should have a 'scaled_int_to_str' method that is common to any place we need such scaled integer string conversions, and then wrappers like "size_to_str", "freq_to_str" and "duration_to_str" that pass in the required list of unit strings, and the divisor and requested decimal precision, etc. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|