diff --git a/ebpf/session.go b/ebpf/session.go index 375705d249..d816f751d6 100644 --- a/ebpf/session.go +++ b/ebpf/session.go @@ -167,16 +167,19 @@ func (s *session) Start() error { } _, nsIno, err := getPIDNamespace() - if err != nil { - return fmt.Errorf("unable to get pid namespace %w", err) - } - err = spec.RewriteConstants(map[string]interface{}{ - "global_config": pyrobpf.ProfileGlobalConfigT{ - NsPidIno: nsIno, - }, - }) - if err != nil { - return fmt.Errorf("pyrobpf rewrite constants %w", err) + // if the file does not exist, CONFIG_PID_NS is not supported, so we just ignore the error + if !os.IsNotExist(err) { + if err != nil { + return fmt.Errorf("unable to get pid namespace %w", err) + } + err = spec.RewriteConstants(map[string]interface{}{ + "global_config": pyrobpf.ProfileGlobalConfigT{ + NsPidIno: nsIno, + }, + }) + if err != nil { + return fmt.Errorf("pyrobpf rewrite constants %w", err) + } } err = spec.LoadAndAssign(&s.bpf, opts) if err != nil { diff --git a/ebpf/symtab/kallsyms.go b/ebpf/symtab/kallsyms.go index 3601dafa96..722c1acc28 100644 --- a/ebpf/symtab/kallsyms.go +++ b/ebpf/symtab/kallsyms.go @@ -5,6 +5,7 @@ import ( "fmt" "os" "runtime" + "sort" "strconv" ) @@ -94,5 +95,9 @@ func NewKallsymsFromData(kallsyms []byte) (*SymbolTab, error) { if allZeros { return NewSymbolTab(nil), nil } + // kallsyms maybe unsorted when bpf/modules are loaded from userspace after kernel boot. + sort.Slice(syms, func(i, j int) bool { + return syms[i].Start < syms[j].Start + }) return NewSymbolTab(syms), nil } diff --git a/ebpf/symtab/kallsyms_test.go b/ebpf/symtab/kallsyms_test.go index fbb34bb3ae..155f409563 100644 --- a/ebpf/symtab/kallsyms_test.go +++ b/ebpf/symtab/kallsyms_test.go @@ -25,7 +25,9 @@ ffffffff81001750 T memblock_find ffffffff81001780 T __memblock_alloc_base ffffffff810017d0 T memblock_alloc ffffffff81001820 T early_memtest -ffffffff810018a0 T early_memtest_report` +ffffffff810018a0 T early_memtest_report +ffffffff81000800 T unordered_symbol_0 +ffffffff81000100 T unordered_symbol_1` func TestKallsyms(t *testing.T) { kallsyms, err := NewKallsymsFromData([]byte(testdata))