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

Commit 4760e124 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."...

Merge "adbd: Fix adb remount when switching roots during first-stage init." am: 15e1b3b8 am: 0df54b8f
am: 424325f9

Change-Id: I80671c4d3cb61d2a299496547672338213de8741
parents a0c40c62 424325f9
Loading
Loading
Loading
Loading
+13 −6
Original line number Original line 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(),
    std::unique_ptr<fstab, decltype(&fs_mgr_free_fstab)> fstab(fs_mgr_read_fstab_default(),
                                                               fs_mgr_free_fstab);
                                                               fs_mgr_free_fstab);
    struct fstab_rec* rec = fs_mgr_get_entry_for_mount_point(fstab.get(), dir);
    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.
// 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;
        return true;
    }
    }
    bool is_root = strcmp(dir, "/") == 0;
    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);
    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
    // 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:
    // 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
    // the root will almost always be in a loop device, which is dynamic, so