Commit graph

2,534 commits

Message SHA1
bpfloader: Allow overriding kernel version
This allows devices to pretend that they are on a different kernel version, in order to support different bpf features when kernel backports are in place.

Test: set ro.bpf.kver_override=5.10.239 in product.prop on sm8250 device
      based on 4.19 kernel with 5.10 bpf backported, skfilter_oom_kill
      loaded: bpftool prog | grep skfilter_oom_k

Change-Id: Ic32a279c562679408728483d5a5ed79a70af217d

kyasu   authored and   Thomas Turner   commited 2026-01-24 09:11:09 +00:00
6c5f4f8652
Snap for 14071582 from a80b309391 to 25Q4-release
Change-Id: I8cd9eb5adc3aa1d55e658ad468299cc3f6b217e0

Android Build Coastguard Worker   commited 2025-09-09 16:14:10 -07:00
0021d8d13e
bpfloader: Add .kconfig to optionally pinned maps
Programs that use __kcfg values will have .kconfig sections that may not
have a pinned map descriptor. Allow them to be loaded.

Bug: 419635765
Test: manual. loaded program with .kconfig section.
Change-Id: Ifbfbfd443e034da21cbf8e7d456e7ad23dcd34b5
Signed-off-by: Tiffany Yang <ynaffit@google.com>

Tiffany Yang   commited 2025-09-08 19:17:17 -07:00
a80b309391
Snap for 13945711 from 809c5f5636 to 25Q4-release
Change-Id: I5ace3e1d6014c26daa6ef109e33abdbb194762fd

Android Build Coastguard Worker   commited 2025-08-16 14:02:32 -07:00
72b69677a8
Snap for 13943966 from 2ba22f25e4 to 25Q4-release
Change-Id: If511c80ca6c26734942695b6faf9bf64af4ea66c

Android Build Coastguard Worker   commited 2025-08-15 18:05:59 -07:00
37e8ea4d69
bpfloader: Add support for auto-attaching programs
Introduce an 'auto_attach' flag to the ProgDesc struct.

When this flag is true, bpfloader attaches the BPF program and pins
the resulting link. This makes the attachment persist across framework
reboots, only being removed when the device itself reboots.

This simplifies client-side logic, as clients no longer need to
manage attachments or handle missed events after a restart. They can
assume the program is always attached and simply read from the maps.

This is particularly useful for collecting statistics that would
otherwise be corrupted by framework restarts and for capturing events
that occur during early boot, before client processes are running.

Bug: 419635765
Bug: 438637519
Test: manual, load and auto attach ag/35064705
Change-Id: Iffcde8972778b9152f4732e65c221eb72523ea34
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>

Kalesh Singh   commited 2025-08-15 14:34:11 -07:00
809c5f5636
bpfloader: Sanitize BPF prog and map pin paths
Replace periods with underscores in prog/map pin paths to align with
libbpf's sanitize_pin_path() behavior. The BPF filesystem (bpffs)
disallows periods in filenames, and this change prevents pinning
errors for maps with names containing them, such as .rodata sections.

Bug: 419635765
Bug: 438637519
Test: manual, load maps names containing . from ag/35064705
Change-Id: I55dd4caf38c3ccc39bccd6ea670b647c330d6793
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>

Kalesh Singh   commited 2025-08-15 13:29:11 -07:00
d49152733c
Snap for 13937020 from a23e772683 to 25Q4-release
Change-Id: I81548546ba5271af3c27e1dd98a5059797f029e4

Android Build Coastguard Worker   commited 2025-08-14 16:12:26 -07:00
6176144057
BPFloader: Skip global map sections
Certain BPF progams have sections .rodata.str1.1 or <name>.data for
global data. These sections are processed/loaded implicitly by libbpf,
but it may be useful for the developer to pin them. Change the logic so
if a descriptor for these sections is found, pin them. If not, ignore
them and don't cause a failure.

Bug: 401458418
Test: Manual: program with bpf_printk and global data loads.
Change-Id: Ib3be55cf903e24c6692730b57b0ce90c9a9e0795
Signed-off-by: Neill Kapron <nkapron@google.com>

Neill Kapron   commited 2025-08-13 22:40:12 +00:00
2ba22f25e4
Improve error messages for missing BPF descriptors.
The error messages now specify whether a "Map descriptor" or a "Prog descriptor" was not found, providing more clarity.

Test: N/A, text only change
Flag: EXEMPT trivial
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I7ce4806979a616f8330e5cca4d70c7ea2a1a256a

Maciej Żenczykowski   commited 2025-08-13 14:30:19 -07:00
a23e772683
Snap for 13905597 from 3264f34d9c to 25Q4-release
Change-Id: Ife05441993ee6fa6555e208dd603e95764eb06e8

Android Build Coastguard Worker   commited 2025-08-08 18:23:50 -07:00
6258b17d27
Clippy lint fixes for rustc 1.88.0
Test: m rustClippyJson
Bug: 435702100
Flag: EXEMPT refactor
Change-Id: I3cbd23b2ddc51c369e7bdbe7c08eb356e82304a2

James Farrell   commited 2025-08-07 23:43:22 +00:00
3264f34d9c
Snap for 13859275 from 8ce82c3dc4 to 25Q4-release
Change-Id: I607d1d2c68b127928c20e423ae381bc15eaa29cc

Android Build Coastguard Worker   commited 2025-07-30 16:23:31 -07:00
5c59cdeec7
Snap for 13851688 from a78ebbd0b1 to 25Q4-release
Change-Id: I3c40f1ee65c666f6efb4f7ebdcd654537696bfc4

Android Build Coastguard Worker   commited 2025-07-29 16:27:17 -07:00
8b7e7e57d9
Platform BpfLoader: remove support for /vendor/etc/bpf/filterPowerSupplyEvents.bpf
It doesn't exist in current builds, and we have the vendor bpf loader in C++ to handle /vendor/etc/bpf anyway.
It's unclear how to handle it from rust due to platform vs vendor skew...

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I3ef707399445f91966e747d615dbf828d779a5ae

Maciej Żenczykowski   commited 2025-07-28 17:56:52 -07:00
8ce82c3dc4
Platform BpfLoader: make missing .bpf files fatal
as all are already present

(while at it add 'inheritance' from a default struct)

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I94258b8f5f8565193bfb688d50422733caf8dbf3

Maciej Żenczykowski   commited 2025-07-28 17:55:20 -07:00
a78ebbd0b1
Platform BpfLoader: replace '/etc' with '/system/etc'
(/etc is a symlink to /system/etc anyway)

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I4d5b1b34066b97589779a43b8eaeed785edb611c

Maciej Żenczykowski   commited 2025-07-25 21:28:22 -07:00
0b7aa3aefe
Platform BpfLoader: eliminate 'dir' - just use fully qualified 'filename'
Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Iaea2cff7ef0e96e600ea7429538d85b6c515e062

Maciej Żenczykowski   commited 2025-07-25 21:28:22 -07:00
f9d0b38967
Platform BpfLoader: add initial / to /vendor/etc/bpf/ path
(Technically a no-op, since the file doesn't exist yet)

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie72de49e452994a5dca97559d86fa2d7bb4bedcb

Maciej Żenczykowski   commited 2025-07-25 21:01:36 -07:00
25247915db
Snap for 13791884 from b073360177 to 25Q4-release
Change-Id: I29554c852a584639dbe1882f3c31a4d034afcdf9

Android Build Coastguard Worker   commited 2025-07-16 16:42:23 -07:00
034cec03f2
vendorBpfLoader: error handling simplifications
We continue to have:
  $ adb shell ls -lZ /sys/fs/bpf/vendor
  total 0
  -r--r----- 1 root system u:object_r:fs_bpf_vendor:s0  0 2025-07-16 09:37 prog_filterPowerSupplyEvents_skfilter_power_supply

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I2be675467688cf5f9c651b8311dceb68744100a8

Maciej Żenczykowski   commited 2025-07-16 09:38:26 -07:00
b073360177
vendorBpfLoader: templatize readSectionByName
Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Id793381411d559ba338aaad83815e5f429848286

Maciej Żenczykowski   commited 2025-07-16 09:17:47 -07:00
424eb2ad51
vendorBpfLoader: less copies
Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I3572cf9dca5caf910d4870788b0ce41a02ba14ad

Maciej Żenczykowski   commited 2025-07-16 09:01:26 -07:00
97810f306d
vendorBpfLoader: trivialize getSectionType()
since we only support skfilter/ we can simplify this

(support for any future other vendor types should be added to the rust loader)

Test: TreeHugger
Flag: EXEMPT cleanup
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I72ad38c056728ef768ee70bc38471c3e9d368f60

Maciej Żenczykowski   commited 2025-07-16 08:55:36 -07:00
a3ecd74594
vendorBpfLoader: remove unused readSectionUint()
Test: TreeHugger
Flag: EXEMPT cleanup
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I1a9e8f5e419eb4cde2dd734720d314bcee2dbf9c

Maciej Żenczykowski   commited 2025-07-16 08:51:41 -07:00
b3ad463c44
vendorBpfLoader: remove printing of map/prog ids
Really just spurious logging code.

If you're working on a device (as opposed to looking at bugreports)
you can get this information with for example 'bpftool':

$ adb shell bpftool map show pinned '/sys/fs/bpf/map_bpfRingbufProg_test_ringbuf'
77: ringbuf  name test_ringbuf  flags 0x0
        key 0B  value 0B  max_entries 4096  memlock 16696B

$ adb shell bpftool prog show pinned /sys/fs/bpf/vendor/prog_filterPowerSupplyEvents_skfilter_power_supply
82: socket_filter  name skfilter_power_  tag b8b4693584760391
        loaded_at 2025-07-16T08:44:56-0700  uid 0
        xlated 848B  jited 470B  memlock 4096B

Test: TreeHugger
Flag: EXEMPT cleanup
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie7baf7cf5df9c25ad2d159767584670361e8c6eb

Maciej Żenczykowski   commited 2025-07-16 08:47:49 -07:00
77f8e9e373
vendorBpfLoader: remove mapMatchesExpectations() check
This was primarily meant as a safety check for mainline,
it's not really needed in platform bpf loader.

Test: TreeHugger
Flag: EXEMPT cleanup
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I615f54f10baa75f641129507ecce9159ff31a740

Maciej Żenczykowski   commited 2025-07-16 08:39:23 -07:00
d9201c1612
vendorBpfLoader: change single line, end-of-line /* */ comments to //
Test: TreeHugger
Flag: EXEMPT cleanup
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ibc2b32b3a07a1115489b373a97827625fa27ff10

Maciej Żenczykowski   commited 2025-07-16 08:35:43 -07:00
b902e1c254
vendorBpfLoader: kernel is guaranteed to be 5.4+
(even 5.10+)

Test: TreeHugger
Flag: EXEMPT cleanup
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I4c9a2a222071095559b1605d4417f93eecf4667f

Maciej Żenczykowski   commited 2025-07-16 08:33:02 -07:00
174cddec91
vendorBpfLoader: move /sys/fs/bpf/vendor creation to rust
We continue to have:
  $ adbz shell ls -lZ /sys/fs/bpf /sys/fs/bpf/vendor
  /sys/fs/bpf:
  total 0
  ...
  drwxrwxrwt 2 root root     u:object_r:fs_bpf_vendor:s0          0 2025-07-16 00:09 vendor

  /sys/fs/bpf/vendor:
  total 0
  -r--r----- 1 root system u:object_r:fs_bpf_vendor:s0  0 2025-07-16 00:09 prog_filterPowerSupplyEvents_skfilter_power_supply

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I74d87a6f382e3b1bc10a8eb82915bc340568f2a8

Maciej Żenczykowski   commited 2025-07-16 00:09:47 -07:00
d29bd0b4ca
vendorBpfLoader: no need for locations array
Afterwards we still have:
  I BpfLoader: Platform BpfLoader loading critical for healthd ELF object /vendor/etc/bpf/filterPowerSupplyEvents.o with license Apache 2.0
  W BpfLoader: No maps section could be found in elf object
  D BpfLoader: prog /sys/fs/bpf/vendor/prog_filterPowerSupplyEvents_skfilter_power_supply id 82

  $ adbz shell ls -lZ /sys/fs/bpf /sys/fs/bpf/vendor
  /sys/fs/bpf:
  total 0
  ...
  drwxrwxrwt 2 root root     u:object_r:fs_bpf_vendor:s0          0 2025-07-15 23:53 vendor

  /sys/fs/bpf/vendor:
  total 0
  -r--r----- 1 root system u:object_r:fs_bpf_vendor:s0  0 2025-07-15 23:53 prog_filterPowerSupplyEvents_skfilter_power_supply

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I66a6fc3abf8f5c4c52f6a47476c251e97f1f6e14

Maciej Żenczykowski   commited 2025-07-15 23:57:34 -07:00
c30b4f8bee
vendorBpfLoader: no need for allowedProgTypes
(while at it remove fuse bpf support, which isn't needed for vendor)

Test: TreeHugger
Flag: EXEMPT no-op
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ic7293b94644d933a908a252ab794ae64f88b5865

Maciej Żenczykowski   commited 2025-07-15 23:50:52 -07:00
0e2f1cc28b
simplify libbpf_android.h
Test: TreeHugger
Flag: EXEMPT trivial
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I39f73afef65b22b1d275742758aff7745991d9e7

Maciej Żenczykowski   commited 2025-07-15 23:40:18 -07:00
8b3ea0a274
Snap for 13715904 from 5781bd4a22 to 25Q4-release
Change-Id: I1404a3d3b0bac4242a1ed4ec5d2f6bc88c447536

Android Build Coastguard Worker   commited 2025-06-30 16:22:07 -07:00
b0648a7dba
Give all users access to CPU time in state bpf maps.
We want to read this from traced_probes, which is AID_NOBODY. And
SELinux does a far more thorough job of controlling access than Unix
permissions do.

Bug: 422976190

Test: ls -l, and checked WIP traced_probes implementation.
Change-Id: I51a6486c5d7bf85f922f79a89a7a7fbdb9bc79f2

Simon MacMullen   commited 2025-06-30 08:54:29 -07:00
5781bd4a22
Snap for 13709264 from f84cb04bd7 to 25Q4-release
Change-Id: Icc7c46c8aa950aa203e98862ce0dd42b2581cedb

Android Build Coastguard Worker   commited 2025-06-27 18:23:17 -07:00
06f6ddd7c3
Merge "Move CPU time in state bpf maps to their own dir," into main
Simon MacMullen   authored and   Android (Google) Code Review   commited 2025-06-27 07:49:37 -07:00
f84cb04bd7
Move CPU time in state bpf maps to their own dir,
This will allow us to use a genfscon SELinux rule to get finer grained access control.

Bug: 422976190

Test: Recorded a Perfetto trace with statsd atom  CPU_CYCLES_PER_UID_CLUSTER, tested manually with go/atomtester.
Change-Id: Ic16da605b9d7150d42176c428f0e1ecaf4a9472f

Simon MacMullen   commited 2025-06-26 16:31:52 +00:00
8546ea34c6
Snap for 13683512 from d6c84caf3e to 25Q4-release
Change-Id: I98a365588ac49570b4d8c09dd3c60749130d25af

Android Build Coastguard Worker   commited 2025-06-23 16:21:34 -07:00
ce70511e4b
Merge changes I89a4c1d2,I961ba203,Idc61221e into main
* changes:
  bpf: vmlinux: Add OWNERS
  bpf: vmlinux: Remove android15_6.6 headers
  bpf: vmlinux: Update Readme

Treehugger Robot   authored and   Android (Google) Code Review   commited 2025-06-23 08:09:45 -07:00
d6c84caf3e
bpf: vmlinux: Add OWNERS
Bug: 421990777
Test: N/A
Change-Id: I89a4c1d2b908f997c92eaa210f2006420e7a30cf
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>

Kalesh Singh   commited 2025-06-20 14:40:47 -07:00
d2852e8687
bpf: vmlinux: Remove android15_6.6 headers
These are now generated by the build system when needed.

Bug: 421990777
Test: m
Change-Id: I961ba203989325e58428a7b3068326fc89debaa8
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>

Kalesh Singh   commited 2025-06-20 12:04:31 -07:00
a6156a9122
bpf: vmlinux: Update Readme
Convert readme to markdown; refactor existing descriptions;
add instructions on how to add vmlinux.h for new kernels.

Bug: 421990777
Test: N/A
Change-Id: Idc61221e729d034c5fedb458bd18db02fade713a
Signed-off-by: Kalesh Singh <kaleshsingh@google.com>

Kalesh Singh   commited 2025-06-20 11:47:41 -07:00
9462a3d7aa
Snap for 13667468 from 16e017f20e to 25Q4-release
Change-Id: I7b490a20c856becb644c54ac4deffa9e40dbad3c

Android Build Coastguard Worker   commited 2025-06-18 18:35:15 -07:00
a98c022f2e
Merge "Use platform bpf_helpers.h and bpf_map_def.h for platform bpfloader" into main
Maciej Żenczykowski   authored and   Android (Google) Code Review   commited 2025-06-18 04:40:48 -07:00
16e017f20e
Snap for 13659452 from 32075d5ef9 to 25Q4-release
Change-Id: I18d57a1eb9670a95e0ed45e03f034d83b0eda496

Android Build Coastguard Worker   commited 2025-06-17 16:28:00 -07:00
93a9e91f3a
Merge "Add missing vendor_available: true property" into main
Treehugger Robot   authored and   Android (Google) Code Review   commited 2025-06-17 15:53:01 -07:00
bd3fd05c3a
Merge "bpfloader: refactor C++ loader to just one function" into main
Treehugger Robot   authored and   Android (Google) Code Review   commited 2025-06-17 05:56:59 -07:00
32075d5ef9
bpfloader: refactor C++ loader to just one function
no need for the complexity, as it is only for vendor now

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ia807f7ee8aeca25d92e60e46f180ffe536eef87c

Maciej Żenczykowski   commited 2025-06-17 04:18:41 -07:00
d689e6e01a
make platform bpfloader require bpftool cli
Test: TreeHugger
Flag: EXEMPT adds as yet unused cli tool
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ib6c2be3c40338743f3482010d7500fef8964adc6

Maciej Żenczykowski   commited 2025-06-17 03:55:14 -07:00
7d62694b8f