Commit graph android_system_bpf/loader/Loader.cpp
Message SHA1
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
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
bpf: remove /system/etc/bpf from the loader
These directories are not populated on real devices
and are not part of the test suite.
This change removes them from the BPF loader.

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

Maciej Żenczykowski   commited 2025-06-16 01:28:45 -07:00
c041c4825b
Fix C++23 build: add missing #include.
Change-Id: I21ab3f589ba1c9c0df4570264c9a25bc8c2ee427

Elliott Hughes   commited 2025-05-22 15:42:22 -04:00
7d08e8803d
Add -Wshadow to bpf_cc_defaults
Test: m
Change-Id: I08899d0c1bbdb05c3a2ef7df4b0debe748c25d94

Motomu Utsumi   commited 2025-03-21 16:27:05 +09:00
c52a98dde5
platform BpfLoader: drop support for uprobestats
this has moved to mainline via apex

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

Maciej Żenczykowski   commited 2025-03-10 18:24:05 -07:00
c799e7610f
BpfLoader: remove unnecessary logging functionality
With the addition of aosp/3294153, we no longer need the c logging
functionality exposed to rust, so remove them

Bug: 359646531
Test: Manual
Change-Id: Ia6f61263f3315fe7dd3533556d9a5fdd2726a2b3
Signed-off-by: Neill Kapron <nkapron@google.com>

Neill Kapron   commited 2024-10-04 21:10:13 +00:00
ba0666388b
Merge "Adding memevents subdirectory for bpf" into main
Treehugger Robot   authored and   Gerrit Code Review   commited 2024-09-05 05:40:29 +00:00
ea44c94fbf
Adding memevents subdirectory for bpf
Create new memevents subdirectory to contain bpf related files for
libmemevents. Memevents-bpf are used to listen to kernel tracepoints
(BPF_PROG_TYPE_TRACEPOINT), and skfilter bpf progrs to inject mock data
for testing purposes (BPF_PROG_TYPE_SOCKET_FILTER).

Test: Verified memevents-bpf files are loaded in new subdir
Bug: 330396528
Change-Id: I57f7738f6a9eb18293cf9c51e0d1da2b2c1ebfe4
Signed-off-by: Carlos Galo <carlosgalo@google.com>

Carlos Galo   commited 2024-09-04 22:10:24 +00:00
0621b1e0a1
BpfLoader: adjust for change to bpf_map_def.h location
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Iebd599d12f502c3cb8e030d53aae5e95c19e21ef

Maciej Żenczykowski   commited 2024-08-21 13:21:16 -07:00
1b44455113
BpfLoader: split bpffs subdir creation out
Needs to be before program loading, this should eventually allow loading programs in parallel.

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

Maciej Żenczykowski   commited 2024-08-13 20:04:18 +00:00
7ff8310ea2
bpf: remove no longer used expected attach type
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I513d9b22bf57a19d1b33cd37bf3a6f3ae06d969f

Maciej Żenczykowski   commited 2024-08-12 17:41:26 +00:00
119ad75c4b
BpfLoader: split legacy bpfloader into 3 phases, simplify arguments
Should make integration with BpfLoader written in rust easier.

While at it add simple wrappers around ALOG{V,D,I,W,E}(),
which may come in handy as bpfloader runs early enough that
logging must be to the kernel dmesg ringbuffer instead...

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

Maciej Żenczykowski   authored and   Neill Kapron   commited 2024-08-07 21:20:02 +00:00
dd4bd2d655
bpfLoader as a lib - make it actually build/work
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Iff1c39de5ac8a07cdd16841c04db87ae874adc8f

Maciej Żenczykowski   commited 2024-08-06 15:43:56 -07:00
6d4d9d89c2
bpfloader: move BpfLoader.cpp into Loader.cpp
Prep work to make legacy BpfLoader usable as a library from rust.

Note: fixups to make this actually build will be in the next commit.

Generated via:
  cd //system/bpf/loader
  echo >> Loader.cpp
  cat BpfLoader.cpp >> Loader.cpp
  rm BpfLoader.cpp

Test: will not build, requires followup
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Id3a942bd0d217f3b689f165666b73e1f2834d33f

Maciej Żenczykowski   commited 2024-08-06 15:25:56 -07:00
e0f11527e4
BpfLoader: use BpfLoader as the LOG_TAG
The only non-test use of the library is the BpfLoader,
so it makes sense for everything to use the same tag.

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

Maciej Żenczykowski   commited 2024-05-01 05:17:05 -07:00
e2f2b8228d
BpfLoader: exec mainline netbpfload for finalization
Move setting 'bpf.progs_loaded' property to 1 into mainline.

This doesn't terribly matter, but it gives mainline bpf loading
code a chance to run after platform and perform any required
finalization.

While at it also use distinctive error return values,
as these are often the only thing that init reports about
a bpfloader failure.

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

Maciej Żenczykowski   commited 2024-04-30 23:53:07 -07:00
95c6fff6a2
BpfLoader: drastically reduce logging
Should speed up boot time - especially if serial console is enabled.

There's probably still enough information available to debug issues,
as any errors (which basically shouldn't happen) are still all
extensively logged.

Either way, as this now only loads platform bpf .o files, anyone seeing
boot time problems can simply flash a custom build with changes to the
platform BpfLoader to enable any extra logging as needed.

(Note that AFAICT normally ALOGV() is basically ignored)

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

Maciej Żenczykowski   commited 2024-04-30 22:37:04 -07:00
0eb98a22c3
Platform BpfLoader: remove dumpIns() and dumpAllCs()
I've *never* ended up using this information...

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

Maciej Żenczykowski   commited 2024-03-11 04:01:21 +00:00
091206500d
Platform BpfLoader: remove support for per-map/prog dir & selinux context
For platform bpf .o files per-map/prog selinux context can simply
be added by genfscon selinux policy modifications.

(while per-map/prog pin dir really only exists to support the selinux context)

Test: TreeHugger
  Both before and after this patch 'adb shell find /sys/fs/bpf | wc -l' returns 103
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ic700db2870c16a04c9498e529519051a672a28c8

Maciej Żenczykowski   commited 2024-03-11 04:01:07 +00:00
c1647d764f
move libbpf_android into loader subdirectory
The only (real) user is the platform bpfloader binary.
This is a library purely to facilitate testing.

It's easier to develop / code-search if everything is in the same directory.

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

Maciej Żenczykowski   commited 2024-03-11 04:00:13 +00:00
5c412c6c0e
Renamed from libbpf_android/Loader.cpp (Browse further)