From 1da1945e261b597dbfa94b8eed9494cfeb5669be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Fri, 16 May 2025 11:07:51 -0700 Subject: [PATCH] NetBpfLoad: disallow 32-bit userspace on 6.13+ kernels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is basically a no-op as 32-bit netd already fails on android-mainline @ 6.13 (we're now at 6.14, 6.15 is coming in a few weeks). I know this because we had to fix ACK 6.12, and didn't port it forward. Note: AFAIK TV is planning to release on 25Q2 and then 27Q2, so this 26Q2+ doesn't actually affect them till a year later in 27Q2. Modern arm cores are dropping 32-bit cpu instruction decode support. This already happened on Pixel 8+ (Tensor G3+) and is soon coming to the GCE cloud machines underpinning our cuttlefish VMs (this is very much an industry wide trend for modern aarch64 cores, I believe all new application cores since 2023 have been 64-bit only). Pixel 6a is AFAIK the last pixel with 32-bit application support, and that is reaching EOL approximately in July 2027. (while most test coverage is on Pixel 6/6pro which EOLs in Oct 2026) Note though that this isn't a great example: AFAIK all Pixels have had 64-bit system userspace (which is what we care about here) The transition happened in the final Nexus, the year before Pixel 1. This means we're going to start losing *any* remaining vestiges of test coverage that we still (might) have. Test: TreeHugger Flag: EXEMPT mainline Signed-off-by: Maciej Żenczykowski Change-Id: Ie8a5a5dafd2f0e20ef4651c3a69957fde374ae4b --- bpf/loader/NetBpfLoad.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/bpf/loader/NetBpfLoad.cpp b/bpf/loader/NetBpfLoad.cpp index 631f5c51da..d910da2ccd 100644 --- a/bpf/loader/NetBpfLoad.cpp +++ b/bpf/loader/NetBpfLoad.cpp @@ -1795,6 +1795,19 @@ static int doLoad(char** argv, char * const envp[]) { } } + // Linux 6.12 was an LTS released at the end of 2024 (Nov 17), + // and was first supported by Android 16 / 25Q2 (released in June 2025). + // The next Linux LTS should be released near the end of 2025, + // and will likely be 6.18. + // Since officially Android only supports LTS, 6.13+ really means 6.18+, + // and won't be supported before 2026, most likely Android 17 / 26Q2. + // 6.13+ (implying 26Q2+) requires 64-bit userspace. + if (isUserspace32bit() && isAtLeastKernelVersion(6, 13, 0)) { + // due to previous check only reachable on Arm && (<=T kernel uprev || TV || Wear) + ALOGE("64-bit userspace required on 6.13+ kernels."); + return 1; + } + if (isAtLeast25Q2) { FILE * f = fopen("/system/etc/init/netbpfload.rc", "re"); if (!f) {