Return access denied when connect to socket fails with EACCES 40/174040/6
authorZofia Grzelewska <z.abramowska@samsung.com>
Tue, 27 Mar 2018 11:54:18 +0000 (13:54 +0200)
committerTomasz Swierczek <t.swierczek@samsung.com>
Thu, 12 Apr 2018 07:43:54 +0000 (07:43 +0000)
When client cannot connect to simulator socket with error EACCES,
propagate this error to client using TEEC_ACCESS_DENIED.

Change-Id: I62d678a451f2d099ce314d6a059f8ec91f20d4af

TEECLib/inc/teec_connection.h
TEECLib/src/teec_api.c
TEECLib/src/teec_connection.c

index aaa8c5f..fcd4ac6 100644 (file)
@@ -63,7 +63,7 @@ TEEC_Session *session;
 uint32_t OperationID;
 } TEEC_OperationImp;
 
-int32_t connecttoServer(void);
+TEEC_Result connectToServer(int32_t *serverSocket);
 void disconnectfromServer(int32_t ServerSocket);
 uint32_t sendCommand(int32_t sockfd, TEE_CMD cmd, void* data, size_t size);
 
index 5a0bc7c..33d4af1 100644 (file)
@@ -628,13 +628,13 @@ TEEC_Result TEEC_InitializeContext(const char *name, TEEC_Context *context)
        if (name) strncpy(ctx.TEEName, name, ctx.nameLength);
 
        // Connect to Simulator Daemon as a client
-       context_imp->sockfd = connecttoServer();
+       TEEC_Result conn_result = connectToServer(&(context_imp->sockfd));
 
-       if (context_imp->sockfd == -1) {
+       if (conn_result != TEEC_SUCCESS) {
                OsaFree(context_imp);
                context->imp = NULL;
                LOGE(TEEC_LIB, "Unable to connect to Simulator daemon");
-               return TEEC_ERROR_GENERIC;
+               return conn_result;
        }
 
        ctx.returnValue = TEEC_SUCCESS;
index dbfff73..199e665 100644 (file)
 
 /*
  * ===  FUNCTION  ======================================================================
- *         Name:  connecttoServer
+ *         Name:  connectToServer
  *  Description:  API (Interface for TEECAPI) implementation for connecting to
  *                the Simulator Daemon through socket
  *       Return:    Socket fd on success
  *                          -1 on failure
  * =====================================================================================
  */
-int32_t connecttoServer(void)
+TEEC_Result connectToServer(int32_t *fd)
 {
        LOGD(TEEC_LIB, "Entry");
        int32_t serverSocket, socklen;
@@ -59,13 +59,13 @@ int32_t connecttoServer(void)
        // Check simulator socket name length is valid
        if (daemonsock.sun_path[sizeof(daemonsock.sun_path)-1] != 0) {
                LOGE(TEEC_LIB, "Socket name too long: ", daemonsock.sun_path);
-               return -1;
+               return TEEC_ERROR_GENERIC;
        }
 
        // Get socket decriptor
        if ((serverSocket = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
                LOGE(TEEC_LIB, "No socket for simdaemon");
-               return -1;
+               return TEEC_ERROR_GENERIC;
        }
 
        socklen = sizeof(daemonsock);
@@ -75,10 +75,13 @@ int32_t connecttoServer(void)
        if (connect(serverSocket, sockptr, socklen) == -1) {
                LOGE(TEEC_LIB, "connection to simdaemon(%s) failed errno=%d", SIMDAEMON_SOCK_PATH, errno);
                close(serverSocket);
-               return -1;
+               if (errno == EACCES)
+                       return TEEC_ERROR_ACCESS_DENIED;
+               return TEEC_ERROR_GENERIC;
        }
 
-       return serverSocket;
+       *fd = serverSocket;
+       return TEEC_SUCCESS;
 }
 
 /*