Commit graph android_packages_modules_Co.../bpf/loader/NetBpfLoad.cpp
Message SHA1
NetBpfLoad: Require Kernel 5.10 for Android 25Q4
Netd bpf requires 5.10 at least in 25Q4.
This CL enforces that.

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

Maciej Żenczykowski   commited 2025-05-06 05:28:23 -07:00
ec1115e46b
bpf: Add new SDK versions
Add 25Q3, 25Q4, 26Q1 and 26Q2 SDKs to the bpfloader helpers. The Q3 and
beyond versions are not finalized, so they are not being populated in
BpfUtils.h yet, but at least the logic is in place.

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

Maciej Żenczykowski   commited 2025-05-06 02:55:33 -07:00
c5b9f5ee99
NetBpfLoad: relax version checks
Test: TreeHugger
Flag: EXEMPT mainline
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie4ac3608d3f9599ffca40b0b2073f21efed7b17c

Maciej Żenczykowski   commited 2025-05-01 06:12:57 -07:00
cb55572675
Fix memory leak in NetBpfLoad
The lambda was capturing btf by value instead of reference. This meant
that btf__free was never called, because at the time of capture btf was
null.

This changes the lambda to capture btf by reference instead of by value.

Test: TH
Flag: EXEMPT mainline
Bug: 411323352
Change-Id: I6c6637b10f16d48f9ae5b702e44883046b46e252

Patrick Rohr   commited 2025-04-17 08:38:01 -07:00
03b974321b
NetBpfLoad: remove dead code
This code requires
  !isArm()
  isUserspace32bit()
  isAtLeastKernelVersion(6, 7, 0)
which implies
  isAtLeastKernelVersion(6, 2, 0)
meaning we match the condition in 1801,
and don't match the isArm() conditions in 1803/1806/1810,
thus we'd have already 'returned 1' in line 1815.

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

Maciej Żenczykowski   commited 2025-04-15 13:48:19 -07:00
a627d77127
NetBpfLoad: don't fail on S on kernels with buggy bpf arrays
Bug: 404427531
Test: TreeHugger
Flag: EXEMPT mainline
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ib30a731d7faecfc7e52590e28350c3289fe26852

Maciej Żenczykowski   commited 2025-04-02 17:53:30 -07:00
b3ddc8afad
NetBpfLoad: allow 25Q3
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com
Change-Id: Iced07b6438b4702334aaf85d301987efefe153c6

Maciej Żenczykowski   commited 2025-03-25 13:05:44 -07:00
3ac88f375b
Merge "NetBpfLoad: 25Q2+ parse & verify config" into main
Patrick Rohr   authored and   Gerrit Code Review   commited 2025-03-21 12:16:53 -07:00
b6d94ad6f3
NetBpfLoad: 25Q2+ parse & verify config
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ibe7560998655dfe36b5cc071a3405650ad684935

Maciej Żenczykowski   commited 2025-03-20 23:47:59 -07:00
25e2622121
Skip enabling BTF on kernel older than 5.10
BTF_KIND_VAR and BTF_KIND_DATASEC were introduced in 5.2.
It should be possible to enable BTF on 4.18 or above since libbpf can
load BTF.
Also, current code should work on 5.4 but this is untested.
For now, this CL enables BTF on 5.10 or above.

Test: boot on 4.9, 4.19, 5.10
Test: adb logcat | grep NetBpfLoad
Change-Id: I3da4970464afcf9a76b1f2645ed79c44750bcd6a

Motomu Utsumi   commited 2025-03-21 15:42:45 +09:00
861f11c9db
Fix an issue caused by variable re-declaration in inner scope
Since btf is declared in inner scope, btf is null in outer scope and BTF
was always disabled.

This CL also makes NetBpfLoad buildable with -Wshadow flag

Test: adb log | grep NetBpfLoad
Change-Id: I511f21a3620ccfdadd797786e087d0d142c816ed

Motomu Utsumi   commited 2025-03-21 15:40:42 +09:00
62b1c88367
Fix unsigned num comparison with zero
Caught by -Wtautological-unsigned-zero-compare compiler flag

Test: m
Change-Id: Ibedc657a237ba29fd7a4452271f347cd3180f57c

Motomu Utsumi   commited 2025-03-21 11:00:10 +09:00
a6ffae202b
Skip enabling BTF on kernel older than 4.18
BPF_BTF_LOAD command was introduced in 4.18

Bug: 403381101
Test: boot on 4.9 kernel
Change-Id: Ibf2070750334417bd1052486c1f59a5d3f7fc20c

Motomu Utsumi   commited 2025-03-19 19:49:08 +09:00
6f1ceccf14
NetBpfLoad: merge two map creation ALOGs
One ALOG to record whether the map is created by btf or not.

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

Maciej Żenczykowski   commited 2025-03-18 23:01:20 -07:00
9fef930ff1
Enable BTF for maps loaded by NetBpfLoad
Bug: 403381101
Test: boot
Change-Id: I05194e5a2678de07e3542aa744d2350a6d604ea2

Motomu Utsumi   authored and   Maciej Żenczykowski   commited 2025-03-18 12:15:39 -07:00
1a5cc5b57c
Add method to get key value type ids
BPF_ANNOTATE_KV_PAIR is used to tell the bpf loader about the btf
key_type and value_type of a bpf map.
This CL adds a method to get key value type ids from
BPF_ANNOTATE_KV_PAIR

Bug: 403381101
Test: boot
Change-Id: If308d49b64b38f65991a0a8177e5072d54e2cdf6

Motomu Utsumi   authored and   Maciej Żenczykowski   commited 2025-03-18 12:15:39 -07:00
59b2099360
Add method to load btf into kernel
Bug: 403381101
Test: boot
Change-Id: I9d5aedc13e7f4551eaa97b855496148b573c2176

Motomu Utsumi   authored and   Maciej Żenczykowski   commited 2025-03-18 12:15:39 -07:00
21536e55fc
Add method to update btf_var_secinfo.offset
Bpf loader needs to fix btf_var_secinfo.offset based on ELF's string
section.

Bug: 403381101
Test: boot
Change-Id: I8382d0ee3e0fa7f0a3b825eca9cdcf40ccce9532

Motomu Utsumi   authored and   Maciej Żenczykowski   commited 2025-03-18 12:15:39 -07:00
efe33319f7
Add method to update btf_type.size for BTF_KIND_DATASEC
size in btf_type of BTF_KIND_DATASEC is 0 at compilation time.
So bpf loader needs to update to actual size based on ELF's section
size.

Bug: 403381101
Test: boot
Change-Id: I78fb26a5b8eeb120044b5737667f472fac51d79f

Motomu Utsumi   authored and   Maciej Żenczykowski   commited 2025-03-18 11:46:16 -07:00
b3d3c2ae57
Enable libbpf logging in bpf loader
Bug: 403381101
Test: boot
Change-Id: I039ad8990bb722bfd6eb9f6c4d927b699475b7f6

Motomu Utsumi   authored and   Maciej Żenczykowski   commited 2025-03-18 11:41:17 -07:00
712088dff3
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