Commit Graph

15 Commits

Author SHA1 Message Date
vvb2060 2963d4ca9e Rewrite get_manager 2024-07-12 13:45:48 -07:00
vvb2060 6aab856de7 Enhanced denylist app id tracking 2024-07-12 13:45:48 -07:00
topjohnwu 308c9999fa Properly detect package changes 2024-01-28 00:42:43 -08:00
topjohnwu 65207f96c8 Create custom cxx binding to Utf8CStr 2023-12-26 23:10:55 +08:00
topjohnwu 65c18f9c09 Restructure project files 2023-11-08 01:46:02 -08:00
topjohnwu 16ae4aedf1 Remove usage of MAGISKTMP 2023-11-02 15:50:36 -07:00
topjohnwu 81493475f9 Directly use rust::Vec 2023-06-20 00:21:51 -07:00
LoveSy a9c89cbbbb Read certificate in Rust
Co-authored-by: topjohnwu <topjohnwu@gmail.com>
2023-06-16 01:49:44 -07:00
LoveSy 53257b6ea1 Fix find_apk_path 2023-06-15 04:09:45 -07:00
LoveSy bf6359abaa Fix release build 2023-06-10 13:10:54 -07:00
topjohnwu f33f1d25d0 Move find_apk_path to Rust 2023-06-10 01:40:45 -07:00
topjohnwu a1ce6f5f12 Fix race condition when switching root manager
Before this change, the root manager package name is only written into
the database after the repackaged APK is installed. In the time between
the repackaged APK being installed and the package name being written
into the database, if some operation calls `get_manager`, the Magisk
daemon will cache this result and ignore the repackaged APK, even if
the package name is set afterwards, because the cache won't be
invalidated. The result is that the repackaged manager APK will not be
recognized as the root manager, breaking the hide manager feature.

This race condition is more likely to happen when Zygisk is enabled,
because `get_manager` is called with a very high frequency in that case.

To fix the issue, we have to set the new package name into the database
BEFORE installing the repackaged APK. We also stop pruning the
database if the repackaged manager is not found, moving this logic into
the Magisk app. By doing so, we can guarantee that the instant after
the repackaged manager APK is installed, the Magisk daemon will
immediately pick it up and treat it as the root manager.

Another small optimization: when the requester is root, simply bypass
the whole database + manager package check. Since the Magisk app hiding
APK installation proces will call `su` several times to run `pm` under
different UIDs, doing this opimization will reduce the amount of
unnecessary database query + filesystem traversals.
2023-03-06 03:58:58 -08:00
canyie 6ecc04a4df Fix auto install stub 2023-01-23 01:55:28 +08:00
topjohnwu a66a3b7438 Make sure logs are always ended with newline 2022-09-09 04:29:50 -07:00
topjohnwu b9e89a1a2d Restructure the native module
Consolidate all code into the src folder
2022-07-23 13:51:56 -07:00