24Q2: use mainline netbpfload from apex am: 13b5e1ff29
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2954707
Change-Id: Id78c598cbdbeeeb12be4cde1360fa8b45ddc3b76
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/netbpfload/netbpfload.rc b/netbpfload/netbpfload.rc
index 14181dc..ffbc33c 100644
--- a/netbpfload/netbpfload.rc
+++ b/netbpfload/netbpfload.rc
@@ -17,7 +17,7 @@
on load_bpf_programs
exec_start bpfloader
-service bpfloader /system/bin/netbpfload
+service bpfloader /apex/com.android.tethering/bin/netbpfload
# netbpfload will do network bpf loading, then execute /system/bin/bpfloader
capabilities CHOWN SYS_ADMIN NET_ADMIN
# The following group memberships are a workaround for lack of DAC_OVERRIDE
diff --git a/service/src/com/android/server/BpfLoaderRcUtils.java b/service/src/com/android/server/BpfLoaderRcUtils.java
index 293e757..99754d5 100644
--- a/service/src/com/android/server/BpfLoaderRcUtils.java
+++ b/service/src/com/android/server/BpfLoaderRcUtils.java
@@ -72,6 +72,17 @@
"updatable"
);
+ private static final List<String> BPF_LOADER_RC_UQPR3 = List.of(
+ "service bpfloader /apex/com.android.tethering/bin/netbpfload",
+ "capabilities CHOWN SYS_ADMIN NET_ADMIN",
+ "group root graphics network_stack net_admin net_bw_acct net_bw_stats net_raw system",
+ "user root",
+ "rlimit memlock 1073741824 1073741824",
+ "oneshot",
+ "reboot_on_failure reboot,bpfloader-failed",
+ "updatable"
+ );
+
private static final String BPF_LOADER_RC_FILE_PATH = "/etc/init/bpfloader.rc";
private static final String NET_BPF_LOAD_RC_FILE_PATH = "/etc/init/netbpfload.rc";
@@ -132,30 +143,31 @@
+ " exist.");
return false;
}
- // Check bpf rc file in U QPR2
- return compareBpfLoaderRc(bpfRcFile, BPF_LOADER_RC_UQPR2);
+ // Check bpf rc file in U QPR2 and U QPR3
+ return compareBpfLoaderRc(bpfRcFile, List.of(BPF_LOADER_RC_UQPR2, BPF_LOADER_RC_UQPR3));
}
if (SdkLevel.isAtLeastU()) {
// Check bpf rc file in U
- return compareBpfLoaderRc(bpfRcFile, BPF_LOADER_RC_U);
+ return compareBpfLoaderRc(bpfRcFile, List.of(BPF_LOADER_RC_U));
}
// Check bpf rc file in S/T
- return compareBpfLoaderRc(bpfRcFile, BPF_LOADER_RC_S_T);
+ return compareBpfLoaderRc(bpfRcFile, List.of(BPF_LOADER_RC_S_T));
}
private static boolean compareBpfLoaderRc(@NonNull File bpfRcFile,
- @NonNull List<String> template) {
+ @NonNull List<List<String>> templates) {
+ List<String> actualContent;
try {
- List<String> actualContent = loadExistingBpfRcFile(new FileInputStream(bpfRcFile));
- if (!actualContent.equals(template)) {
- Log.wtf(TAG, "BPF rc file is not same as the template files " + actualContent);
- return false;
- }
+ actualContent = loadExistingBpfRcFile(new FileInputStream(bpfRcFile));
} catch (FileNotFoundException e) {
Log.wtf(bpfRcFile.getPath() + " doesn't exist.", e);
return false;
}
- return true;
+ for (List<String> template : templates) {
+ if (actualContent.equals(template)) return true;
+ }
+ Log.wtf(TAG, "BPF rc file is not same as the template files " + actualContent);
+ return false;
}
}