mirror of
https://github.com/topjohnwu/Magisk.git
synced 2024-12-22 07:57:39 +00:00
Skip svc for ro properties
ro properties' triggers should only be triggered once, otherwise it may undefined behaviour. This patch avoids triggering ro properties' actions again when using resetprop to modify them. Co-authored-by: 5ec1cff <ewtqyqyewtqyqy@gmail.com>
This commit is contained in:
parent
a003336497
commit
f41994cb52
@ -313,12 +313,12 @@ void load_modules() {
|
||||
native_bridge_orig = "0";
|
||||
}
|
||||
native_bridge = native_bridge_orig != "0" ? ZYGISKLDR + native_bridge_orig : ZYGISKLDR;
|
||||
set_prop(NBPROP, native_bridge.data(), true);
|
||||
set_prop(NBPROP, native_bridge.data());
|
||||
// Weather Huawei's Maple compiler is enabled.
|
||||
// If so, system server will be created by a special Zygote which ignores the native bridge
|
||||
// and make system server out of our control. Avoid it by disabling.
|
||||
if (get_prop("ro.maple.enable") == "1") {
|
||||
set_prop("ro.maple.enable", "0", true);
|
||||
set_prop("ro.maple.enable", "0");
|
||||
}
|
||||
inject_zygisk_libs(system);
|
||||
}
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
|
||||
#include <api/_system_properties.h>
|
||||
#include <system_properties/prop_info.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -134,18 +135,21 @@ static int set_prop(const char *name, const char *value, PropFlags flags) {
|
||||
if (!check_legal_property_name(name))
|
||||
return 1;
|
||||
|
||||
const char *msg = flags.isSkipSvc() ? "direct modification" : "property_service";
|
||||
|
||||
auto pi = const_cast<prop_info *>(__system_property_find(name));
|
||||
|
||||
// Always delete existing read-only properties, because they could be
|
||||
// long properties and cannot directly go through __system_property_update
|
||||
if (pi != nullptr && str_starts(name, "ro.")) {
|
||||
// Skip pruning nodes as we will add it back ASAP
|
||||
__system_property_delete(name, false);
|
||||
pi = nullptr;
|
||||
// Delete existing read-only properties if they are or will be long properties,
|
||||
// which cannot directly go through __system_property_update
|
||||
if (str_starts(name, "ro.")) {
|
||||
if (pi != nullptr && (pi->is_long() || strlen(value) >= PROP_VALUE_MAX)) {
|
||||
// Skip pruning nodes as we will add it back ASAP
|
||||
__system_property_delete(name, false);
|
||||
pi = nullptr;
|
||||
}
|
||||
flags.setSkipSvc();
|
||||
}
|
||||
|
||||
const char *msg = flags.isSkipSvc() ? "direct modification" : "property_service";
|
||||
|
||||
int ret;
|
||||
if (pi != nullptr) {
|
||||
if (flags.isSkipSvc()) {
|
||||
|
@ -245,8 +245,8 @@ void reset_zygisk(bool restore) {
|
||||
if (native_bridge.length() > strlen(ZYGISKLDR)) {
|
||||
native_bridge_orig = native_bridge.substr(strlen(ZYGISKLDR));
|
||||
}
|
||||
set_prop(NBPROP, native_bridge_orig.data(), true);
|
||||
set_prop(NBPROP, native_bridge_orig.data());
|
||||
} else {
|
||||
set_prop(NBPROP, native_bridge.data(), true);
|
||||
set_prop(NBPROP, native_bridge.data());
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user