Blame SOURCES/0096-nss-idmap-check-timed-muted-return-code.patch

ced1f5
From 63c09393b926f0d00317a1ca1dc6c7c992c40f4e Mon Sep 17 00:00:00 2001
ced1f5
From: Sumit Bose <sbose@redhat.com>
ced1f5
Date: Tue, 16 Jan 2018 18:09:00 +0100
ced1f5
Subject: [PATCH 96/96] nss-idmap: check timed muted return code
ced1f5
ced1f5
Check return values and make sure the mutex is released in case of
ced1f5
errors.
ced1f5
ced1f5
Related to https://pagure.io/SSSD/sssd/issue/2478
ced1f5
ced1f5
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
ced1f5
(cherry picked from commit 3e32cb2ad36a9dd2654c7f63469dc595f1bb8593)
ced1f5
---
ced1f5
 src/sss_client/idmap/common_ex.c     | 2 ++
ced1f5
 src/sss_client/idmap/sss_nss_ex.c    | 5 ++++-
ced1f5
 src/sss_client/idmap/sss_nss_idmap.c | 5 ++++-
ced1f5
 3 files changed, 10 insertions(+), 2 deletions(-)
ced1f5
ced1f5
diff --git a/src/sss_client/idmap/common_ex.c b/src/sss_client/idmap/common_ex.c
ced1f5
index 5efe9fabed7896ce674615472dbb256c4eae2144..e655bb864e063665cb56bcd3ff419e46c766478b 100644
ced1f5
--- a/src/sss_client/idmap/common_ex.c
ced1f5
+++ b/src/sss_client/idmap/common_ex.c
ced1f5
@@ -83,6 +83,7 @@ int sss_nss_timedlock(unsigned int timeout_ms, int *time_left_ms)
ced1f5
     if (ret == 0) {
ced1f5
         ret = clock_gettime(CLOCK_REALTIME, &endtime);
ced1f5
         if (ret != 0) {
ced1f5
+            sss_nss_unlock();
ced1f5
             return ret;
ced1f5
         }
ced1f5
 
ced1f5
@@ -92,6 +93,7 @@ int sss_nss_timedlock(unsigned int timeout_ms, int *time_left_ms)
ced1f5
             TIMESPECSUB(&endtime, &starttime, &diff);
ced1f5
             left = timeout_ms - TIMESPEC_TO_MS(&diff);
ced1f5
             if (left <= 0) {
ced1f5
+                sss_nss_unlock();
ced1f5
                 return EIO;
ced1f5
             } else if (left > SSS_CLI_SOCKET_TIMEOUT) {
ced1f5
                 *time_left_ms = SSS_CLI_SOCKET_TIMEOUT;
ced1f5
diff --git a/src/sss_client/idmap/sss_nss_ex.c b/src/sss_client/idmap/sss_nss_ex.c
ced1f5
index 861b1e1e92db4f7e6e8d74a812dc3c9220711773..af6a95180656b598bcb94c209dfa821cb0275f02 100644
ced1f5
--- a/src/sss_client/idmap/sss_nss_ex.c
ced1f5
+++ b/src/sss_client/idmap/sss_nss_ex.c
ced1f5
@@ -202,7 +202,10 @@ int sss_get_ex(struct nss_input *inp, uint32_t flags, unsigned int timeout)
ced1f5
         }
ced1f5
     }
ced1f5
 
ced1f5
-    sss_nss_timedlock(timeout, &time_left);
ced1f5
+    ret = sss_nss_timedlock(timeout, &time_left);
ced1f5
+    if (ret != 0) {
ced1f5
+        return ret;
ced1f5
+    }
ced1f5
 
ced1f5
     if (!skip_mc && !skip_data) {
ced1f5
         /* previous thread might already initialize entry in mmap cache */
ced1f5
diff --git a/src/sss_client/idmap/sss_nss_idmap.c b/src/sss_client/idmap/sss_nss_idmap.c
ced1f5
index 6e7685d2b1d80956b6a6668e9bbb146abd9e86ed..cbf8c11f2870e3574c75fe109cb19268e8a0b56d 100644
ced1f5
--- a/src/sss_client/idmap/sss_nss_idmap.c
ced1f5
+++ b/src/sss_client/idmap/sss_nss_idmap.c
ced1f5
@@ -257,7 +257,10 @@ static int sss_nss_getyyybyxxx(union input inp, enum sss_cli_command cmd,
ced1f5
     if (timeout == NO_TIMEOUT) {
ced1f5
         sss_nss_lock();
ced1f5
     } else {
ced1f5
-        sss_nss_timedlock(timeout, &time_left);
ced1f5
+        ret = sss_nss_timedlock(timeout, &time_left);
ced1f5
+        if (ret != 0) {
ced1f5
+            return ret;
ced1f5
+        }
ced1f5
     }
ced1f5
 
ced1f5
     nret = sss_nss_make_request_timeout(cmd, &rd, time_left, &repbuf, &replen,
ced1f5
-- 
ced1f5
2.14.3
ced1f5