[libvirt] [PATCH v2] xen: Remove PATH_MAX sized stack allocation from block stats code
Daniel Veillard
veillard at redhat.com
Sun Apr 10 05:03:30 UTC 2011
On Sat, Apr 09, 2011 at 12:05:17PM +0200, Matthias Bolte wrote:
> ---
> src/xen/block_stats.c | 51 +++++++++++++++++++++++++------------------------
> 1 files changed, 26 insertions(+), 25 deletions(-)
>
> diff --git a/src/xen/block_stats.c b/src/xen/block_stats.c
> index e7c80c9..1918257 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/<domid>/<device>/state,
ACK, thanks !
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list