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

Commit 05d3adb7 authored by Yi-Yo Chiang's avatar Yi-Yo Chiang
Browse files

fs_mgr_overlayfs: Remove temp dir under /dev when aborting

When aborting from fs_mgr_overlayfs_mount, we should remove any temp dir
we created under /dev before aborting the program.

Bug: 306124139
Test: adb-remount-test
Change-Id: I6debf84935e39d884f2f5b3e9720fdfd4332465c
parent c78df87f
Loading
Loading
Loading
Loading
+18 −13
Original line number Diff line number Diff line
@@ -441,21 +441,25 @@ static bool fs_mgr_overlayfs_mount(const FstabEntry& entry) {
        // entries of |moved_mounts|.

        // use as the bound directory in /dev.
        MoveEntry new_entry{entry.mount_point, "/dev/TemporaryDir-XXXXXX", entry.shared_flag};
        {
            AutoSetFsCreateCon createcon;
            auto new_context = fs_mgr_get_context(entry.mount_point);
            if (new_context.empty() || !createcon.Set(new_context)) {
                continue;
            }
        MoveEntry new_entry{entry.mount_point, "/dev/TemporaryDir-XXXXXX", entry.shared_flag};
            const auto target = mkdtemp(new_entry.dir.data());
        if (!createcon.Restore()) {
            return false;
        }
            if (!target) {
                retval = false;
            PERROR << "temporary directory for MS_BIND";
                PERROR << "temporary directory for MS_MOVE";
                continue;
            }
            if (!createcon.Restore()) {
                retval = false;
                rmdir(new_entry.dir.c_str());
                continue;
            }
        }

        if (new_entry.shared_flag) {
            new_entry.shared_flag = fs_mgr_overlayfs_set_shared_mount(new_entry.mount_point, false);
@@ -465,6 +469,7 @@ static bool fs_mgr_overlayfs_mount(const FstabEntry& entry) {
            if (new_entry.shared_flag) {
                fs_mgr_overlayfs_set_shared_mount(new_entry.mount_point, true);
            }
            rmdir(new_entry.dir.c_str());
            continue;
        }
        moved_mounts.push_back(std::move(new_entry));