From de0632c2e9d5663157c64e6b4353d856b18ce224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20H=C3=B6tzel?= Date: Mon, 16 Apr 2018 12:39:15 +0200 Subject: [PATCH] Fix memory corruption when number of filesystems > 16 (#900) Signed-off-by: Juergen Hoetzel --- collector/filesystem_freebsd.go | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/collector/filesystem_freebsd.go b/collector/filesystem_freebsd.go index 07167161..4df17d70 100644 --- a/collector/filesystem_freebsd.go +++ b/collector/filesystem_freebsd.go @@ -41,17 +41,14 @@ func gostring(b []int8) string { // Expose filesystem fullness. func (c *filesystemCollector) GetStats() ([]filesystemStats, error) { - buf := make([]unix.Statfs_t, 16) - for { - n, err := unix.Getfsstat(buf, noWait) - if err != nil { - return nil, err - } - if n < len(buf) { - buf = buf[:n] - break - } - buf = make([]unix.Statfs_t, len(buf)*2) + n, err := unix.Getfsstat(nil, noWait) + if err != nil { + return nil, err + } + buf := make([]unix.Statfs_t, n) + _, err = unix.Getfsstat(buf, noWait) + if err != nil { + return nil, err } stats := []filesystemStats{} for _, fs := range buf {