Eric Blake wrote: > On 04/14/2010 02:46 AM, Jim Meyering wrote: >> From: Jim Meyering <meyering@xxxxxxxxxx> >> >> * src/openvz/openvz_driver.c (openvzGetProcessInfo): Reorganize >> so that unexpected /proc/vz/vestat content cannot make us use >> uninitialized variables. Without this change, an input line with >> a matching "readvps", but fewer than 4 numbers would result in our >> using at least "systime" uninitialized. >> --- >> src/openvz/openvz_driver.c | 30 +++++++++++++++--------------- >> 1 files changed, 15 insertions(+), 15 deletions(-) >> >> diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c >> index 95c4236..47004d6 100644 >> --- a/src/openvz/openvz_driver.c >> +++ b/src/openvz/openvz_driver.c >> @@ -1384,14 +1384,15 @@ static int openvzGetProcessInfo(unsigned long long *cpuTime, int vpsid) { >> int fd; >> char line[1024] ; >> unsigned long long usertime, systime, nicetime; >> - int readvps = 0, ret; >> + int readvps = vpsid + 1; /* ensure readvps is initially different */ >> + int ret; >> >> - if (sscanf(line, "%d %llu %llu %llu", >> - &readvps, &usertime, &nicetime, &systime) != 4) >> - continue; >> - >> - if (readvps == vpsid) >> - break; /*found vpsid*/ >> + if (sscanf (line, "%d %llu %llu %llu", >> + &readvps, &usertime, &nicetime, &systime) == 4 >> + && readvps == vpsid) { /*found vpsid*/ >> + /* convert jiffies to nanoseconds */ >> + *cpuTime = (1000ull * 1000ull * 1000ull >> + * (usertime + nicetime + systime) >> + / (unsigned long long)sysconf(_SC_CLK_TCK)); >> + break; >> + } > > ACK that the rewrite fixes the problem. However, there's still the Thanks for the review. > issue that we're using sscanf in the first place, instead of > virStrToLong_ull; do you want to prepare a followup patch, or shall I? I am in no big hurry on that front, at least not for this particular case, where the risk of bogus input is probably negligible. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list