Prevent problematic modules causing device stuck in bootloop

If boot failed after 2 times, it will enable core only mode (which disables all modules)
This commit is contained in:
topjohnwu 2018-08-07 04:41:48 +08:00
parent 51ba99d09e
commit c38533e0f8
2 changed files with 26 additions and 0 deletions

View File

@ -529,6 +529,20 @@ void startup() {
unblock_boot_process(); unblock_boot_process();
} }
// Increment boot count
int boot_count = 0;
FILE *cf = xfopen(BOOTCOUNT, "r");
if (cf) {
fscanf(cf, "%d", &boot_count);
fclose(cf);
}
boot_count++;
if (boot_count > 2)
creat(DISABLEFILE, 0644);
cf = xfopen(BOOTCOUNT, "w");
fprintf(cf, "%d", boot_count);
fclose(cf);
// No uninstaller or core-only mode // No uninstaller or core-only mode
if (access(DISABLEFILE, F_OK) != 0) { if (access(DISABLEFILE, F_OK) != 0) {
simple_mount("/system"); simple_mount("/system");
@ -868,4 +882,15 @@ core_only:
// All boot stage done, cleanup // All boot stage done, cleanup
vec_deep_destroy(&module_list); vec_deep_destroy(&module_list);
// Wait for boot complete, and clear boot count
while (1) {
char *prop = getprop("sys.boot_completed");
if (prop != NULL && strcmp(prop, "1") == 0) {
free(prop);
unlink(BOOTCOUNT);
break;
}
sleep(2);
}
} }

View File

@ -32,6 +32,7 @@
#define DATABIN SECURE_DIR "/magisk" #define DATABIN SECURE_DIR "/magisk"
#define MAGISKDB SECURE_DIR "/magisk.db" #define MAGISKDB SECURE_DIR "/magisk.db"
#define SIMPLEMOUNT SECURE_DIR "/magisk_simple" #define SIMPLEMOUNT SECURE_DIR "/magisk_simple"
#define BOOTCOUNT SECURE_DIR "/.boot_count"
#define MANAGERAPK DATABIN "/magisk.apk" #define MANAGERAPK DATABIN "/magisk.apk"
#define MAGISKRC "/init.magisk.rc" #define MAGISKRC "/init.magisk.rc"