Commit graph android_packages_modules_Co.../bpf/loader/NetBpfLoad.cpp
Message SHA1
Merge "Add libbpf version to bpf loader initial log" into main
Motomu Utsumi   authored and   Gerrit Code Review   commited 2025-03-06 02:32:19 -08:00
5977f5ce7c
bpf: switch to mainline netbpfload on Android S/SV2
Test: TreeHugger, manually installing tethering apex
  (with and without dnsresolver apex) on pixel 6 running S
  incl. 'atest bpf_existence_test'
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I63d4b84287e9c98dc0d2a517ac58d3f3ce9d7760

Maciej Żenczykowski   commited 2025-03-05 14:27:59 -08:00
0b477491fb
bpf: rename BPFLOADER_MAINLINE_VERSION to BPFLOADER_MAINLINE_S_VERSION
This is a no-op.

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

Maciej Żenczykowski   commited 2025-03-04 14:20:29 -08:00
8c09778afe
Add libbpf version to bpf loader initial log
Test: build & boot
Bug: 394492034
Change-Id: Ic81b8c64074929d06736a8f55482cca53ca4b175

Motomu Utsumi   commited 2025-02-26 09:59:47 +09:00
a76935865b
bpf: move isAtLeastX to BpfUtils.h
Partially due to:
  https://android-review.googlesource.com/c/platform/bionic/+/3497280

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

Maciej Żenczykowski   commited 2025-02-24 18:58:22 -08:00
732386394e
NetBpfLoad: enforce eBPF is jitted on 25Q2+
Failure to jit means a buggy in kernel eBPF JIT implementation.

This cannot fail on a 64-bit kernel, because VINTF requires
kernel configuration option CONFIG_BPF_JIT_ALWAYS_ON.

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

Maciej Żenczykowski   commited 2025-02-14 11:22:13 -08:00
199fd35425
NetBpfLoad: 4.14+ fail hard on bpfGetFdProgId() failure
This should always work on 4.14+

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

Maciej Żenczykowski   commited 2025-02-14 11:18:18 -08:00
97debeb92b
NetBpfLoad: don't call bpfGetFdMapId in kernels < 4.14
The function is not available in older kernels.

But when we do call it, fail on error - should not happen.

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

Maciej Żenczykowski   commited 2025-02-13 16:10:48 -08:00
a003ace532
NetBpfLoad: int err -> const int err
for consistency with 3 other spots

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

Maciej Żenczykowski   commited 2025-02-13 16:05:07 -08:00
000f20ddcc
NetBpfLoad: print 'ok' instead of 'no error'
Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ia49fe3124e3110fd8d8cb88e827553db65729830

Maciej Żenczykowski   commited 2025-02-13 16:02:19 -08:00
37ba939f17
NetBpfLoad: on 25Q2+ force 64-bit kernel
This intentionally does not block 32-bit userspace,
but it does mean existing 32-on-32 devices will need to
upgrade to 32-on-64 to upgrade to 25Q2+.  Even Wear/TV.

This will allow us to unconditionally start using 64-bit
cli binaries for network admin tasks and avoid the entire
insanity that is 32-bit kernel net admin ABI of
iptables/netfilter & xfrm/ipsec.

Note: on at least x86 there's already code in netd that is outright incorrect if the kernel is not 64-bit.

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

Maciej Żenczykowski   commited 2025-02-10 21:54:34 -08:00
127715a53d
bpf: don't attempt to load LPM_TRIE on < 4.14
Test: TreeHugger
Bug: 394212739
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ia71951ef1a34eeeb30097de0b9d3ddb821f7e72f

Maciej Żenczykowski   commited 2025-02-03 22:05:22 -08:00
8701983198
Merge "Revert "NetBpfLoad: hacky way to make LPM_TRIE bpf maps work."" into main
Maciej Żenczykowski   authored and   Gerrit Code Review   commited 2025-01-20 13:43:27 -08:00
4c0ba60c36
Revert "NetBpfLoad: hacky way to make LPM_TRIE bpf maps work."
This reverts commit dcb2e7496c.

Reason for revert: will use negative size to imply no prealloc instead.

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

Maciej Żenczykowski   commited 2025-01-20 12:10:04 -08:00
c1a9f4ab4c
NetBpfLoad: use __ANDROID_API_FUTURE__ for unreleased
See https://android-review.git.corp.google.com/c/platform/system/core/+/3309495

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

Maciej Żenczykowski   commited 2025-01-14 16:23:24 -08:00
db9171f987
NetBpfLoad: rename isAtLeastW to isAtLeast25Q2
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I485e24663b924bbac97faa6f06156587c8968b81

Maciej Żenczykowski   commited 2025-01-14 15:00:14 -08:00
98975122a4
Merge "NetBpfLoad: enforce kernel 5.4 for Android W" into main
Treehugger Robot   authored and   Gerrit Code Review   commited 2025-01-13 17:35:46 -08:00
a1fb141012
Merge "Only run uprobestatsbpfload if available" into main
Maciej Żenczykowski   authored and   Gerrit Code Review   commited 2024-12-11 10:29:07 -08:00
0cee68d863
Add REQUIRE() clause for 6.12 LTS for W.
Note: this effectively (like the 6.6 check) does nothing atm, and is included purely for completeness.

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

Maciej Żenczykowski   commited 2024-12-11 07:14:12 -08:00
06f38e3c05
NetBpfLoad: enforce kernel 5.4 for Android W
Bug: 370043209
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I08fa542c4febb5de917cfb0b4de748d13915b304

Maciej Żenczykowski   commited 2024-12-11 07:10:01 -08:00
76f66b6a44
Only run uprobestatsbpfload if available
Bug: 382190229
Change-Id: I34c5d700bc31239a04cd9fb8c3a820ec72008c51
Test: TH

Yu-Ting Tseng   commited 2024-12-10 14:55:27 -08:00
cb19e1b21e
Make ARM TVs running 32-bit userspace boot on V with new kernels.
This unblocks building and testing for these devices on V only.
Networking may not work correctly, but at least the device will
boot.

Fix: 374252805
Test: cannot be tested due to lack of devices
Change-Id: I5be400d825bf7486454ff34e17123adac81a4447

Lorenzo Colitti   commited 2024-12-04 09:59:33 +00:00
d95c0c692c
Make netbpfload invoke uprobestatsbpfload
Bug: 355315669
Test: TH
Change-Id: Ie545a27c723b156b7d548e8f86e0da5303e99503

Yu-Ting Tseng   commited 2024-11-04 11:25:23 -08:00
9b15fa040f
NetBpfLoad: don't allow prog-less bpf .o's targetting platform bpfloader
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I0360c8bb7486b3ed125c0fd0d40b4b8d97bfb3e3

Maciej Żenczykowski   commited 2024-09-25 22:17:34 +00:00
2d52f8c139
NetBpfLoad: noop - all programs are critical
All 6 .c files under bpf/progs are flagged CRITICAL(),
and as such we can simplify this logic.

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

Maciej Żenczykowski   commited 2024-09-18 23:46:16 +00:00
3a085154c5
NetBpfLoad: fix empty log_buf detection logic
log_buf.size() was always BPF_LOAD_LOG_SZ and thus != 0

After changing ALOGD to ALOGI you now see (for example):
  NetBpfLoad: BPF_PROG_LOAD call for /apex/com.android.tethering/etc/bpf/net_shared/block.o (bind4_block_port) returned 'processed 55 insns (limit 1000000) max_states_per_insn 0 total_states 4 peak_states 4 mark_read 1' fd: 6 (ok)

(ALOGV/ALOGD's are effectively silently dropped by the KernelLogger we use)

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

Maciej Żenczykowski   commited 2024-09-05 22:00:33 +00:00
ea1d8f6376
NetBpfLoad: support bpf.o without program section
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I7320cf60a8994a6c8da99293f068265f54a9ddc6

Maciej Żenczykowski   commited 2024-09-05 09:32:39 -07:00
1e487177f1
dscpPolicy: lock down bpf cache map
(since this map relies on percpu access semantics,
 and we don't even have userspace helpers to access PERCPU_ maps)

This will also be used by the upcoming satellite egress limiting logic.
See aosp/3235142

With this change we see:
  $ adbz shell ls -lZ /sys/fs/bpf/net_shared/*_dscpPolicy_*
  -rw-rw---- 1 root system u:object_r:fs_bpf_net_shared:s0  0 2024-09-04 17:01 /sys/fs/bpf/net_shared/map_dscpPolicy_ipv4_dscp_policies_map
  -rw-rw---- 1 root system u:object_r:fs_bpf_net_shared:s0  0 2024-09-04 17:01 /sys/fs/bpf/net_shared/map_dscpPolicy_ipv6_dscp_policies_map
  ---------- 1 root root   u:object_r:fs_bpf_loader:s0      0 2024-09-04 17:01 /sys/fs/bpf/net_shared/map_dscpPolicy_socket_policy_cache_map
  -r--r----- 1 root system u:object_r:fs_bpf_net_shared:s0  0 2024-09-04 17:01 /sys/fs/bpf/net_shared/prog_dscpPolicy_schedcls_set_dscp_ether

Test: TreeHugger, atest CtsNetTestCases:android.net.cts.DscpPolicyTest
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I50a12ca4cd5587342f8aaf9df8cb28917f555252

Maciej Żenczykowski   commited 2024-09-04 17:41:47 -07:00
1ec8d7df58
NetBpfLoad: add more using statements
To shorten lines.

Now:
  egrep 'base:' NetBpfLoad.cpp
only finds the 'using' statements.

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

Maciej Żenczykowski   commited 2024-09-04 11:43:31 -07:00
8a7672822d
NetBpfLoad: allow Arm 32-bit userspace with 6.6 kernel uprev
Bug: 329269188
Test: Treehugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Iba87f62743f76f532e51f4dbb156054e50d6dd5d

Maciej Żenczykowski   commited 2024-09-03 23:43:24 +00:00
1c2187ace9
NetBpfLoad: require 64-bit kernel 6.7+
Note that this is a no-op for everything before sdk=36+,
since V/sdk=35 only supports up to 6.6 LTS anyway.

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

Maciej Żenczykowski   commited 2024-09-03 16:09:59 -07:00
9b6a994984
NetBpfLoad: require 64-bit userspace on 6.7+ (sdk=36+)
This duplicates the previous check, but without the exceptions.

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

Maciej Żenczykowski   commited 2024-09-03 16:04:11 -07:00
21b4a05c73
bpf: add minimal support for sdk=36
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ib94ed340712b662072eee50d8f1deb9f6fe20b55

Maciej Żenczykowski   commited 2024-09-03 16:04:11 -07:00
de7374d850
NetBpfLoad: noop - move comment out of if statement
(prep work to make next diff easier on the eyes)

Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I2a6a10cbdeace7e7b43d64bc1e0743216e4321e1

Maciej Żenczykowski   commited 2024-09-03 15:43:33 -07:00
726b58fd19
NetBpfLoad: reliably log message on map creation failure
(ALOGD can get entirely stripped out of the logs)

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

Maciej Żenczykowski   commited 2024-08-29 21:18:22 +00:00
8597e3ac16
NetBpfLoad: don't log the program failure buffer if it is empty
BPF_PROG_LOAD can fail with various permission related
errors, and then it doesn't provide any extra debug details.

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

Maciej Żenczykowski   commited 2024-08-29 21:18:00 +00:00
9f8b17ee5b
NetBpfLoad: better log message on program load failure
We're reduced logging enough that it is no longer clear
which program failed to load.

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

Maciej Żenczykowski   commited 2024-08-29 21:17:12 +00:00
bfc0b6187c
Merge "NetBpfLoad: do not log bpfGetFdMapId() failures on 4.9" into main
Maciej Żenczykowski   authored and   Gerrit Code Review   commited 2024-08-29 21:15:29 +00:00
461b408129
NetBpfLoad: do not log bpfGetFdMapId() failures on 4.9
This is entirely expected due to lack of implementation in <4.14.

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

Maciej Żenczykowski   commited 2024-08-29 12:19:56 -07:00
508c8f7857
NetBpfLoad: hacky way to make LPM_TRIE bpf maps work.
Longer term we should fix the bpf_map_def.h to
actually set map_flags correctly.

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

Maciej Żenczykowski   commited 2024-08-29 18:10:28 +00:00
dcb2e7496c
NetBpfLoad: introduce APEXROOT/BPFROOT defines
This allows changing the location of bpf programs easily
when building for the host to run on UML as a test.

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

Maciej Żenczykowski   commited 2024-08-26 17:29:52 -07:00
78fa86107b
NetBpfLoad: sort BPF_PROG_LOAD bpf_attr req field order
Some compilers warn/error and fail to build if it is not in proper order.
(specifically: triggers during build for host)

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

Maciej Żenczykowski   commited 2024-08-26 17:29:47 -07:00
52be6a822d
NetBpfLoad: remove spurious header includes
(particularly problematic on host builds where host headers are ancient...)

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

Maciej Żenczykowski   commited 2024-08-26 17:29:41 -07:00
020eaf4dd5
NetBpfLoad: reduce log level for some messages
These messages are quite spammy.

Since this is now all mainline code built/shipped together, they're basically all deterministic.

We print the map/program ids for all maps & programs we load which means it's pretty obvious what was skipped anyway.

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

Maciej Żenczykowski   commited 2024-08-22 23:43:27 +00:00
dbdd90fb31
bpf: move bpf_headers into /bpf subdirectory
Generated via:
  git mv staticlibs/native/bpf_headers bpf/headers
  cd bpf/headers/include
  git mv bpf/bpf_helpers.h .
  git mv bpf/bpf_map_def.h .
manually fix up bpf/bpf_map_def.h include path

bpf_helpers.h is only used by bpf programs so the 'bpf/'
prefix is spurious.

bpf_map_def.h is only used by bpf programs and the two
bpfloaders, which effectively means the 'bpf/' prefix isn't
useful.

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

Maciej Żenczykowski   commited 2024-08-21 13:18:59 -07:00
d602835b4f
bpf: git mv netbpfload bpf/loader
Step 2 of moving bpf related stuff into a common directory,
will ease development.

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

Maciej Żenczykowski   commited 2024-08-20 19:51:41 -07:00
a207ac743c
Renamed from netbpfload/NetBpfLoad.cpp (Browse further)