diff --git a/Utils.cpp b/Utils.cpp index aa2288b..0a16fc1 100644 --- a/Utils.cpp +++ b/Utils.cpp @@ -235,7 +235,7 @@ status_t CreateDir(const std::string& dir, mode_t mode) { PLOG(ERROR) << "Failed to stat " << dir; return -errno; } - if (TEMP_FAILURE_RETRY(mkdir(dir.c_str(), mode)) == -1) { + if (TEMP_FAILURE_RETRY(mkdir(dir.c_str(), mode)) == -1 && errno != EEXIST) { PLOG(ERROR) << "Failed to mkdir " << dir; return -errno; } diff --git a/VolumeManager.cpp b/VolumeManager.cpp index 7b08858..c56380a 100644 --- a/VolumeManager.cpp +++ b/VolumeManager.cpp @@ -680,7 +680,7 @@ int VolumeManager::prepareSandboxTargets(userid_t userId, } else if (errno != ENOENT) { PLOG(ERROR) << "Failed to faccessat " << mntTargetRoot << "/" << package; } - if (TEMP_FAILURE_RETRY(mkdirat(dfd.get(), package.c_str(), 0755)) == -1) { + if (TEMP_FAILURE_RETRY(mkdirat(dfd.get(), package.c_str(), 0755)) == -1 && errno != EEXIST) { PLOG(ERROR) << "Failed to mkdirat " << mntTargetRoot << "/" << package; return -errno; } @@ -718,7 +718,8 @@ int VolumeManager::prepareSandboxTargets(userid_t userId, } else if (errno != ENOENT) { PLOG(ERROR) << "Failed to faccessat " << pkgMountTarget << "/" << volumeLabel; } - if (TEMP_FAILURE_RETRY(mkdirat(packageFd.get(), volumeLabel.c_str(), 0755)) == -1) { + if (TEMP_FAILURE_RETRY(mkdirat(packageFd.get(), volumeLabel.c_str(), 0755)) == -1 && + errno != EEXIST) { PLOG(ERROR) << "Failed to mkdirat " << pkgMountTarget << "/" << volumeLabel; return -errno; } @@ -742,7 +743,8 @@ int VolumeManager::prepareSandboxTargets(userid_t userId, } if (TEMP_FAILURE_RETRY(faccessat(packageFd.get(), "self", F_OK, 0)) == -1) { if (errno == ENOENT) { - if (TEMP_FAILURE_RETRY(mkdirat(packageFd.get(), "self", 0755)) == -1) { + if (TEMP_FAILURE_RETRY(mkdirat(packageFd.get(), "self", 0755)) == -1 && + errno != EEXIST) { PLOG(ERROR) << "Failed to mkdirat " << pkgMountTarget << "/self"; return -errno; }