if (enabledSharedRO) {
userPkgAppsRWSharedDir = userAppsRWSharedDir + pkg_name;
userPkgAppsRWSharedTmpDir = userAppsRWDir + "/.shared_tmp/" + pkg_name;
- ret = MountNS::bindMountRW(userPkgAppsRWSharedDir, userPkgAppsRWSharedTmpDir);
- if (ret != SECURITY_MANAGER_SUCCESS)
- return ret;
+ if (FS::directoryStatus(userPkgAppsRWSharedDir) > 0 && FS::directoryStatus(userPkgAppsRWSharedTmpDir) > 0) {
+ ret = MountNS::bindMountRW(userPkgAppsRWSharedDir, userPkgAppsRWSharedTmpDir);
+ if (ret != SECURITY_MANAGER_SUCCESS)
+ return ret;
+ } else {
+ LogError("Can't bind mount sharedRO, some directories don't exist for pkg " << pkg_name << "; continuing operation");
+ enabledSharedRO = false;
+ }
}
- ret = MountNS::bindMountRO(userAppsRWSharedDir, userAppsRWSharedDir);
- if (ret != SECURITY_MANAGER_SUCCESS)
- return ret;
-
- if (enabledSharedRO) {
- ret = MountNS::bindMountRW(userPkgAppsRWSharedTmpDir, userPkgAppsRWSharedDir);
+ if (FS::directoryStatus(userAppsRWSharedDir) > 0) {
+ ret = MountNS::bindMountRO(userAppsRWSharedDir, userAppsRWSharedDir);
if (ret != SECURITY_MANAGER_SUCCESS)
return ret;
- }
+ } else
+ LogError("Can't bind mount sharedRO for pkg " << pkg_name << ", dir " << userAppsRWSharedDir << " doesn't exist; continuing operation");
- return SECURITY_MANAGER_SUCCESS;
+ if (enabledSharedRO)
+ ret = MountNS::bindMountRW(userPkgAppsRWSharedTmpDir, userPkgAppsRWSharedDir);
+
+ return ret;
}
static int applyPrivileges(const MountNS::PrivilegePathsMap &privilegePathMap,