From 36749adbb63eba2356f90eafbe88a54025992bab Mon Sep 17 00:00:00 2001 From: Adrian Serrano Date: Thu, 9 May 2019 11:14:05 +0200 Subject: [PATCH] Fix various memory leaks under Windows (#12100) A function in go-sysinfo used under Windows to split a command-line into arguments was leaking memory. This code was used in various places: add_process_metadata processor. (enabled by default in all Beats) Packetbeat's process monitor. (disabled by default). Auditbeat's system/process metricset. This PR updates vendored go-sysinfo to the most recent version, which fixes the leak. --- CHANGELOG.next.asciidoc | 3 ++ NOTICE.txt | 4 +- .../elastic/go-sysinfo/CHANGELOG.md | 51 +++++++++++++++++++ .../github.com/elastic/go-sysinfo/NOTICE.txt | 2 +- .../github.com/elastic/go-sysinfo/README.md | 47 +++++++++++++++-- vendor/github.com/elastic/go-sysinfo/go.mod | 11 ++++ vendor/github.com/elastic/go-sysinfo/go.sum | 27 ++++++++++ .../providers/darwin/process_darwin_amd64.go | 20 +++++++- .../go-sysinfo/providers/linux/container.go | 11 ++-- .../go-sysinfo/providers/linux/host_linux.go | 24 ++++++--- .../providers/linux/process_linux.go | 20 ++++++-- .../providers/windows/process_windows.go | 13 +++++ .../elastic/go-sysinfo/types/process.go | 1 + vendor/vendor.json | 38 +++++++------- 14 files changed, 230 insertions(+), 42 deletions(-) create mode 100644 vendor/github.com/elastic/go-sysinfo/CHANGELOG.md create mode 100644 vendor/github.com/elastic/go-sysinfo/go.mod create mode 100644 vendor/github.com/elastic/go-sysinfo/go.sum diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 6627e8e71b9..19b0657c8ee 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -71,12 +71,14 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Fix flaky service_integration_windows_test test by introducing a confidence factor and enriching the error message with more service details. {issue}8880[8880] and {issue}7977[7977] - Replace wmi queries with win32 api calls as they were consuming CPU resources {issue}3249[3249] and {issue}11840[11840] - Fix queue.spool.write.flush.events config type. {pull}12080[12080] +- Fixed a memory leak when using the add_process_metadata processor under Windows. {pull}12100[12100] *Auditbeat* - Package dataset: dlopen versioned librpm shared objects. {pull}11565[11565] - Package dataset: Nullify Librpm's rpmsqEnable. {pull}11628[11628] - Package dataset: Log error when Homebrew is not installed. {pull}11667[11667] +- Process dataset: Fixed a memory leak under Windows. {pull}12100[12100] - Login dataset: Fix re-read of utmp files. {pull}12028[12028] *Filebeat* @@ -115,6 +117,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Prevent duplicate packet loss error messages in HTTP events. {pull}10709[10709] - Avoid reporting unknown MongoDB opcodes more than once. {pull}10878[10878] +- Fixed a memory leak when using process monitoring under Windows. {pull}12100[12100] *Winlogbeat* diff --git a/NOTICE.txt b/NOTICE.txt index 05cf2a5d80f..38957751f09 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -715,7 +715,7 @@ Apache License 2.0 -------------------------------------------------------------------- Dependency: github.com/elastic/go-sysinfo -Revision: ab4f04edfc3d6b3864f5f06a068ddab9ad79774f +Revision: 9a4be54a53be4c48b44d351d52fb425a5e274be5 License type (autodetected): Apache-2.0 ./vendor/github.com/elastic/go-sysinfo/LICENSE.txt: -------------------------------------------------------------------- @@ -723,7 +723,7 @@ Apache License 2.0 -------NOTICE.txt----- Elastic go-sysinfo -Copyright 2017-2018 Elasticsearch B.V. +Copyright 2017-2019 Elasticsearch B.V. This product includes software developed at Elasticsearch, B.V. (https://www.elastic.co/). diff --git a/vendor/github.com/elastic/go-sysinfo/CHANGELOG.md b/vendor/github.com/elastic/go-sysinfo/CHANGELOG.md new file mode 100644 index 00000000000..562a3b5d04f --- /dev/null +++ b/vendor/github.com/elastic/go-sysinfo/CHANGELOG.md @@ -0,0 +1,51 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +### Added + +### Changed + +### Deprecated + +### Removed + +### Fixed + +- Fixed a leak when calling the CommandLineToArgv function. [#51](https://github.com/elastic/go-sysinfo/pull/51) + +### Security + +## [1.0.1] - 2019-05-08 + +### Fixed + +- Add support for new prometheus/procfs API. [#49](https://github.com/elastic/go-sysinfo/pull/49) + +## [1.0.0] - 2019-05-03 + +### Added + +- Add Windows provider implementation. [#22](https://github.com/elastic/go-sysinfo/pull/22) +- Add Windows process provider. [#26](https://github.com/elastic/go-sysinfo/pull/26) +- Add `OpenHandleEnumerator` and `OpenHandleCount` and implement these for Windows. [#27](https://github.com/elastic/go-sysinfo/pull/27) +- Add user info to Process. [#34](https://github.com/elastic/go-sysinfo/pull/34) +- Implement `Processes` for Darwin. [#35](https://github.com/elastic/go-sysinfo/pull/35) +- Add `Parent()` to `Process`. [#46](https://github.com/elastic/go-sysinfo/pull/46) + +### Fixed + +- Fix Windows registry handle leak. [#33](https://github.com/elastic/go-sysinfo/pull/33) +- Fix Linux host ID by search for older locations for the machine-id file. [#44](https://github.com/elastic/go-sysinfo/pull/44) + +### Changed + +- Changed the host containerized check to reduce false positives. [#42](https://github.com/elastic/go-sysinfo/pull/42) [#43](https://github.com/elastic/go-sysinfo/pull/43) + +[Unreleased]: https://github.com/elastic/go-sysinfo/compare/v1.0.1...HEAD +[1.0.1]: https://github.com/elastic/go-sysinfo/releases/tag/v1.0.1 +[1.0.0]: https://github.com/elastic/go-sysinfo/releases/tag/v1.0.0 diff --git a/vendor/github.com/elastic/go-sysinfo/NOTICE.txt b/vendor/github.com/elastic/go-sysinfo/NOTICE.txt index b149204f15f..c813ad58275 100644 --- a/vendor/github.com/elastic/go-sysinfo/NOTICE.txt +++ b/vendor/github.com/elastic/go-sysinfo/NOTICE.txt @@ -1,5 +1,5 @@ Elastic go-sysinfo -Copyright 2017-2018 Elasticsearch B.V. +Copyright 2017-2019 Elasticsearch B.V. This product includes software developed at Elasticsearch, B.V. (https://www.elastic.co/). diff --git a/vendor/github.com/elastic/go-sysinfo/README.md b/vendor/github.com/elastic/go-sysinfo/README.md index 5111c7207a5..3a657a4b2d4 100644 --- a/vendor/github.com/elastic/go-sysinfo/README.md +++ b/vendor/github.com/elastic/go-sysinfo/README.md @@ -1,4 +1,4 @@ -# go-sysinfo [WORK IN PROGRESS] +# go-sysinfo [![Build Status](http://img.shields.io/travis/elastic/go-sysinfo.svg?style=flat-square)][travis] [![Go Documentation](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)][godocs] @@ -6,7 +6,48 @@ [travis]: http://travis-ci.org/elastic/go-sysinfo [godocs]: http://godoc.org/github.com/elastic/go-sysinfo -go-sysinfo is a library for collecting system information. +go-sysinfo is a library for collecting system information. This includes +information about the host machine and processes running on the host. + +The available features vary based on what has been implemented by the "provider" +for the operating system. At runtime you check to see if additional interfaces +are implemented by the returned `Host` or `Process`. For example: + +```go +process, err := sysinfo.Self() +if err != nil { + return err +} + +if handleCounter, ok := process.(types.OpenHandleCounter); ok { + count, err := handleCounter.OpenHandleCount() + if err != nil { + return err + } + log.Printf("%d open handles", count) +} +``` + +These tables show what methods are implemented as well as the extra interfaces +that are implemented. + +| `Host` Features | Darwin | Linux | Windows | +|------------------|--------|-------|---------| +| `Info()` | x | x | x | +| `Memory()` | x | x | x | +| `CPUTimer` | x | x | x | + +| `Process` Features | Darwin | Linux | Windows | +|------------------------|--------|-------|---------| +| `Info()` | x | x | x | +| `Memory()` | x | x | x | +| `User()` | x | x | x | +| `Parent()` | x | x | x | +| `CPUTimer` | x | x | x | +| `Environment` | x | x | | +| `OpenHandleEnumerator` | | x | | +| `OpenHandleCounter` | | x | | +| `Seccomp` | | x | | +| `Capabilities` | | x | | -This project is a work in progress. diff --git a/vendor/github.com/elastic/go-sysinfo/go.mod b/vendor/github.com/elastic/go-sysinfo/go.mod new file mode 100644 index 00000000000..068a0d14842 --- /dev/null +++ b/vendor/github.com/elastic/go-sysinfo/go.mod @@ -0,0 +1,11 @@ +module github.com/elastic/go-sysinfo + +require ( + github.com/elastic/go-windows v1.0.0 + github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 + github.com/pkg/errors v0.8.1 + github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0 + github.com/stretchr/testify v1.3.0 + golang.org/x/sys v0.0.0-20190425145619-16072639606e + howett.net/plist v0.0.0-20181124034731-591f970eefbb +) diff --git a/vendor/github.com/elastic/go-sysinfo/go.sum b/vendor/github.com/elastic/go-sysinfo/go.sum new file mode 100644 index 00000000000..c84ee0158d0 --- /dev/null +++ b/vendor/github.com/elastic/go-sysinfo/go.sum @@ -0,0 +1,27 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= +github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 h1:rp+c0RAYOWj8l6qbCUTSiRLG/iKnW3K3/QfPPuSsBt4= +github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0 h1:c8R11WC8m7KNMkTv/0+Be8vvwo4I3/Ut9AC2FW8fX3U= +github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190425145619-16072639606e h1:4ktJgTV34+N3qOZUc5fAaG3Pb11qzMm3PkAoTAgUZ2I= +golang.org/x/sys v0.0.0-20190425145619-16072639606e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= +howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= diff --git a/vendor/github.com/elastic/go-sysinfo/providers/darwin/process_darwin_amd64.go b/vendor/github.com/elastic/go-sysinfo/providers/darwin/process_darwin_amd64.go index ad1864dfc03..a2122038e21 100644 --- a/vendor/github.com/elastic/go-sysinfo/providers/darwin/process_darwin_amd64.go +++ b/vendor/github.com/elastic/go-sysinfo/providers/darwin/process_darwin_amd64.go @@ -85,6 +85,7 @@ func (s darwinSystem) Self() (types.Process, error) { } type process struct { + info *types.ProcessInfo pid int cwd string exe string @@ -96,7 +97,20 @@ func (p *process) PID() int { return p.pid } +func (p *process) Parent() (types.Process, error) { + info, err := p.Info() + if err != nil { + return nil, err + } + + return &process{pid: info.PPID}, nil +} + func (p *process) Info() (types.ProcessInfo, error) { + if p.info != nil { + return *p.info, nil + } + var task procTaskAllInfo if err := getProcTaskAllInfo(p.pid, &task); err != nil { return types.ProcessInfo{}, err @@ -111,7 +125,7 @@ func (p *process) Info() (types.ProcessInfo, error) { return types.ProcessInfo{}, err } - return types.ProcessInfo{ + p.info = &types.ProcessInfo{ Name: int8SliceToString(task.Pbsd.Pbi_name[:]), PID: p.pid, PPID: int(task.Pbsd.Pbi_ppid), @@ -120,7 +134,9 @@ func (p *process) Info() (types.ProcessInfo, error) { Args: p.args, StartTime: time.Unix(int64(task.Pbsd.Pbi_start_tvsec), int64(task.Pbsd.Pbi_start_tvusec)*int64(time.Microsecond)), - }, nil + } + + return *p.info, nil } func (p *process) User() (types.UserInfo, error) { diff --git a/vendor/github.com/elastic/go-sysinfo/providers/linux/container.go b/vendor/github.com/elastic/go-sysinfo/providers/linux/container.go index cfacf013d12..6081e0c4132 100644 --- a/vendor/github.com/elastic/go-sysinfo/providers/linux/container.go +++ b/vendor/github.com/elastic/go-sysinfo/providers/linux/container.go @@ -46,14 +46,13 @@ func isContainerizedCgroup(data []byte) (bool, error) { s := bufio.NewScanner(bytes.NewReader(data)) for n := 0; s.Scan(); n++ { line := s.Bytes() - if len(line) == 0 || line[len(line)-1] == '/' { - continue - } - if bytes.HasSuffix(line, []byte("init.scope")) { - return false, nil + // Following a suggestion on Stack Overflow on how to detect + // being inside a container: https://stackoverflow.com/a/20012536/235203 + if bytes.Contains(line, []byte("docker")) || bytes.Contains(line, []byte("lxc")) { + return true, nil } } - return true, s.Err() + return false, s.Err() } diff --git a/vendor/github.com/elastic/go-sysinfo/providers/linux/host_linux.go b/vendor/github.com/elastic/go-sysinfo/providers/linux/host_linux.go index 77a52fc6cf3..9b09ddff98c 100644 --- a/vendor/github.com/elastic/go-sysinfo/providers/linux/host_linux.go +++ b/vendor/github.com/elastic/go-sysinfo/providers/linux/host_linux.go @@ -37,12 +37,14 @@ func init() { } type linuxSystem struct { - procFS procfs.FS + procFS procFS } func newLinuxSystem(hostFS string) linuxSystem { + mountPoint := filepath.Join(hostFS, procfs.DefaultMountPoint) + fs, _ := procfs.NewFS(mountPoint) return linuxSystem{ - procFS: procfs.FS(filepath.Join(hostFS, procfs.DefaultMountPoint)), + procFS: procFS{FS: fs, mountPoint: mountPoint}, } } @@ -51,7 +53,7 @@ func (s linuxSystem) Host() (types.Host, error) { } type host struct { - procFS procfs.FS + procFS procFS stat procfs.Stat info types.HostInfo } @@ -61,7 +63,7 @@ func (h *host) Info() types.HostInfo { } func (h *host) Memory() (*types.HostMemoryInfo, error) { - content, err := ioutil.ReadFile(h.procFS.Path("meminfo")) + content, err := ioutil.ReadFile(h.procFS.path("meminfo")) if err != nil { return nil, err } @@ -87,7 +89,7 @@ func (h *host) CPUTime() (types.CPUTimes, error) { }, nil } -func newHost(fs procfs.FS) (*host, error) { +func newHost(fs procFS) (*host, error) { stat, err := fs.NewStat() if err != nil { return nil, errors.Wrap(err, "failed to read proc stat") @@ -137,7 +139,7 @@ func (r *reader) architecture(h *host) { } func (r *reader) bootTime(h *host) { - v, err := bootTime(h.procFS) + v, err := bootTime(h.procFS.FS) if r.addErr(err) { return } @@ -196,3 +198,13 @@ func (r *reader) uniqueID(h *host) { } h.info.UniqueID = v } + +type procFS struct { + procfs.FS + mountPoint string +} + +func (fs *procFS) path(p ...string) string { + elem := append([]string{fs.mountPoint}, p...) + return filepath.Join(elem...) +} diff --git a/vendor/github.com/elastic/go-sysinfo/providers/linux/process_linux.go b/vendor/github.com/elastic/go-sysinfo/providers/linux/process_linux.go index 4f5425e8b47..3ea7fd87788 100644 --- a/vendor/github.com/elastic/go-sysinfo/providers/linux/process_linux.go +++ b/vendor/github.com/elastic/go-sysinfo/providers/linux/process_linux.go @@ -65,7 +65,7 @@ func (s linuxSystem) Self() (types.Process, error) { type process struct { procfs.Proc - fs procfs.FS + fs procFS info *types.ProcessInfo } @@ -73,8 +73,22 @@ func (p *process) PID() int { return p.Proc.PID } +func (p *process) Parent() (types.Process, error) { + info, err := p.Info() + if err != nil { + return nil, err + } + + proc, err := p.fs.NewProc(info.PPID) + if err != nil { + return nil, err + } + + return &process{Proc: proc, fs: p.fs}, nil +} + func (p *process) path(pa ...string) string { - return p.fs.Path(append([]string{strconv.Itoa(p.PID())}, pa...)...) + return p.fs.path(append([]string{strconv.Itoa(p.PID())}, pa...)...) } func (p *process) CWD() (string, error) { @@ -112,7 +126,7 @@ func (p *process) Info() (types.ProcessInfo, error) { return types.ProcessInfo{}, err } - bootTime, err := bootTime(p.fs) + bootTime, err := bootTime(p.fs.FS) if err != nil { return types.ProcessInfo{}, err } diff --git a/vendor/github.com/elastic/go-sysinfo/providers/windows/process_windows.go b/vendor/github.com/elastic/go-sysinfo/providers/windows/process_windows.go index 8a19e43e8af..351351debc6 100644 --- a/vendor/github.com/elastic/go-sysinfo/providers/windows/process_windows.go +++ b/vendor/github.com/elastic/go-sysinfo/providers/windows/process_windows.go @@ -79,6 +79,15 @@ func (p *process) PID() int { return p.pid } +func (p *process) Parent() (types.Process, error) { + info, err := p.Info() + if err != nil { + return nil, err + } + + return newProcess(info.PPID) +} + func newProcess(pid int) (*process, error) { p := &process{pid: pid} if err := p.init(); err != nil { @@ -220,6 +229,10 @@ func splitCommandline(utf16 []byte) ([]string, error) { if err != nil { return nil, err } + + // Free memory allocated for CommandLineToArgvW arguments. + defer syscall.LocalFree((syscall.Handle)(unsafe.Pointer(argsWide))) + args := make([]string, numArgs) for idx := range args { args[idx] = syscall.UTF16ToString(argsWide[idx][:]) diff --git a/vendor/github.com/elastic/go-sysinfo/types/process.go b/vendor/github.com/elastic/go-sysinfo/types/process.go index ade433f8c95..8dd2074ced4 100644 --- a/vendor/github.com/elastic/go-sysinfo/types/process.go +++ b/vendor/github.com/elastic/go-sysinfo/types/process.go @@ -24,6 +24,7 @@ type Process interface { Info() (ProcessInfo, error) Memory() (MemoryInfo, error) User() (UserInfo, error) + Parent() (Process, error) PID() int } diff --git a/vendor/vendor.json b/vendor/vendor.json index aaf241c6dc0..115959a1af6 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1030,46 +1030,46 @@ "versionExact": "v0.0.5" }, { - "checksumSHA1": "QhFIpuHPaV6hKejKcc2wm6y4MSQ=", + "checksumSHA1": "pdGPPNf1TeT3fTl8Uwl55hE9/G8=", "path": "github.com/elastic/go-sysinfo", - "revision": "ab4f04edfc3d6b3864f5f06a068ddab9ad79774f", - "revisionTime": "2019-03-27T18:53:17Z" + "revision": "9a4be54a53be4c48b44d351d52fb425a5e274be5", + "revisionTime": "2019-05-08T09:33:45Z" }, { "checksumSHA1": "GiZCjX17K265TtamGZZw4R2Jwbk=", "path": "github.com/elastic/go-sysinfo/internal/registry", - "revision": "ab4f04edfc3d6b3864f5f06a068ddab9ad79774f", - "revisionTime": "2019-03-27T18:53:17Z" + "revision": "9a4be54a53be4c48b44d351d52fb425a5e274be5", + "revisionTime": "2019-05-08T09:33:45Z" }, { - "checksumSHA1": "ovafihHzpBx9Y7+lZh9X5KwNCvE=", + "checksumSHA1": "dVSTUnZHCLNd0tYIENqdj05RyI8=", "path": "github.com/elastic/go-sysinfo/providers/darwin", - "revision": "ab4f04edfc3d6b3864f5f06a068ddab9ad79774f", - "revisionTime": "2019-03-27T18:53:17Z" + "revision": "9a4be54a53be4c48b44d351d52fb425a5e274be5", + "revisionTime": "2019-05-08T09:33:45Z" }, { - "checksumSHA1": "OyI+VwDiT4UZjncsDr1GYg1xcdw=", + "checksumSHA1": "LWMXshdY44+JM7g09dA4tXMZ1rY=", "path": "github.com/elastic/go-sysinfo/providers/linux", - "revision": "ab4f04edfc3d6b3864f5f06a068ddab9ad79774f", - "revisionTime": "2019-03-27T18:53:17Z" + "revision": "9a4be54a53be4c48b44d351d52fb425a5e274be5", + "revisionTime": "2019-05-08T09:33:45Z" }, { "checksumSHA1": "RWLvcP1w9ynKbuCqiW6prwd+EDU=", "path": "github.com/elastic/go-sysinfo/providers/shared", - "revision": "ab4f04edfc3d6b3864f5f06a068ddab9ad79774f", - "revisionTime": "2019-03-27T18:53:17Z" + "revision": "9a4be54a53be4c48b44d351d52fb425a5e274be5", + "revisionTime": "2019-05-08T09:33:45Z" }, { - "checksumSHA1": "aF05MEkMjbRekzHlwFxmd5WBpeY=", + "checksumSHA1": "13qV0fFj6P5m1/n1HsdByRW0Hk4=", "path": "github.com/elastic/go-sysinfo/providers/windows", - "revision": "ab4f04edfc3d6b3864f5f06a068ddab9ad79774f", - "revisionTime": "2019-03-27T18:53:17Z" + "revision": "9a4be54a53be4c48b44d351d52fb425a5e274be5", + "revisionTime": "2019-05-08T09:33:45Z" }, { - "checksumSHA1": "MLQioPEjULYbNqqCjfB1/cux08E=", + "checksumSHA1": "OHierbaoOHx79d73DuLrao43rIg=", "path": "github.com/elastic/go-sysinfo/types", - "revision": "ab4f04edfc3d6b3864f5f06a068ddab9ad79774f", - "revisionTime": "2019-03-27T18:53:17Z" + "revision": "9a4be54a53be4c48b44d351d52fb425a5e274be5", + "revisionTime": "2019-05-08T09:33:45Z" }, { "checksumSHA1": "bNf3GDGhZh86bfCIMM5c5AYfo3g=",