s3:passdb: Do not leak memory if memcache add fails
authorAndreas Schneider <asn@samba.org>
Thu, 26 Oct 2023 12:28:19 +0000 (14:28 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Fri, 27 Oct 2023 05:54:33 +0000 (05:54 +0000)
Indirect leak of 496 byte(s) in 1 object(s) allocated from:
    #0 0x7ffb062dc03f in malloc (/lib64/libasan.so.8+0xdc03f) (BuildId: 3e1694ad218c99a8b1b69231666a27df63cf19d0)
    #1 0x7ffb06025b3e in __talloc_with_prefix ../../lib/talloc/talloc.c:783
    #2 0x7ffb06027512 in __talloc ../../lib/talloc/talloc.c:825
    #3 0x7ffb06027512 in _talloc_named_const ../../lib/talloc/talloc.c:982
    #4 0x7ffb06027512 in _talloc_zero ../../lib/talloc/talloc.c:2421
    #5 0x7ffb05a0332c in samu_new ../../source3/passdb/passdb.c:63
    #6 0x7ffb05a2031f in pdb_getsampwnam ../../source3/passdb/pdb_interface.c:351
    #7 0x7ffb05a0540b in local_password_change ../../source3/passdb/passdb.c:752
    #8 0x56291ddd4b8b in password_change ../../source3/utils/smbpasswd.c:273
    #9 0x56291ddd5b59 in process_root ../../source3/utils/smbpasswd.c:478
    #10 0x56291ddd5b59 in main ../../source3/utils/smbpasswd.c:661
    #11 0x7ffb024281af in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
source3/passdb/pdb_interface.c

index cee90d9ff79274cdd775623261e9a3a007389cc8..d3648f155edccadf7fd2fb7ea142edcb01f47899 100644 (file)
@@ -360,9 +360,13 @@ bool pdb_getsampwnam(struct samu *sam_acct, const char *username)
 
        user_sid = pdb_get_user_sid(for_cache);
 
-       memcache_add_talloc(NULL, PDB_GETPWSID_CACHE,
-                           data_blob_const(user_sid, sizeof(*user_sid)),
-                           &for_cache);
+       ok = memcache_add_talloc(NULL,
+                                PDB_GETPWSID_CACHE,
+                                data_blob_const(user_sid, sizeof(*user_sid)),
+                                &for_cache);
+       if (!ok) {
+               TALLOC_FREE(for_cache);
+       }
 
        return True;
 }