[SSSD] [PATCH] mmap_cache: prevent potential dereference of NULL

Lukas Slebodnik lslebodn at redhat.com
Fri Oct 25 14:02:13 UTC 2013


ehlo,

attached patch fix warnings reported by clang static analyser.

LS
-------------- next part --------------
>From d7d6c43bd0010e5fb33cdcfe339441f4ad74c975 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Fri, 25 Oct 2013 15:48:51 +0200
Subject: [PATCH] mmap_cache: prevent potential dereference of NULL

Variable rec can be NULL under certain conditions.
NULL pointer could be passed to function sss_nss_mc_parse_result
and it can result in a dereference of a null pointer (loaded from
variable 'rec')

Warnings were reported by scan-build
---
 src/sss_client/nss_mc_group.c  | 4 ++--
 src/sss_client/nss_mc_passwd.c | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/sss_client/nss_mc_group.c b/src/sss_client/nss_mc_group.c
index 5610233edf77e3a062a1018008466052aa815b8d..29700444fe8c66ba442372c9ab30cbc93f038d9b 100644
--- a/src/sss_client/nss_mc_group.c
+++ b/src/sss_client/nss_mc_group.c
@@ -155,7 +155,7 @@ errno_t sss_nss_mc_getgrnam(const char *name, size_t name_len,
         slot = sss_nss_mc_next_slot_with_hash(rec, hash);
     }
 
-    if (!MC_SLOT_WITHIN_BOUNDS(slot, gr_mc_ctx.dt_size)) {
+    if (rec == NULL || !MC_SLOT_WITHIN_BOUNDS(slot, gr_mc_ctx.dt_size)) {
         ret = ENOENT;
         goto done;
     }
@@ -217,7 +217,7 @@ errno_t sss_nss_mc_getgrgid(gid_t gid,
         slot = sss_nss_mc_next_slot_with_hash(rec, hash);
     }
 
-    if (!MC_SLOT_WITHIN_BOUNDS(slot, gr_mc_ctx.dt_size)) {
+    if (rec == NULL || !MC_SLOT_WITHIN_BOUNDS(slot, gr_mc_ctx.dt_size)) {
         ret = ENOENT;
         goto done;
     }
diff --git a/src/sss_client/nss_mc_passwd.c b/src/sss_client/nss_mc_passwd.c
index 95b8a0407bc8650d6354b13823fbb486b8c64839..9e6730d0546ecfb1644ec396ac5ffb5084d68f7f 100644
--- a/src/sss_client/nss_mc_passwd.c
+++ b/src/sss_client/nss_mc_passwd.c
@@ -157,7 +157,7 @@ errno_t sss_nss_mc_getpwnam(const char *name, size_t name_len,
         slot = sss_nss_mc_next_slot_with_hash(rec, hash);
     }
 
-    if (!MC_SLOT_WITHIN_BOUNDS(slot, pw_mc_ctx.dt_size)) {
+    if (rec == NULL || !MC_SLOT_WITHIN_BOUNDS(slot, pw_mc_ctx.dt_size)) {
         ret = ENOENT;
         goto done;
     }
@@ -219,7 +219,7 @@ errno_t sss_nss_mc_getpwuid(uid_t uid,
         slot = sss_nss_mc_next_slot_with_hash(rec, hash);
     }
 
-    if (!MC_SLOT_WITHIN_BOUNDS(slot, pw_mc_ctx.dt_size)) {
+    if (rec == NULL || !MC_SLOT_WITHIN_BOUNDS(slot, pw_mc_ctx.dt_size)) {
         ret = ENOENT;
         goto done;
     }
-- 
1.8.3.1



More information about the sssd-devel mailing list