Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Remove useless SHA256 initialization when not using backup manifests
authorMichael Paquier <michael@paquier.xyz>
Thu, 12 Nov 2020 01:56:40 +0000 (10:56 +0900)
committerMichael Paquier <michael@paquier.xyz>
Thu, 12 Nov 2020 01:56:40 +0000 (10:56 +0900)
Attempting to take a base backup with Postgres linking to a build of
OpenSSL with FIPS enabled currently fails with or even without a backup
manifest requested because of this mandatory SHA256 initialization used
for the manifest file itself.  However, there is no need to do this
initialization at all if backup manifests are not needed because there
is no data to append to the manifest.

Note that being able to use backup manifests with OpenSSL+FIPS requires
a switch of the SHA2 implementation to use EVP, which would cause an ABI
breakage so this cannot be backpatched to 13 as it has been already
released, but at least avoiding this SHA256 initialization gives users
the possibility to take a base backup even when specifying --no-manifest
with pg_basebackup.

Author: Michael Paquier
Discussion: https://postgr.es/m/20201110020014.GE1887@paquier.xyz
Backpatch-through: 13

src/backend/replication/backup_manifest.c

index a43c793e2892ad1523ce42c7c24ddea34dd48436..1e07d99e64f2416005e8a351bd31d97febf19e25 100644 (file)
@@ -57,12 +57,17 @@ InitializeBackupManifest(backup_manifest_info *manifest,
                         backup_manifest_option want_manifest,
                         pg_checksum_type manifest_checksum_type)
 {
+   memset(manifest, 0, sizeof(backup_manifest_info));
+   manifest->checksum_type = manifest_checksum_type;
+
    if (want_manifest == MANIFEST_OPTION_NO)
        manifest->buffile = NULL;
    else
+   {
        manifest->buffile = BufFileCreateTemp(false);
-   manifest->checksum_type = manifest_checksum_type;
-   pg_sha256_init(&manifest->manifest_ctx);
+       pg_sha256_init(&manifest->manifest_ctx);
+   }
+
    manifest->manifest_size = UINT64CONST(0);
    manifest->force_encode = (want_manifest == MANIFEST_OPTION_FORCE_ENCODE);
    manifest->first_file = true;