From aaba77ede8a3481e4a2027d2a97df5abb1b8742c Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 11 Oct 2021 19:04:24 -0400 Subject: [PATCH] gsi: reconcile system fingerprint / device model with vendor --- BoardConfigCommon.mk | 5 +++ device.mk | 5 +++ init/Android.bp | 7 ++++ init/init_gsi.cpp | 61 ++++++++++++++++++++++++++++++++++ init/init_gsi.rc | 5 +++ peter_gsi_arm64/BoardConfig.mk | 1 + resetprop/Android.bp | 1 + sepolicy/private/init.te | 1 + 8 files changed, 86 insertions(+) create mode 100644 BoardConfigCommon.mk create mode 100644 init/Android.bp create mode 100644 init/init_gsi.cpp create mode 100644 init/init_gsi.rc create mode 100644 sepolicy/private/init.te diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk new file mode 100644 index 0000000..b15327e --- /dev/null +++ b/BoardConfigCommon.mk @@ -0,0 +1,5 @@ +DEVICE_PATH := device/peter/gsi + +# Sepolicy +SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS += $(DEVICE_PATH)/sepolicy/private +SELINUX_IGNORE_NEVERALLOWS := true diff --git a/device.mk b/device.mk index 977f91a..e6173b6 100644 --- a/device.mk +++ b/device.mk @@ -29,3 +29,8 @@ PRODUCT_PROPERTY_OVERRIDES += \ # Resetprop PRODUCT_PACKAGES += \ resetprop_sys + +# Init +PRODUCT_PACKAGES += \ + init_gsi + diff --git a/init/Android.bp b/init/Android.bp new file mode 100644 index 0000000..724b1f6 --- /dev/null +++ b/init/Android.bp @@ -0,0 +1,7 @@ +cc_binary { + name: "init_gsi", + system_ext_specific: true, + srcs: ["init_gsi.cpp"], + shared_libs: ["libbase", "libdl", "libutils"], + init_rc: ["init_gsi.rc"], +} diff --git a/init/init_gsi.cpp b/init/init_gsi.cpp new file mode 100644 index 0000000..cb3eff2 --- /dev/null +++ b/init/init_gsi.cpp @@ -0,0 +1,61 @@ +#include +#include + +#include +#include + +#include + +using namespace android; +using namespace std; + +template +void fork_execl(Args... args) { + int pid, status; + if ((pid = fork()) == 0) { + execl(args..., nullptr); + } else { + waitpid(pid, &status, 0); + } +} + +void override_ro_prop(string prefix, string source, string postfix, string value) { + if (value.length() == 0) return; + + std::string prop = prefix; + + if (source.length() > 0) { + prop += "."; + prop += source; + } + + prop += "." + postfix; + std::cout << prop << std::endl; + std::cout << value << std::endl; + + fork_execl("/system/system_ext/bin/resetprop_sys", "resetprop_sys", prop.c_str(), value.c_str()); +} + +std::string RO_PROP_SOURCES[] = { + "", "product", "odm", "vendor", "system_ext", "system", "bootimage", +}; + +int main() { + string device = base::GetProperty("ro.product.vendor.device", ""); + string model = base::GetProperty("ro.product.vendor.model", ""); + string name = base::GetProperty("ro.product.vendor.name", ""); + string brand = base::GetProperty("ro.product.vendor.brand", ""); + string manufacturer = base::GetProperty("ro.product.vendor.manufacturer", ""); + string fingerprint = base::GetProperty("ro.vendor.build.fingerprint", ""); + + for (const auto& source : RO_PROP_SOURCES) { + override_ro_prop("ro.product", source, "device", device); + override_ro_prop("ro.product", source, "model", model); + override_ro_prop("ro.product", source, "name", name); + override_ro_prop("ro.product", source, "brand", brand); + override_ro_prop("ro.product", source, "manufacturer", manufacturer); + override_ro_prop("ro", source, "build.fingerprint", fingerprint); + } + + return 0; +} diff --git a/init/init_gsi.rc b/init/init_gsi.rc new file mode 100644 index 0000000..bb7fb89 --- /dev/null +++ b/init/init_gsi.rc @@ -0,0 +1,5 @@ +service init_gsi /system/system_ext/bin/init_gsi + class core + user root + group root + seclabel u:r:init:s0 diff --git a/peter_gsi_arm64/BoardConfig.mk b/peter_gsi_arm64/BoardConfig.mk index 3cbb176..2c4f524 100644 --- a/peter_gsi_arm64/BoardConfig.mk +++ b/peter_gsi_arm64/BoardConfig.mk @@ -1 +1,2 @@ include build/make/target/board/generic_arm64/BoardConfig.mk +include device/peter/gsi/BoardConfigCommon.mk diff --git a/resetprop/Android.bp b/resetprop/Android.bp index 1cc27d7..c1e2341 100644 --- a/resetprop/Android.bp +++ b/resetprop/Android.bp @@ -1,5 +1,6 @@ cc_binary { name: "resetprop_sys", + system_ext_specific: true, srcs: [ //nanopb "Magisk/native/jni/external/nanopb/pb_common.c", diff --git a/sepolicy/private/init.te b/sepolicy/private/init.te new file mode 100644 index 0000000..492567e --- /dev/null +++ b/sepolicy/private/init.te @@ -0,0 +1 @@ +allow init system_file:file execute_no_trans;