Skip to content

Commit baecee5

Browse files
committed
Remove stack addresses logic
The stack addresses feature is will be removed in the future with the introduction of full stack traces.
1 parent a869f80 commit baecee5

File tree

5 files changed

+3
-87
lines changed

5 files changed

+3
-87
lines changed

pkg/ebpf/c/common/buffer.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -467,14 +467,6 @@ statfunc int events_perf_submit(program_data_t *p, long ret)
467467
// keep task_info updated
468468
bpf_probe_read_kernel(&p->task_info->context, sizeof(task_context_t), &p->event->context.task);
469469

470-
// Get Stack trace
471-
if (p->config->options & OPT_CAPTURE_STACK_TRACES) {
472-
int stack_id = bpf_get_stackid(p->ctx, &stack_addresses, BPF_F_USER_STACK);
473-
if (stack_id >= 0) {
474-
p->event->context.stack_id = stack_id;
475-
}
476-
}
477-
478470
u32 size = sizeof(event_context_t) + sizeof(u8) +
479471
p->event->args_buf.offset; // context + argnum + arg buffer size
480472

pkg/ebpf/c/maps.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -265,18 +265,6 @@ struct sys_exit_init_tail {
265265

266266
typedef struct sys_exit_init_tail sys_exit_init_tail_t;
267267

268-
// store stack traces
269-
#define MAX_STACK_ADDRESSES 1024 // max amount of diff stack trace addrs to buffer
270-
271-
struct stack_addresses {
272-
__uint(type, BPF_MAP_TYPE_STACK_TRACE);
273-
__uint(max_entries, MAX_STACK_ADDRESSES);
274-
__type(key, u32);
275-
__type(value, stack_trace_t); // 1 big byte array of the stack addresses
276-
} stack_addresses SEC(".maps");
277-
278-
typedef struct stack_addresses stack_addresses_t;
279-
280268
// store fds paths by timestamp
281269
struct fd_arg_path_map {
282270
__uint(type, BPF_MAP_TYPE_LRU_HASH);

pkg/ebpf/events_pipeline.go

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@ package ebpf
33
import (
44
"bytes"
55
"context"
6-
"encoding/binary"
76
"slices"
8-
"strconv"
97
"sync"
10-
"unsafe"
118

129
"github.com/aquasecurity/tracee/pkg/bufferdecoder"
13-
"github.com/aquasecurity/tracee/pkg/capabilities"
1410
"github.com/aquasecurity/tracee/pkg/errfmt"
1511
"github.com/aquasecurity/tracee/pkg/events"
1612
"github.com/aquasecurity/tracee/pkg/logger"
@@ -191,12 +187,6 @@ func (t *Tracee) decodeEvents(ctx context.Context, sourceChan chan []byte) (<-ch
191187
continue
192188
}
193189

194-
// Add stack trace if needed
195-
var stackAddresses []uint64
196-
if t.config.Output.StackAddresses {
197-
stackAddresses = t.getStackAddresses(eCtx.StackID)
198-
}
199-
200190
containerInfo := t.containers.GetCgroupInfo(eCtx.CgroupID).Container
201191
containerData := trace.Container{
202192
ID: containerInfo.ContainerId,
@@ -262,7 +252,7 @@ func (t *Tracee) decodeEvents(ctx context.Context, sourceChan chan []byte) (<-ch
262252
evt.ArgsNum = int(argnum)
263253
evt.ReturnValue = int(eCtx.Retval)
264254
evt.Args = args
265-
evt.StackAddresses = stackAddresses
255+
evt.StackAddresses = nil
266256
evt.ContextFlags = flags
267257
evt.Syscall = syscall
268258
evt.Metadata = nil
@@ -641,50 +631,6 @@ func (t *Tracee) sinkEvents(ctx context.Context, in <-chan *trace.Event) <-chan
641631
return errc
642632
}
643633

644-
// getStackAddresses returns the stack addresses for a given StackID
645-
func (t *Tracee) getStackAddresses(stackID uint32) []uint64 {
646-
stackAddresses := make([]uint64, maxStackDepth)
647-
stackFrameSize := (strconv.IntSize / 8)
648-
649-
// Lookup the StackID in the map
650-
// The ID could have aged out of the Map, as it only holds a finite number of
651-
// Stack IDs in it's Map
652-
var stackBytes []byte
653-
err := capabilities.GetInstance().EBPF(func() error {
654-
bytes, e := t.StackAddressesMap.GetValue(unsafe.Pointer(&stackID))
655-
if e != nil {
656-
stackBytes = bytes
657-
}
658-
return e
659-
})
660-
if err != nil {
661-
logger.Debugw("failed to get StackAddress", "error", err)
662-
return stackAddresses[0:0]
663-
}
664-
665-
stackCounter := 0
666-
for i := 0; i < len(stackBytes); i += stackFrameSize {
667-
stackAddresses[stackCounter] = 0
668-
stackAddr := binary.LittleEndian.Uint64(stackBytes[i : i+stackFrameSize])
669-
if stackAddr == 0 {
670-
break
671-
}
672-
stackAddresses[stackCounter] = stackAddr
673-
stackCounter++
674-
}
675-
676-
// Attempt to remove the ID from the map so we don't fill it up
677-
// But if this fails continue on
678-
err = capabilities.GetInstance().EBPF(func() error {
679-
return t.StackAddressesMap.DeleteKey(unsafe.Pointer(&stackID))
680-
})
681-
if err != nil {
682-
logger.Debugw("failed to delete stack address from eBPF map", "error", err)
683-
}
684-
685-
return stackAddresses[0:stackCounter]
686-
}
687-
688634
// WaitForPipeline waits for results from all error channels.
689635
func (t *Tracee) WaitForPipeline(errs ...<-chan error) error {
690636
errc := MergeErrors(errs...)

pkg/ebpf/processor_funcs.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ func (t *Tracee) removeContext(event *trace.Event) error {
463463
event.Container = trace.Container{}
464464
event.Kubernetes = trace.Kubernetes{}
465465
event.Syscall = ""
466-
event.StackAddresses = []uint64{}
466+
event.StackAddresses = nil
467467
event.ContextFlags = trace.ContextFlags{}
468468
event.ThreadEntityId = 0
469469
event.ProcessEntityId = 0

pkg/ebpf/tracee.go

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,7 @@ type Tracee struct {
8484
bpfModule *bpf.Module
8585
probes *probes.ProbeGroup
8686
// BPF Maps
87-
StackAddressesMap *bpf.BPFMap
88-
FDArgPathMap *bpf.BPFMap
87+
FDArgPathMap *bpf.BPFMap
8988
// Perf Buffers
9089
eventsPerfMap *bpf.PerfBuffer // perf buffer for events
9190
fileWrPerfMap *bpf.PerfBuffer // perf buffer for file writes
@@ -483,15 +482,6 @@ func (t *Tracee) Init(ctx gocontext.Context) error {
483482
return errfmt.Errorf("error initializing network capture: %v", err)
484483
}
485484

486-
// Get reference to stack trace addresses map
487-
488-
stackAddressesMap, err := t.bpfModule.GetMap("stack_addresses")
489-
if err != nil {
490-
t.Close()
491-
return errfmt.Errorf("error getting access to 'stack_addresses' eBPF Map %v", err)
492-
}
493-
t.StackAddressesMap = stackAddressesMap
494-
495485
// Get reference to fd arg path map
496486

497487
fdArgPathMap, err := t.bpfModule.GetMap("fd_arg_path_map")

0 commit comments

Comments
 (0)