Don't close invalid or uninitialied fds 51/26251/2 10.0.3 11.91.0 11.92.0 11.93.0 12.90.0 jellyfish/10.0.3 jellyfish_10.0.3 lamprey/11.91.0 lamprey/11.92.0 lamprey/11.93.0 lamprey_11.91.0 lamprey_11.92.0 lamprey_11.93.0 marlin/12.90.0 marlin_12.90.0
authorDamian Hobson-Garcia <dhobsong@igel.co.jp>
Mon, 12 Apr 2021 07:43:57 +0000 (16:43 +0900)
committerDamian Hobson-Garcia <dhobsong@igel.co.jp>
Mon, 12 Apr 2021 09:25:24 +0000 (18:25 +0900)
Avoid calling close() on file descriptors that have not been intialized,
(or initialized to 0) and descriptors that are known to be invalid.

Closing file descriptors due to handle failing initialization is handled
in the intialization code. In the lease-manager, file descriptors can be
invalid during normal operation, so validity is tested at shutdown.

Bug-AGL: SPEC-3862

Change-Id: I798273195cba297c14c6b97d50c7614164fda7df
Signed-off-by: Damian Hobson-Garcia <dhobsong@igel.co.jp>
drm-lease-manager/lease-manager.c
drm-lease-manager/lease-server.c
libdlmclient/dlmclient.c

index cfb1ab5..5eeef16 100644 (file)
@@ -509,6 +509,7 @@ void lm_lease_close(struct lease_handle *handle)
        assert(handle);
 
        struct lease *lease = (struct lease *)handle;
-       close(lease->lease_fd);
+       if (lease->lease_fd >= 0)
+               close(lease->lease_fd);
        lease->lease_fd = -1;
 }
index a7e3190..8820305 100644 (file)
@@ -266,15 +266,16 @@ struct ls *ls_create(struct lease_handle **lease_handles, int count)
                return NULL;
        }
 
-       ls->servers = calloc(count, sizeof(struct ls_server));
-       if (!ls->servers) {
-               DEBUG_LOG("Memory allocation failed: %s\n", strerror(errno));
-               goto err;
-       }
-
        ls->epoll_fd = epoll_create1(0);
        if (ls->epoll_fd < 0) {
                DEBUG_LOG("epoll_create failed: %s\n", strerror(errno));
+               free(ls);
+               return NULL;
+       }
+
+       ls->servers = calloc(count, sizeof(struct ls_server));
+       if (!ls->servers) {
+               DEBUG_LOG("Memory allocation failed: %s\n", strerror(errno));
                goto err;
        }
 
index dbe2609..af7d3ac 100644 (file)
@@ -120,7 +120,7 @@ struct dlm_lease *dlm_get_lease(const char *name)
        }
 
        if (!lease_send_request(lease, DLM_GET_LEASE))
-               goto err;
+               goto err_request;
 
        if (!lease_recv_fd(lease))
                goto err;
@@ -129,8 +129,11 @@ struct dlm_lease *dlm_get_lease(const char *name)
 
 err:
        saved_errno = errno;
-       dlm_release_lease(lease);
+       lease_send_request(lease, DLM_RELEASE_LEASE);
        errno = saved_errno;
+err_request:
+       close(lease->dlm_server_sock);
+       free(lease);
        return NULL;
 }