From 1e1d33614115260b016bee4ab4b767031ad5c06e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Thu, 11 Sep 2025 12:37:26 -0700 Subject: [PATCH] BpfMap: remove @CriticalNative from nativeSynchronizeKernelRCU() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There's been some reports that this can cause process termination due to gc/sleep logic thinking the thread is stuck for >4s. While this implies that RCU is stuck for >4s, maybe this is something that can happen on lower power devices. It seems prudent to (at least temporarily) revert back to the old non-CriticalNative behaviour. Test: TreeHugger Flag: EXEMPT mainline, bugfix Signed-off-by: Maciej Żenczykowski Change-Id: I56b2802132f252a02411a9a8f762d98ab2f336ad --- staticlibs/device/com/android/net/module/util/BpfMap.java | 2 -- .../native/bpfmapjni/com_android_net_module_util_Bpf.cpp | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/staticlibs/device/com/android/net/module/util/BpfMap.java b/staticlibs/device/com/android/net/module/util/BpfMap.java index 72cb430965..5488706533 100644 --- a/staticlibs/device/com/android/net/module/util/BpfMap.java +++ b/staticlibs/device/com/android/net/module/util/BpfMap.java @@ -28,7 +28,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import dalvik.annotation.optimization.CriticalNative; import dalvik.annotation.optimization.FastNative; import java.util.NoSuchElementException; @@ -304,6 +303,5 @@ public class BpfMap implements IBpfMap private native boolean nativeFindMapEntry(int fd, byte[] key, byte[] value) throws ErrnoException; - @CriticalNative private static native int nativeSynchronizeKernelRCU(); } diff --git a/staticlibs/native/bpfmapjni/com_android_net_module_util_Bpf.cpp b/staticlibs/native/bpfmapjni/com_android_net_module_util_Bpf.cpp index f0e724657b..9e7afe1bc0 100644 --- a/staticlibs/native/bpfmapjni/com_android_net_module_util_Bpf.cpp +++ b/staticlibs/native/bpfmapjni/com_android_net_module_util_Bpf.cpp @@ -136,7 +136,8 @@ static jboolean com_android_net_module_util_BpfMap_nativeFindMapEntry(JNIEnv *en return throwIfNotEnoent(env, "nativeFindMapEntry", ret, errno); } -static jint com_android_net_module_util_BpfMap_nativeSynchronizeKernelRCU() { +static jint com_android_net_module_util_BpfMap_nativeSynchronizeKernelRCU(JNIEnv *env, + jclass clazz) { const int pfSocket = socket(AF_KEY, SOCK_RAW | SOCK_CLOEXEC, PF_KEY_V2); if (pfSocket < 0) return -errno; // On Linux close() will always close the fd, any error it returns is a previous pending error. @@ -196,7 +197,6 @@ static const JNINativeMethod gBpfMapMethods[] = { (void*) com_android_net_module_util_BpfMap_nativeGetNextMapKey }, { "nativeFindMapEntry", "(I[B[B)Z", (void*) com_android_net_module_util_BpfMap_nativeFindMapEntry }, - // CriticalNative { "nativeSynchronizeKernelRCU", "()I", (void*) com_android_net_module_util_BpfMap_nativeSynchronizeKernelRCU },