- Oct 06, 2023
-
-
Maciej Żenczykowski authored
(in preparation for moving it into netbpfload) The programs themselves (in bpf_progs/block.c) required a 5.4+ kernel. We relax this restriction to 4.19+ as we don't have any 5.4 device coverage (while the pixel 4a 5G / 5 / 5a are all 4.19 devices). I believe we could relax it further to 4.14+ but Pixel 4/4xl/4a that would exercise those code paths are EOL and probably have poor to non existent test coverage, and we cannot do anything for 4.9 T devices anyway. Note: on <4.19 kernels (ie. T devices running 4.9/4.14, U running 4.14) this results in ConnectivityNativeService going from null to initialized (as the bpf map will exist). This doesn't hurt as the set/clear port interfaces are only ever called by vendor code on devices where the kernel doesn't support the older mechanism. And even if you call them it will just set/clear the bits in the bpf bitmap, they just won't actually affect anything. We could flag the map itself as being 4.19+ as well, but I think I prefer the no-op map to exist... Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I1085addd22f4f3b709e1875049633832c5dac836
-
- Oct 04, 2023
-
-
Maciej Żenczykowski authored
Test: TreeHugger Bug: 292156770 Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I6e4527a8cb5b5bfc033c5a4d09f0b78080c163c9
-
- Sep 29, 2023
-
-
Maciej Żenczykowski authored
https://android-developers.googleblog.com/2022/09/optimize-for-android-go-lessons-from-google-apps-part-1.html Year Android MinRAM 2017 8/O 512 MB 2018 9/P 512 MB 2019 10/Q 512 MB 2020 11/R 1 GB 2021 12/S 1 GB 2022 13/T 2 GB More than 4GB (and really even ~3..3.5 GB) of ram basically requires a 64-bit kernel, as no one wants to deal with debugging PAE kernel complexities. Devices newly launching on 2023's Android 14/U must use a 64-bit kernel. 5.15 LTS is highest supported by T. Hence 5.16+ must be a 64-bit kernel. (see vts_kernel_isa_test.cpp) Note: This change doesn't take effect until 2024's Android 15/V, and only then on the latest 6.~6 LTS, which will only be used with the latest SoCs, and will thus only affect the latest and thus premium devices (which likely have 10+ GB). By the time these 6.6 using SoCs reach lower end devices, it'll be 2026 or later, at which point I expect even low end devices will have 4+GB. Additionally note that technically this only affects mainline using devices. Non mainline usecases can be customized (ie. for example this change reverted) by oems/vendors however they wish. Although we won't be providing support (but considering the existing state of 32-bit testing, that's already pretty much the case). Test: TreeHugger Bug: 163141236 Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I64f5db5a440465f0b48368815fea3029619a9681
-
Maciej Żenczykowski authored
Bug: 235590615 Bug: 235907076 Bug: 286003437 Test: TreeHugger, m droid gpuservice_unittest libtimeinstate_test bpf_benchmark bpf_module_test libbpf_load_test && mma Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I020a898fe8b257040a100f146654d4a04b19f843
-
- Sep 01, 2023
-
-
Maciej Żenczykowski authored
Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I3f6440dfe3eb71fbe845eb70c0a6c53110f8d46f
-
- Aug 20, 2023
-
-
Maciej Żenczykowski authored
The FD number isn't actually useful debugging information, and I want to get rid of this fd leak out of BpfMap class. Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I981832b019b57f534bed1c1fbfedf6457abba6fa
-
- Jun 14, 2023
-
-
Maciej Żenczykowski authored
while at it add 'const' to satisfy the linter Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I207be20c75b103bc5332c111291e4c439ba82219
-
- Jun 05, 2023
-
-
Nick Wille authored
Bug: b/278923463 Test: Treehugger Change-Id: I5b46b488723ebcde223b758c03c70fa8b1f14c25
-
- Jun 02, 2023
-
-
Maciej Żenczykowski authored
This is defined here: http://cs/h/android/platform/superproject/+/master:system/core/libprocessgroup/profiles/cgroups.json?l=27 and has been a constant since https://android-review.googlesource.com/c/platform/system/core/+/1324649 was merged back on August 21, 2020 (ie. Android S) But currently there's no easy way to get at this constant from mainline code... which means it's very difficult to do any bpf cgroup attach/detach from mainline. btw. this appears to also be already hardcoded in: http://cs/h/android/platform/superproject/+/master:packages/modules/Connectivity/service/src/com/android/server/connectivity/ConnectivityNativeService.java?l=48 as well Fix: 285432857 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> (cherry picked from https://android-review.googlesource.com/q/commit:65075bb8f8290125fbd0ce8ffc5aaab6bdb3284e) Merged-In: I99f4a5a26dd10f6ea70bf73114af0d18098de630 Change-Id: I99f4a5a26dd10f6ea70bf73114af0d18098de630
-
Maciej Żenczykowski authored
This is defined here: http://cs/h/android/platform/superproject/+/master:system/core/libprocessgroup/profiles/cgroups.json?l=27 and has been a constant since https://android-review.googlesource.com/c/platform/system/core/+/1324649 was merged back on August 21, 2020 (ie. Android S) But currently there's no easy way to get at this constant from mainline code... which means it's very difficult to do any bpf cgroup attach/detach from mainline. btw. this appears to also be already hardcoded in: http://cs/h/android/platform/superproject/+/master:packages/modules/Connectivity/service/src/com/android/server/connectivity/ConnectivityNativeService.java?l=48 as well Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I99f4a5a26dd10f6ea70bf73114af0d18098de630
-
- May 15, 2023
-
-
Maciej Żenczykowski authored
Bug: 282170301 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: Ic432da1ffe3951955401a0f547522dd0ab96b67c
-
- Apr 19, 2023
-
-
Maciej Żenczykowski authored
The random grab bag of stuff in BpfUtils.h is weird, and I'm trying to trim it down. Since this is coming from the kernel, 0 meaning error / no socket is actually kernel api and thus guaranteed. IMHO if (!cookie) is also clearer to read. Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I433dfca5695a04a42d632b7e0c2434db26c4ed00
-
- Feb 22, 2023
-
-
Maciej Żenczykowski authored
These two checks are theoretically equivalent, since netd.o marks the program as requiring 4.14+. Thus unless netd.o bpf program is broken, or bpfloader is misbehaving, this change is a no-op. Bug: 270276754 Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I2c6982e7476c2fa56b67532c80d97d7389030d32
-
- Dec 20, 2022
-
-
Maciej Żenczykowski authored
The 3 pre-existing //system/netd tests are: TEST_F(BpfBasicTest, TestCgroupMounted) TEST_F(BpfBasicTest, TestTagSocket) TEST_F(BpfBasicTest, TestCloseSocketWithoutUntag) which are directly related to BpfHandler.cpp implementation, as it implements: Status BpfHandler::init(const char* cg2_path) BpfHandler::tagSocket() BpfHandler::untagSocket() Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I1c01ae90904faaea54b427495c7a5deab8b1b900
-
- Dec 18, 2022
-
-
Maciej Żenczykowski authored
Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I2e1569c8d70e98f9a3fdbab41fd2ba7f7b84dd37
-
- Oct 27, 2022
-
-
Lorenzo Colitti authored
This effectively reverts commit 6ed2ab9b, while ensuring that the program has the right permissions as defined in r.android.com/2130014 : oriole:/ # ls -lZ /sys/fs/bpf/netd_shared/prog_netd_cgroupsock_inet_create -r--r----- 1 root root u:object_r:fs_bpf_netd_readonly:s0 0 2022-10-27 20:05 /sys/fs/bpf/netd_shared/prog_netd_cgroupsock_inet_create Reason for revert: need to support 4.9 devices upgrading to T. The only thing that cannot currently be supported on those devices is the inet_create program which implements the INTERNET permission. Also, update bpf_existence_test so it does not check for the existence of the program on pre-4.14 devices. Bug: 254001921 Test: atest bpf_existence_test Change-Id: I14f26cee5feeaae93b4d9710a7b9a2f835ff405f
-
- Sep 01, 2022
-
-
Maciej Żenczykowski authored
since it doesn't actually work (this runs in netd, but is meant to protect against system server modifications) Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I87f268f1a68c559b19caa4d625cb9eb8395c91e2
-
- Aug 15, 2022
-
-
Maciej Żenczykowski authored
Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I8987f33b3f3427683e5ae9b2931528f91d6f0aeb
-
- Aug 07, 2022
-
-
Maciej Żenczykowski authored
Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: Ib026f9d7cddcd266a634fbc0d50c5589665f7bb5
-
- Jun 21, 2022
-
-
Maciej Żenczykowski authored
This eliminates the need for netd_updatable BpfHandler.cpp to initialize the hash map with a zero. On startup the map will be freshly initialized and thus zero. On restart it might not be empty, but it doesn't matter to netd. Furthermore the mainline component of the system server will re-initialize it again anyway: see service/native/TrafficController.cpp initMaps() This does remove the ability to call deleteValue on a key, since that would always return -EINVAL, but since we don't currently do that, that's really a feature. (It does suggest though that we should have a BpfMapNonNullable class which is writeable, but without a deleteValue() function) Additionally BpfMap arrays are more efficient for the kernel bpf jit compiler, as - on newer kernels - it can optimize the read/write into a simple memory access (as opposed to a bpf helper call). Before: $ adb shell ls -l /sys/fs/bpf/netd_shared/map_netd_configuration_map -rw-rw---- 1 root net_bw_acct 0 2022-06-11 08:20 /sys/fs/bpf/netd_shared/ map_netd_configuration_map After: $ adbz shell ls -l /sys/fs/bpf/netd_shared/map_netd_configuration_map -r--rw---- 1 root net_bw_acct 0 2022-06-16 15:03 /sys/fs/bpf/netd_shared/map_netd_configuration_map Bug: 218408035 Bug: 235590615 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I21730e4fa22fbf0c94ab0ca5c5db03aa000b7680 (cherry picked from commit b10e055f) Merged-In: I21730e4fa22fbf0c94ab0ca5c5db03aa000b7680
-
Maciej Żenczykowski authored
We'd like to switch more of these (as netd should only be writing into the cookie map), but this is the only one where tests (and the BpfMap vs BpfMapRO inheritence inversion) don't get in our way. We'll fix the rest later. This gives us an *example* for further testing. Bug: 218408035 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I9b280c7ba2d19644fc3cdd0c132de85f45df69b4 (cherry picked from commit 21ce721b) Merged-In: I9b280c7ba2d19644fc3cdd0c132de85f45df69b4
-
- Jun 16, 2022
-
-
Maciej Żenczykowski authored
This eliminates the need for netd_updatable BpfHandler.cpp to initialize the hash map with a zero. On startup the map will be freshly initialized and thus zero. On restart it might not be empty, but it doesn't matter to netd. Furthermore the mainline component of the system server will re-initialize it again anyway: see service/native/TrafficController.cpp initMaps() This does remove the ability to call deleteValue on a key, since that would always return -EINVAL, but since we don't currently do that, that's really a feature. (It does suggest though that we should have a BpfMapNonNullable class which is writeable, but without a deleteValue() function) Additionally BpfMap arrays are more efficient for the kernel bpf jit compiler, as - on newer kernels - it can optimize the read/write into a simple memory access (as opposed to a bpf helper call). Before: $ adb shell ls -l /sys/fs/bpf/netd_shared/map_netd_configuration_map -rw-rw---- 1 root net_bw_acct 0 2022-06-11 08:20 /sys/fs/bpf/netd_shared/ map_netd_configuration_map After: $ adbz shell ls -l /sys/fs/bpf/netd_shared/map_netd_configuration_map -r--rw---- 1 root net_bw_acct 0 2022-06-16 15:03 /sys/fs/bpf/netd_shared/map_netd_configuration_map Bug: 235590615 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I21730e4fa22fbf0c94ab0ca5c5db03aa000b7680
-
- Jun 14, 2022
-
-
Maciej Żenczykowski authored
We'd like to switch more of these, but this is the only one where tests don't get in our way. We'll fix the rest later. This gives us an *example* for further testing. Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I9b280c7ba2d19644fc3cdd0c132de85f45df69b4
-
Maciej Żenczykowski authored
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: I796c939cba8866aca15f3dfff5a27ba986f74df6
-
Maciej Żenczykowski authored
Per request from Lorenzo on: https://googleplex-android-review.git.corp.google.com/c/platform/packages/modules/Connectivity/+/18695355 during cherrypick to tm-dev. Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: Id9e856f1b1c042993e6429e55999bffd9dfb9b12
-
- Jun 08, 2022
-
-
Maciej Żenczykowski authored
BpfMap.reset(createMap()) is equivalent to newly added BpfMap.resetMap(), except that the latter makes it impossible to screw up the Key/Value sizes. Bug: 235286176 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I290986e9ae8660f3fc6f73b086d33f4ab93d6095 (cherry picked from commit 439bac2e) Merged-In: I290986e9ae8660f3fc6f73b086d33f4ab93d6095
-
Maciej Żenczykowski authored
We notice that: BpfMap.reset(dupFd_with_cloexec(BpfMap.getMap()) is equivalent to BpfMap = BpfMap due to the current implementation of the BpfMap assignment operator. Except the latter also verifies BpfMap<K,V> template types match. Bug: 235286176 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I99fcf77bc6aa360b6a19e22c2cd58d67a1e62976 (cherry picked from commit 55ab87aa) Merged-In: I99fcf77bc6aa360b6a19e22c2cd58d67a1e62976
-
- Jun 01, 2022
-
-
Lorenzo Colitti authored
In the BPF code, per-UID network access (e.g., for doze mode, standby, etc.) is stored in UidOwnerValue structures. Each of these stores that UID's rules in a 32-bit bitmask of UidOwnerMatchType values, so the code can support ~31 match types. However, which match types are enabled is stored in configuration_map at index UID_RULES_CONFIGURATION_KEY, and configuration_map only stores 8-bit values. So it's not possible to define more than 7 match types. Widen configuration_map to from 8 to 32 bits to match the width of UidOwnerValue.rule. This doesn't impact memory because configuration_map only has 2 entries. Bug: 208371987 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I7e1eee2daedd66d27965a2dd4ce6b4c3667892f7 (cherry picked from commit 60cbed38) Merged-In: I7e1eee2daedd66d27965a2dd4ce6b4c3667892f7
-
- May 31, 2022
-
-
Maciej Żenczykowski authored
BpfMap.reset(createMap()) is equivalent to newly added BpfMap.resetMap(), except that the latter makes it impossible to screw up the Key/Value sizes. Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I290986e9ae8660f3fc6f73b086d33f4ab93d6095
-
Maciej Żenczykowski authored
We notice that: BpfMap.reset(dupFd_with_cloexec(BpfMap.getMap()) is equivalent to BpfMap = BpfMap due to the current implementation of the BpfMap assignment operator. Except the latter also verifies BpfMap<K,V> template types match. Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I99fcf77bc6aa360b6a19e22c2cd58d67a1e62976
-
Lorenzo Colitti authored
In the BPF code, per-UID network access (e.g., for doze mode, standby, etc.) is stored in UidOwnerValue structures. Each of these stores that UID's rules in a 32-bit bitmask of UidOwnerMatchType values, so the code can support ~31 match types. However, which match types are enabled is stored in configuration_map at index UID_RULES_CONFIGURATION_KEY, and configuration_map only stores 8-bit values. So it's not possible to define more than 7 match types. Widen configuration_map to from 8 to 32 bits to match the width of UidOwnerValue.rule. This doesn't impact memory because configuration_map only has 2 entries. Bug: 208371987 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I7e1eee2daedd66d27965a2dd4ce6b4c3667892f7
-
- May 27, 2022
-
-
Ken Chen authored
In order to get counted by mts code coverage, these native tests need to be run as part of mts. Bug: 233904825 Test: m mts && mts-tradefed run mts-tethering-coverage Change-Id: I79313197b146c7043ffb5e164faa46c2e16dd1d2
-
- May 23, 2022
-
-
Maciej Żenczykowski authored
(for consistency with rest of code base) Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I5660615f24daf4285e2b6cbacecb7cd99061c5f5
-
Ken Chen authored
Configuration map index 1(CURRENT_STATS_MAP_CONFIGURATION_KEY) can only have value 0(SELECT_MAP_A) or 1(SELECT_MAP_B). Return error if it is any other values. Otherwise, read out of array boundary can cause memory corruption or security issues. Bug: 231420457 Test: TH Change-Id: Ia800ad78781f72b8118469c0230cc550796d334e
-
- May 16, 2022
-
-
Maciej Żenczykowski authored
S had a minimum kernel requirement of 4.9, T bumps this up to 4.14, which adds net cgroup bpf support. It's important to ship T with this otherwise we'll be forced into trying to somehow support 4.9 kernels with T mainline module updates for years and years, when we no longer have any tests of the old code paths... Test: TreeHugger Bug: 232017472 Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: I6e873f0815f176f5618278087132156c9974d6ea
-
- Mar 07, 2022
-
-
Hungming Chen authored
This is a follow up commit for the family validation {INET, INET6}. The protocol validation {TCP, UDP} has been added in previous commit. The TrafficController socket destroy listener only monitors on the group {INET_TCP, INET_UDP, INET6_TCP, INET6_UDP}. Tagging listener unsupported socket causes that the tag can't be removed from tag map automatically. Eventually, the tag map run out of space because of dead tag entries. See TrafficController::makeSkDestroyListener in packages/modules/Connectivity/service/native/TrafficController.cpp Also address the comments from previous commit. - Remove the useless else-statment in tagSocket protocol validation. - Make the socket cookie query and test into one line in BpfHandlerTest#TestTagSocketWithUnsupportedProtocol Bug: 223094609 Test: atest BpfHandlerTest Change-Id: I0f571fc00caa01c86399f0dbb593e8a40ad94bbd
-
Hungming Chen authored
The TrafficController socket destroy listener only monitors on the group {INET_TCP, INET_UDP, INET6_TCP, INET6_UDP}. Tagging listener unsupported socket causes that the tag can't be removed from tag map automatically. Eventually, the tag map run out of space because of dead tag entries. See TrafficController::makeSkDestroyListener in packages/modules/Connectivity/service/native/TrafficController.cpp Bug: 223094609 Test: atest BpfHandlerTest Change-Id: Icc19b7c9f37fef498b89f43e44767f6b9e931a5a
-
- Mar 04, 2022
-
-
Hungming Chen authored
The process is not allowed to tag socket to AID_CLAT via tagSocket() which would cause process data usage accounting to be bypassed. Bug: 218407445 Test: atest BpfHandlerTest Change-Id: Ia7b071e1065733da25e9f02f34ccd17f63653217
-
- Feb 10, 2022
-
-
Bob Badour authored
Added SPDX-license-identifier-Apache-2.0 to: netd/Android.bp Bug: 68860345 Bug: 151177513 Bug: 151953481 Test: m all Change-Id: Ib1377fbb050fe52ee195eec58fea67ef769a487a
-
- Feb 03, 2022
-
-
Maciej Żenczykowski authored
Before: $ adbz root && adbz wait-for-device && adbz shell ls -l /apex/com.android.tethering/{bin/for-system,lib,liv64} /apex/com.android.tethering/bin/for-system: = -rwsr-sr-x 1 clat clat 18412 1969-12-31 16:00 clatd /apex/com.android.tethering/lib: = -rw-r--r-- 1 system system 64560 1969-12-31 16:00 libandroid_net_connectivity_com_android_net_module_util_jni.so = -rw-r--r-- 1 system system 713636 1969-12-31 16:00 libc++.so = -rw-r--r-- 1 system system 13596 1969-12-31 16:00 libframework-connectivity-jni.so d -rw-r--r-- 1 system system 212624 1969-12-31 16:00 libnetd_updatable.so d -rw-r--r-- 1 system system 948044 1969-12-31 16:00 libservice-connectivity.so After: $ adbz root && adbz wait-for-device && adbz shell ls -l /apex/com.android. /apex/com.android.tethering/bin/for-system: = -rwsr-sr-x 1 clat clat 18412 1969-12-31 16:00 clatd /apex/com.android.tethering/lib: = -rw-r--r-- 1 system system 64560 1969-12-31 16:00 libandroid_net_connectivity_com_android_net_module_util_jni.so + -rw-r--r-- 1 system system 251404 1969-12-31 16:00 libbase.so = -rw-r--r-- 1 system system 713636 1969-12-31 16:00 libc++.so = -rw-r--r-- 1 system system 13596 1969-12-31 16:00 libframework-connectivity-jni.so d -rw-r--r-- 1 system system 45584 1969-12-31 16:00 libnetd_updatable.so + -rw-r--r-- 1 system system 95872 1969-12-31 16:00 libnetdutils.so d -rw-r--r-- 1 system system 749980 1969-12-31 16:00 libservice-connectivity.so Delta: -212624-948044+251404+45584+95872+749980 == -17828 Test: TreeHugger Signed-off-by:
Maciej Żenczykowski <maze@google.com> Change-Id: Id88468442c4f3f24d5bca96b75effb69f20038bf
-