Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(deps): update module github.com/cilium/ebpf to v0.17.1 #218

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Oct 23, 2023

This PR contains the following updates:

Package Change Age Adoption Passing Confidence
github.com/cilium/ebpf v0.12.0 -> v0.17.1 age adoption passing confidence

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

cilium/ebpf (github.com/cilium/ebpf)

v0.17.1: Hotfix: don't retry endlessly on verifier errors on kernels <6.4

Compare Source

During the prior removal of ProgramOptions.LogSize in v0.16, the tests weren't updated to exercise the retry logic. With the last-minute addition of ProgramOptions.LogSizeStart, a bug was introduced that would cause program loads to retry indefinitely without ever growing the buffer in case of a verifier error on kernels before 6.4. This is now fixed, and the tests were updated to exercise the retry logic.

v0.17.0: Global Variables, Decl Tags, and package pin

Compare Source

Note: the hotfix release 0.17.1 is out. Users are highly encouraged to upgrade.

As we close the door on the year 2024, we're also wrapping up the ebpf-go v0.17 development cycle. This release represents a large body of work and is our largest feature release since BTF.

Users are, as always, highly encouraged to upgrade, and we're looking forward to hearing your feedback on the new Global Variables API. We've been putting this interface trough its paces internally, along with a few eager community members, and we're ready to let the wider community make use of it.

This release also marks the end of our Go 1.21 support; Go 1.22 is required going forward.

Breaking Changes

Before we get to the fun stuff, we need to call out a few breaking changes:

  • Global variables with a static qualifier can no longer be rewritten using CollectionSpec.RewriteConstants()! See the section on global variables under major features below.

  • program: remove LogSize and VerifierError.Truncated by @​lmb in https://github.com/cilium/ebpf/pull/1526

  • prog: add ProgramOptions.LogSizeStart to obtain full log after verifier bug by @​ti-mo in https://github.com/cilium/ebpf/pull/1630

    The ProgramOptions.LogSize field was deprecated and a no-op since 0.16 and has now been removed completely. In its place, a new field was added to obtain full verifier logs when the verifier hits an internal bug. The ProgramOptions.LogSizeStart field controls the starting size of the log buffer. Use this if you have a good understanding of the log size you're expecting, or if you're trying to pull out the full log when the verifier hits an internal bug. The error string now also contains some hints about what happened and how to handle this situation.

  • map: remove MapSpec.Freeze field by @​ti-mo in https://github.com/cilium/ebpf/pull/1558

  • elf_reader: don't use BPF_F_RDONLY_PROG flag to trigger map freezing by @​ti-mo in https://github.com/cilium/ebpf/pull/1568

    The Freeze field was ambiguous from the start, and has been a source of subtle bugs over the years. Automatic map freezing is now done based solely on map name (.(ro)data prefix). If you were manually setting this flag, consider using a conventional map name instead.

  • info: expose ksym info and func info by ProgramInfo by @​Asphaltt in https://github.com/cilium/ebpf/pull/1576

  • info: expose more prog jited info by @​Asphaltt in https://github.com/cilium/ebpf/pull/1598

    Some ext_info types in package btf were redefined to enable pulling raw func and line infos out of Program.Info(). These were all types without methods and all unexported fields, but calling them out regardless in case someone's doing unintended advanced things with BTF.

  • kallsyms: change Modules caching strategy, cache address lookups by @​ti-mo in https://github.com/cilium/ebpf/pull/1590

    Users attaching bpf programs to kernel symbols should see a marked decrease in allocations made in the library during program creation in the general case. Only used entries are now cached, making kallsyms lookups on subsequent program loads free. In the pathological case (new kernel symbols on every load), scanning is repeated, resulting in more CPU time being used instead of holding on to all kallsyms symbols indefinitely. ProgramSpec.KernelModule() was unexported until further notice.

    Also, bpf2go users should now be able to generate Go bindings as unprivileged users once again. Oops!

Major Features

Easy global variables: introducing ebpf.VariableSpec and ebpf.Variable

This has been a frequent ask in the community for years, so we finally bit the bullet and committed to an API to interact with global bpf variables through CollectionSpec.Variables and CollectionSpec.Variables. We've published a small guide over on ebpf-go.dev/concepts/global-variables that details how to use them, so we're not going to reiterate here.

See the documentation on the use of the static qualifier! These are no longer considered global variables, and can't be modified at runtime.

bpf2go now also generates objects to be used with CollectionSpec.Assign and .LoadAndAssign(), and also emits Go type declarations for C types used as bpf C variables. Our test coverage was somewhat lacking for the latter, please drop something on the issue tracker if you're noticing surprising bpf2go output.

Note that it's currently not possible to manually create a VariableSpec and wire it up to a CollectionSpec, so if you were previously relying on e.g. manually assembling a CollectionSpec and using RewriteConstants() in tests, this will no longer work. This may land as the API crystallizes and we settle on a good mechanism to enable this. Please reach out on the Cilium Slack if you'd like to see this happen.

Tags!

As you'll notice, the btf.Struct, btf.Union, btf.Member, btf.Typedef, btf.Func and btf.Var have gained a new field: Tags! Set one or more tags on these objects from bpf C using __attribute__((btf_decl_tag("mytag"))) and
you'll find Tags being populated in Go.

There's also the btf.Func.ParamTags field that holds tags declared on individual function parameters. These are part of the Func since they appear only in the function prototype, not in the parameter type itself, since those can appear in many different types. (it does get confusing!)

Also, an honorable mention to btf.TypeTag, which has now been exported. This allows tagging pointers with an arbitrary string value and is mainly used by the Linux verifier to tag kernel pointers, see the __kptr and __kptr_ref macros in Linux' bpf_helpers.h.

Pins!

We've added a new root-level package pin, which currently features the Load() and WalkDir() functions. Since all LoadPinned* functions in the library now check for the underlying object's type, we've repurposed the machinery to allow loading an opaque pin and returning a Go object of the right type.WalkDir does what it says on the tin, it walks bpffs directories and invokes a callback that received the loaded object. Super convenient!

Minor Features

We've also added a handful of minor features during this release:

Other Changes

Last but not least, there's bugfixes, CI changes and some internal refactoring that happened to eventually make ebpf-go work with ebpf-for-windows. See individual PRs for more context. Stay tuned!

New Contributors

Full Changelog: cilium/ebpf@v0.16.0...v0.17.0

v0.16.0

Compare Source

program: automatic verifier log sizing and ProgramInfo.RecursionMisses()

For the longest time users had to specify ProgramOptions.LogSize to get the
full verifier log for large programs. The library now automatically figures out
the correct buffer size to use and the field is deprecated. It will be removed
in the next version.

ProgramInfo now exposes how often a program didn't execute due to recursion
limits via RecursionMisses.

perf, ringbuf: better control over wakeups, Flush()

There is a trade off between how fast samples are processed and how much CPU is
used. Reading samples as quickly as possible uses more CPU, reading in batches
is cheaper.

It's now possible to configure a "maximum time before a wakeup" by using
Reader.SetDeadline(). This now guarantees that any pending samples are read
at the end of the deadline, even if the Watermark wasn't reached.

It's also possible to manually flush the buffer using Flush().

Bugfixes

  • The various Copy() methods now to a full deep copy and all accept nil values.
  • link: kprobe and uprobe links can now be pinned.

What's Changed

New Contributors

Full Changelog: cilium/ebpf@v0.15.0...v0.16.0

v0.15.0

Compare Source

btf: bpf_core_type_matches is now supported

Programs can now use bpf_core_type_matches() for a stricter compatibility check. See https://github.com/cilium/ebpf/pull/1366.

program, btf: improve debuggability when CO-RE or kfunc fixup fails

The library now tries to return a more informative error when loading a program fails due to a failed CO-RE relocation or a missing kfunc. See https://github.com/cilium/ebpf/pull/1402.

btf: synthesise instruction comments into line info

asm.Comment in an instruction's Source() are now passed to the kernel in the form of BTF line info. See https://github.com/cilium/ebpf/pull/1417.

perf: add WakeupEvents support to Reader

A perf Reader can now be configured to be woken up after a specific number of events / samples have been submitted. See https://github.com/cilium/ebpf/pull/1404.

Bugfixes

  • program: fix loading a program which targets a function in a kernel module when CONFIG_DEBUG_INFO_BTF_MODULES is disabled, see #​1440.

Breaking changes

github.com/cilium/ebpf/btf
  • Copy: the transform argument was removed. Use the new btf.As function instead.
  • Transformer: removed. See above.

What's Changed

New Contributors

Full Changelog: cilium/ebpf@v0.14.0...v0.15.0

v0.14.0

Compare Source

btf: support for CO-RE relocations against kernel modules

It's now possible to use CO-RE relocations against types defined in kernel modules. See https://github.com/cilium/ebpf/pull/1300 by @​brycekahle.

link: netkit support

The link package now allows attaching to netkit interfaces. See https://github.com/cilium/ebpf/pull/1257 by @​hemanthmalla

link: support for iterating links

The new link.Iterator type allows enumerating all BPF links active. See https://github.com/cilium/ebpf/pull/1392 by @​mpastyl.

Bugfixes

Breaking changes

github.com/cilium/ebpf
  • ProgramOptions is not comparable anymore due to KernelModuleTypes.
github.com/cilium/ebpf/btf
  • CORERelocate had its singature change once again.

What's Changed

New Contributors

Full Changelog: cilium/ebpf@v0.13.2...v0.14.0

v0.13.2

Compare Source

What's Changed

Full Changelog: cilium/ebpf@v0.13.1...v0.13.2

v0.13.1

Compare Source

What's Changed

New Contributors

Full Changelog: cilium/ebpf@v0.13.0...v0.13.1

v0.13.0

Compare Source

Faster btf.LoadKernelSpec()

Obtaining the kernel's BTF used to be very slow and is now very fast. See https://github.com/cilium/ebpf/pull/1235 by @​lmb.

TCX

It's now possible to attach TC programs using the new bpf_link based TCX API. See https://github.com/cilium/ebpf/pull/1163 by @​lmb.

UprobeMulti and UretprobeMulti

These are the user-space equivalents to KprobeMulti and Kretprobe multi and allow
attaching to a large number of symbols quickly. See https://github.com/cilium/ebpf/pull/1269 by @​olsajiri.

Netfilter link

There is now support to attach Netfilter programs using bpf_links. See https://github.com/cilium/ebpf/pull/1313 by @​mehrdadrad.

Better ELF section naming compatibility

The list of recognised ELF section names is now automatically generated from
libbpf and should be more accurate and easier to keep up to date. See https://github.com/cilium/ebpf/pull/1209 by @​lmb.

Pre-allocate per-CPU values

It's now possible to cut down on allocations by pre-allocating per-CPU values. See https://github.com/cilium/ebpf/pull/1220 by @​alxn.

Batch operation support for per-CPU values

Batch operations like Map.BatchLookup now support per-CPU values. Note that this
is not particularly optimised, please check whether it is faster based on your
use case. See https://github.com/cilium/ebpf/pull/1192 by @​alxn.

Breaking changes

This release requires at least Go 1.21.

github.com/cilium/ebpf
  • (*Map).BatchLookup, (*Map).BatchLookupAndDelete: now take a MapBatchCursor.
    The previous implementation did not properly account for differences between
    map types and was unsafe.
github.com/cilium/ebpf/btf
  • CORERelocate: now takes an additional argument, which is usually Spec.TypeID.
  • MarshalExtInfos: now takes an additional *Builder instead of allocating it.
    Simply pass NewBuilder().

Both of these are considered somewhat internal API of the library.

github.com/cilium/ebpf/features
  • HaveBoundedLoops: changed from var to func
  • HaveLargeInstructions: changed from var to func
  • HaveV2ISA: changed from var to func
  • HaveV3ISA: changed from var to func
github.com/cilium/ebpf/link
  • QueryOptions.Path: removed. Instead, pass an fd to the directory via QueryOptions.Target.
  • QueryPrograms: now returns QueryResult to be able to extend the API.
  • RawAttachProgramOptions.Replace: removed. Instead, pass ReplaceProgram() to RawAttachProgramOptions.Anchor.

What's Changed


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@github-actions
Copy link

PR Environments:

@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.12.2 fix(deps): update module github.com/cilium/ebpf to v0.12.3 Nov 9, 2023
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 6f2724e to 96bf97f Compare November 9, 2023 17:13
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 96bf97f to 70eacc3 Compare February 15, 2024 19:16
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.12.3 fix(deps): update module github.com/cilium/ebpf to v0.13.0 Feb 15, 2024
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 70eacc3 to 83fccb5 Compare February 22, 2024 13:16
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.13.0 fix(deps): update module github.com/cilium/ebpf to v0.13.1 Feb 22, 2024
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 83fccb5 to 5be1a71 Compare February 22, 2024 22:02
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.13.1 fix(deps): update module github.com/cilium/ebpf to v0.13.2 Feb 22, 2024
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 5be1a71 to 9732470 Compare March 27, 2024 11:26
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.13.2 fix(deps): update module github.com/cilium/ebpf to v0.14.0 Mar 27, 2024
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 9732470 to f5e4b46 Compare March 29, 2024 08:14
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from f5e4b46 to 2fa75ab Compare April 14, 2024 11:26
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 2fa75ab to bf99dc1 Compare April 22, 2024 15:33
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.14.0 fix(deps): update module github.com/cilium/ebpf to v0.15.0 Apr 22, 2024
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from bf99dc1 to 76f9916 Compare May 9, 2024 12:08
Copy link
Contributor Author

renovate bot commented Jun 4, 2024

ℹ Artifact update notice

File name: go.mod

In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):

  • The go directive was updated for compatibility reasons

Details:

Package Change
go 1.19 -> 1.23.4

@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 76f9916 to 8240480 Compare June 4, 2024 12:32
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 8240480 to b0af6de Compare June 16, 2024 07:40
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from b0af6de to e3378d0 Compare July 14, 2024 09:48
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from e3378d0 to 5716567 Compare July 24, 2024 14:01
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.15.0 fix(deps): update module github.com/cilium/ebpf to v0.16.0 Jul 24, 2024
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 5716567 to 1bd2f0e Compare September 11, 2024 16:44
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch 2 times, most recently from fd6612b to d1c06ad Compare November 17, 2024 17:04
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from d1c06ad to 10a8c44 Compare December 18, 2024 17:44
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.16.0 fix(deps): update module github.com/cilium/ebpf to v0.17.0 Dec 18, 2024
@renovate renovate bot force-pushed the renovate/github.com-cilium-ebpf-0.x branch from 10a8c44 to ed3c4a3 Compare December 20, 2024 02:12
@renovate renovate bot changed the title fix(deps): update module github.com/cilium/ebpf to v0.17.0 fix(deps): update module github.com/cilium/ebpf to v0.17.1 Dec 20, 2024
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.

0 participants