Snap for 12205827 from 1981ad2f0eab22577f4542e30a7d00ae11c1b44a to 24Q4-release
Change-Id: I23e6ec014ce0c652251d67b689b9955406325da4
diff --git a/loader/Android.bp b/loader/Android.bp
index 1e7ece8..5854f86 100644
--- a/loader/Android.bp
+++ b/loader/Android.bp
@@ -59,6 +59,28 @@
],
}
+rust_bindgen {
+ name: "libbpf_android_bindgen",
+ crate_name: "bpf_android_bindgen",
+ wrapper_src: "include/libbpf_android.h",
+ source_stem: "bindings",
+ bindgen_flags: [
+ "--verbose",
+ ],
+ cflags: [
+ "-Werror",
+ "-Wall",
+ "-Wextra",
+ "-Wno-pragma-once-outside-header",
+ ],
+ shared_libs: [
+ "libbase",
+ "libutils",
+ "liblog",
+ "libbpf_android",
+ ],
+}
+
cc_test {
name: "libbpf_load_test",
test_suites: ["general-tests"],
@@ -89,29 +111,14 @@
require_root: true,
}
-cc_binary {
+rust_binary {
name: "bpfloader",
-
- defaults: ["bpf_defaults"],
- cflags: [
- "-Wall",
- "-Werror",
- "-Wthread-safety",
- ],
- sanitize: {
- integer_overflow: true,
- },
-
- header_libs: ["bpf_headers"],
- shared_libs: [
- "libbase",
- "liblog",
- ],
- static_libs: ["libbpf_android"],
srcs: [
- "BpfLoader.cpp",
+ "bpfloader.rs",
],
-
+ rustlibs: [
+ "libbpf_android_bindgen",
+ ],
required: [
"timeInState.o",
],
diff --git a/loader/BpfLoader.cpp b/loader/BpfLoader.cpp
deleted file mode 100644
index f180f4e..0000000
--- a/loader/BpfLoader.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <libbpf_android.h>
-
-__noreturn int main() {
- initLogging();
- legacyBpfLoader();
- execNetBpfLoadDone();
- // unreachable
-}
diff --git a/loader/bpfloader.rs b/loader/bpfloader.rs
new file mode 100644
index 0000000..0cd5e0e
--- /dev/null
+++ b/loader/bpfloader.rs
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//! BPF loader for system and vendor applications
+
+fn main() {
+ // SAFETY: Linking in the existing legacy bpfloader functionality.
+ // Any of the three following bindgen functions can abort() or exit()
+ // on failure and execNetBpfLoadDone() execve()'s.
+ unsafe {
+ bpf_android_bindgen::initLogging();
+ bpf_android_bindgen::legacyBpfLoader();
+ bpf_android_bindgen::execNetBpfLoadDone();
+ }
+}