Skip to content

Revert "Bump go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"#954

Open
jpinsonneau wants to merge 2 commits intonetobserv:mainfrom
jpinsonneau:revert-grpc-version
Open

Revert "Bump go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"#954
jpinsonneau wants to merge 2 commits intonetobserv:mainfrom
jpinsonneau:revert-grpc-version

Conversation

@jpinsonneau
Copy link
Copy Markdown
Member

@jpinsonneau jpinsonneau commented Apr 24, 2026

This reverts commit d4015fd.

Description

Revert gRPC bump to check if this PR caused perf regression.

If this is identified as the root cause, we should also revert netobserv/flowlogs-pipeline#1241

Dependencies

n/a

Checklist

If you are not familiar with our processes or don't know what to answer in the list below, let us know in a comment: the maintainers will take care of that.

  • Will this change affect NetObserv / Network Observability operator? If not, you can ignore the rest of this checklist.
  • Is this PR backed with a JIRA ticket? If so, make sure it is written as a title prefix (in general, PRs affecting the NetObserv/Network Observability product should be backed with a JIRA ticket - especially if they bring user facing changes).
  • Does this PR require product documentation?
    • If so, make sure the JIRA epic is labelled with "documentation" and provides a description relevant for doc writers, such as use cases or scenarios. Any required step to activate or configure the feature should be documented there, such as new CRD knobs.
  • Does this PR require a product release notes entry?
    • If so, fill in "Release Note Text" in the JIRA.
  • Is there anything else the QE team should know before testing? E.g: configuration changes, environment setup, etc.
    • If so, make sure it is described in the JIRA ticket.
  • QE requirements (check 1 from the list):
    • Standard QE validation, with pre-merge tests unless stated otherwise.
    • Regression tests only (e.g. refactoring with no user-facing change).
    • No QE (e.g. trivial change with high reviewer's confidence, or per agreement with the QE team).

To run a perfscale test, comment with: /test ebpf-node-density-heavy-25nodes

Summary by CodeRabbit

  • Bug Fixes

    • Fixed HTTP/2 transport error handling and header validation issues.
    • Improved attribute type validation in telemetry processing.
    • Enhanced hostname verification for TLS connections across all certificates.
  • Chores

    • Downgraded OpenTelemetry SDK from v1.43.0 to v1.42.0 for stability.
    • Updated gRPC from v1.80.0 to v1.79.3.
    • Downgraded various runtime dependencies for compatibility.
  • Revert

    • Removed experimental features and unused configuration options.

@openshift-ci
Copy link
Copy Markdown

openshift-ci Bot commented Apr 24, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign mffiedler for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Apr 24, 2026

📝 Walkthrough

Walkthrough

This PR downgrades OpenTelemetry modules from v1.43.0 to v1.42.0, gRPC from v1.80.0 to v1.79.3, and removes several experimental features (per-series start timestamps, cardinality limit selection APIs, random trace flags). Multiple internal implementations are refactored including attribute value handling, atomic operations, and buffer pooling.

Changes

Cohort / File(s) Summary
Dependency Versions
go.mod, vendor/modules.txt, vendor/go.opentelemetry.io/otel/versions.yaml
Downgrade OpenTelemetry stable from v1.43.0 to v1.42.0, metrics from v0.65.0 to v0.64.0, logs from v0.19.0 to v0.18.0; downgrade gRPC v1.80.0 to v1.79.3; update golang.org/x and google.golang.org/genproto module pins.
OpenTelemetry Configuration & Release
vendor/go.opentelemetry.io/otel/.golangci.yml, vendor/go.opentelemetry.io/otel/CHANGELOG.md, vendor/go.opentelemetry.io/otel/Makefile, vendor/go.opentelemetry.io/otel/RELEASING.md
Remove noctx linter and depguard semconv rules; delete v1.43.0 changelog entry; simplify semantic convention release documentation; remove file-based Makefile target prerequisites.
OpenTelemetry Attribute Value Handling
vendor/go.opentelemetry.io/otel/attribute/encoder.go, vendor/go.opentelemetry.io/otel/attribute/hash.go, vendor/go.opentelemetry.io/otel/attribute/value.go, vendor/go.opentelemetry.io/otel/attribute/type_string.go, vendor/go.opentelemetry.io/otel/attribute/kv.go
Rename EMPTY constant to INVALID; change encoder ID counter to plain uint64 with atomic.AddUint64; update hash logic for INVALID type; refactor IntSliceValue and Value.AsInterface handling.
OpenTelemetry Attribute Internal Refactoring
vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go
Replace generic SliceValue[T]/AsSlice[T] with explicit non-generic functions (BoolSliceValue, Int64SliceValue, Float64SliceValue, StringSliceValue and their As* counterparts).
OpenTelemetry SDK Metric Aggregation & Per-Series Start Timestamps
vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go, vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/histogram.go, vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/lastvalue.go, vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/sum.go
Remove per-series start timestamp tracking and PerSeriesStartTimestamps feature flag; change exponential histogram atomic fields to plain fields with direct operations; consolidate DataPoint.StartTime to always use aggregator's s.start.
OpenTelemetry SDK Metric Cardinality Limits Removal
vendor/go.opentelemetry.io/otel/sdk/metric/reader.go, vendor/go.opentelemetry.io/otel/sdk/metric/manual_reader.go, vendor/go.opentelemetry.io/otel/sdk/metric/periodic_reader.go, vendor/go.opentelemetry.io/otel/sdk/metric/pipeline.go
Remove cardinalityLimit method from Reader interface; eliminate CardinalityLimitSelector type and WithCardinalityLimitSelector option; simplify pipeline aggregation limit to use single pipeline-wide limit.
OpenTelemetry SDK Configuration & Versioning
vendor/go.opentelemetry.io/otel/sdk/metric/config.go, vendor/go.opentelemetry.io/otel/sdk/metric/version.go, vendor/go.opentelemetry.io/otel/sdk/version.go
Update version strings from 1.43.0 to 1.42.0; remove cardinality limit cross-kind override documentation.
OpenTelemetry Resource Configuration
vendor/go.opentelemetry.io/otel/sdk/resource/config.go, vendor/go.opentelemetry.io/otel/sdk/resource/resource.go, vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go
Remove WithService() option; remove DefaultWithContext/EnvironmentWithContext APIs and always use context.Background(); update BSD host ID lookup to omit /bin/ path prefix.
OpenTelemetry Trace SDK
vendor/go.opentelemetry.io/otel/sdk/trace/batch_span_processor.go, vendor/go.opentelemetry.io/otel/sdk/trace/provider.go, vendor/go.opentelemetry.io/otel/sdk/trace/sampling.go, vendor/go.opentelemetry.io/otel/sdk/trace/internal/observ/tracer.go
Change drop counter from atomic.Uint32 to plain uint32 with atomic.LoadUint32/atomic.AddUint32; refactor error handling in Shutdown; simplify sampler predetermination logic; remove instrument enablement checks before metric operations.
OpenTelemetry Trace & Public API
vendor/go.opentelemetry.io/otel/trace/trace.go, vendor/go.opentelemetry.io/otel/version.go
Remove IsRandom()/WithRandom(random bool) methods from TraceFlags and SpanContext.IsRandom(); update version from 1.43.0 to 1.42.0.
OpenTelemetry OTLP Exporters
vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/client.go, vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/doc.go, vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal/transform/attribute.go, vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/version.go
Remove configurable response body size limit and http.MaxBytesReader; remove initial background context; drop OTEL_EXPORTER_OTLP_INSECURE documentation; update version to 1.42.0; handle EMPTY attribute values as INVALID.
OpenTelemetry SDK Internal Features
vendor/go.opentelemetry.io/otel/sdk/internal/x/features.go, vendor/go.opentelemetry.io/otel/dependencies.Dockerfile
Remove PerSeriesStartTimestamps experimental feature flag; update weaver base image from v0.22.1 to v0.21.2.
gRPC & google.golang.org Internal Changes
vendor/google.golang.org/grpc/internal/envconfig/envconfig.go, vendor/google.golang.org/grpc/internal/mem/buffer_pool.go, vendor/google.golang.org/grpc/internal/transport/defaults.go, vendor/google.golang.org/grpc/internal/transport/http2_client.go, vendor/google.golang.org/grpc/internal/transport/http2_server.go
Remove CaseSensitiveBalancerRegistries and two other envconfig feature flags; delete entire internal buffer pool implementation; remove upcomingDefaultHeaderListSize constant and related warning logs.
gRPC Public APIs & Configuration
vendor/google.golang.org/grpc/balancer/balancer.go, vendor/google.golang.org/grpc/version.go, vendor/google.golang.org/grpc/server.go, vendor/google.golang.org/grpc/dialoptions.go
Remove CaseSensitiveBalancerRegistries feature flag logic and always lowercase balancer names; update version to 1.79.3; remove sharedWriteBuffer from defaultServerOptions; remove SharedWriteBuffer from defaultDialOptions.
gRPC Balancer Implementations
vendor/google.golang.org/grpc/balancer/base/balancer.go, vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go, vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go
Update iterations from All() to Keys()/Values() to support All() removal.
gRPC Utilities & Buffer Pool
vendor/google.golang.org/grpc/mem/buffer_pool.go, vendor/google.golang.org/grpc/rpc_util.go, vendor/google.golang.org/grpc/picker_wrapper.go, vendor/google.golang.org/grpc/resolver/map.go
Move buffer pooling from internal/mem to public mem package with local implementations (remove NewBinaryTieredBufferPool); remove All() iterator methods; simplify decompress reader handling; unconditional logging for unprepared transport.
gRPC Credentials & HTTP/2
vendor/google.golang.org/grpc/credentials/tls.go, vendor/golang.org/x/net/http2/http2.go, vendor/golang.org/x/net/http2/server.go, vendor/golang.org/x/net/http2/transport.go, vendor/golang.org/x/net/http2/writesched.go, vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go, vendor/golang.org/x/net/http2/writesched_random.go
Update hostname verification to check all peer certificates; add ErrCodeProtocol retryability; add errorReader utility; remove deprecated write scheduler deprecation notices; simplify HTTP/2 package documentation.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Description check ❓ Inconclusive The PR description is incomplete relative to the template. It lacks key information about configuration requirements, unit tests, and explicit QE validation selection. Complete the checklist by: (1) clarifying if configuration/environment setup is needed for testing, (2) confirming unit test coverage, and (3) explicitly selecting one QE requirement option.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: reverting a previous gRPC/OpenTelemetry dependency bump to diagnose a performance regression.
Docstring Coverage ✅ Passed Docstring coverage is 82.61% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@jpinsonneau
Copy link
Copy Markdown
Member Author

/test ebpf-node-density-heavy-25nodes

@jpinsonneau
Copy link
Copy Markdown
Member Author

/test ebpf-node-density-heavy-25nodes

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go (1)

1-493: ⚠️ Potential issue | 🔴 Critical

Vendor tree inconsistency — blocking issue for merge.

go.mod correctly pins otel modules to v1.42.0, but vendor/modules.txt still declares v1.43.0 for:

  • go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0
  • go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0

Run go mod tidy && go mod vendor to regenerate the vendor tree. If the issue persists, investigate whether those two modules are actually needed or if they should also be downgraded to v1.42.0.

Also note: PR title says "Revert gRPC bump" but also downgrades all otel modules (v1.43.0 → v1.42.0) and removes experimental features. If the regression hypothesis is specific to gRPC v1.80.0 → v1.79.3, revert only gRPC to isolate the variable — otherwise you won't know which dependency caused the improvement.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go`
around lines 1 - 493, Vendor tree lists otel modules at v1.43.0 while go.mod
pins v1.42.0 causing a blocker; run go mod tidy && go mod vendor to regenerate
the vendor directory, then verify vendor/modules.txt reflects v1.42.0 for
go.opentelemetry.io/otel/exporters/otlp/otlptrace and otlptracehttp (or
remove/downgrade those two modules if not needed). If this PR intends to only
"Revert gRPC bump" rather than downgrade otel, restore otel modules to v1.42.0
in go.mod and only change the gRPC dependency so the regression can be isolated
(investigate changes to grpc version history instead of blanket downgrades).
vendor/modules.txt (1)

707-768: ⚠️ Potential issue | 🟠 Major

Run go mod vendor to resolve inconsistent vendoring.

The vendor directory is out of sync with go.mod: golang.org/x/sys has mismatched versions (v0.42.0 in go.mod vs v0.43.0 in vendor/modules.txt), and OpenTelemetry exporters similarly conflict (v1.42.0 vs v1.43.0). The genproto versions are correct indirect dependencies from gRPC v1.79.3, but the broader vendoring inconsistency must be resolved.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@vendor/modules.txt` around lines 707 - 768, vendor/modules.txt is out of sync
with go.mod (mismatched golang.org/x/sys and OpenTelemetry exporter versions);
update go.mod to the desired module versions (e.g., align golang.org/x/sys to
the version you intend) then run go mod tidy and re-run vendoring to regenerate
vendor/modules.txt so it matches go.mod, verify that google.golang.org/grpc
v1.79.3 and its genproto indirects remain unchanged, and commit the updated
vendor/modules.txt; reference files/symbols: vendor/modules.txt, go.mod,
golang.org/x/sys, OpenTelemetry exporter modules, google.golang.org/grpc.
🧹 Nitpick comments (1)
vendor/google.golang.org/grpc/version.go (1)

22-22: Investigation-only revert — make it easy to undo.

Since the stated goal is to check whether the gRPC bump caused a perf regression, please:

  • Fill in the PR checklist (or link the perf reproduction / benchmark numbers) before merging, so the revert is grounded in evidence rather than a hunch.
  • Open a tracking issue to re-apply the bump once the regression is root-caused, so this doesn't silently become permanent technical debt (gRPC 1.80+ contains further fixes beyond 1.79.3).
  • Coordinate with netobserv-operator and flowlogs-pipeline, which also vendor otlpmetrichttp/grpc; if the perf issue manifests there, reverting only this repo may not suffice.

Note: v1.79.3 is the patched release for CVE-2026-33186, so this downgrade does not reintroduce that advisory.

Want me to draft the tracking issue body?

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@vendor/google.golang.org/grpc/version.go` at line 22, The revert to gRPC
Version constant (Version in vendor/google.golang.org/grpc/version.go) must be
accompanied by evidence and tracking: update the PR description/checklist to
include the perf-reproduction steps and benchmark numbers (or a link to them),
create and link a tracking issue that documents the regression investigation and
the plan to re-apply the bump once root cause is fixed, and add coordination
notes referencing the sibling repos (netobserv-operator and flowlogs-pipeline)
that also vendor otlpmetrichttp/grpc so teams can verify if the issue surfaces
there; ensure the commit/PR message references the new tracking issue and
includes the perf test links for easy undo and auditing.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@go.mod`:
- Around line 124-133: The go.mod currently pins go.opentelemetry.io/otel/sdk at
v1.42.0 which is vulnerable (CVE-2026-39883); update the otel/sdk dependency to
v1.43.0 (or later) in go.mod, ensure related otel modules (e.g.,
go.opentelemetry.io/otel, go.opentelemetry.io/otel/trace,
go.opentelemetry.io/otel/metric, and any otlp exporters) are version-aligned as
needed, run go mod tidy to reconcile changes and then run tests; if you
intentionally need v1.42.0 for a narrow gRPC regression test, restrict the
downgrade to only the minimal package required and add a comment/PR note
documenting the accepted risk and planned mitigation.

In
`@vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/client.go`:
- Around line 177-178: The response body is being fully copied into respData via
io.Copy(&respData, resp.Body) (and in the error path) with no size bound, which
can OOM; change these reads to wrap resp.Body with io.LimitReader (e.g.
io.LimitReader(resp.Body, maxRespBodyBytes)) before copying so you cap
buffering, define a reasonable constant like maxRespBodyBytes, and handle the
case where the limit is hit (return a clear error or truncate with a logged
warning) in the functions that perform the copy (the code that populates
respData from resp.Body and the analogous error-path copy).

In `@vendor/google.golang.org/grpc/picker_wrapper.go`:
- Line 195: The unconditional logger.Infof inside blockingPicker (the "the
picked transport is not ready, loop back to repick" message) is on the hot
repick path and should be either removed or guarded by a log-level check to
avoid high-volume info logging; locate the Infof invocation in blockingPicker in
picker_wrapper.go and replace it with a conditional log that only emits at a
verbose/debug level (e.g., use the logger's verbosity check or a Warning/Error
level) or drop it entirely so it doesn't execute on every repick iteration.

---

Outside diff comments:
In
`@vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go`:
- Around line 1-493: Vendor tree lists otel modules at v1.43.0 while go.mod pins
v1.42.0 causing a blocker; run go mod tidy && go mod vendor to regenerate the
vendor directory, then verify vendor/modules.txt reflects v1.42.0 for
go.opentelemetry.io/otel/exporters/otlp/otlptrace and otlptracehttp (or
remove/downgrade those two modules if not needed). If this PR intends to only
"Revert gRPC bump" rather than downgrade otel, restore otel modules to v1.42.0
in go.mod and only change the gRPC dependency so the regression can be isolated
(investigate changes to grpc version history instead of blanket downgrades).

In `@vendor/modules.txt`:
- Around line 707-768: vendor/modules.txt is out of sync with go.mod (mismatched
golang.org/x/sys and OpenTelemetry exporter versions); update go.mod to the
desired module versions (e.g., align golang.org/x/sys to the version you intend)
then run go mod tidy and re-run vendoring to regenerate vendor/modules.txt so it
matches go.mod, verify that google.golang.org/grpc v1.79.3 and its genproto
indirects remain unchanged, and commit the updated vendor/modules.txt; reference
files/symbols: vendor/modules.txt, go.mod, golang.org/x/sys, OpenTelemetry
exporter modules, google.golang.org/grpc.

---

Nitpick comments:
In `@vendor/google.golang.org/grpc/version.go`:
- Line 22: The revert to gRPC Version constant (Version in
vendor/google.golang.org/grpc/version.go) must be accompanied by evidence and
tracking: update the PR description/checklist to include the perf-reproduction
steps and benchmark numbers (or a link to them), create and link a tracking
issue that documents the regression investigation and the plan to re-apply the
bump once root cause is fixed, and add coordination notes referencing the
sibling repos (netobserv-operator and flowlogs-pipeline) that also vendor
otlpmetrichttp/grpc so teams can verify if the issue surfaces there; ensure the
commit/PR message references the new tracking issue and includes the perf test
links for easy undo and auditing.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: cab3d80c-587b-4958-aeb4-c86a026b0bbf

📥 Commits

Reviewing files that changed from the base of the PR and between 6dd9ced and 0d89b7f.

⛔ Files ignored due to path filters (13)
  • go.sum is excluded by !**/*.sum
  • vendor/go.opentelemetry.io/proto/otlp/common/v1/common.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/go.opentelemetry.io/proto/otlp/logs/v1/logs.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/grpc/health/grpc_health_v1/health_grpc.pb.go is excluded by !**/*.pb.go, !**/*.pb.go, !**/*_grpc.pb.go
  • vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/grpc/reflection/grpc_reflection_v1/reflection_grpc.pb.go is excluded by !**/*.pb.go, !**/*.pb.go, !**/*_grpc.pb.go
  • vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection.pb.go is excluded by !**/*.pb.go, !**/*.pb.go
  • vendor/google.golang.org/grpc/reflection/grpc_reflection_v1alpha/reflection_grpc.pb.go is excluded by !**/*.pb.go, !**/*.pb.go, !**/*_grpc.pb.go
📒 Files selected for processing (63)
  • go.mod
  • vendor/go.opentelemetry.io/otel/.golangci.yml
  • vendor/go.opentelemetry.io/otel/CHANGELOG.md
  • vendor/go.opentelemetry.io/otel/Makefile
  • vendor/go.opentelemetry.io/otel/RELEASING.md
  • vendor/go.opentelemetry.io/otel/attribute/encoder.go
  • vendor/go.opentelemetry.io/otel/attribute/hash.go
  • vendor/go.opentelemetry.io/otel/attribute/internal/attribute.go
  • vendor/go.opentelemetry.io/otel/attribute/kv.go
  • vendor/go.opentelemetry.io/otel/attribute/type_string.go
  • vendor/go.opentelemetry.io/otel/attribute/value.go
  • vendor/go.opentelemetry.io/otel/dependencies.Dockerfile
  • vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/client.go
  • vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/doc.go
  • vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal/transform/attribute.go
  • vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/version.go
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/features.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/config.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/exponential_histogram.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/histogram.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/lastvalue.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/internal/aggregate/sum.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/manual_reader.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/periodic_reader.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/pipeline.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/reader.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/version.go
  • vendor/go.opentelemetry.io/otel/sdk/resource/config.go
  • vendor/go.opentelemetry.io/otel/sdk/resource/host_id.go
  • vendor/go.opentelemetry.io/otel/sdk/resource/resource.go
  • vendor/go.opentelemetry.io/otel/sdk/trace/batch_span_processor.go
  • vendor/go.opentelemetry.io/otel/sdk/trace/internal/observ/tracer.go
  • vendor/go.opentelemetry.io/otel/sdk/trace/provider.go
  • vendor/go.opentelemetry.io/otel/sdk/trace/sampling.go
  • vendor/go.opentelemetry.io/otel/sdk/version.go
  • vendor/go.opentelemetry.io/otel/trace/trace.go
  • vendor/go.opentelemetry.io/otel/version.go
  • vendor/go.opentelemetry.io/otel/versions.yaml
  • vendor/golang.org/x/net/http2/http2.go
  • vendor/golang.org/x/net/http2/server.go
  • vendor/golang.org/x/net/http2/transport.go
  • vendor/golang.org/x/net/http2/writesched.go
  • vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go
  • vendor/golang.org/x/net/http2/writesched_random.go
  • vendor/google.golang.org/grpc/attributes/attributes.go
  • vendor/google.golang.org/grpc/balancer/balancer.go
  • vendor/google.golang.org/grpc/balancer/base/balancer.go
  • vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go
  • vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
  • vendor/google.golang.org/grpc/credentials/tls.go
  • vendor/google.golang.org/grpc/dialoptions.go
  • vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
  • vendor/google.golang.org/grpc/internal/mem/buffer_pool.go
  • vendor/google.golang.org/grpc/internal/transport/defaults.go
  • vendor/google.golang.org/grpc/internal/transport/http2_client.go
  • vendor/google.golang.org/grpc/internal/transport/http2_server.go
  • vendor/google.golang.org/grpc/mem/buffer_pool.go
  • vendor/google.golang.org/grpc/picker_wrapper.go
  • vendor/google.golang.org/grpc/resolver/map.go
  • vendor/google.golang.org/grpc/rpc_util.go
  • vendor/google.golang.org/grpc/server.go
  • vendor/google.golang.org/grpc/version.go
  • vendor/modules.txt
💤 Files with no reviewable changes (17)
  • vendor/golang.org/x/net/http2/writesched_random.go
  • vendor/google.golang.org/grpc/internal/transport/defaults.go
  • vendor/google.golang.org/grpc/server.go
  • vendor/go.opentelemetry.io/otel/sdk/internal/x/features.go
  • vendor/go.opentelemetry.io/otel/sdk/resource/config.go
  • vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal/transform/attribute.go
  • vendor/golang.org/x/net/http2/server.go
  • vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go
  • vendor/go.opentelemetry.io/otel/.golangci.yml
  • vendor/go.opentelemetry.io/otel/Makefile
  • vendor/golang.org/x/net/http2/writesched.go
  • vendor/go.opentelemetry.io/otel/trace/trace.go
  • vendor/go.opentelemetry.io/otel/sdk/metric/reader.go
  • vendor/go.opentelemetry.io/otel/sdk/trace/internal/observ/tracer.go
  • vendor/google.golang.org/grpc/resolver/map.go
  • vendor/go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/doc.go
  • vendor/google.golang.org/grpc/internal/mem/buffer_pool.go

Comment thread go.mod
Comment on lines +124 to +133
go.opentelemetry.io/otel v1.42.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.43.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.43.0 // indirect
go.opentelemetry.io/otel/metric v1.43.0 // indirect
go.opentelemetry.io/otel/sdk v1.43.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect
go.opentelemetry.io/otel/trace v1.43.0 // indirect
go.opentelemetry.io/proto/otlp v1.10.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0 // indirect
go.opentelemetry.io/otel/metric v1.42.0 // indirect
go.opentelemetry.io/otel/sdk v1.42.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect
go.opentelemetry.io/otel/trace v1.42.0 // indirect
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check go.mod for otel/sdk versions and the broader context
cat -n go.mod | head -150 | tail -50

Repository: netobserv/netobserv-ebpf-agent

Length of output: 3043


🌐 Web query:

GHSA-hfvc-g4fc-pqhx OpenTelemetry security advisory

💡 Result:

GHSA-hfvc-g4fc-pqhx is a HIGH severity security advisory (CVE-2026-39883) affecting go.opentelemetry.io/otel/sdk versions from 1.15.0 to 1.42.0. Summary: Incomplete fix for previous vulnerability GHSA-9h8m-3fm2-qjrq (CVE-2026-24051). The prior fix used an absolute path for the Darwin 'ioreg' command but left the BSD 'kenv' command using a bare name, enabling PATH hijacking on BSD (DragonFly BSD, FreeBSD, NetBSD, OpenBSD) and Solaris platforms. Root cause: In sdk/resource/host_id.go, execCommand("kenv", ...) searches $PATH if /etc/hostid does not exist (common on FreeBSD). Attack: Local attacker places malicious 'kenv' binary in $PATH earlier than system path. When OpenTelemetry resource detection runs at startup, it executes the malicious binary, leading to arbitrary code execution in the application's context. CVSS:4.0/AV:L/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N (HIGH) Fix: Upgrade to v1.43.0, which uses absolute path "/bin/kenv". Published: 2026-04-08. References: Official advisory at GHSA-hfvc-g4fc-pqhx, NVD https://nvd.nist.gov/vuln/detail/CVE-2026-39883, GitHub advisory database.

Citations:


🌐 Web query:

CVE-2026-39883 OpenTelemetry otel/sdk

💡 Result:

CVE-2026-39883 (OpenTelemetry-Go / otel/sdk) is an incomplete fix for a prior macOS PATH-hijacking issue that leaves the BSD/Solaris path hijacking for the “kenv” command still possible. What’s vulnerable - Product/component: OpenTelemetry-Go (Go implementation of OpenTelemetry), specifically the SDK resource detection code. - Affected versions: from 1.15.0 up to (excluding) 1.43.0. - Weakness class: Untrusted Search Path (CWE-426). - Mechanism: the BSD kenv command is executed without using an absolute path, so an attacker who can influence $PATH (e.g., place a malicious “kenv” earlier in PATH) can get the attacker’s binary executed when host ID detection runs on BSD or Solaris systems where /etc/hostid is absent. Impact - Local attacker (requires local access / ability to manipulate PATH in the running context) can potentially execute attacker-controlled code, compromising the running process. Fix / mitigation - Upgrade OpenTelemetry-Go / otel/sdk to 1.43.0 or later. Suggested practical checks - Find any deployed services using go.opentelemetry.io/otel/sdk (or github.com/open-telemetry/opentelemetry-go/sdk/resource) with versions < 1.43.0. - If upgrading immediately isn’t possible, ensure PATH can’t be influenced by lower-privileged attackers and avoid running the vulnerable host-ID detection in environments where PATH injection is feasible.

Citations:


This downgrade reintroduces a known otel/sdk vulnerability.

go.opentelemetry.io/otel/sdk v1.42.0 is affected by GHSA-hfvc-g4fc-pqhx (CVE-2026-39883), a BSD/Solaris PATH-hijack issue where the unabsolute kenv command path allows local code execution. Upgrade to v1.43.0 fixes it. If the goal is only to test the gRPC regression, keep the downgrade narrower or document why accepting this vulnerability is acceptable.

🧰 Tools
🪛 OSV Scanner (2.3.5)

[HIGH] 131-131: go.opentelemetry.io/otel/sdk 1.42.0: opentelemetry-go: BSD kenv command not using absolute path enables PATH hijacking

(GHSA-hfvc-g4fc-pqhx)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@go.mod` around lines 124 - 133, The go.mod currently pins
go.opentelemetry.io/otel/sdk at v1.42.0 which is vulnerable (CVE-2026-39883);
update the otel/sdk dependency to v1.43.0 (or later) in go.mod, ensure related
otel modules (e.g., go.opentelemetry.io/otel, go.opentelemetry.io/otel/trace,
go.opentelemetry.io/otel/metric, and any otlp exporters) are version-aligned as
needed, run go mod tidy to reconcile changes and then run tests; if you
intentionally need v1.42.0 for a narrow gRPC regression test, restrict the
downgrade to only the minimal package required and add a comment/PR note
documenting the accepted risk and planned mitigation.

Comment thread vendor/google.golang.org/grpc/picker_wrapper.go
@openshift-ci
Copy link
Copy Markdown

openshift-ci Bot commented Apr 24, 2026

@jpinsonneau: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/ebpf-node-density-heavy-25nodes c7a843d link true /test ebpf-node-density-heavy-25nodes
ci/prow/qe-e2e-tests c7a843d link false /test qe-e2e-tests

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant