From: Matthias Bolte Date: Sat, 9 Apr 2011 10:03:44 +0000 (+0200) Subject: xen: Remove PATH_MAX sized stack allocation from block stats code X-Git-Tag: v0.9.1~147 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6519b7600020af8ef5376540617e6a94aa20cd12;p=thirdparty%2Flibvirt.git xen: Remove PATH_MAX sized stack allocation from block stats code --- diff --git a/src/xen/block_stats.c b/src/xen/block_stats.c index e7c80c9036..1918257aef 100644 --- a/src/xen/block_stats.c +++ b/src/xen/block_stats.c @@ -113,34 +113,35 @@ read_stat (const char *path) } static int64_t -read_bd_stat (int device, int domid, const char *str) +read_bd_stat(int device, int domid, const char *str) { - char path[PATH_MAX]; + static const char *paths[] = { + "/sys/bus/xen-backend/devices/vbd-%d-%d/statistics/%s", + "/sys/bus/xen-backend/devices/tap-%d-%d/statistics/%s", + "/sys/devices/xen-backend/vbd-%d-%d/statistics/%s", + "/sys/devices/xen-backend/tap-%d-%d/statistics/%s" + }; + + int i; + char *path; int64_t r; - snprintf (path, sizeof path, - "/sys/bus/xen-backend/devices/vbd-%d-%d/statistics/%s", - domid, device, str); - r = read_stat (path); - if (r >= 0) return r; - - snprintf (path, sizeof path, - "/sys/bus/xen-backend/devices/tap-%d-%d/statistics/%s", - domid, device, str); - r = read_stat (path); - if (r >= 0) return r; - - snprintf (path, sizeof path, - "/sys/devices/xen-backend/vbd-%d-%d/statistics/%s", - domid, device, str); - r = read_stat (path); - if (r >= 0) return r; - - snprintf (path, sizeof path, - "/sys/devices/xen-backend/tap-%d-%d/statistics/%s", - domid, device, str); - r = read_stat (path); - return r; + for (i = 0; i < ARRAY_CARDINALITY(paths); ++i) { + if (virAsprintf(&path, paths[i], domid, device, str) < 0) { + virReportOOMError(); + return -1; + } + + r = read_stat(path); + + VIR_FREE(path); + + if (r >= 0) { + return r; + } + } + + return -1; } /* In Xenstore, /local/domain/0/backend/vbd///state,