]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
auth: Use new data_blob_..._s() functions and remove talloc_keep_secret()
authorPavel Filipenský <pfilipensky@samba.org>
Wed, 26 Nov 2025 09:34:02 +0000 (10:34 +0100)
committerPavel Filipensky <pfilipensky@samba.org>
Mon, 8 Dec 2025 17:18:29 +0000 (17:18 +0000)
Signed-off-by: Pavel Filipenský <pfilipensky@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
auth/credentials/credentials_krb5.c
libcli/smb/smb2_signing.c
source3/passdb/machine_account_secrets.c
source3/rpc_client/cli_pipe.c
source3/smbd/smb1_reply.c
source3/smbd/smb1_sesssetup.c
source3/smbd/smb2_sesssetup.c
source4/dsdb/samdb/ldb_modules/password_hash.c
source4/kdc/db-glue.c
source4/librpc/rpc/dcerpc.c

index 8d289e2678138a240f84402358929db5df44573a..10a474420d74690c6004d069adbe023d71b89b4d 100644 (file)
@@ -1695,7 +1695,7 @@ _PUBLIC_ int cli_credentials_get_kerberos_key(struct cli_credentials *cred,
                TALLOC_FREE(frame);
                return EINVAL;
        }
-       *key_blob = data_blob_talloc(mem_ctx,
+       *key_blob = data_blob_talloc_s(mem_ctx,
                                    KRB5_KEY_DATA(&key),
                                    KRB5_KEY_LENGTH(&key));
        krb5_free_keyblock_contents(smb_krb5_context->krb5_context, &key);
@@ -1703,7 +1703,6 @@ _PUBLIC_ int cli_credentials_get_kerberos_key(struct cli_credentials *cred,
                TALLOC_FREE(frame);
                return ENOMEM;
        }
-       talloc_keep_secret(key_blob->data);
 
        TALLOC_FREE(frame);
        return 0;
index 94ff51f2e931d583a76e2114cdcbf7da12c5e976..e313b627ea8905e9c039c45ef462abaf3ad34ffb 100644 (file)
@@ -120,12 +120,11 @@ NTSTATUS smb2_signing_key_copy(TALLOC_CTX *mem_ctx,
                return NT_STATUS_OK;
        }
 
-       dst->blob = data_blob_talloc_zero(dst, src->blob.length);
+       dst->blob = data_blob_talloc_zero_s(dst, src->blob.length);
        if (dst->blob.length == 0) {
                TALLOC_FREE(dst);
                return NT_STATUS_NO_MEMORY;
        }
-       talloc_keep_secret(dst->blob.data);
        memcpy(dst->blob.data, src->blob.data, dst->blob.length);
 
        *_dst = dst;
@@ -243,12 +242,11 @@ static NTSTATUS smb2_signing_key_create(TALLOC_CTX *mem_ctx,
                return NT_STATUS_OK;
        }
 
-       key->blob = data_blob_talloc_zero(key, out_key_length);
+       key->blob = data_blob_talloc_zero_s(key, out_key_length);
        if (key->blob.length == 0) {
                TALLOC_FREE(key);
                return NT_STATUS_NO_MEMORY;
        }
-       talloc_keep_secret(key->blob.data);
        memcpy(key->blob.data,
               master_key->data,
               MIN(key->blob.length, master_key->length));
index 525092b2e1a34b96536f0fbc164823816492a6d0..13a4ba45283882a57def37bd8c9ea2e265cca3e9 100644 (file)
@@ -1071,7 +1071,7 @@ static int secrets_domain_info_kerberos_keys(struct secrets_domain_info1_passwor
                return ENOMEM;
        }
 
-       arc4_b = data_blob_talloc(keys,
+       arc4_b = data_blob_talloc_s(keys,
                                  p->nt_hash.hash,
                                  sizeof(p->nt_hash.hash));
        if (arc4_b.data == NULL) {
@@ -1079,7 +1079,6 @@ static int secrets_domain_info_kerberos_keys(struct secrets_domain_info1_passwor
                TALLOC_FREE(keys);
                return ENOMEM;
        }
-       talloc_keep_secret(arc4_b.data);
 
 #ifdef HAVE_ADS
        if (salt_principal == NULL) {
@@ -1143,7 +1142,7 @@ static int secrets_domain_info_kerberos_keys(struct secrets_domain_info1_passwor
                TALLOC_FREE(salt_data);
                return krb5_ret;
        }
-       aes_256_b = data_blob_talloc(keys,
+       aes_256_b = data_blob_talloc_s(keys,
                                     KRB5_KEY_DATA(&key),
                                     KRB5_KEY_LENGTH(&key));
        krb5_free_keyblock_contents(krb5_ctx, &key);
@@ -1154,7 +1153,6 @@ static int secrets_domain_info_kerberos_keys(struct secrets_domain_info1_passwor
                TALLOC_FREE(salt_data);
                return ENOMEM;
        }
-       talloc_keep_secret(aes_256_b.data);
 
        krb5_ret = smb_krb5_create_key_from_string(krb5_ctx,
                                                   NULL,
@@ -1170,7 +1168,7 @@ static int secrets_domain_info_kerberos_keys(struct secrets_domain_info1_passwor
                TALLOC_FREE(salt_data);
                return krb5_ret;
        }
-       aes_128_b = data_blob_talloc(keys,
+       aes_128_b = data_blob_talloc_s(keys,
                                     KRB5_KEY_DATA(&key),
                                     KRB5_KEY_LENGTH(&key));
        krb5_free_keyblock_contents(krb5_ctx, &key);
@@ -1181,7 +1179,6 @@ static int secrets_domain_info_kerberos_keys(struct secrets_domain_info1_passwor
                TALLOC_FREE(salt_data);
                return ENOMEM;
        }
-       talloc_keep_secret(aes_128_b.data);
 
        krb5_free_context(krb5_ctx);
 no_kerberos:
index e3f48526492406f3164b55fb9f01c44da0b2a65c..660cda5ea91a00047748de1eb2d9e106d2cc45a0 100644 (file)
@@ -2512,11 +2512,10 @@ static NTSTATUS rpccli_bh_transport_session_key(struct dcerpc_binding_handle *h,
        sk = hs->rpc_cli->conn->transport_session_key;
        sk.length = MIN(sk.length, 16);
 
-       *session_key = data_blob_dup_talloc(mem_ctx, sk);
+       *session_key = data_blob_dup_talloc_s(mem_ctx, sk);
        if (session_key->length != sk.length) {
                return NT_STATUS_NO_MEMORY;
        }
-       talloc_keep_secret(session_key->data);
        return NT_STATUS_OK;
 }
 
index f7b2fb65720c1cebd1789ad64d1b4a6a39035db3..a84ccb032c9848589252ce913a213a37c89b9f9f 100644 (file)
@@ -406,16 +406,14 @@ void reply_tcon_and_X(struct smb_request *req)
                /*
                 * The application key is truncated/padded to 16 bytes
                 */
-               x->global->application_key_blob = data_blob_talloc(x->global,
-                                                            session_key,
-                                                            sizeof(session_key));
+               x->global->application_key_blob = data_blob_talloc_s(
+                       x->global, session_key, sizeof(session_key));
                ZERO_STRUCT(session_key);
                if (x->global->application_key_blob.data == NULL) {
                        reply_nterror(req, NT_STATUS_NO_MEMORY);
                        END_PROFILE(SMBtconX);
                        return;
                }
-               talloc_keep_secret(x->global->application_key_blob.data);
 
                if (tcon_flags & TCONX_FLAG_EXTENDED_SIGNATURES) {
                        NTSTATUS status;
@@ -436,15 +434,14 @@ void reply_tcon_and_X(struct smb_request *req)
                 * Place the application key into the session_info
                 */
                data_blob_clear_free(&session_info->session_key);
-               session_info->session_key = data_blob_dup_talloc(session_info,
-                                               x->global->application_key_blob);
+               session_info->session_key = data_blob_dup_talloc_s(
+                       session_info, x->global->application_key_blob);
                if (session_info->session_key.data == NULL) {
                        data_blob_clear_free(&x->global->application_key_blob);
                        reply_nterror(req, NT_STATUS_NO_MEMORY);
                        END_PROFILE(SMBtconX);
                        return;
                }
-               talloc_keep_secret(session_info->session_key.data);
                session_key_updated = true;
        }
 
index 23cdc846e75f7e873e1affde60f291a0dd92a290..b191e3848b9ea95c19cfafdba54e1a5cfca5a97b 100644 (file)
@@ -1044,10 +1044,8 @@ void reply_sesssetup_and_X(struct smb_request *req)
                memcpy(session_key, session->global->signing_key_blob.data,
                       MIN(session->global->signing_key_blob.length,
                           sizeof(session_key)));
-               session->global->application_key_blob =
-                       data_blob_talloc(session->global,
-                                        session_key,
-                                        sizeof(session_key));
+               session->global->application_key_blob = data_blob_talloc_s(
+                       session->global, session_key, sizeof(session_key));
                ZERO_STRUCT(session_key);
                if (session->global->application_key_blob.data == NULL) {
                        TALLOC_FREE(session);
@@ -1056,14 +1054,13 @@ void reply_sesssetup_and_X(struct smb_request *req)
                        END_PROFILE(SMBsesssetupX);
                        return;
                }
-               talloc_keep_secret(session->global->application_key_blob.data);
 
                /*
                 * Place the application key into the session_info
                 */
                data_blob_clear_free(&session_info->session_key);
-               session_info->session_key = data_blob_dup_talloc(session_info,
-                                               session->global->application_key_blob);
+               session_info->session_key = data_blob_dup_talloc_s(
+                       session_info, session->global->application_key_blob);
                if (session_info->session_key.data == NULL) {
                        TALLOC_FREE(session);
                        reply_nterror(req, NT_STATUS_NO_MEMORY);
@@ -1071,7 +1068,6 @@ void reply_sesssetup_and_X(struct smb_request *req)
                        END_PROFILE(SMBsesssetupX);
                        return;
                }
-               talloc_keep_secret(session_info->session_key.data);
        }
 
        sconn->num_users++;
index da6b98f40e9063c095e7f27b044e7f201b21cab9..b4b351a14ea372bd2e118216b2e3705a4655ad1d 100644 (file)
@@ -413,12 +413,11 @@ static NTSTATUS smbd_smb2_auth_generic_return(struct smbXsrv_session *session,
        x->global->channels[0].encryption_cipher = x->global->encryption_cipher;
 
        data_blob_clear_free(&session_info->session_key);
-       session_info->session_key = data_blob_dup_talloc(session_info,
-                                               x->global->application_key_blob);
+       session_info->session_key = data_blob_dup_talloc_s(
+               session_info, x->global->application_key_blob);
        if (session_info->session_key.data == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
-       talloc_keep_secret(session_info->session_key.data);
 
        smb2req->sconn->num_users++;
 
@@ -495,12 +494,11 @@ static NTSTATUS smbd_smb2_reauth_generic_return(struct smbXsrv_session *session,
        *_auth = NULL;
 
        data_blob_clear_free(&session_info->session_key);
-       session_info->session_key = data_blob_dup_talloc(session_info,
-                                               x->global->application_key_blob);
+       session_info->session_key = data_blob_dup_talloc_s(
+               session_info, x->global->application_key_blob);
        if (session_info->session_key.data == NULL) {
                return NT_STATUS_NO_MEMORY;
        }
-       talloc_keep_secret(session_info->session_key.data);
 
        session->homes_snum =
                        register_homes_share(session_info->unix_info->unix_name);
index b7a0c5066a70ad7299c62ee281a0b208d7cdbc01..b38f4eac68b29e00d8d5be1da17eb244e22be95d 100644 (file)
@@ -915,16 +915,14 @@ static int setup_kerberos_key_hash(struct setup_password_fields_io *io,
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
-       g->aes_256 = data_blob_talloc(io->ac,
-                                     KRB5_KEY_DATA(&key),
-                                     KRB5_KEY_LENGTH(&key));
+       g->aes_256 = data_blob_talloc_s(io->ac,
+                                       KRB5_KEY_DATA(&key),
+                                       KRB5_KEY_LENGTH(&key));
        krb5_free_keyblock_contents(io->smb_krb5_context->krb5_context, &key);
        if (g->aes_256.data == NULL) {
                return ldb_oom(ldb);
        }
 
-       talloc_keep_secret(g->aes_256.data);
-
        return LDB_SUCCESS;
 }
 
index 61b36eb5ce1b2870befbb6d12134dcd1f82a1001..328863363394f2085cf434fa3c1860161968649d 100644 (file)
@@ -5147,14 +5147,14 @@ krb5_error_code dsdb_extract_aes_256_key(krb5_context context,
        }
 
        if (aes_256_key != NULL) {
-               *aes_256_key = data_blob_talloc(mem_ctx,
-                                               KRB5_KEY_DATA(&sentry.keys.val[0].key),
-                                               KRB5_KEY_LENGTH(&sentry.keys.val[0].key));
+               *aes_256_key = data_blob_talloc_s(
+                       mem_ctx,
+                       KRB5_KEY_DATA(&sentry.keys.val[0].key),
+                       KRB5_KEY_LENGTH(&sentry.keys.val[0].key));
                if (aes_256_key->data == NULL) {
                        sdb_entry_free(&sentry);
                        return ENOMEM;
                }
-               talloc_keep_secret(aes_256_key->data);
        }
 
        if (salt != NULL) {
index f23908a49a85b9e796c70dac2d9d8888318dd826..85701146d57119ff2a746d2ecd514b094a62bc00 100644 (file)
@@ -270,11 +270,10 @@ static NTSTATUS dcerpc_bh_transport_session_key(struct dcerpc_binding_handle *h,
 
        sk.length = MIN(sk.length, 16);
 
-       *session_key = data_blob_dup_talloc(mem_ctx, sk);
+       *session_key = data_blob_dup_talloc_s(mem_ctx, sk);
        if (session_key->length != sk.length) {
                return NT_STATUS_NO_MEMORY;
        }
-       talloc_keep_secret(session_key->data);
        return NT_STATUS_OK;
 }