diff --git a/.gitmodules b/.gitmodules index 01ccb65..c226d7f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ -[submodule "loader/src/external/liblsplt"] - path = loader/src/external/liblsplt - url = https://github.com/LSPosed/LSPlt +[submodule "loader/src/external/lsplt"] + path = loader/src/external/lsplt + url = https://github.com/LSPosed/lsplt [submodule "loader/src/external/parallel-hashmap"] path = loader/src/external/parallel-hashmap url = https://github.com/greg7mdp/parallel-hashmap diff --git a/loader/src/external/Android.mk b/loader/src/external/Android.mk index ce44805..b149c04 100644 --- a/loader/src/external/Android.mk +++ b/loader/src/external/Android.mk @@ -3,14 +3,14 @@ LOCAL_PATH := $(call my-dir) # liblsplt.a include $(CLEAR_VARS) LOCAL_MODULE:= liblsplt -LOCAL_C_INCLUDES := $(LOCAL_PATH)/liblsplt/lsplt/src/main/jni/include +LOCAL_C_INCLUDES := $(LOCAL_PATH)/lsplt/lsplt/src/main/jni/include LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES) -LOCAL_CFLAGS := -Wall -Wextra -Werror -fvisibility=hidden +LOCAL_CFLAGS := -Wall -Wextra -Werror -fvisibility=hidden -DLOG_DISABLED LOCAL_CPPFLAGS := -std=c++20 LOCAL_STATIC_LIBRARIES := libcxx LOCAL_SRC_FILES := \ - liblsplt/lsplt/src/main/jni/elf_util.cc \ - liblsplt/lsplt/src/main/jni/lsplt.cc + lsplt/lsplt/src/main/jni/elf_util.cc \ + lsplt/lsplt/src/main/jni/lsplt.cc include $(BUILD_STATIC_LIBRARY) # Header only library diff --git a/loader/src/external/liblsplt b/loader/src/external/lsplt similarity index 100% rename from loader/src/external/liblsplt rename to loader/src/external/lsplt diff --git a/zygiskd/src/root_impl/mod.rs b/zygiskd/src/root_impl/mod.rs index 7dfb202..0ebeb43 100644 --- a/zygiskd/src/root_impl/mod.rs +++ b/zygiskd/src/root_impl/mod.rs @@ -1,8 +1,6 @@ mod kernelsu; mod magisk; -use once_cell::sync::OnceCell; - pub enum RootImpl { None, TooOld, @@ -12,47 +10,50 @@ pub enum RootImpl { Magisk, } -static ROOT_IMPL: OnceCell = OnceCell::new(); +// FIXME: OnceCell bugs on 32 bit +static mut ROOT_IMPL: RootImpl = RootImpl::None; pub fn setup() { let ksu_version = kernelsu::get_kernel_su(); let magisk_version = magisk::get_magisk(); - let _ = match (ksu_version, magisk_version) { - (None, None) => ROOT_IMPL.set(RootImpl::None), - (Some(_), Some(_)) => ROOT_IMPL.set(RootImpl::Multiple), + let impl_ = match (ksu_version, magisk_version) { + (None, None) => RootImpl::None, + (Some(_), Some(_)) => RootImpl::Multiple, (Some(ksu_version), None) => { - let val = match ksu_version { + match ksu_version { kernelsu::Version::Supported => RootImpl::KernelSU, kernelsu::Version::TooOld => RootImpl::TooOld, kernelsu::Version::Abnormal => RootImpl::Abnormal, - }; - ROOT_IMPL.set(val) + } } (None, Some(magisk_version)) => { - let val = match magisk_version { + match magisk_version { magisk::Version::Supported => RootImpl::Magisk, magisk::Version::TooOld => RootImpl::TooOld, - }; - ROOT_IMPL.set(val) + } } }; + unsafe { ROOT_IMPL = impl_; } } pub fn get_impl() -> &'static RootImpl { - ROOT_IMPL.get().unwrap() + unsafe { &ROOT_IMPL } } +// FIXME: Without #[inline(never)], this function will lag forever +#[inline(never)] pub fn uid_on_allowlist(uid: i32) -> bool { - match ROOT_IMPL.get().unwrap() { + match get_impl() { RootImpl::KernelSU => kernelsu::uid_on_allowlist(uid), RootImpl::Magisk => magisk::uid_on_allowlist(uid), _ => unreachable!(), } } +#[inline(never)] pub fn uid_on_denylist(uid: i32) -> bool { - match ROOT_IMPL.get().unwrap() { + match get_impl() { RootImpl::KernelSU => kernelsu::uid_on_denylist(uid), RootImpl::Magisk => magisk::uid_on_denylist(uid), _ => unreachable!(),