Commit Graph

101 Commits

Author SHA1 Message Date
Maciej Żenczykowski
af0ae6785f fix wrong bpf path
(also note the program in p/m/C netd.C is not optional or kernel version dependent)

Bug: 237030932
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ia984f6a1ce0ab14a204fe47ec295db1363879b7b
2022-08-10 18:22:40 +00:00
Maciej Żenczykowski
30a1808c1b Bump up BPFLOADER_MIN_VER for platform bpf.o's
Non platform ones (ie. shipped via mainline) already have
the value manually specified.

The goal here is to be able to do some bpf.o validity checking
in the bpfloader based on the bpfloader_min_ver.

Such validity checking really only makes sense for mainline
shipped bpf.o's which might need to load on older bpfloaders.

Hence we no longer want platform bpf.o's to have minver == 0.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I9e2f670c48e30818689a42bc515eb49e86f3cbea
2022-07-25 18:04:34 +00:00
Maciej Żenczykowski
eb4194e852 BpfLoader v0.21-v0.27 don't support map uid at the new location
Bug: 239807354
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: If55ab36c1434e28d293135a97b87351de9f39686
2022-07-21 13:36:50 +00:00
Maciej Żenczykowski
a2469f36fc bpf_map_def: rename uid to 'zero', add new uid field
Bug: 239807354
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I13dce79dc11956c1903645a442bd00bd6d499a32
2022-07-21 13:35:45 +00:00
Maciej Żenczykowski
72e19c51fa Bpf maps & programs: support DEFAULT_BPF_(MAP|PROG)_(UID|SELINUX_CONTEXT|PIN_SUBDIR)
Sometimes you just want to change the setting for all maps and/or
programs in a specific .c file...

Bug: 190523685
Bug: 236925089
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I3ba6b3a8dadf18c1436b21feb1ee03db446e6aba
2022-07-18 08:59:50 -07:00
Maciej Żenczykowski
b6338cec03 define BPFLOADER_OBJ_AT_VER_VERSION as 25
BpfLoader v0.25+ support loading obj@ver.o files
as if they were obj.o.  This allows different
versions of the .o per bpfloader version.

This is useful because BTF enabled bpf.o files
are incompatible with BpfLoader < 0.10.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I2067b1c54c36842c0baa779f37a904b75b9dfb6d
2022-07-15 13:00:25 -07:00
Hassan Ali
1126aa72ec Merge "Use IsAtLeastS SdkLevel utility implementation" 2022-06-28 14:00:33 +00:00
Hassan Ali
f20af33290 Use IsAtLeastS SdkLevel utility implementation
Bug: 175670047
Test: m
Change-Id: Ibbc11e0f1d103016883f67e2720777b43c08d282
2022-06-27 12:53:49 +00:00
Treehugger Robot
0e2fe7c95d Merge "add more comments about bpfGetFd... and kernel version compatibility" 2022-06-23 20:00:23 +00:00
Treehugger Robot
e182ece901 Merge "refactor common logic into abortOnKeyOrValueSizeMismatch" 2022-06-23 19:53:41 +00:00
Maciej Żenczykowski
0ce7758487 add more comments about bpfGetFd... and kernel version compatibility
Per request on:
  https://googleplex-android-review.googlesource.com/c/platform/frameworks/libs/net/+/18992756

Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I853d177623dc64fdac70ddefde3e0cc65d6b2c9a
2022-06-23 13:20:39 +00:00
Maciej Żenczykowski
96ffe3733c refactor common logic into abortOnKeyOrValueSizeMismatch
Per request on:
  https://googleplex-android-review.googlesource.com/c/platform/frameworks/libs/net/+/18992756

While we're at it let's temporarily remove the check in .reset(fd)
  if (bpfGetFdMapFlags(mMapFd) != 0) abort(); // TODO: fix for BpfMapRO

We'll add it back when the code is in better shape,
and read-only vs read-write state of the map is something
we actually *know*.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Id8d65bdc529872685b42656e638f22048fafb7f6
2022-06-23 13:20:35 +00:00
Maciej Żenczykowski
1a542aa48d bpf_helpers - BPFLOADER_T_VERSION is v0.19
Test: N/A
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I1298757926acfe299d4646e4e3f1ead3a0dfa806
2022-06-23 13:15:14 +00:00
Maciej Żenczykowski
53a144ea2e actually enable the use of new fields added in previous commit
(split in two to facilitate manual testing)

Bug: 218408035
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ifc00ed168231615819b88b232155e1fe6f9a8c71
2022-06-18 20:14:48 -07:00
Maciej Żenczykowski
d4e612b1e7 support per-map/prog selinux context and cross .o map sharing
Tested by making the map struct conditional on #define V18,
and only #defining that in the top line of netd.c,
this results in:

$ objdump -s -j size_of_bpf_map_def out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/net_shared/clatd.o
out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/net_shared/clatd.o:     file format elf64-little
Contents of section size_of_bpf_map_def:
 0000 30000000 00000000                    0.......

$ objdump -s -j size_of_bpf_prog_def out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/net_shared/clatd.o
out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/net_shared/clatd.o:     file format elf64-little
Contents of section size_of_bpf_prog_def:
 0000 1c000000 00000000                    ........

$ objdump -s -j size_of_bpf_map_def out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/netd_shared/netd.o
out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/netd_shared/netd.o:     file format elf64-little
Contents of section size_of_bpf_map_def:
 0000 74000000 00000000                    t.......

$ objdump -s -j size_of_bpf_prog_def out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/netd_shared/netd.o
out/target/product/vsoc_x86_64/apex/com.android.tethering/etc/bpf/netd_shared/netd.o:     file format elf64-little
Contents of section size_of_bpf_prog_def:
 0000 5c000000 00000000                    \.......

$ echo $[0x00000030] $[0x00000074]
48 116

$ echo $[0x0000001c] $[0x0000005c]
28 92

and it still successfully boots.
So the struct extension infrastructure works as desired.

Bug: 218408035
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I8b55769e69dbf9580e844f2a50d48651fd9a0cff
2022-06-18 14:03:50 -07:00
Maciej Żenczykowski
2efccc5a0e BpfMap.h - hide dangerous stuff behind #ifdef BPF_MAP_MAKE_VISIBLE_FOR_TESTING
while we're at it:
  - replace 'unique_fd != -1' with unique_fd.ok() which is
    a test for fd.get() >= 0 and is thus effectively equivalent
  - make use of the fact that unique_fd.reset()
    takes care to save errno.

(see impl. in //system/libbase/include/android-base/unique_fd.h )

Bug: 236285127
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I6fb7bf28a2265ad84baa3c552b39c620cb3875fe
2022-06-16 19:25:30 +00:00
Maciej Żenczykowski
cf4b58f98f BpfMap - add BpfMapRO.init() support
Really we need to fix the inheritance to make
BpfMapRO the parent class of BpfMap:
but that's a far more difficult thing to do,
so in the short term we punt like this.

This makes BpfMapRO a little bit more usable,
and allows a slow transition across the codebase...

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I1c5112db70e9e523c113cba536fbe19422b4d3f3
2022-06-13 19:37:03 -07:00
Maciej Żenczykowski
4b1b4090de TEST_BPF_MAP -> BPF_MAP_MAKE_VISIBLE_FOR_TESTING
Per request of Lorenzo on:
  https://googleplex-android-review.git.corp.google.com/c/platform/frameworks/libs/net/+/18694820
  https://googleplex-android-review.git.corp.google.com/c/platform/packages/modules/Connectivity/+/18695355

Although he'd suggested 'BPF_MAP_TEST_ONLY',
but I think this is even clearer.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie1185a61e80abe94e19903f6aa66bb1ad29ce2f4
2022-06-13 19:37:03 -07:00
Maciej Żenczykowski
e8dceddeec enable NETLINK_EXT_ACK extended error reporting
(we don't yet do anything with it, but at least in strace we should
now see more detailed errors from the kernel)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I6a34a0e7e866bbde41daef23870ad90dceee6ded
2022-06-10 21:10:15 +00:00
Maciej Żenczykowski
0b2781b5ec add ALOGW/ALOGI/ALOGD to logging.h
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I99c7892f10f89a81e0c18838328aa7f945a3817a
2022-06-10 19:00:07 +00:00
Maciej Żenczykowski
023ad6a087 fix sign of error to be positive when passed to strerror()
Currently we see:
  E TcUtils : NLMSG_ERROR message return error: -2
  E ConnectivityService: TcUtils.tcFilterAddDevIngressPolice(ifaceIndex=6, PRIO_POLICE, ETH_P_ALL, rateInBytesPerSecond=2500000, bpfProgPath=/sys/fs/bpf/netd_shared/prog_netd_schedact_ingress_account) failure:
  E ConnectivityService: java.io.IOException: com_android_net_module_util_TcUtils_tcFilterAddDevIngressPolice error: : Unknown error -2

Bug: 231495412
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ib49171e13d06082a37cbb12def1285d8875b5279
2022-06-09 22:35:13 +00:00
Maciej Żenczykowski
5c5fae7a8b BpfMap key/value access size verification
(beginning there of)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Ie7cf8cd51b4e272fc76a281df6231ed27955ed3f
2022-06-03 21:23:39 +00:00
Maciej Żenczykowski
1a31e3e68e BpfMap: simplify .init() mMapFd assignment
this way is more obviously not calling dup_with_cloexec

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I4e1ce3b0a42ccea638332ae451e291e025d57895
2022-06-01 15:17:17 -07:00
Maciej Żenczykowski
ec3e848a13 Merge "BpfMap: introduce resetMap(type, entries, flags)" 2022-06-01 09:00:46 +00:00
Maciej Żenczykowski
1db4a793b1 BpfMap: introduce resetMap(type, entries, flags)
to replace less safe uses of BpfMap.reset(create(type, keysize, valuesize, entries, flags))

Meant to be used in tests only.

Bug:
Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I869f1f935bcf5d00702c42bc46d6094ea552addc
2022-05-31 07:30:24 -07:00
Maciej Żenczykowski
9a276e68f8 Fix parsing of kernel version 5.18-rc1
Test: TreeHugger
Bug: 234125620
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I624927cacd2722f4fc61ef419de74254cecdd77b
2022-05-27 19:43:47 +00:00
Maciej Żenczykowski
70cd8e7de8 synchronizeKernelRCU - update comment
Test: N/A, comment only
Signed-of-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I839a457fdb8f5b95f60cb9cd41983fbcf3792768
2022-05-27 15:06:41 +00:00
Maciej Żenczykowski
0b3a990e72 Merge "define necessary bpf helper functions" 2022-05-26 10:15:19 +00:00
eric.yan
fa1baa1b4c define necessary bpf helper functions
add bpf helper functions: bpf_get_stackid; bpf_get_current_comm

Signed-off-by: eric.yan <eric.yan@oppo.com>
Change-Id: If0daccfe8504fc107ed8d07bef92ed40b101dbc5
2022-05-26 09:29:26 +08:00
Maciej Żenczykowski
eeb588721e cache kernelVersion(), make isAtLeastKernelVersion() cheaper
not perfect due to this being in a header file, so multiple copies
potentially exist, but it's really simple, and works nearly as well.

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: Id90c6933d57bc12f4dd640c8918fd0885c7474cf
2022-05-25 12:41:25 -07:00
Maciej Żenczykowski
6f49c95686 bpf_helpers.h - add #define's for S/T bpfloader versions
(by request from Lorenzo)

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I802d2aae8b103375d7cbe0ed5c35f0abf6c04ac9
2022-05-24 16:07:27 -07:00
Maciej Żenczykowski
28e5347154 BpfMap: cache bpf map file descriptors
We switch back to int from ParcelFileDescriptor,
and eliminate all calls to close().  Bpf Map FDs
now live till process exit.

Bug: 230880517
Test: TreeHugger, atest com.android.networkstack.tethering.BpfMapTest
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I89b6dc88ea56cb1e50695f8daf54ed79bce3fba2
2022-05-19 01:26:55 -07:00
Hungming Chen
b411547dd2 BpfMap: wrap native fd with ParcelFileDescriptor to avoid fd leak
ParcelFileDescriptor has implemented finalize(). Wrap native fd into
ParcelFileDescriptor which helps to release fd automatically.

Bug: 230880517
Test: manual test
Steps:
1. Connect to IPv6 only wifi and clat maps are created
$ adb shell cmd wifi set-wifi-enabled enabled
05-12 13:53:41.182  1793  2031 W BpfMap  : open /sys/fs/bpf/net_shared/map_clatd_clat_ingress6_map..: 493
05-12 13:53:41.182  1793  2031 W BpfMap  : open /sys/fs/bpf/net_shared/map_clatd_clat_egress4_map..: 546

$ adb shell ls -all proc/1793/fd | grep bpf
.. system system 64 2022-05-12 13:55:35 .. 493 -> anon_inode:bpf-map
.. system system 64 2022-05-12 13:55:35 .. 546 -> anon_inode:bpf-map

$ adb shell dumpsys connectivity
Forwarding rules:
  BPF ingress map: iif nat64Prefix v6Addr -> v4Addr oif
    47 /64:ff9b::/96 /2a00:79e1:abc:6f02:6efd:1d4b:f05e:25bd -> /192.0.0.4 54
  BPF egress map: iif v4Addr -> v6Addr nat64Prefix oif
    54 /192.0.0.4 -> /2a00:79e1:abc:6f02:6efd:1d4b:f05e:25bd /64:ff9b::/96 47 ether

2. Disconnect from IPv6 only wifi, force GC and clat map fds are released
$ adb shell cmd wifi set-wifi-enabled disabled
$ adb shell kill -10 1793
$ adb shell ls -all proc/1793/fd | grep bpf
(fd 493 and 546 are removed)

Change-Id: I26bbafbd73eccab6f4ae2c71690ecad12bbef7df
2022-05-12 15:41:19 +08:00
Patrick Rohr
ba48d10969 Make libtcutils visible to netd tests
Test: TH
Change-Id: I71943cfd2fb72dca8a7ffd5d063860b89be47ca1
2022-03-30 09:38:06 +02:00
Hungming Chen
556c8010c9 TcUtils: add tcQdiscAddDevClsact
Support tc command:
$ tc qdisc add dev .. clsact

Test: TreeHugger
Change-Id: I98abcb59418ab12b6e4de0f42a18ded4677ddbfc
2022-03-17 17:23:04 +08:00
Stephane Lee
4806feb3a5 Allow use of shared bpf headers by recovery
This will allow healthd to filter uevent packets, if needed

Bug: 203462310
Test: Ensure that healthd can build if it uses bpf filters
Change-Id: I97bfe9509a6934444f656508176495bba38381be
2022-03-09 14:16:41 -08:00
Ken Chen
c434f7fa6e Merge "BpfUtils.h - switch to GTEST_SKIP in all 4 SKIP macros" 2022-03-02 08:53:01 +00:00
Ken Chen
0a31b342a1 BpfUtils.h - switch to GTEST_SKIP in all 4 SKIP macros
patch the missing commit I3acb47a432378f257418f81b26516e18d6ff3780.

Test: TreeHugger, atest libbpf_android_test netd_unit_test
netd_integration_test

Change-Id: I6b7114584759c0689e0d6b852387b93a799f663f
2022-03-02 03:19:49 +00:00
Tyler Wear
e48ee4a864 Bpf Util Lib in Common Location
Add bpf lib to load and attach BPF programs in commonly accesible
location.

Bug: 179733303

Change-Id: I17b68abb14e816e7210bc603ffda44e10fb73d2f
2022-03-01 09:09:36 -08:00
Maciej Żenczykowski
4f8654ce07 Merge "Fix wrong nla_type for matchall" 2022-02-11 20:42:35 +00:00
Patrick Rohr
20dcaf5f70 Fix wrong nla_type for matchall
TCA_U32_ACT was missed when converting from the u32 filter to matchall.
Interestingly, cls_matchall does not seem to validate this type as the
kernel happily accepted this configuration (which absolutely should not
happen as TCA_U32_ACT is greater than __TCA_MATCHALL_MAX).

Bug: 218840346
Test: atest CtsNetTestCases:RateLimitTest
Change-Id: Ia24683cbd5fbd10084163db6e6a4415ec03f6f3f
2022-02-11 13:24:51 +01:00
Maciej Żenczykowski
62b3d9fbb2 Merge "expose bpf_syscall_wrappers to art apex" 2022-02-10 23:26:49 +00:00
Maciej Żenczykowski
4395ff6815 Merge "switch from libbpf_android to bpf_headers" 2022-02-10 19:03:33 +00:00
Maciej Żenczykowski
2645d2374b Merge "bpf_headers/bpf_syscall_wrappers - remove visibility restrictions" 2022-02-10 19:03:15 +00:00
Maciej Żenczykowski
a11e698749 expose bpf_syscall_wrappers to art apex
The art apex already has access to bpf_headers which includes bpf_syscall_wrappers,
but this extra line is needed to switch it away from needlessly linking libbpf_android.

Since these are header files only, this annotation is kind of pointless,
but it does turn out to be needed...

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I9e4d3373cea488080304e31ed7c8708aec988933
2022-02-09 22:23:01 -08:00
Maciej Żenczykowski
c805004f6d switch from libbpf_android to bpf_headers
Test: TreeHugger, atest libbpf_android_test
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: I215ac3c5d4820bfef94a48024d511ea86012eb0f
2022-02-09 19:33:20 -08:00
Maciej Żenczykowski
6b1d684059 bpf_headers/bpf_syscall_wrappers - remove visibility restrictions
this doesn't appear to make sense now that it's available to vendors

Test: TreeHugger
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Change-Id: If2d24fa8eccfb5c12832fb191a8560b024751db7
2022-02-09 19:33:20 -08:00
Maciej Żenczykowski
b751aee9ab Merge "Add attach bpf with flags and detach single bpf" 2022-02-10 02:26:56 +00:00
KaiWen Zheng
cfe2f2a1c9 Add attach bpf with flags and detach single bpf
Attach bpf program to cgroup with flags, support 'BPF_F_ALLOW_OVERRIDE'
and 'BPF_F_ALLOW_MULTI'; corresponding to detach a single bpf program in
a cgroup.

Test: m
Signed-off-by: KaiWen Zheng <zhengkaiwen5@xiaomi.corp-partner.google.com>
Change-Id: I9a4d2dcb249c6c628e3f1287d7d5d1879b722bd6
2022-02-09 19:27:58 +08:00
Steven Moreland
b0df1895d5 bpf_headers for vendor.
For waitForProgsLoaded.

Bug: 162057235
Test: build, load bpf program from vendor
Change-Id: Ib670aada0a98249fed21beb72879326286b2f4c2
2022-02-08 22:30:07 +00:00