diff --git a/bpf/go_grpc.c b/bpf/go_grpc.c index f6e43cbf1..20aff1b9f 100644 --- a/bpf/go_grpc.c +++ b/bpf/go_grpc.c @@ -158,6 +158,8 @@ int uprobe_server_handleStream_return(struct pt_regs *ctx) { trace->type = EVENT_GRPC_REQUEST; trace->start_monotime_ns = invocation->start_monotime_ns; trace->status = *status; + trace->content_length = 0; + trace->method[0] = 0; goroutine_metadata *g_metadata = bpf_map_lookup_elem(&ongoing_goroutines, &goroutine_addr); if (g_metadata) { @@ -374,7 +376,9 @@ int uprobe_ClientConn_Invoke_return(struct pt_regs *ctx) { trace->start_monotime_ns = invocation->start_monotime_ns; trace->go_start_monotime_ns = invocation->start_monotime_ns; trace->end_monotime_ns = bpf_ktime_get_ns(); - + trace->content_length = 0; + trace->method[0] = 0; + // Read arguments from the original set of registers // Get client request value pointers diff --git a/pkg/internal/ebpf/common/ringbuf.go b/pkg/internal/ebpf/common/ringbuf.go index 03709a515..84942bd01 100644 --- a/pkg/internal/ebpf/common/ringbuf.go +++ b/pkg/internal/ebpf/common/ringbuf.go @@ -160,6 +160,10 @@ func (rbf *ringBufForwarder) processAndForward(record ringbuf.Record, spansChan if ignore { return } + if !s.IsValid() { + rbf.logger.Debug("invalid span", "span", s) + return + } rbf.spans[rbf.spansLen] = s // we need to decorate each span with the tracer's service name // if this information is not forwarded from eBPF diff --git a/pkg/internal/ebpf/grpc/bpf_bpfel_arm64.o b/pkg/internal/ebpf/grpc/bpf_bpfel_arm64.o index adfe10746..f3ef3e386 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_bpfel_arm64.o and b/pkg/internal/ebpf/grpc/bpf_bpfel_arm64.o differ diff --git a/pkg/internal/ebpf/grpc/bpf_bpfel_x86.o b/pkg/internal/ebpf/grpc/bpf_bpfel_x86.o index 3f20b05fc..f445c08a4 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_bpfel_x86.o and b/pkg/internal/ebpf/grpc/bpf_bpfel_x86.o differ diff --git a/pkg/internal/ebpf/grpc/bpf_debug_bpfel_arm64.o b/pkg/internal/ebpf/grpc/bpf_debug_bpfel_arm64.o index 74c86ff18..450886021 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_debug_bpfel_arm64.o and b/pkg/internal/ebpf/grpc/bpf_debug_bpfel_arm64.o differ diff --git a/pkg/internal/ebpf/grpc/bpf_debug_bpfel_x86.o b/pkg/internal/ebpf/grpc/bpf_debug_bpfel_x86.o index e67880982..6bc837d6e 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_debug_bpfel_x86.o and b/pkg/internal/ebpf/grpc/bpf_debug_bpfel_x86.o differ diff --git a/pkg/internal/ebpf/grpc/bpf_tp_bpfel_arm64.o b/pkg/internal/ebpf/grpc/bpf_tp_bpfel_arm64.o index 8ef1e8451..e95d96ffb 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_tp_bpfel_arm64.o and b/pkg/internal/ebpf/grpc/bpf_tp_bpfel_arm64.o differ diff --git a/pkg/internal/ebpf/grpc/bpf_tp_bpfel_x86.o b/pkg/internal/ebpf/grpc/bpf_tp_bpfel_x86.o index d91537d76..87ac65181 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_tp_bpfel_x86.o and b/pkg/internal/ebpf/grpc/bpf_tp_bpfel_x86.o differ diff --git a/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_arm64.o b/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_arm64.o index e49a476ee..f52bfb4de 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_arm64.o and b/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_arm64.o differ diff --git a/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_x86.o b/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_x86.o index 048fe42a7..f6d737b59 100644 Binary files a/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_x86.o and b/pkg/internal/ebpf/grpc/bpf_tp_debug_bpfel_x86.o differ diff --git a/pkg/internal/request/span.go b/pkg/internal/request/span.go index aa08ddd12..4d3bdf59d 100644 --- a/pkg/internal/request/span.go +++ b/pkg/internal/request/span.go @@ -2,6 +2,7 @@ package request import ( "time" + "unicode/utf8" "github.com/gavv/monotime" trace2 "go.opentelemetry.io/otel/trace" @@ -94,3 +95,16 @@ func (s *Span) Timings() Timings { End: now.Add(-endDelta), } } + +func (s *Span) IsValid() bool { + if (len(s.Method) > 0 && !utf8.ValidString(s.Method)) || + (len(s.Path) > 0 && !utf8.ValidString(s.Path)) { + return false + } + + if s.End < s.Start { + return false + } + + return true +}