s3:passdb: Zero memory using BURN_FREE_STR() in secrets_fetch_or_upgrade_domain_info()
authorPavel Filipenský <pfilipensky@samba.org>
Tue, 2 Aug 2022 15:24:29 +0000 (17:24 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Fri, 26 Aug 2022 07:59:32 +0000 (07:59 +0000)
Signed-off-by: Pavel Filipenský <pfilipensky@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/passdb/machine_account_secrets.c

index c20387e5dbad40bfb1a51a82623cf8d8f7edc99f..5cc275457a44548f3a0d0f5a29f7fc079341667f 100644 (file)
@@ -1317,8 +1317,8 @@ NTSTATUS secrets_fetch_or_upgrade_domain_info(const char *domain,
                DBG_ERR("secrets_fetch_domain_sid(%s) failed\n",
                        domain);
                dbwrap_transaction_cancel(db);
-               SAFE_FREE(old_pw);
-               SAFE_FREE(pw);
+               BURN_FREE_STR(old_pw);
+               BURN_FREE_STR(pw);
                TALLOC_FREE(frame);
                return NT_STATUS_CANT_ACCESS_DOMAIN_INFO;
        }
@@ -1333,8 +1333,8 @@ NTSTATUS secrets_fetch_or_upgrade_domain_info(const char *domain,
        if (info->account_name == NULL) {
                DBG_ERR("talloc_asprintf(%s$) failed\n", info->computer_name);
                dbwrap_transaction_cancel(db);
-               SAFE_FREE(old_pw);
-               SAFE_FREE(pw);
+               BURN_FREE_STR(old_pw);
+               BURN_FREE_STR(pw);
                TALLOC_FREE(frame);
                return NT_STATUS_NO_MEMORY;
        }
@@ -1372,8 +1372,8 @@ NTSTATUS secrets_fetch_or_upgrade_domain_info(const char *domain,
                        DBG_ERR("talloc_asprintf(%s#%02X) failed\n",
                                domain, NBT_NAME_PDC);
                        dbwrap_transaction_cancel(db);
-                       SAFE_FREE(pw);
-                       SAFE_FREE(old_pw);
+                       BURN_FREE_STR(pw);
+                       BURN_FREE_STR(old_pw);
                        TALLOC_FREE(frame);
                        return NT_STATUS_NO_MEMORY;
                }
@@ -1394,8 +1394,8 @@ NTSTATUS secrets_fetch_or_upgrade_domain_info(const char *domain,
                p = kerberos_secrets_fetch_salt_princ();
                if (p == NULL) {
                        dbwrap_transaction_cancel(db);
-                       SAFE_FREE(old_pw);
-                       SAFE_FREE(pw);
+                       BURN_FREE_STR(old_pw);
+                       BURN_FREE_STR(pw);
                        TALLOC_FREE(frame);
                        return NT_STATUS_INTERNAL_ERROR;
                }
@@ -1403,8 +1403,8 @@ NTSTATUS secrets_fetch_or_upgrade_domain_info(const char *domain,
                SAFE_FREE(p);
                if (info->salt_principal == NULL) {
                        dbwrap_transaction_cancel(db);
-                       SAFE_FREE(pw);
-                       SAFE_FREE(old_pw);
+                       BURN_FREE_STR(pw);
+                       BURN_FREE_STR(old_pw);
                        TALLOC_FREE(frame);
                        return NT_STATUS_NO_MEMORY;
                }
@@ -1419,12 +1419,12 @@ NTSTATUS secrets_fetch_or_upgrade_domain_info(const char *domain,
                                                     info->salt_principal,
                                                     last_set_nt, server,
                                                     &info->password);
-       SAFE_FREE(pw);
+       BURN_FREE_STR(pw);
        if (!NT_STATUS_IS_OK(status)) {
                DBG_ERR("secrets_domain_info_password_create(pw) failed "
                        "for %s - %s\n", domain, nt_errstr(status));
                dbwrap_transaction_cancel(db);
-               SAFE_FREE(old_pw);
+               BURN_FREE_STR(old_pw);
                TALLOC_FREE(frame);
                return status;
        }
@@ -1438,7 +1438,7 @@ NTSTATUS secrets_fetch_or_upgrade_domain_info(const char *domain,
                                                             info->salt_principal,
                                                             0, server,
                                                             &info->old_password);
-               SAFE_FREE(old_pw);
+               BURN_FREE_STR(old_pw);
                if (!NT_STATUS_IS_OK(status)) {
                        DBG_ERR("secrets_domain_info_password_create(old) failed "
                                "for %s - %s\n", domain, nt_errstr(status));