diff --git a/pkg/util/ebpf/bpf_androidgki.go b/pkg/util/ebpf/bpf_androidgki.go index 7bdd6d803..62637775f 100644 --- a/pkg/util/ebpf/bpf_androidgki.go +++ b/pkg/util/ebpf/bpf_androidgki.go @@ -6,6 +6,7 @@ package ebpf import ( "bufio" "compress/gzip" + "fmt" "os" ) @@ -37,14 +38,37 @@ func getAndroidConfig(filename string) (map[string]string, error) { } defer f.Close() - // uncompress - reader, err := gzip.NewReader(f) + // check if the file is gzipped + var magic []byte + var i int + magic = make([]byte, 2) + i, err = f.Read(magic) if err != nil { return KernelConfig, err } - defer reader.Close() + if i != 2 { + return KernelConfig, fmt.Errorf("read %d bytes, expected 2", i) + } + + var s *bufio.Scanner + // big-endian magic number for gzip is 0x1f8b + // little-endian magic number for gzip is 0x8b1f + if (magic[0] == 0x1f && magic[1] == 0x8b) || (magic[0] == 0x8b && magic[1] == 0x1f) { + // gzip file + reader, e := gzip.NewReader(f) + if e != nil { + return KernelConfig, err + } + s = bufio.NewScanner(reader) + } else { + // not gzip file + _, err = f.Seek(0, 0) + if err != nil { + return KernelConfig, err + } + s = bufio.NewScanner(f) + } - s := bufio.NewScanner(reader) if err = parse(s, KernelConfig); err != nil { return KernelConfig, err } diff --git a/pkg/util/ebpf/bpf_linux.go b/pkg/util/ebpf/bpf_linux.go index e55490a37..27a938ede 100644 --- a/pkg/util/ebpf/bpf_linux.go +++ b/pkg/util/ebpf/bpf_linux.go @@ -5,6 +5,7 @@ package ebpf import ( "bufio" + "compress/gzip" "fmt" "os" "strings" @@ -82,7 +83,38 @@ func getLinuxConfig(filename string) (map[string]string, error) { } defer f.Close() - s := bufio.NewScanner(f) + // check if the file is gzipped + var magic []byte + var i int + magic = make([]byte, 2) + i, err = f.Read(magic) + if err != nil { + return KernelConfig, err + } + if i != 2 { + return KernelConfig, fmt.Errorf("read %d bytes, expected 2", i) + } + + var s *bufio.Scanner + + // big-endian magic number for gzip is 0x1f8b + // little-endian magic number for gzip is 0x8b1f + if (magic[0] == 0x1f && magic[1] == 0x8b) || (magic[0] == 0x8b && magic[1] == 0x1f) { + // gzip file + reader, e := gzip.NewReader(f) + if e != nil { + return KernelConfig, err + } + s = bufio.NewScanner(reader) + } else { + // not gzip file + _, err = f.Seek(0, 0) + if err != nil { + return KernelConfig, err + } + s = bufio.NewScanner(f) + } + if err = parse(s, KernelConfig); err != nil { return KernelConfig, err }