From 6ccf81104b851d5afd4ab892bcb90164408cf080 Mon Sep 17 00:00:00 2001 From: Pierre-Hugues Husson Date: Fri, 5 Nov 2021 20:40:54 -0400 Subject: [PATCH 01/15] Fix video crashing on apps targetting Android 11, on some Mediatek devices (like Redmi 9) Address SELinux denials for MTK's IMms, which is needed by its GL impl. --- sepolicy/private/mtk_hal_mms.te | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sepolicy/private/mtk_hal_mms.te diff --git a/sepolicy/private/mtk_hal_mms.te b/sepolicy/private/mtk_hal_mms.te new file mode 100644 index 0000000..a60bd2b --- /dev/null +++ b/sepolicy/private/mtk_hal_mms.te @@ -0,0 +1,6 @@ +attribute hal_mms_server; +binder_call({appdomain -isolated_app}, hal_mms_server) +binder_call(hal_mms_server, {appdomain -isolated_app}) + +type mtk_hal_mms_hwservice, hwservice_manager_type; +allow { appdomain -isolated_app } mtk_hal_mms_hwservice:hwservice_manager find; From 31bd18b7385c87a495a68df80bf9c5663ea27206 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Fri, 5 Nov 2021 20:41:44 -0400 Subject: [PATCH 02/15] init_gsi: save original SPL for display in settings * corresponding to the patch in fwb --- init/init_gsi.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/init/init_gsi.cpp b/init/init_gsi.cpp index b3a577c..b278821 100644 --- a/init/init_gsi.cpp +++ b/init/init_gsi.cpp @@ -41,6 +41,7 @@ void handle_device_model_props() { string manufacturer = base::GetProperty("ro.product.vendor.manufacturer", ""); string fingerprint = base::GetProperty("ro.vendor.build.fingerprint", ""); string spl = base::GetProperty("ro.vendor.build.security_patch", ""); + string spl_orig = base::GetProperty("ro.build.version.security_patch", ""); for (const auto& source : RO_PROP_SOURCES) { override_ro_prop("ro.product", source, "device", device); @@ -54,6 +55,7 @@ void handle_device_model_props() { override_ro_prop("ro", "", "build.flavor", name + "-user"); override_ro_prop("ro", "", "build.tags", "release-keys"); override_ro_prop("ro", "", "build.version.security_patch", spl); + override_ro_prop("ro", "", "build.version.real_security_patch", spl_orig); } int main() { From 3b08bf6c6cfdf9f642da7fa3e4d52698568abfc7 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Tue, 4 Jan 2022 21:52:04 -0500 Subject: [PATCH 03/15] quirks: fix bluetooth audio for ulefone power armor 13 --- init/Android.bp | 1 + init/quirks/device/ulefone_power_armor_13.cpp | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 init/quirks/device/ulefone_power_armor_13.cpp diff --git a/init/Android.bp b/init/Android.bp index 9977a59..aaca8b4 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -10,6 +10,7 @@ cc_binary { // Device-specific quirks "quirks/device/unihertz_keylayout.cpp", + "quirks/device/ulefone_power_armor_13.cpp", ], shared_libs: ["libbase", "libdl", "liblog", "libutils"], static_libs: ["libresetprop", "libc++fs"], diff --git a/init/quirks/device/ulefone_power_armor_13.cpp b/init/quirks/device/ulefone_power_armor_13.cpp new file mode 100644 index 0000000..28a689c --- /dev/null +++ b/init/quirks/device/ulefone_power_armor_13.cpp @@ -0,0 +1,22 @@ +#include "../../quirks.h" + +#include + +#include + +using namespace std; + +class UlefonePowerArmor13Quirks : DeviceQuirk { +public: + bool ShouldRun() { + return FP_STARTS_WITH("Ulefone/Power_Armor_13/"); + } + + void Run() { + // Set the A2DP offload properties to disabled so legacy policy is loaded + android::base::SetProperty("persist.bluetooth.a2dp_offload.disabled", "true"); + android::base::SetProperty("persist.bluetooth.bluetooth_audio_hal.disabled", "true"); + } +}; + +LOAD_QUIRK(UlefonePowerArmor13Quirks); From 3aa8526acc64544f1f8e0bc71f1b943d8e1bf456 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 16 Apr 2022 16:03:18 -0400 Subject: [PATCH 04/15] unset PRODUCT_INSTALL_DEBUG_POLICY_TO_SYSTEM_EXT --- device.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/device.mk b/device.mk index 9e2d330..308fbc7 100644 --- a/device.mk +++ b/device.mk @@ -13,6 +13,9 @@ $(call inherit-product, device/generic/common/gsi_product.mk) # Special settings for GSI releasing $(call inherit-product, $(SRC_TARGET_DIR)/product/gsi_release.mk) +# This is whitelisted by product name -- unset it +PRODUCT_INSTALL_DEBUG_POLICY_TO_SYSTEM_EXT := + # Enable dynamically-sized images PRODUCT_USE_DYNAMIC_PARTITION_SIZE := true From ef16ca5e23e62fb058f269d3f80f4eba6ad81ed7 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 28 Apr 2022 18:31:56 -0400 Subject: [PATCH 05/15] reserve 100MB of unused space in system image --- BoardConfigCommon.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 57e2f44..86339b9 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -20,3 +20,6 @@ endif # GMS build BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true + +# Reserve 100MB of empty space in system +BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 104857600 From b6e10d232d0d1d44826cae879341396219f57a72 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 28 Apr 2022 20:52:07 -0400 Subject: [PATCH 06/15] Expand system image again along with inode count --- BoardConfigCommon.mk | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 86339b9..cffa5a1 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -21,5 +21,6 @@ endif # GMS build BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true -# Reserve 100MB of empty space in system -BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 104857600 +# Reserve 150MB of empty space in system +BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 157286400 +BOARD_SYSTEMIMAGE_EXTFS_INODE_COUNT := 32768 From 993b44722a7c135c6f7d4c743f40843ffd1257f7 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 28 Apr 2022 21:06:39 -0400 Subject: [PATCH 07/15] Remove space reservation This does not work properly. Let's use the overlayfs-based `adb remount`. --- BoardConfigCommon.mk | 4 ---- 1 file changed, 4 deletions(-) diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index cffa5a1..57e2f44 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -20,7 +20,3 @@ endif # GMS build BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true - -# Reserve 150MB of empty space in system -BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE := 157286400 -BOARD_SYSTEMIMAGE_EXTFS_INODE_COUNT := 32768 From fa8948b1aa2797bc57dd40caad75bcb48d39b525 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 2 May 2022 15:56:52 -0400 Subject: [PATCH 08/15] Enable eSIM capability by default --- device.mk | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/device.mk b/device.mk index 308fbc7..5a70383 100644 --- a/device.mk +++ b/device.mk @@ -38,6 +38,11 @@ PRODUCT_PACKAGES += \ # Quirks include device/peter/gsi/quirks/quirks.mk +# Euicc -- enabled by default, won't work without eSIM slot definition anyway +PRODUCT_COPY_FILES += \ + frameworks/native/data/etc/android.hardware.telephony.euicc.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.hardware.telephony.euicc.xml + + # Enable ro.adb.secure on userdebug and user ifeq (,$(filter eng,$(TARGET_BUILD_VARIANT))) PRODUCT_SYSTEM_EXT_PROPERTIES += \ From aec3bfb881ad2f024987bf99f9e45ae501adbb2a Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 30 May 2022 15:59:47 -0400 Subject: [PATCH 09/15] init_gsi: run SPL prop spoofing on late-init instead of post-fs This fixes a potential race between starting init_gsi and vold / vdc / keystore / keymaster... which could cause havoc if the TEE implementation is stringent on SPL. --- init/init_gsi.cpp | 11 ++++++++--- init/init_gsi.rc | 3 +++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/init/init_gsi.cpp b/init/init_gsi.cpp index b278821..c910fb7 100644 --- a/init/init_gsi.cpp +++ b/init/init_gsi.cpp @@ -58,8 +58,13 @@ void handle_device_model_props() { override_ro_prop("ro", "", "build.version.real_security_patch", spl_orig); } -int main() { - handle_device_model_props(); - Quirks::Run(); +int main(int argc, char **argv) { + if (argc >= 2 && strcmp(argv[1], "--late-init") == 0) { + // Reset SPL / device model related props during late init + // so that they are set before keystore / vold is started. + handle_device_model_props(); + } else { + Quirks::Run(); + } return 0; } diff --git a/init/init_gsi.rc b/init/init_gsi.rc index 84829c8..c4e6ea3 100644 --- a/init/init_gsi.rc +++ b/init/init_gsi.rc @@ -1,2 +1,5 @@ +on late-init + exec u:r:init_gsi:s0 root -- /system_ext/bin/init_gsi --late-init + on post-fs exec u:r:init_gsi:s0 root -- /system_ext/bin/init_gsi From 6229eb6fea865255d44019ce758e9d3ff0c07b3d Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 30 May 2022 16:39:55 -0400 Subject: [PATCH 10/15] init_gsi: implement phh's qemu.hw.keys persistent prop --- init/init_gsi.rc | 3 +++ system.prop | 2 ++ 2 files changed, 5 insertions(+) diff --git a/init/init_gsi.rc b/init/init_gsi.rc index c4e6ea3..9e572e2 100644 --- a/init/init_gsi.rc +++ b/init/init_gsi.rc @@ -3,3 +3,6 @@ on late-init on post-fs exec u:r:init_gsi:s0 root -- /system_ext/bin/init_gsi + +on property:persist.sys.gsi.hw.mainkeys=* + setprop qemu.hw.mainkeys ${persist.sys.gsi.hw.mainkeys} diff --git a/system.prop b/system.prop index 4023a69..837843e 100644 --- a/system.prop +++ b/system.prop @@ -10,3 +10,5 @@ persist.dbg.volte_avail_ovr=1 persist.dbg.vt_avail_ovr=1 persist.dbg.wfc_avail_ovr=1 persist.dbg.allow_ims_off=1 +# Enable hw keys by default (unless overridden by user) +persist.sys.gsi.hw.mainkeys=0 From fededa5f792564ba1c570df7193b3f9ffdd9b010 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 1 Jun 2022 22:40:48 -0400 Subject: [PATCH 11/15] init_gsi: Add qcom caf audio quirks Force-disabling A2DP offloading is not implemented yet. --- init/Android.bp | 1 + init/quirks.cpp | 18 +++++++++++++----- init/quirks.h | 4 +++- init/quirks/soc/caf_audio.cpp | 21 +++++++++++++++++++++ 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 init/quirks/soc/caf_audio.cpp diff --git a/init/Android.bp b/init/Android.bp index aaca8b4..3bfacd2 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -7,6 +7,7 @@ cc_binary { // SoC-specific quirks "quirks/soc/mtk_ril.cpp", + "quirks/soc/caf_audio.cpp", // Device-specific quirks "quirks/device/unihertz_keylayout.cpp", diff --git a/init/quirks.cpp b/init/quirks.cpp index bb40d26..fa74ec4 100644 --- a/init/quirks.cpp +++ b/init/quirks.cpp @@ -87,6 +87,16 @@ void Quirks::CopyFileKeepPerms(filesystem::path src, filesystem::path dst) { RestoreFilePermissions(src, dst); } +int Quirks::OverrideWithBindMount(filesystem::path src, filesystem::path dst) { + int err = mount(src.c_str(), dst.c_str(), nullptr, MS_BIND, nullptr); + + if (err < 0) { + ALOGE("bind mount %s on %s err = %d\n", src.c_str(), dst.c_str(), errno); + } + + return err; +} + void Quirks::OverrideFileWith(filesystem::path p, function proc) { if (!filesystem::is_regular_file(p)) return; @@ -108,10 +118,9 @@ void Quirks::OverrideFileWith(filesystem::path p, function proc); void OverrideFileReplaceSubstr(filesystem::path p, string pattern, string replacement); diff --git a/init/quirks/soc/caf_audio.cpp b/init/quirks/soc/caf_audio.cpp new file mode 100644 index 0000000..3f95130 --- /dev/null +++ b/init/quirks/soc/caf_audio.cpp @@ -0,0 +1,21 @@ +#include "../../quirks.h" + +#include + +using namespace std; + +class CafAudioQuirk : DeviceQuirk { +public: + bool ShouldRun() { + return filesystem::exists("/vendor/etc/audio/audio_policy_configuration.xml"); + } + + void Run() { + Quirks::OverrideWithBindMount("/vendor/etc/audio/audio_policy_configuration.xml", "/vendor/etc/audio_policy_configuration.xml"); + if (filesystem::exists("/vendor/etc/a2dp_audio_policy_configuration.xml")) { + Quirks::OverrideFileReplaceSubstr("/vendor/etc/a2dp_audio_policy_configuration.xml", "bluetooth_qti", "a2dp"); + } + } +}; + +LOAD_QUIRK(CafAudioQuirk); From ceedb72c3332a0923528f6c34d3625ae537245c7 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 1 Jun 2022 23:01:17 -0400 Subject: [PATCH 12/15] init_gsi: Disable A2DP offload on qcom --- init/quirks/soc/caf_audio.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/init/quirks/soc/caf_audio.cpp b/init/quirks/soc/caf_audio.cpp index 3f95130..89a31ae 100644 --- a/init/quirks/soc/caf_audio.cpp +++ b/init/quirks/soc/caf_audio.cpp @@ -1,5 +1,7 @@ #include "../../quirks.h" +#include + #include using namespace std; @@ -15,6 +17,10 @@ public: if (filesystem::exists("/vendor/etc/a2dp_audio_policy_configuration.xml")) { Quirks::OverrideFileReplaceSubstr("/vendor/etc/a2dp_audio_policy_configuration.xml", "bluetooth_qti", "a2dp"); } + + // Disable A2DP offload on qcom + android::base::SetProperty("persist.bluetooth.a2dp_offload.disabled", "true"); + android::base::SetProperty("persist.bluetooth.bluetooth_audio_hal.disabled", "true"); } }; From 1ea8d329863595f145fdb47d20594d9f0d960bfc Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Thu, 2 Jun 2022 22:59:49 -0400 Subject: [PATCH 13/15] device.mk: Include our UnifiedNlp v2 app This should be added as a prebuilt in vendor/foss. --- device.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/device.mk b/device.mk index 5a70383..c2a84a0 100644 --- a/device.mk +++ b/device.mk @@ -42,6 +42,9 @@ include device/peter/gsi/quirks/quirks.mk PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.telephony.euicc.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.hardware.telephony.euicc.xml +# vendor/foss +PRODUCT_PACKAGES += \ + UnifiedNlp # Enable ro.adb.secure on userdebug and user ifeq (,$(filter eng,$(TARGET_BUILD_VARIANT))) From f7df65f03b01999c7d0ab0ae0f231392714a46d0 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Sat, 4 Jun 2022 09:34:39 -0400 Subject: [PATCH 14/15] sepolicy: Address qmipriod denials on Xperia 5 II --- sepolicy/private/qualcomm.te | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sepolicy/private/qualcomm.te diff --git a/sepolicy/private/qualcomm.te b/sepolicy/private/qualcomm.te new file mode 100644 index 0000000..9ccb730 --- /dev/null +++ b/sepolicy/private/qualcomm.te @@ -0,0 +1,5 @@ +type vendor_qmipriod, domain; +type vendor_qmipriod_data_file, file_type, data_file_type; + +r_dir_file(vendor_qmipriod, vendor_qmipriod_data_file); +allow vendor_qmipriod vendor_qmipriod_data_file:file w_file_perms; From 216e24536a8e2e96950351b016230601abf9334b Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Mon, 1 Aug 2022 15:45:10 -0400 Subject: [PATCH 15/15] build OpenEUICC package --- device.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/device.mk b/device.mk index c2a84a0..6296c8d 100644 --- a/device.mk +++ b/device.mk @@ -42,6 +42,9 @@ include device/peter/gsi/quirks/quirks.mk PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.hardware.telephony.euicc.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/android.hardware.telephony.euicc.xml +PRODUCT_PACKAGES += \ + OpenEUICC + # vendor/foss PRODUCT_PACKAGES += \ UnifiedNlp