diff --git a/interfaces/innerkits/libdbinder/include/dbinder_service.h b/interfaces/innerkits/libdbinder/include/dbinder_service.h index 22f504bbfa9df8028645e30883cf6b67384d3dfb..074b863fb4a48a6ea57962a0a2ffcf5bd36983a7 100644 --- a/interfaces/innerkits/libdbinder/include/dbinder_service.h +++ b/interfaces/innerkits/libdbinder/include/dbinder_service.h @@ -117,6 +117,7 @@ public: bool DetachBusNameObject(IPCObjectProxy *proxy); std::string CreateDatabusName(int uid, int pid); bool DetachProxyObject(binder_uintptr_t binderObject); + std::string QueryBusNameObject(IPCObjectProxy *proxy); private: static std::shared_ptr GetRemoteListener(); @@ -157,7 +158,6 @@ private: std::string &remoteDeviceId, int pid, int uid); bool IsDeviceIdIllegal(const std::string &deviceID); bool AttachBusNameObject(IPCObjectProxy *proxy, const std::string &name); - std::string QueryBusNameObject(IPCObjectProxy *proxy); std::string GetDatabusNameByProxy(IPCObjectProxy *proxy); uint32_t GetSeqNumber(); bool RegisterRemoteProxyInner(std::u16string serviceName, binder_uintptr_t binder); diff --git a/services/dbinder/dbinder_service/src/dbinder_sa_death_recipient.cpp b/services/dbinder/dbinder_service/src/dbinder_sa_death_recipient.cpp index 028964a28195df9ea25df622b9214215626fbff9..a9317fd6073d51fa3a6d67ae584b67f5e5b42c98 100644 --- a/services/dbinder/dbinder_service/src/dbinder_sa_death_recipient.cpp +++ b/services/dbinder/dbinder_service/src/dbinder_sa_death_recipient.cpp @@ -16,9 +16,12 @@ #include "dbinder_sa_death_recipient.h" #include "dbinder_service.h" #include "dbinder_log.h" +#include "ISessionService.h" #include "log_tags.h" namespace OHOS { +using Communication::SoftBus::ISessionService; + #ifndef TITLE #define TITLE __PRETTY_FUNCTION__ #endif @@ -51,5 +54,17 @@ void DbinderSaDeathRecipient::OnRemoteDied(const wptr &remote) (void)dBinderService->DetachBusNameObject(proxy); (void)dBinderService->DetachProxyObject(binderObject_); + + std::shared_ptr softbusManager = ISessionService::GetInstance(); + if (softbusManager == nullptr) { + DBINDER_LOGE("fail to get softbus service"); + return; + } + std::string sessionName = dBinderService->QueryBusNameObject(proxy); + if (sessionName.empty()) { + DBINDER_LOGE("proxy sessionName not found"); + return; + } + softbusManager->RemovePermission(sessionName); } } // namespace OHOS diff --git a/services/dbinder/dbinder_service/src/socket/dbinder_remote_listener.cpp b/services/dbinder/dbinder_service/src/socket/dbinder_remote_listener.cpp index b3baa515dccf0a1f1692d397b0a69ceece1c680f..510196b64e5803268f0959145dabb2eacb338e3b 100644 --- a/services/dbinder/dbinder_service/src/socket/dbinder_remote_listener.cpp +++ b/services/dbinder/dbinder_service/src/socket/dbinder_remote_listener.cpp @@ -39,6 +39,13 @@ bool DBinderRemoteListener::StartListener(std::shared_ptr DBINDER_LOGE("fail to get softbus service"); return false; } + int pid = static_cast(getpid()); + int uid = static_cast(getuid()); + if (softbusManager_->GrantPermission(uid, pid, OWN_SESSION_NAME) != ERR_NONE) { + DBINDER_LOGE("fail to Grant Permission softbus name %{public}s", OWN_SESSION_NAME.c_str()); + return false; + } + int ret = softbusManager_->CreateSessionServer(OWN_SESSION_NAME, PEER_SESSION_NAME, listener); if (ret != 0) { DBINDER_LOGE("fail to create softbus server with ret = %{public}d", ret);