Skip to content

Commit

Permalink
btf: make Handle.Spec infallible
Browse files Browse the repository at this point in the history
  • Loading branch information
lmb committed Aug 31, 2021
1 parent c7f4adb commit 0c1c6de
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 21 deletions.
20 changes: 11 additions & 9 deletions internal/btf/btf.go
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,8 @@ func (s *Spec) FindType(name string, typ Type) error {

// Handle is a reference to BTF loaded into the kernel.
type Handle struct {
fd *internal.FD
spec *Spec
fd *internal.FD
}

// NewHandle loads BTF into the kernel.
Expand Down Expand Up @@ -533,7 +534,7 @@ func NewHandle(spec *Spec) (*Handle, error) {
return nil, internal.ErrorWithLog(err, logBuf, logErr)
}

return &Handle{fd}, nil
return &Handle{spec, fd}, nil
}

// NewHandleFromID returns the BTF handle for a given id.
Expand All @@ -547,17 +548,18 @@ func NewHandleFromID(id ID) (*Handle, error) {
return nil, fmt.Errorf("get BTF by id: %w", err)
}

return &Handle{fd}, nil
}

// Spec returns the Spec that defined the BTF loaded into the kernel.
func (h *Handle) Spec() (*Spec, error) {
info, err := newInfoFromFd(h.fd)
info, err := newInfoFromFd(fd)
if err != nil {
_ = fd.Close()
return nil, fmt.Errorf("get BTF spec for handle: %w", err)
}

return info.BTF, nil
return &Handle{info.BTF, fd}, nil
}

// Spec returns the Spec that defined the BTF loaded into the kernel.
func (h *Handle) Spec() *Spec {
return h.spec
}

// Close destroys the handle.
Expand Down
6 changes: 1 addition & 5 deletions link/freplace.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,8 @@ func AttachFreplace(targetProg *ebpf.Program, name string, prog *ebpf.Program) (
return nil, err
}
defer btfHandle.Close()
spec, err := btfHandle.Spec()
if err != nil {
return nil, err
}

if err := spec.FindType(name, &function); err != nil {
if err := btfHandle.Spec().FindType(name, &function); err != nil {
return nil, err
}

Expand Down
8 changes: 2 additions & 6 deletions link/freplace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,7 @@ func TestFreplace(t *testing.T) {
return
}

target, err := ebpf.NewProgramWithOptions(spec.Programs["sched_process_exec"], ebpf.ProgramOptions{
LogLevel: 1,
})
target, err := ebpf.NewProgram(spec.Programs["sched_process_exec"])
testutils.SkipIfNotSupported(t, err)
if err != nil {
t.Fatal("Can't create target program:", err)
Expand All @@ -32,9 +30,7 @@ func TestFreplace(t *testing.T) {

// Test attachment specified at load time
spec.Programs["replacement"].AttachTarget = target
replacement, err := ebpf.NewProgramWithOptions(spec.Programs["replacement"], ebpf.ProgramOptions{
LogLevel: 1,
})
replacement, err := ebpf.NewProgram(spec.Programs["replacement"])
testutils.SkipIfNotSupported(t, err)
if err != nil {
t.Fatal("Can't create replacement program:", err)
Expand Down
3 changes: 2 additions & 1 deletion prog.go
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,8 @@ func newProgramWithOptions(spec *ProgramSpec, opts ProgramOptions, handles *hand
return nil, fmt.Errorf("load target BTF: %w", err)
}
defer btfHandle.Close()
targetBTF, err = btfHandle.Spec()

targetBTF = btfHandle.Spec()
if err != nil {
return nil, fmt.Errorf("load target BTF: %w", err)
}
Expand Down

0 comments on commit 0c1c6de

Please sign in to comment.