diff options
Diffstat (limited to 'pkg/host/host_linux.go')
| -rw-r--r-- | pkg/host/host_linux.go | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/pkg/host/host_linux.go b/pkg/host/host_linux.go index 5c5db793b..3523605c7 100644 --- a/pkg/host/host_linux.go +++ b/pkg/host/host_linux.go @@ -437,9 +437,17 @@ func checkLeakChecking() string { if reason := checkDebugFS(); reason != "" { return reason } - if err := osutil.IsAccessible("/sys/kernel/debug/kmemleak"); err != nil { + fd, err := syscall.Open("/sys/kernel/debug/kmemleak", syscall.O_RDWR, 0) + if err != nil { return "CONFIG_DEBUG_KMEMLEAK is not enabled" } + defer syscall.Close(fd) + if _, err := syscall.Write(fd, []byte("scan=off")); err != nil { + if err == syscall.EBUSY { + return "KMEMLEAK disabled: increase CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE or unset CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF" + } + return fmt.Sprintf("/sys/kernel/debug/kmemleak write failed: %v", err) + } return "" } @@ -449,12 +457,6 @@ func setupLeakChecking() error { return fmt.Errorf("failed to open /sys/kernel/debug/kmemleak: %v", err) } defer syscall.Close(fd) - if _, err := syscall.Write(fd, []byte("scan=off")); err != nil { - // kmemleak returns EBUSY when kmemleak is already turned off. - if err != syscall.EBUSY { - return fmt.Errorf("write(kmemleak, scan=off) failed: %v", err) - } - } // Flush boot leaks. if _, err := syscall.Write(fd, []byte("scan")); err != nil { return fmt.Errorf("write(kmemleak, scan) failed: %v", err) |
