From dbfe49c56fd1fa7d3d1b641ea2c8d695631c7625 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Thu, 28 Sep 2017 00:54:01 +0800 Subject: [PATCH] Unlock blocks before flashing boot image --- jni/daemon/magisk.c | 45 ++++++++++++++++++--------------------- scripts/flash_script.sh | 2 +- scripts/util_functions.sh | 11 +++++++--- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/jni/daemon/magisk.c b/jni/daemon/magisk.c index f087deea2..9b6016f59 100644 --- a/jni/daemon/magisk.c +++ b/jni/daemon/magisk.c @@ -41,37 +41,31 @@ static void usage() { "Magisk v" xstr(MAGISK_VERSION) "(" xstr(MAGISK_VER_CODE) ") (by topjohnwu) multi-call binary\n" "\n" "Usage: %s [applet [arguments]...]\n" - " or: %s --install [SOURCE] DIR\n" - " if SOURCE not provided, will link itself\n" - " or: %s --list\n" - " or: %s --createimg IMG SIZE\n" - " create ext4 image, SIZE is interpreted in MB\n" - " or: %s --imgsize IMG\n" - " or: %s --resizeimg IMG SIZE\n" - " SIZE is interpreted in MB\n" - " or: %s --mountimg IMG PATH\n" - " mount IMG to PATH and prints the loop device\n" - " or: %s --umountimg PATH LOOP\n" - " or: %s --[boot stage]\n" - " start boot stage service\n" - " or: %s [options]\n" - " or: applet [arguments]...\n" + " or: %s [options]...\n" + "\n" + "Options:\n" + " -c print current binary version\n" + " -v print running daemon version\n" + " -V print running daemon version code\n" + " --list list all availible applets\n" + " --install [SOURCE] DIR symlink all applets to DIR. SOURCE is optional\n" + " --createimg IMG SIZE create ext4 image. SIZE is interpreted in MB\n" + " --imgsize IMG report ext4 image used/total size\n" + " --resizeimg IMG SIZE resize ext4 image. SIZE is interpreted in MB\n" + " --mountimg IMG PATH mount IMG to PATH and prints the loop device\n" + " --umountimg PATH LOOP unmount PATH and delete LOOP device\n" + " --[boot stage] start boot stage service\n" + " --unlock-blocks set BLKROSET flag to OFF for all block devices\n" "\n" "Supported boot stages:\n" " post-fs, post-fs-data, service\n" "\n" - "Options:\n" - " -c print client version\n" - " -v print daemon version\n" - " -V print daemon version code\n" - "\n" "Supported applets:\n" - , argv0, argv0, argv0, argv0, argv0, argv0, argv0, argv0, argv0, argv0); + , argv0, argv0); - for (int i = 0; applet[i]; ++i) { + for (int i = 0; applet[i]; ++i) fprintf(stderr, i ? ", %s" : " %s", applet[i]); - } - fprintf(stderr, "\n"); + fprintf(stderr, "\n\n"); exit(1); } @@ -149,6 +143,9 @@ int main(int argc, char *argv[]) { if (argc < 4) usage(); umount_image(argv[2], argv[3]); return 0; + } else if (strcmp(argv[1], "--unlock-blocks") == 0) { + unlock_blocks(); + return 0; } else if (strcmp(argv[1], "--post-fs") == 0) { int fd = connect_daemon(); write_int(fd, POST_FS); diff --git a/scripts/flash_script.sh b/scripts/flash_script.sh index cb03e5cf4..4cbf8c993 100644 --- a/scripts/flash_script.sh +++ b/scripts/flash_script.sh @@ -101,7 +101,7 @@ if [ -d /system/addon.d ]; then chmod 755 /system/addon.d/99-magisk.sh fi -$BOOTMODE && boot_actions || recovery_actions +$BOOTMODE || recovery_actions ########################################################################################## # Boot patching diff --git a/scripts/util_functions.sh b/scripts/util_functions.sh index dd4bb06cd..0fb98226e 100644 --- a/scripts/util_functions.sh +++ b/scripts/util_functions.sh @@ -10,6 +10,9 @@ MAGISK_VERSION_STUB SCRIPT_VERSION=$MAGISK_VER_CODE +# Default location, will override if needed +MAGISKBIN=/data/magisk + get_outfd() { readlink /proc/$$/fd/$OUTFD 2>/dev/null | grep /tmp >/dev/null if [ "$?" -eq "0" ]; then @@ -118,21 +121,23 @@ find_boot_image() { migrate_boot_backup() { # Update the broken boot backup if [ -f /data/stock_boot_.img.gz ]; then - ./magiskboot --decompress /data/stock_boot_.img.gz + $MAGISKBIN/magiskboot --decompress /data/stock_boot_.img.gz mv /data/stock_boot_.img /data/stock_boot.img fi # Update our previous backup to new format if exists if [ -f /data/stock_boot.img ]; then ui_print "- Migrating boot image backup" - SHA1=`./magiskboot --sha1 /data/stock_boot.img 2>/dev/null` + SHA1=`$MAGISKBIN/magiskboot --sha1 /data/stock_boot.img 2>/dev/null` STOCKDUMP=/data/stock_boot_${SHA1}.img mv /data/stock_boot.img $STOCKDUMP - ./magiskboot --compress $STOCKDUMP + $MAGISKBIN/magiskboot --compress $STOCKDUMP fi mv /data/magisk/stock_boot* /data 2>/dev/null } flash_boot_image() { + # Make sure all blocks are writable + $MAGISKBIN/magisk --unlock-blocks case "$1" in *.gz) COMMAND="gzip -d < \"$1\"";; *) COMMAND="cat \"$1\"";;