Kernel: Improved permission tracking logic when dynamic signature manager existence checks are enabled
- Fixed a panic issue caused by repeated scans in certain cases where dynamic signatures were not enabled Revert: setup.sh: cleanup symlink & config logic (#338)
This commit is contained in:
@@ -30,7 +30,7 @@ perform_cleanup() {
|
|||||||
echo "[+] Cleaning up..."
|
echo "[+] Cleaning up..."
|
||||||
[ -L "$DRIVER_DIR/kernelsu" ] && rm "$DRIVER_DIR/kernelsu" && echo "[-] Symlink removed."
|
[ -L "$DRIVER_DIR/kernelsu" ] && rm "$DRIVER_DIR/kernelsu" && echo "[-] Symlink removed."
|
||||||
grep -q "kernelsu" "$DRIVER_MAKEFILE" && sed -i '/kernelsu/d' "$DRIVER_MAKEFILE" && echo "[-] Makefile reverted."
|
grep -q "kernelsu" "$DRIVER_MAKEFILE" && sed -i '/kernelsu/d' "$DRIVER_MAKEFILE" && echo "[-] Makefile reverted."
|
||||||
grep -q "drivers/kernelsu/Kconfig" "$DRIVER_KCONFIG" && sed -i '/drivers\/kernelsu\/Kconfig/d' "$DRIVER_KCONFIG" && echo "[-] Kconfig reverted."
|
grep -q "kernelsu" "$DRIVER_KCONFIG" && sed -i '/kernelsu/d' "$DRIVER_KCONFIG" && echo "[-] Kconfig reverted."
|
||||||
if [ -d "$KERNEL_ROOT/KernelSU" ]; then
|
if [ -d "$KERNEL_ROOT/KernelSU" ]; then
|
||||||
rm -rf "$KERNEL_ROOT/KernelSU" && echo "[-] KernelSU directory deleted."
|
rm -rf "$KERNEL_ROOT/KernelSU" && echo "[-] KernelSU directory deleted."
|
||||||
fi
|
fi
|
||||||
@@ -56,20 +56,11 @@ setup_kernelsu() {
|
|||||||
git checkout "$1" && echo "[-] Checked out $1." || echo "[-] Checkout default branch"
|
git checkout "$1" && echo "[-] Checked out $1." || echo "[-] Checkout default branch"
|
||||||
fi
|
fi
|
||||||
cd "$DRIVER_DIR"
|
cd "$DRIVER_DIR"
|
||||||
[ -L "kernelsu" ] || ln -sf "$(realpath --relative-to="$DRIVER_DIR" "$KERNEL_ROOT/KernelSU/kernel")" "kernelsu" && echo "[+] Symlink created."
|
ln -sf "$(realpath --relative-to="$DRIVER_DIR" "$KERNEL_ROOT/KernelSU/kernel")" "kernelsu" && echo "[+] Symlink created."
|
||||||
|
|
||||||
# Add entries in Makefile and Kconfig if not already existing
|
# Add entries in Makefile and Kconfig if not already existing
|
||||||
if grep -q "kernelsu" "$DRIVER_MAKEFILE" 2>/dev/null; then
|
grep -q "kernelsu" "$DRIVER_MAKEFILE" || echo 'obj-$(CONFIG_KSU) += kernelsu/' >> "$DRIVER_MAKEFILE" && echo "[+] Modified Makefile."
|
||||||
echo "[=] Makefile already configured."
|
grep -q 'source "drivers/kernelsu/Kconfig"' "$DRIVER_KCONFIG" || sed -i '/endmenu/i\source "drivers/kernelsu/Kconfig"' "$DRIVER_KCONFIG" && echo "[+] Modified Kconfig."
|
||||||
else
|
|
||||||
echo 'obj-$(CONFIG_KSU) += kernelsu/' >> "$DRIVER_MAKEFILE" && echo "[+] Modified Makefile."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if grep -q 'source "drivers/kernelsu/Kconfig"' "$DRIVER_KCONFIG" 2>/dev/null; then
|
|
||||||
echo "[=] Kconfig already configured."
|
|
||||||
else
|
|
||||||
sed -i '/endmenu/i\source "drivers/kernelsu/Kconfig"' "$DRIVER_KCONFIG" && echo "[+] Modified Kconfig."
|
|
||||||
fi
|
|
||||||
echo '[+] Done.'
|
echo '[+] Done.'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -386,8 +386,10 @@ void track_throne()
|
|||||||
struct uid_data *np;
|
struct uid_data *np;
|
||||||
struct uid_data *n;
|
struct uid_data *n;
|
||||||
|
|
||||||
// Check if any manager exists (traditional or dynamic)
|
// first, check if manager_uid exist!
|
||||||
bool manager_exist = false;
|
bool manager_exist = false;
|
||||||
|
bool dynamic_manager_exist = false;
|
||||||
|
|
||||||
list_for_each_entry (np, &uid_list, list) {
|
list_for_each_entry (np, &uid_list, list) {
|
||||||
// if manager is installed in work profile, the uid in packages.list is still equals main profile
|
// if manager is installed in work profile, the uid in packages.list is still equals main profile
|
||||||
// don't delete it in this case!
|
// don't delete it in this case!
|
||||||
@@ -399,10 +401,10 @@ void track_throne()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check for dynamic managers
|
// Check for dynamic managers
|
||||||
if (!manager_exist && ksu_is_dynamic_sign_enabled()) {
|
if (!dynamic_manager_exist && ksu_is_dynamic_sign_enabled()) {
|
||||||
list_for_each_entry (np, &uid_list, list) {
|
list_for_each_entry (np, &uid_list, list) {
|
||||||
if (ksu_is_any_manager(np->uid)) {
|
if (ksu_is_any_manager(np->uid)) {
|
||||||
manager_exist = true;
|
dynamic_manager_exist = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -417,11 +419,11 @@ void track_throne()
|
|||||||
pr_info("Searching manager...\n");
|
pr_info("Searching manager...\n");
|
||||||
search_manager("/data/app", 2, &uid_list);
|
search_manager("/data/app", 2, &uid_list);
|
||||||
pr_info("Search manager finished\n");
|
pr_info("Search manager finished\n");
|
||||||
} else {
|
} else if (!dynamic_manager_exist && ksu_is_dynamic_sign_enabled()) {
|
||||||
// Always perform search when called from dynamic sign rescan
|
// Always perform search when called from dynamic sign rescan
|
||||||
pr_info("Performing manager search (may be from dynamic sign rescan)\n");
|
pr_info("Dynamic sign enabled, Searching manager...\n");
|
||||||
search_manager("/data/app", 2, &uid_list);
|
search_manager("/data/app", 2, &uid_list);
|
||||||
pr_info("Manager search completed\n");
|
pr_info("Search Dynamic sign manager finished\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
prune:
|
prune:
|
||||||
|
|||||||
Reference in New Issue
Block a user