mirror of
https://github.com/openharmony/ability_ability_runtime.git
synced 2026-08-24 22:21:36 -04:00
!15320 asan runtime use mode app
Merge pull request !15320 from 吴杰杰杰/master
This commit is contained in:
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user