filesystem_freebsd: Fix label values

We must know the length of the various filesystem C strings before
turning them from a byte array into a Go string, otherwise our Go
strings could contain null bytes, corrupting the label values.

Signed-off-by: David O'Rourke <david.orourke@gmail.com>
pull/1734/head
David O'Rourke 5 years ago committed by Johannes 'fish' Ziemke
parent 2c433cdac3
commit 4c06e33c23

@ -16,6 +16,8 @@
package collector package collector
import ( import (
"bytes"
"github.com/go-kit/kit/log/level" "github.com/go-kit/kit/log/level"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
) )
@ -40,14 +42,19 @@ func (c *filesystemCollector) GetStats() ([]filesystemStats, error) {
} }
stats := []filesystemStats{} stats := []filesystemStats{}
for _, fs := range buf { for _, fs := range buf {
mountpoint := string(fs.Mntonname[:]) // We need to work out the lengths of the actual strings here,
// otherwuse we will end up with null bytes in our label values.
mountpoint_len := bytes.Index(fs.Mntonname[:], []byte{0})
mountpoint := string(fs.Mntonname[:mountpoint_len])
if c.ignoredMountPointsPattern.MatchString(mountpoint) { if c.ignoredMountPointsPattern.MatchString(mountpoint) {
level.Debug(c.logger).Log("msg", "Ignoring mount point", "mountpoint", mountpoint) level.Debug(c.logger).Log("msg", "Ignoring mount point", "mountpoint", mountpoint)
continue continue
} }
device := string(fs.Mntfromname[:]) device_len := bytes.Index(fs.Mntfromname[:], []byte{0})
fstype := string(fs.Fstypename[:]) fstype_len := bytes.Index(fs.Fstypename[:], []byte{0})
device := string(fs.Mntfromname[:device_len])
fstype := string(fs.Fstypename[:fstype_len])
if c.ignoredFSTypesPattern.MatchString(fstype) { if c.ignoredFSTypesPattern.MatchString(fstype) {
level.Debug(c.logger).Log("msg", "Ignoring fs type", "type", fstype) level.Debug(c.logger).Log("msg", "Ignoring fs type", "type", fstype)
continue continue

Loading…
Cancel
Save