Skip to content

Commit 62e9ae3

Browse files
committed
Add timeout to read /dev/kmsg properly
1 parent 8294984 commit 62e9ae3

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

vmdetect/linux.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@
33
package vmdetect
44

55
import (
6+
"bufio"
67
"bytes"
78
"os"
89
"os/exec"
10+
"time"
911
)
1012

1113
/*
@@ -37,16 +39,27 @@ func checkKernelRingBuffer() bool {
3739
return false
3840
}
3941

40-
buffer := make([]byte, 1024*8)
42+
defer file.Close()
43+
44+
// Set a read timeout because otherwise reading kmsg (which is a character device) will block
45+
if err = file.SetReadDeadline(time.Now().Add(time.Second)); err != nil {
46+
PrintError(err)
47+
return false
48+
}
49+
50+
reader := bufio.NewReader(file)
51+
52+
for {
53+
line, _, err := reader.ReadLine()
54+
if err != nil {
55+
if ! os.IsTimeout(err) {
56+
PrintError(err)
57+
}
4158

42-
// Only reads the first 100 lines (reading character device in Go is annoying)
43-
for i := 0; i < 100; i++ {
44-
if _, err = file.Read(buffer); err != nil {
45-
PrintError(err)
4659
return false
4760
}
4861

49-
if bytes.Contains(buffer, []byte("Hypervisor detected")) {
62+
if bytes.Contains(line, []byte("Hypervisor detected")) {
5063
return true
5164
}
5265
}

0 commit comments

Comments
 (0)