diff --git a/src/appspawn_server.cpp b/src/appspawn_server.cpp index 6a43dcd76555aacc56e7f5daa609e18d0e0b0226..a6e42567131e7e24be276198c80fceb878286351 100644 --- a/src/appspawn_server.cpp +++ b/src/appspawn_server.cpp @@ -563,6 +563,25 @@ void AppSpawnServer::DoAppSandboxMkdir(std::string sandboxPackagePath, const Cli mkdir(dirPath.c_str(), FILE_MODE); } +int32_t AppSpawnServer::DoSandboxRootFolderCreateAdapt(std::string sandboxPackagePath) +{ + int rc = mount(NULL, "/", NULL, MS_REC | MS_SLAVE, NULL); + if (rc) { + HiLog::Error(LABEL, "set propagation slave failed"); + return rc; + } + + // bind mount "/" to /mnt/sandbox/ path + // rootfs: to do more resouces bind mount here to get more strict resources constraints + rc = mount("/", sandboxPackagePath.c_str(), NULL, MS_BIND | MS_REC, NULL); + if (rc) { + HiLog::Error(LABEL, "mount bind / failed"); + return rc; + } + + return 0; +} + int32_t AppSpawnServer::DoSandboxRootFolderCreate(std::string sandboxPackagePath) { int rc = mount(NULL, "/", NULL, MS_REC | MS_SLAVE, NULL); @@ -642,9 +661,14 @@ int32_t AppSpawnServer::SetAppSandboxProperty(const ClientSocket::AppProperty *a return rc; } - rc = DoSandboxRootFolderCreate(sandboxPackagePath); + // to make wargnar work + if (access("/3rdmodem", F_OK) == 0) { + rc = DoSandboxRootFolderCreateAdapt(sandboxPackagePath); + } else { + rc = DoSandboxRootFolderCreate(sandboxPackagePath); + } if (rc) { - HiLog::Error(LABEL, "DoSandboxRootFolderCreate failed, packagename is %{public}s", appProperty->processName); + HiLog::Error(LABEL, "DoSandboxRootFolderCreate failed, %{public}s", appProperty->processName); return rc; } diff --git a/src/include/appspawn_server.h b/src/include/appspawn_server.h index d909a3e7b1bf313c96e09760a54823f9def8f160..abef561aeb05c0a0ebfa98f1e877f6a68acf1343 100644 --- a/src/include/appspawn_server.h +++ b/src/include/appspawn_server.h @@ -127,6 +127,11 @@ private: */ int32_t DoSandboxRootFolderCreate(std::string sandboxPackagePath); + /** + * Create sandbox root folder file with wargnar device + */ + int32_t DoSandboxRootFolderCreateAdapt(std::string sandboxPackagePath); + /** * Do app sandbox original path mount common */