Skip to content

Commit

Permalink
[eBPF] Fix memory leak when reading perf buffer lost data
Browse files Browse the repository at this point in the history
Caused a memory leak problem in the optimization PR(#5669) submitted earlier. When the user-mode program receives data from the perf buffer, the address of the handle is fwd_info instead of tracer. In this case, an error occurs when tracer->lost is read.
  • Loading branch information
yinjiping committed Apr 23, 2024
1 parent 1d9bf4c commit 05288d8
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 6 deletions.
8 changes: 4 additions & 4 deletions agent/src/ebpf/user/profile/perf_profiler.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,16 +292,16 @@ static void set_stack_trace_msg(stack_trace_msg_t * msg,
}
}

static void reader_lost_cb_a(void *t, u64 lost)
static void reader_lost_cb_a(void *cookie, u64 lost)
{
struct bpf_tracer *tracer = (struct bpf_tracer *)t;
struct bpf_tracer *tracer = profiler_tracer;
atomic64_add(&tracer->lost, lost);
perf_buf_lost_a_count++;
}

static void reader_lost_cb_b(void *t, u64 lost)
static void reader_lost_cb_b(void *cookie, u64 lost)
{
struct bpf_tracer *tracer = (struct bpf_tracer *)t;
struct bpf_tracer *tracer = profiler_tracer;
atomic64_add(&tracer->lost, lost);
perf_buf_lost_b_count++;
}
Expand Down
5 changes: 3 additions & 2 deletions agent/src/ebpf/user/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -942,9 +942,10 @@ static void reader_raw_cb(void *cookie, void *raw, int raw_size)
atomic64_add(&q->enqueue_nr, nr);
}

static void reader_lost_cb(void *t, uint64_t lost)
static void reader_lost_cb(void *cookie, uint64_t lost)
{
struct bpf_tracer *tracer = (struct bpf_tracer *)t;
struct reader_forward_info *fwd_info = cookie;
struct bpf_tracer *tracer = fwd_info->tracer;
atomic64_add(&tracer->lost, lost);
}

Expand Down
1 change: 1 addition & 0 deletions agent/src/ebpf/user/tracer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1177,6 +1177,7 @@ static int perf_reader_setup(struct bpf_perf_reader *perf_reader, int thread_nr)

fwd_info->queue_id = spread_id;
fwd_info->cpu_id = i;
fwd_info->tracer = perf_reader->tracer;

ebpf_info("Perf buffer reader cpu(%d) -> queue(%d)\n",
fwd_info->cpu_id, fwd_info->queue_id);
Expand Down
1 change: 1 addition & 0 deletions agent/src/ebpf/user/tracer.h
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,7 @@ struct bpf_tracer_param_array {
struct reader_forward_info {
uint64_t queue_id;
int cpu_id;
struct bpf_tracer *tracer;
};

extern volatile uint32_t *tracers_lock;
Expand Down

0 comments on commit 05288d8

Please sign in to comment.