From 197a6026598abd2b5c3d903be8693ef1e9e94307 Mon Sep 17 00:00:00 2001 From: rldyourmnd Date: Thu, 27 Aug 2026 20:32:48 +0500 Subject: [PATCH] fix(observability): read kernel identity through uname --- internal/pressureobserve/compliance.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/internal/pressureobserve/compliance.go b/internal/pressureobserve/compliance.go index 9f49cfc..f998e9c 100644 --- a/internal/pressureobserve/compliance.go +++ b/internal/pressureobserve/compliance.go @@ -7,6 +7,7 @@ import ( "regexp" "strconv" "strings" + "syscall" "time" ) @@ -35,6 +36,8 @@ func CollectCompliance(root string, now time.Time) Compliance { kernel, kernelErr := os.ReadFile(filepath.Join(root, "proc", "sys", "kernel", "osrelease")) if kernelErr == nil { result.KernelRelease = strings.TrimSpace(string(kernel)) + } else if root == "/" { + result.KernelRelease, kernelErr = runningKernelRelease() } srso, srsoErr := os.ReadFile(filepath.Join(root, "sys", "devices", "system", "cpu", "vulnerabilities", "spec_rstack_overflow")) if srsoErr == nil { @@ -54,6 +57,24 @@ func CollectCompliance(root string, now time.Time) Compliance { return result } +func runningKernelRelease() (string, error) { + var identity syscall.Utsname + if err := syscall.Uname(&identity); err != nil { + return "", err + } + bytes := make([]byte, 0, len(identity.Release)) + for _, value := range identity.Release { + if value == 0 { + break + } + bytes = append(bytes, byte(value)) + } + if len(bytes) == 0 { + return "", fmt.Errorf("uname returned an empty kernel release") + } + return string(bytes), nil +} + func RenderCompliance(state Compliance) string { var output strings.Builder gauge := func(name, help string, value float64) {