From 36b35aad00b4cc11f12ea96ce87c324c7dbf8918 Mon Sep 17 00:00:00 2001 From: Derek Parker Date: Thu, 28 Jul 2022 02:30:08 -0700 Subject: [PATCH] pkg/proc/internal/ebpf: Fix size of ebpf type for fn_addr (#3080) Must have been an issue overlooked in the initial implementation but we should be using a 64-bit wide type to store the function address. --- .../ebpf/bpf/include/function_vals.bpf.h | 2 +- pkg/proc/internal/ebpf/helpers.go | 4 ++-- pkg/proc/internal/ebpf/trace_bpfel_x86.o | Bin 911344 -> 911360 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/proc/internal/ebpf/bpf/include/function_vals.bpf.h b/pkg/proc/internal/ebpf/bpf/include/function_vals.bpf.h index 0df7b9b7..f26c78c8 100644 --- a/pkg/proc/internal/ebpf/bpf/include/function_vals.bpf.h +++ b/pkg/proc/internal/ebpf/bpf/include/function_vals.bpf.h @@ -32,7 +32,7 @@ typedef struct function_parameter_list { long long g_addr_offset; // Offset of the Goroutine struct from the TLS segment. int goroutine_id; - unsigned int fn_addr; + unsigned long long int fn_addr; bool is_ret; unsigned int n_parameters; // number of parameters. diff --git a/pkg/proc/internal/ebpf/helpers.go b/pkg/proc/internal/ebpf/helpers.go index 5e0fc355..669552e0 100644 --- a/pkg/proc/internal/ebpf/helpers.go +++ b/pkg/proc/internal/ebpf/helpers.go @@ -40,7 +40,7 @@ type function_parameter_list_t struct { goid_offset uint32 g_addr_offset uint64 goroutine_id uint32 - fn_addr uint32 + fn_addr uint64 is_ret bool n_parameters uint32 @@ -197,7 +197,7 @@ func parseFunctionParameterList(rawParamBytes []byte) RawUProbeParams { func createFunctionParameterList(entry uint64, goidOffset int64, args []UProbeArgMap, isret bool) function_parameter_list_t { var params function_parameter_list_t params.goid_offset = uint32(goidOffset) - params.fn_addr = uint32(entry) + params.fn_addr = entry params.is_ret = isret params.n_parameters = 0 params.n_ret_parameters = 0 diff --git a/pkg/proc/internal/ebpf/trace_bpfel_x86.o b/pkg/proc/internal/ebpf/trace_bpfel_x86.o index 33ac3f003d861928fbf640f4b25527ee6814d16e..fe887d1531b968eb84f7e53b51be06ae54e84713 100644 GIT binary patch delta 26559 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

!?S! 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 A?EnA( delta 26539 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