BPF: Create rust bpfloader
In preparation for adding libbpf support via libbpf-rs, replace the
existing cpp bpfloader with a rust application calling into the
libbpf_android bindings to the legacy code.
Test: treehugger
Change-Id: I79eff1fece3372727c700308ff9a35029d0e34d3
Signed-off-by: Neill Kapron <nkapron@google.com>
diff --git a/loader/Android.bp b/loader/Android.bp
index ae664df..5854f86 100644
--- a/loader/Android.bp
+++ b/loader/Android.bp
@@ -111,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();
+ }
+}