!15320 asan runtime use mode app

Merge pull request !15320 from 吴杰杰杰/master
This commit is contained in:
openharmony_ci
2025-07-07 08:21:24 +00:00
committed by Gitee
6 changed files with 111 additions and 20 deletions
@@ -241,6 +241,7 @@ const char *CJEnvironment::cjCompatibilitySDKNSName = "cj_compatibility_sdk";
std::string CJEnvironment::appVersion = "5.1.0.0";
const uint32_t CJEnvironment::majorVersion = 5;
const uint32_t CJEnvironment::minorVersion = 1;
SanitizerKind CJEnvironment::sanitizerKind = SanitizerKind::NONE;
#ifdef WITH_EVENT_HANDLER
static std::shared_ptr<AppExecFwk::EventHandler>GetGHandler()
@@ -806,6 +807,9 @@ CJEnvironment::NSMode CJEnvironment::DetectAppNSMode()
if (tokens.size() <= 1) {
return NSMode::SINK;
}
if (CJEnvironment::sanitizerKind != SanitizerKind::NONE) {
return NSMode::APP;
}
if (tokens[0] > CJEnvironment::majorVersion ||
(tokens[0] == CJEnvironment::majorVersion && tokens[1] >= CJEnvironment::minorVersion)) {
return NSMode::SINK;
@@ -832,7 +836,12 @@ void CJEnvironment::InitCJNS(const std::string& appPath)
#ifdef __OHOS__
InitNewCJAppNS(appPath.empty() ? SANDBOX_LIB_PATH : appPath);
#endif
StartRuntime();
if (!StartRuntime()) {
LOGE("Failed to start cj runtime.");
delete lazyApis_;
lazyApis_ = nullptr;
return;
}
StartUIScheduler();
}
@@ -841,6 +850,12 @@ void CJEnvironment::SetAppVersion(std::string& version)
CJEnvironment::appVersion = version;
}
void CJEnvironment::SetSanitizerKindRuntimeVersion(SanitizerKind kind)
{
LOGI("Set sanitizer for cj.");
CJEnvironment::sanitizerKind = kind;
}
CJEnvMethods* CJEnvironment::CreateEnvMethods()
{
static CJEnvMethods gCJEnvMethods {
@@ -882,7 +897,7 @@ CJEnvMethods* CJEnvironment::CreateEnvMethods()
return CJEnvironment::GetInstance()->RegisterCJUncaughtExceptionHandler(handle);
},
.setSanitizerKindRuntimeVersion = [](SanitizerKind kind) {
return CJEnvironment::GetInstance()->SetSanitizerKindRuntimeVersion(kind);
CJEnvironment::SetSanitizerKindRuntimeVersion(kind);
},
.checkLoadCJLibrary = []() {
return CJEnvironment::GetInstance()->CheckLoadCJLibrary();
@@ -53,10 +53,7 @@ public:
return isRuntimeStarted_;
}
void SetSanitizerKindRuntimeVersion(SanitizerKind kind)
{
sanitizerKind_ = kind;
}
static void SetSanitizerKindRuntimeVersion(SanitizerKind kind);
bool StartRuntime();
void StopRuntime();
@@ -121,6 +118,7 @@ public:
static std::string appVersion;
static const uint32_t majorVersion;
static const uint32_t minorVersion;
static SanitizerKind sanitizerKind;
private:
bool LoadRuntimeApis();
@@ -130,8 +128,7 @@ private:
bool isLoadCJLibrary_{false};
bool isUISchedulerStarted_{false};
void* uiScheduler_ {nullptr};
SanitizerKind sanitizerKind_ {SanitizerKind::NONE};
NSMode nsMode_;
NSMode nsMode_ {NSMode::SINK};
std::vector<void*> preloadLibs_;
};
@@ -78,11 +78,9 @@ HWTEST_F(CjEnvironmentTest, CJEnvironment_IsRuntimeStarted_0100, TestSize.Level1
*/
HWTEST_F(CjEnvironmentTest, CJEnvironment_SetSanitizerKindRuntimeVersion_0100, TestSize.Level1)
{
auto cJEnvironment = std::make_shared<CJEnvironment>(CJEnvironment::NSMode::APP);
SanitizerKind kind = SanitizerKind::ASAN;
cJEnvironment->SetSanitizerKindRuntimeVersion(kind);
EXPECT_NE(cJEnvironment->sanitizerKind_, SanitizerKind::NONE);
CJEnvironment::SetSanitizerKindRuntimeVersion(kind);
EXPECT_NE(CJEnvironment::sanitizerKind, SanitizerKind::NONE);
}
/**
@@ -406,7 +404,23 @@ HWTEST_F(CjEnvironmentTest, CjEnvironmentTestInitNewCJAppNS_001andInitCJSDKNS_01
*/
HWTEST_F(CjEnvironmentTest, CjEnvironmentTestDetectAppNSModeandInitCJNS_0100, TestSize.Level2)
{
SanitizerKind kind = SanitizerKind::ASAN;
CJEnvironment::SetSanitizerKindRuntimeVersion(kind);
EXPECT_NE(CJEnvironment::sanitizerKind, SanitizerKind::NONE);
auto test = CJEnvironment::DetectAppNSMode();
EXPECT_EQ(test, CJEnvironment::NSMode::SINK);
EXPECT_EQ(test, CJEnvironment::NSMode::APP);
}
/**
* @tc.name: InitCJNS_0100
* @tc.desc: Test InitCJNS.
* @tc.type: FUNC
*/
HWTEST_F(CjEnvironmentTest, CjEnvironmentTestInitCJNS_0100, TestSize.Level2)
{
CJEnvironment cJEnvironment(CJEnvironment::NSMode::APP);
std::string appPath = "com/ohos/unittest/test/";
cJEnvironment.InitCJNS(appPath);
EXPECT_EQ(cJEnvironment.isRuntimeStarted_, false);
}
} // namespace OHOS
+3 -7
View File
@@ -1646,15 +1646,11 @@ void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, con
TAG_LOGD(AAFwkTag::APPKIT, "the application isSystemApp: %{public}d", isSystemApp);
#ifdef CJ_FRONTEND
AbilityRuntime::CJRuntime::SetAppVersion(bundleInfo.applicationInfo.compileSdkVersion);
if (appInfo.asanEnabled) {
AbilityRuntime::CJRuntime::SetSanitizerVersion(SanitizerKind::ASAN);
}
if (isCJApp) {
AbilityRuntime::CJRuntime::SetAppLibPath(appLibPaths);
if (appInfo.asanEnabled) {
AbilityRuntime::CJRuntime::SetSanitizerVersion(SanitizerKind::ASAN);
} else if (appInfo.tsanEnabled) {
AbilityRuntime::CJRuntime::SetSanitizerVersion(SanitizerKind::TSAN);
} else if (appInfo.hwasanEnabled) {
AbilityRuntime::CJRuntime::SetSanitizerVersion(SanitizerKind::HWASAN);
}
} else {
#endif
if (IsEtsAPP(appInfo)) {
@@ -572,6 +572,31 @@ HWTEST_F(MainThreadTest, HandleLaunchApplication_0100, TestSize.Level1)
mainThread_->HandleLaunchApplication(lanchdata, config);
}
/**
* @tc.name: HandleLaunchApplicationWithCJSAN_0100
* @tc.desc: HandleLaunchApplicationWithCJSAN.
* @tc.type: FUNC
*/
HWTEST_F(MainThreadTest, HandleLaunchApplicationWithCJSAN_0100, TestSize.Level1)
{
Configuration config;
AppLaunchData lanchdata;
ProcessInfo processing("TestProcess", 9999);
ApplicationInfo appinf;
appinf.name = "MockTestApplication";
appinf.bundleName = "com.ohos.noasan";
lanchdata.SetApplicationInfo(appinf);
lanchdata.SetProcessInfo(processing);
mainThread_->HandleLaunchApplication(lanchdata, config);
EXPECT_TRUE(mainThread_->application_ != nullptr);
appinf.bundleName = "com.ohos.asan";
appinf.asanEnabled = true;
lanchdata.SetApplicationInfo(appinf);
mainThread_->HandleLaunchApplication(lanchdata, config);
EXPECT_TRUE(mainThread_->application_ != nullptr);
}
/**
* @tc.name: ConnectToAppMgr_0100
* @tc.desc: ConnectToAppMgr.
@@ -267,3 +267,47 @@ HWTEST_F(CjEnvironmentTest, CjEnvironmentTestGetSymbol_001, TestSize.Level2)
auto ret = cJEnvironment.GetSymbol(nullptr, "dlName");
EXPECT_EQ(ret, nullptr);
}
/**
* @tc.name: InitCJNS_0100
* @tc.desc: Test InitCJNS.
* @tc.type: FUNC
*/
HWTEST_F(CjEnvironmentTest, CjEnvironmentTestInitCJNS_0100, TestSize.Level2)
{
CJEnvironment cJEnvironment(CJEnvironment::NSMode::APP);
std::string appPath = "com/ohos/unittest/test/";
cJEnvironment.InitCJNS(appPath);
EXPECT_EQ(cJEnvironment.IsRuntimeStarted(), false);
}
/**
* @tc.name: SanitizerKindRuntimeVersion_001
* @tc.desc: Test SanitizerKindRuntimeVersion.
* @tc.type: FUNC
*/
HWTEST_F(CjEnvironmentTest, CjEnvironmentTestSanitizerKindRuntimeVersion_001, TestSize.Level2)
{
CJEnvMethods* cjEnv = CJEnvironment::CreateEnvMethods();
SanitizerKind kind = SanitizerKind::ASAN;
cjEnv->setSanitizerKindRuntimeVersion(kind);
EXPECT_NE(OHOS::CJEnvironment::sanitizerKind, SanitizerKind::NONE);
kind = SanitizerKind::NONE;
cjEnv->setSanitizerKindRuntimeVersion(kind);
EXPECT_EQ(OHOS::CJEnvironment::sanitizerKind, SanitizerKind::NONE);
}
/**
* @tc.name: CjEnvironmentTestDetectAppNSMode_001
* @tc.desc: Test DetectAppNSMode.
* @tc.type: FUNC
*/
HWTEST_F(CjEnvironmentTest, CjEnvironmentTestDetectAppNSMode_001, TestSize.Level2)
{
SanitizerKind kind = SanitizerKind::ASAN;
OHOS::CJEnvironment::SetSanitizerKindRuntimeVersion(kind);
EXPECT_EQ(OHOS::CJEnvironment::DetectAppNSMode(), OHOS::CJEnvironment::NSMode::APP);
kind = SanitizerKind::NONE;
OHOS::CJEnvironment::SetSanitizerKindRuntimeVersion(kind);
EXPECT_EQ(OHOS::CJEnvironment::DetectAppNSMode(), OHOS::CJEnvironment::NSMode::SINK);
}