Use the proper pid in pid->owner mapping 96/323596/1
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 30 Apr 2025 09:11:56 +0000 (11:11 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 30 Apr 2025 09:11:56 +0000 (11:11 +0200)
We should use the pid passed from client, not the client's pid.

Change-Id: Iedca1aad5d4a536a1f51f0b5c49fbdc4e725c988

src/client/client-security-manager.cpp
src/server/service/include/service.h
src/server/service/service.cpp

index 09fb2aefe17be79eac4c95fa0cf36ec2684411f2..377d299363f3339f5255f910444d45dd6a7cad09 100644 (file)
@@ -2042,7 +2042,7 @@ int security_manager_get_app_owner_uid(pid_t pid, uid_t *uid)
     using namespace SecurityManager;
     return try_catch([&]() -> int {
         ClientRequest request(SecurityModuleCall::APP_GET_OWNER);
-        request.send();
+        request.send(pid);
         if (!request.failed()) {
             request.recv(ownerId);
             LogInfo("Received ownerId: " << ownerId << " for app PID " << pid);
@@ -2076,7 +2076,7 @@ int security_manager_get_app_full_credentials_from_pid(pid_t pid, uid_t *owner_u
         using namespace SecurityManager;
         return try_catch([&]() -> int {
             ClientRequest request(SecurityModuleCall::APP_GET_FULL_CREDS);
-            request.send(puid);
+            request.send(pid, puid);
             if (!request.failed()) {
                 uid_t ownerId;
                 std::string appNameString, pkgNameString;
index 42c309d2876263890d117c6bffb662d33255c629..79e267404627eacee2958d7e3f4b99129543d1c1 100644 (file)
@@ -126,17 +126,15 @@ private:
      * Process getting owner uid identifier from an app puid
      *
      * @param buffer Input/output message buffer
-     * @param creds  credentials of the requesting process
      */
-    void processGetAppOwner(MessageBuffer &buffer, const Credentials &creds);
+    void processGetAppOwner(MessageBuffer &buffer);
 
     /**
      * Process getting owner uid, pkgId & appId identifiers from an app puid
      *
      * @param buffer Input/output message buffer
-     * @param creds  credentials of the requesting process
      */
-    void processGetAppFullCreds(MessageBuffer &buffer, const Credentials &creds);
+    void processGetAppFullCreds(MessageBuffer &buffer);
 
     /**
      * Process getting package identifier from an app identifier
index 8dccfe39383abda2453c42133450e8498e038464..36966f5e30f8b5e296e457864f615a6e4f181c58 100644 (file)
@@ -85,11 +85,11 @@ void Service::processEvent(Event &&msg)
                 break;
             case SecurityModuleCall::APP_GET_OWNER:
                 LogDebug("call_type: SecurityModuleCall::APP_GET_OWNER");
-                processGetAppOwner(msg.buffer, msg.creds);
+                processGetAppOwner(msg.buffer);
                 break;
             case SecurityModuleCall::APP_GET_FULL_CREDS:
                 LogDebug("call_type: SecurityModuleCall::APP_GET_FULL_CREDS");
-                processGetAppFullCreds(msg.buffer, msg.creds);
+                processGetAppFullCreds(msg.buffer);
                 break;
             case SecurityModuleCall::APP_GET_PKG_NAME:
                 LogDebug("call_type: SecurityModuleCall::APP_GET_PKG_NAME");
@@ -263,23 +263,25 @@ void Service::processGetAppNameAndPkg(MessageBuffer &buffer)
         Serialization::Serialize(buffer, appName, pkgName);
 }
 
-void Service::processGetAppOwner(MessageBuffer &buffer, const Credentials &creds)
+void Service::processGetAppOwner(MessageBuffer &buffer)
 {
     uid_t ownerUid;
-
-    int ret = m_serviceImpl.getAppOwner(creds.pid, ownerUid);
+    pid_t pid;
+    Deserialization::Deserialize(buffer, pid);
+    int ret = m_serviceImpl.getAppOwner(pid, ownerUid);
     buffer.ModeStreaming();
     Serialization::Serialize(buffer, ret);
     if (ret == SECURITY_MANAGER_SUCCESS)
         Serialization::Serialize(buffer, ownerUid);
 }
 
-void Service::processGetAppFullCreds(MessageBuffer &buffer, const Credentials &creds)
+void Service::processGetAppFullCreds(MessageBuffer &buffer)
 {
     uid_t puid, ownerUid;
+    pid_t pid;
     std::string appName, pkgName;
-    Deserialization::Deserialize(buffer, puid);
-    int ret = m_serviceImpl.getAppFullCreds(puid, creds.pid, ownerUid, appName, pkgName);
+    Deserialization::Deserialize(buffer, pid, puid);
+    int ret = m_serviceImpl.getAppFullCreds(puid, pid, ownerUid, appName, pkgName);
     buffer.ModeStreaming();
     Serialization::Serialize(buffer, ret);
     if (ret == SECURITY_MANAGER_SUCCESS)