Skip to content

Commit

Permalink
tools/memleak: Remove deleted trace points (kernels >=6.1)
Browse files Browse the repository at this point in the history
The bellow kernel commit[1] have remove kmem:kmem_cache_alloc_node and
kmem:kmem_cache_alloc_node trace points, which cause memleak to break.
Fix it by checking whether the above trace points exists and than add it
to the BPF program.

Signed-off-by: Shay Drory <[email protected]>
  • Loading branch information
shayshyi authored and yonghong-song committed Dec 14, 2022
1 parent 88b5edb commit 24822c2
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions tools/memleak.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,34 +344,37 @@ def run_command_get_pid(command):
}
"""

bpf_source_kernel = """
bpf_source_kernel_node = """
TRACEPOINT_PROBE(kmem, kmalloc) {
TRACEPOINT_PROBE(kmem, kmalloc_node) {
if (WORKAROUND_MISSING_FREE)
gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
return gen_alloc_exit2((struct pt_regs *)args, (size_t)args->ptr);
}
TRACEPOINT_PROBE(kmem, kmalloc_node) {
TRACEPOINT_PROBE(kmem, kmem_cache_alloc_node) {
if (WORKAROUND_MISSING_FREE)
gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
return gen_alloc_exit2((struct pt_regs *)args, (size_t)args->ptr);
}
"""

TRACEPOINT_PROBE(kmem, kfree) {
return gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
}
bpf_source_kernel = """
TRACEPOINT_PROBE(kmem, kmem_cache_alloc) {
TRACEPOINT_PROBE(kmem, kmalloc) {
if (WORKAROUND_MISSING_FREE)
gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
return gen_alloc_exit2((struct pt_regs *)args, (size_t)args->ptr);
}
TRACEPOINT_PROBE(kmem, kmem_cache_alloc_node) {
TRACEPOINT_PROBE(kmem, kfree) {
return gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
}
TRACEPOINT_PROBE(kmem, kmem_cache_alloc) {
if (WORKAROUND_MISSING_FREE)
gen_free_enter((struct pt_regs *)args, (void *)args->ptr);
gen_alloc_enter((struct pt_regs *)args, args->bytes_alloc);
Expand Down Expand Up @@ -409,6 +412,8 @@ def run_command_get_pid(command):
bpf_source += bpf_source_percpu
else:
bpf_source += bpf_source_kernel
if BPF.tracepoint_exists("kmem", "kmalloc_node"):
bpf_source += bpf_source_kernel_node

if kernel_trace:
bpf_source = bpf_source.replace("WORKAROUND_MISSING_FREE", "1"
Expand Down

0 comments on commit 24822c2

Please sign in to comment.