fix: 修改判断识别解锁逻辑

Signed-off-by: 樊景乐 <fanjingle@h-partners.com>
This commit is contained in:
樊景乐 2024-09-23 21:14:21 +08:00
parent ab58a747ba
commit b5a1078240
2 changed files with 13 additions and 11 deletions

View File

@ -525,7 +525,7 @@ static int DoSandboxNodeMount(const SandboxContext *context, const SandboxSectio
return 0;
}
static bool IsUnlockStatus(uint32_t uid)
static bool IsUnlockStatus(uint32_t uid, const char *bundleName, size_t bundleNameLen)
{
const int userIdBase = UID_BASE;
uid = uid / userIdBase;
@ -534,11 +534,11 @@ static bool IsUnlockStatus(uint32_t uid)
}
const char rootPath[] = "/data/app/el2/";
const char basePath[] = "/base";
size_t allPathSize = strlen(rootPath) + strlen(basePath) + 1 + USER_ID_SIZE;
const char basePath[] = "/base/";
size_t allPathSize = strlen(rootPath) + strlen(basePath) + 1 + USER_ID_SIZE + bundleNameLen;
char *path = (char *)malloc(sizeof(char) * allPathSize);
APPSPAWN_CHECK(path != NULL, return true, "Failed to malloc path");
int len = sprintf_s(path, allPathSize, "%s%u%s", rootPath, uid, basePath);
int len = sprintf_s(path, allPathSize, "%s%u%s%s", rootPath, uid, basePath, bundleName);
APPSPAWN_CHECK(len > 0 && ((size_t)len < allPathSize), free(path); return true, "Failed to get base path");
if (access(path, F_OK) == 0) {
@ -599,7 +599,9 @@ static void MountDirToShared(const SandboxContext *context, AppSpawnSandboxCfg *
{
const char rootPath[] = "/mnt/sandbox/";
AppSpawnMsgDacInfo *info = (AppSpawnMsgDacInfo *)GetSpawningMsgInfo(context, TLV_DAC_INFO);
if (info == NULL || IsUnlockStatus(info->uid)) {
size_t bundleNameLen = strlen(context->bundleName);
if (info == NULL || context->bundleName == NULL ||
IsUnlockStatus(info->uid, context->bundleName, bundleNameLen)) {
return;
}

View File

@ -1776,7 +1776,7 @@ int32_t SetAppSandboxProperty(AppSpawnMgr *content, AppSpawningCtx *property)
#define DIR_MODE 0711
#ifndef APPSPAWN_SANDBOX_NEW
static bool IsUnlockStatus(uint32_t uid)
static bool IsUnlockStatus(uint32_t uid, const char *bundleName, size_t bundleNameLen)
{
const int userIdBase = 200000;
uid = uid / userIdBase;
@ -1785,11 +1785,11 @@ static bool IsUnlockStatus(uint32_t uid)
}
const char rootPath[] = "/data/app/el2/";
const char basePath[] = "/base";
size_t allPathSize = strlen(rootPath) + strlen(basePath) + 1 + USER_ID_SIZE;
const char basePath[] = "/base/";
size_t allPathSize = strlen(rootPath) + strlen(basePath) + 1 + USER_ID_SIZE + bundleNameLen;
char *path = reinterpret_cast<char *>(malloc(sizeof(char) * allPathSize));
APPSPAWN_CHECK(path != NULL, return true, "Failed to malloc path");
int len = sprintf_s(path, allPathSize, "%s%u%s", rootPath, uid, basePath);
int len = sprintf_s(path, allPathSize, "%s%u%s%s", rootPath, uid, basePath, bundleName);
APPSPAWN_CHECK(len > 0 && ((size_t)len < allPathSize), return true, "Failed to get base path");
if (access(path, F_OK) == 0) {
@ -1867,8 +1867,8 @@ static void MountDirToShared(const AppSpawningCtx *property)
string sourcePath = "/data/app/el1/bundle/public/" + string(bundleName);
MountDir(property, rootPath, sourcePath.c_str(), el1Path);
if (IsUnlockStatus(info->uid)) {
size_t bundleNameLen = strlen(bundleName);
if (IsUnlockStatus(info->uid, bundleName, bundleNameLen)) {
return;
}