Discussion:
[libvirt] [PATCH] util: Fix a bug in virResctrlMonitorGetStats
Wang Huaqiang
2018-11-20 02:10:39 UTC
Permalink
The path argument of virFileIsDir should be a full name
of file, pathname and filename. Fixed it by passing the
full path name to virFileIsDir.

Signed-off-by: Wang Huaqiang <***@intel.com>
---
src/util/virresctrl.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c
index 7aeca9d..e0ad460 100644
--- a/src/util/virresctrl.c
+++ b/src/util/virresctrl.c
@@ -2665,6 +2665,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
int ret = -1;
DIR *dirp = NULL;
char *datapath = NULL;
+ char *filepath = NULL;
struct dirent *ent = NULL;
virResctrlMonitorStatsPtr stat = NULL;

@@ -2684,13 +2685,18 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
while (virDirRead(dirp, &ent, datapath) > 0) {
char *node_id = NULL;

+ VIR_FREE(filepath);
+
/* Looking for directory that contains resource utilization
* information file. The directory name is arranged in format
* "mon_<node_name>_<node_id>". For example, "mon_L3_00" and
* "mon_L3_01" are two target directories for a two nodes system
* with resource utilization data file for each node respectively.
*/
- if (!virFileIsDir(ent->d_name))
+ if (virAsprintf(&filepath, "%s/%s", datapath, ent->d_name) < 0);
+ goto cleanup;
+
+ if (!virFileIsDir(filepath))
continue;

/* Looking for directory has a prefix 'mon_L' */
@@ -2734,6 +2740,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
ret = 0;
cleanup:
VIR_FREE(datapath);
+ VIR_FREE(filepath);
VIR_FREE(stat);
VIR_DIR_CLOSE(dirp);
return ret;
--
2.7.4
John Ferlan
2018-11-20 19:09:34 UTC
Permalink
Post by Wang Huaqiang
The path argument of virFileIsDir should be a full name
of file, pathname and filename. Fixed it by passing the
full path name to virFileIsDir.
---
src/util/virresctrl.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/util/virresctrl.c b/src/util/virresctrl.c
index 7aeca9d..e0ad460 100644
--- a/src/util/virresctrl.c
+++ b/src/util/virresctrl.c
@@ -2665,6 +2665,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
int ret = -1;
DIR *dirp = NULL;
char *datapath = NULL;
+ char *filepath = NULL;
struct dirent *ent = NULL;
virResctrlMonitorStatsPtr stat = NULL;
@@ -2684,13 +2685,18 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
while (virDirRead(dirp, &ent, datapath) > 0) {
char *node_id = NULL;
+ VIR_FREE(filepath);
+
/* Looking for directory that contains resource utilization
* information file. The directory name is arranged in format
* "mon_<node_name>_<node_id>". For example, "mon_L3_00" and
* "mon_L3_01" are two target directories for a two nodes system
* with resource utilization data file for each node respectively.
*/
- if (!virFileIsDir(ent->d_name))
+ if (virAsprintf(&filepath, "%s/%s", datapath, ent->d_name) < 0);
This didn't compile... But easily fixed. when removing the ;
Post by Wang Huaqiang
+ goto cleanup;
+
+ if (!virFileIsDir(filepath))
continue;
/* Looking for directory has a prefix 'mon_L' */
@@ -2734,6 +2740,7 @@ virResctrlMonitorGetStats(virResctrlMonitorPtr monitor,
ret = 0;
VIR_FREE(datapath);
+ VIR_FREE(filepath);
VIR_FREE(stat);
VIR_DIR_CLOSE(dirp);
return ret;
Usage of virFileIsDir straight is my mistake because of the build error
on some odd platform when using- "if (ent->d_type != DT_DIR)"...

Reviewed-by: John Ferlan <***@redhat.com>
(and pushed)

Tks -

John

Loading...