From c84023bdc2f2e5f0014830534c5966b94f40394e Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sun, 24 Feb 2019 04:29:15 -0500 Subject: [PATCH] Fix crashes when removing verity_key --- native/jni/magiskboot/ramdisk.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/native/jni/magiskboot/ramdisk.cpp b/native/jni/magiskboot/ramdisk.cpp index 75594c665..23d94c612 100644 --- a/native/jni/magiskboot/ramdisk.cpp +++ b/native/jni/magiskboot/ramdisk.cpp @@ -35,22 +35,25 @@ public: void magisk_cpio::patch(bool keepverity, bool keepforceencrypt) { fprintf(stderr, "Patch with flag KEEPVERITY=[%s] KEEPFORCEENCRYPT=[%s]\n", keepverity ? "true" : "false", keepforceencrypt ? "true" : "false"); - for (auto &e : entries) { + auto next = entries.begin(); + decltype(next) cur; + while (next != entries.end()) { + cur = next; + ++next; bool fstab = (!keepverity || !keepforceencrypt) && - !str_starts(e.first, ".backup") && - str_contains(e.first, "fstab") && S_ISREG(e.second->mode); + !str_starts(cur->first, ".backup") && + str_contains(cur->first, "fstab") && S_ISREG(cur->second->mode); if (!keepverity) { if (fstab) { - patch_verity(&e.second->data, &e.second->filesize, 1); - } else if (e.first == "verity_key") { - fprintf(stderr, "Remove [verity_key]\n"); - e.second.reset(); + patch_verity(&cur->second->data, &cur->second->filesize, 1); + } else if (cur->first == "verity_key") { + rm(cur); continue; } } if (!keepforceencrypt) { if (fstab) { - patch_encryption(&e.second->data, &e.second->filesize); + patch_encryption(&cur->second->data, &cur->second->filesize); } } } @@ -106,8 +109,8 @@ for (str = (char *) buf; str < (char *) buf + size; str = str += strlen(str) + 1 void magisk_cpio::restore() { char *file; - entry_map::iterator cur; auto next = entries.begin(); + decltype(next) cur; while (next != entries.end()) { cur = next; ++next;