]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3:utils: Fix memory leaks in test_lmv2_ntlmv2_broken()
authorAndreas Schneider <asn@samba.org>
Mon, 28 Oct 2024 12:37:17 +0000 (13:37 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Tue, 1 Jul 2025 08:17:30 +0000 (08:17 +0000)
Direct leak of 104 byte(s) in 1 object(s) allocated from:
    #0 0x7f48254fc777 in malloc ../../../../libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x7f48250d9c57 in __talloc_with_prefix ../../lib/talloc/talloc.c:783
    #2 0x7f48250dbacf in __talloc ../../lib/talloc/talloc.c:825
    #3 0x7f48250dbacf in _talloc_named_const ../../lib/talloc/talloc.c:982
    #4 0x7f48250dbacf in _talloc_array ../../lib/talloc/talloc.c:2784
    #5 0x7f4824e59a99 in data_blob_talloc_named ../../lib/util/data_blob.c:58
    #6 0x7f4824e59b1b in data_blob_named ../../lib/util/data_blob.c:40
    #7 0x56084d20789c in get_challenge ../../source3/utils/ntlm_auth.c:375
    #8 0x56084d20f0b9 in test_lmv2_ntlmv2_broken ../../source3/utils/ntlm_auth_diagnostics.c:381
    #9 0x56084d20f92e in test_ntlmv2 ../../source3/utils/ntlm_auth_diagnostics.c:474
    #10 0x56084d20f9ae in diagnose_ntlm_auth ../../source3/utils/ntlm_auth_diagnostics.c:718
    #11 0x56084d20befd in main ../../source3/utils/ntlm_auth.c:2855
    #12 0x7f4821c2a2ad in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Noel Power <npower@samba.org>
source3/utils/ntlm_auth_diagnostics.c

index 126eddeaa3200710344121525284ea7636dd2502..3228476ee4d7278d142ab228c28eb2392e10e2c6 100644 (file)
@@ -389,10 +389,9 @@ static bool test_lmv2_ntlmv2_broken(enum ntlm_break break_which)
                              &names_blob,
                              &lmv2_response, &ntlmv2_response, NULL,
                              &ntlmv2_session_key)) {
-               data_blob_free(&names_blob);
-               return False;
+               pass = false;
+               goto done;
        }
-       data_blob_free(&names_blob);
 
        switch (break_which) {
        case BREAK_NONE:
@@ -422,15 +421,12 @@ static bool test_lmv2_ntlmv2_broken(enum ntlm_break break_which)
                                              &authoritative,
                                              &error_string, NULL);
 
-       data_blob_free(&lmv2_response);
-       data_blob_free(&ntlmv2_response);
-
        if (!NT_STATUS_IS_OK(nt_status)) {
                d_printf("%s (0x%x)\n",
                         error_string,
                         NT_STATUS_V(nt_status));
-               SAFE_FREE(error_string);
-               return break_which == BREAK_NT;
+               pass = (break_which == BREAK_NT);
+               goto done;
        }
 
        SAFE_FREE(error_string);
@@ -445,7 +441,13 @@ static bool test_lmv2_ntlmv2_broken(enum ntlm_break break_which)
                pass = False;
        }
 
+done:
+       data_blob_free(&names_blob);
+       data_blob_free(&lmv2_response);
+       data_blob_free(&ntlmv2_response);
        data_blob_free(&ntlmv2_session_key);
+       SAFE_FREE(error_string);
+
         return pass;
 }