summaryrefslogtreecommitdiff
path: root/security-device-auth-0002-deviceauth-ipc-service.patch
diff options
context:
space:
mode:
Diffstat (limited to 'security-device-auth-0002-deviceauth-ipc-service.patch')
-rw-r--r--security-device-auth-0002-deviceauth-ipc-service.patch276
1 files changed, 276 insertions, 0 deletions
diff --git a/security-device-auth-0002-deviceauth-ipc-service.patch b/security-device-auth-0002-deviceauth-ipc-service.patch
new file mode 100644
index 0000000..e94772a
--- /dev/null
+++ b/security-device-auth-0002-deviceauth-ipc-service.patch
@@ -0,0 +1,276 @@
+From 31f1a71fee10a1248de00ea1f36eeaf80e683673 Mon Sep 17 00:00:00 2001
+From: "beiling.xie" <xiekunxun@huawei.com>
+Date: Fri, 16 Sep 2022 01:11:40 +0800
+Subject: [PATCH] adapter deviceauth ipc service
+
+Signed-off-by: beiling.xie <xiekunxun@huawei.com>
+---
+ frameworks/inc/ipc_service.h | 2 ++
+ frameworks/src/ipc_service.c | 16 +-----------
+ frameworks/src/standard/ipc_adapt.cpp | 18 +++++++------
+ .../src/standard/ipc_dev_auth_proxy.cpp | 25 ++++---------------
+ frameworks/src/standard/ipc_dev_auth_stub.cpp | 7 +-----
+ services/BUILD.gn | 15 ++++++++++-
+ services/device_auth.c | 6 +++++
+ 7 files changed, 39 insertions(+), 50 deletions(-)
+
+diff --git a/frameworks/inc/ipc_service.h b/frameworks/inc/ipc_service.h
+index e3eb11b..ed73555 100755
+--- a/frameworks/inc/ipc_service.h
++++ b/frameworks/inc/ipc_service.h
+@@ -20,6 +20,8 @@
+ extern "C" {
+ #endif
+
++int DeviceAuthIpcInit();
++
+ #ifdef __cplusplus
+ }
+ #endif
+diff --git a/frameworks/src/ipc_service.c b/frameworks/src/ipc_service.c
+index afc21fc..3db6bb5 100644
+--- a/frameworks/src/ipc_service.c
++++ b/frameworks/src/ipc_service.c
+@@ -1038,20 +1038,10 @@ int32_t MainRescInit(void)
+ return HC_SUCCESS;
+ }
+
+-int32_t main(int32_t argc, char const *argv[])
++int DeviceAuthIpcInit()
+ {
+ uintptr_t serviceCtx = 0x0;
+ int32_t ret;
+- HcCondition cond;
+-
+- (void)argc;
+- (void)argv;
+- LOGI("device authentication service starting ...");
+- ret = InitDeviceAuthService();
+- if (ret != HC_SUCCESS) {
+- LOGE("device auth service main, InitDeviceAuthService failed, ret %d", ret);
+- return 1;
+- }
+
+ ret = MainRescInit();
+ if (ret != HC_SUCCESS) {
+@@ -1070,10 +1060,6 @@ int32_t main(int32_t argc, char const *argv[])
+ }
+ (void)AddMethodMap(serviceCtx);
+ LOGI("device authentication service register to IPC manager done, service running...");
+- (void)memset_s(&cond, sizeof(cond), 0, sizeof(cond));
+- InitHcCond(&cond, NULL);
+- cond.wait(&cond);
+- DestroyHcCond(&cond);
+ return 0;
+ }
+
+diff --git a/frameworks/src/standard/ipc_adapt.cpp b/frameworks/src/standard/ipc_adapt.cpp
+index 3dd4ec8..3910726 100644
+--- a/frameworks/src/standard/ipc_adapt.cpp
++++ b/frameworks/src/standard/ipc_adapt.cpp
+@@ -23,12 +23,14 @@
+ #include "ipc_dev_auth_stub.h"
+ #include "ipc_sdk.h"
+ #include "ipc_service.h"
+-#include "iservice_registry.h"
+ #include "securec.h"
+ #include "system_ability_definition.h"
++#include "ipc_center.h"
++
+
+ using namespace std;
+ using namespace OHOS;
++static IpcCenter *g_deviceIpc = nullptr;
+ namespace {
+ static const int32_t BUFF_MAX_SZ = 128;
+ static const int32_t IPC_CALL_BACK_MAX_NODES = 64;
+@@ -1335,19 +1337,19 @@ void DestroyServiceInstance(uintptr_t *ipcInstance)
+
+ int32_t AddDevAuthServiceToManager(uintptr_t *serviceCtx)
+ {
+- int32_t ret = ERR_OK;
++ int32_t ret = HC_SUCCESS;
+ ServiceDevAuth *sPtr = nullptr;
+
+- sptr<ISystemAbilityManager> sysMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
+- if (sysMgr == nullptr) {
+- return HC_ERR_IPC_GET_SERVICE;
+- }
+ sPtr = new(std::nothrow) ServiceDevAuth();
+ if (sPtr == nullptr) {
+ return HC_ERR_ALLOC_MEMORY;
+ }
+- ret = sysMgr->AddSystemAbility(DEVICE_AUTH_SERVICE_ID, sPtr);
+- if (ret != ERR_OK) {
++ sPtr->isDSoftBusObj = false;
++ if (!g_deviceIpc->Init(true, static_cast<IPCObjectStub*>(sPtr))) {
++ LOGE("deviceIpc init failed");
++ }
++ ret = IPCSkeleton::SetDeviceAuthObj(sPtr);
++ if (ret != true) {
+ LOGE("add service failed");
+ delete sPtr;
+ return HC_ERROR;
+diff --git a/frameworks/src/standard/ipc_dev_auth_proxy.cpp b/frameworks/src/standard/ipc_dev_auth_proxy.cpp
+index bc3abeb..c493f7a 100644
+--- a/frameworks/src/standard/ipc_dev_auth_proxy.cpp
++++ b/frameworks/src/standard/ipc_dev_auth_proxy.cpp
+@@ -19,9 +19,9 @@
+ #include "hc_log.h"
+ #include "ipc_adapt.h"
+ #include "ipc_sdk.h"
+-#include "iservice_registry.h"
+ #include "system_ability_definition.h"
+
++
+ namespace OHOS {
+ ProxyDevAuth::ProxyDevAuth(const sptr<IRemoteObject> &impl) : IRemoteProxy<IMethodsIpcCall>(impl)
+ {}
+@@ -33,7 +33,7 @@ int32_t ProxyDevAuth::DoCallRequest(MessageParcel &dataParcel, MessageParcel &re
+ {
+ int32_t ret;
+ sptr<IRemoteObject> remote = nullptr;
+- MessageOption option = { MessageOption::TF_SYNC };
++ MessageOption option;
+
+ LOGI("ProxyDevAuth, SendRequest...");
+ remote = Remote();
+@@ -42,9 +42,6 @@ int32_t ProxyDevAuth::DoCallRequest(MessageParcel &dataParcel, MessageParcel &re
+ return HC_ERR_IPC_INTERNAL_FAILED;
+ }
+
+- if (withSync == false) {
+- option = { MessageOption::TF_ASYNC };
+- }
+ ret = remote->SendRequest(DEV_AUTH_CALL_REQUEST, dataParcel, replyParcel, option);
+ LOGI("SendRequest done, ret %d", ret);
+ (ret == ERR_NONE) ? replyParcel.ReadInt32(ret) : (ret = HC_ERR_IPC_INTERNAL_FAILED);
+@@ -53,15 +50,8 @@ int32_t ProxyDevAuth::DoCallRequest(MessageParcel &dataParcel, MessageParcel &re
+
+ bool ProxyDevAuth::ServiceRunning(void)
+ {
+- auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
+- if (saMgr == nullptr) {
+- return false;
+- }
+- auto daSa = saMgr->GetSystemAbility(DEVICE_AUTH_SERVICE_ID);
+- if (daSa == nullptr) {
+- return false;
+- }
+- return true;
++ auto daSa = IPCSkeleton::GetDeviceAuthObj();
++ return daSa != nullptr;
+ }
+
+ int32_t ProxyDevAuthData::EncodeCallRequest(int32_t type, const uint8_t *param, int32_t paramSz)
+@@ -117,12 +107,7 @@ int32_t ProxyDevAuthData::FinalCallRequest(int32_t methodId)
+
+ sptr<ProxyDevAuth> ProxyDevAuthData::GetProxy() const
+ {
+- auto saMgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
+- if (saMgr == nullptr) {
+- LOGE("GetSystemAbilityManager failed");
+- return nullptr;
+- }
+- auto daSa = saMgr->GetSystemAbility(DEVICE_AUTH_SERVICE_ID);
++ auto daSa = IPCSkeleton::GetDeviceAuthObj();
+ if (daSa == nullptr) {
+ LOGE("GetSystemAbility failed");
+ return nullptr;
+diff --git a/frameworks/src/standard/ipc_dev_auth_stub.cpp b/frameworks/src/standard/ipc_dev_auth_stub.cpp
+index e33b770..648bc3b 100644
+--- a/frameworks/src/standard/ipc_dev_auth_stub.cpp
++++ b/frameworks/src/standard/ipc_dev_auth_stub.cpp
+@@ -286,12 +286,7 @@ void ServiceDevAuth::ActCallback(int32_t objIdx, int32_t callbackId, bool sync,
+ LOGW("nothing to do, callback id %d, remote object id %d", callbackId, objIdx);
+ return;
+ }
+- MessageOption option(MessageOption::TF_SYNC);
+- option.SetWaitTime(DEV_AUTH_CALL_WAIT_TIME);
+- if (!sync) {
+- option.SetFlags(MessageOption::TF_ASYNC);
+- option.SetWaitTime(0);
+- }
++ MessageOption option;
+ std::lock_guard<std::mutex> autoLock(g_cBMutex);
+ sptr<ICommIpcCallback> proxy = iface_cast<ICommIpcCallback>(g_cbStub[objIdx].cbStub);
+ proxy->DoCallBack(callbackId, cbHook, dataParcel, reply, option);
+diff --git a/services/BUILD.gn b/services/BUILD.gn
+index b2cdb17..ce6e24b 100644
+--- a/services/BUILD.gn
++++ b/services/BUILD.gn
+@@ -142,9 +142,14 @@ if (defined(ohos_lite)) {
+ "//foundation/communication/dsoftbus/interfaces/kits/transport",
+ "//foundation/communication/dsoftbus/interfaces/inner_kits/transport",
+ "//third_party/json/include",
++ "${frameworks_path}/inc",
++ "${dev_frameworks_path}/inc/permission_adapter",
+ ]
+
+ sources = deviceauth_files
++ sources += deviceauth_ipc_files
++ sources += permission_adapter_files
++ sources += [ "${frameworks_path}/src/ipc_service.c" ]
+ cflags = [ "-DHILOG_ENABLE" ]
+ defines = deviceauth_defines
+ cflags += build_flags
+@@ -164,6 +169,7 @@ if (defined(ohos_lite)) {
+
+ external_deps = [
+ "hiviewdfx_hilog_native:libhilog",
++ "ipc:ipc_core",
+ ]
+ if (support_jsapi) {
+ external_deps += [ "os_account_standard:os_account_innerkits" ]
+@@ -238,6 +244,12 @@ if (defined(ohos_lite)) {
+ sources = deviceauth_ipc_files
+ sources += permission_adapter_files
+ sources += [ "${frameworks_path}/src/ipc_sdk.c" ]
++ sources += [ "${os_adapter_path}/impl/src/hc_log.c" ]
++ sources += [ "${os_adapter_path}/impl/src/linux/hc_types.c" ]
++ sources += [ "${os_adapter_path}/impl/src/hc_mutex.c" ]
++ sources += [ "${common_lib_path}/impl/src/json_utils.c" ]
++ sources += [ "${common_lib_path}/impl/src/string_util.c" ]
++ sources += [ "${common_lib_path}/impl/src/clib_types.c" ]
+
+ defines = [
+ "__LINUX__",
+@@ -250,9 +262,10 @@ if (defined(ohos_lite)) {
+ }
+
+ deps = [
+- "${deps_adapter_path}:${hal_module_name}",
+ "//third_party/cJSON:cjson_static",
+ "//utils/native/base:utils",
++ "//third_party/bounds_checking_function:libsec_shared",
++ "//third_party/cJSON:cjson_static",
+ ]
+
+ external_deps = [
+diff --git a/services/device_auth.c b/services/device_auth.c
+index e09dce4..16f6200 100644
+--- a/services/device_auth.c
++++ b/services/device_auth.c
+@@ -14,6 +14,7 @@
+ */
+
+ #include "device_auth.h"
++#include "ipc_service.h"
+
+ #include "alg_loader.h"
+ #include "callback_manager.h"
+@@ -241,6 +242,11 @@ DEVICE_AUTH_API_PUBLIC int InitDeviceAuthService(void)
+ DestroyGmAndGa();
+ return res;
+ }
++ res = DeviceAuthIpcInit();
++ if (res != HC_SUCCESS) {
++ DestroyGmAndGa();
++ return res;
++ }
+ SetInitStatus();
+ LOGI("[End]: [Service]: Init device auth service successfully!");
+ return HC_SUCCESS;
+--
+2.25.1
+