Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0df54b8f authored by David Anderson's avatar David Anderson Committed by android-build-merger
Browse files

Merge "adbd: Fix adb remount when switching roots during first-stage init."

am: 15e1b3b8

Change-Id: If936c2abb80e0626f02abfcf3043ac6251cceef0
parents 6b29efc5 15e1b3b8
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -78,7 +78,13 @@ static std::string find_fstab_mount(const char* dir) {
    std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
                                                               fs_mgr_free_fstab);
    struct fstab_rec* rec = fs_mgr_get_entry_for_mount_point(fstab.get(), dir);
    return rec ? rec->blk_device : "";
    if (!rec) {
        return "";
    }
    if (fs_mgr_is_logical(rec)) {
        fs_mgr_update_logical_partition(rec);
    }
    return rec->blk_device;
}

// The proc entry for / is full of lies, so check fstab instead.
@@ -155,11 +161,12 @@ static bool remount_partition(int fd, const char* dir) {
        return true;
    }
    bool is_root = strcmp(dir, "/") == 0;
    if (is_root && !find_mount("/system", false).empty()) {
        dir = "/system";
        is_root = false;
    }
    std::string dev = find_mount(dir, is_root);
    if (is_root && dev.empty()) {
        // The fstab entry will be /system if the device switched roots during
        // first-stage init.
        dev = find_mount("/system", true);
    }
    // Even if the device for the root is not found, we still try to remount it
    // as rw. This typically only happens when running Android in a container:
    // the root will almost always be in a loop device, which is dynamic, so