swtpm: Add another exit label to avoid gcc -fanalyzer false positive
Move existing exit label before the return statement and add another
label that includes the free(filebuffer). This avoids a false positive
by 'gcc -fanalyzer' that seems to think that free(filebuffer)
would double-free filebuffer after filebuffer = realloc(tmp, ..)
failure.
Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
diff --git a/src/swtpm/key.c b/src/swtpm/key.c
index 6e6940e..b713450 100644
--- a/src/swtpm/key.c
+++ b/src/swtpm/key.c
@@ -325,7 +325,7 @@
logprintf(STDERR_FILENO,
"Unable to read passphrase: %s\n",
strerror(errno));
- goto exit;
+ goto err_free_buffer;
}
/* EOF ? */
if ((size_t)len < filelen - offset) {
@@ -345,7 +345,7 @@
logprintf(STDERR_FILENO,
"Requested %zu bytes for key, only got %zu.\n",
*keylen, sizeof(hashbuf));
- goto exit;
+ goto err_free_buffer;
}
SHA512(filebuffer, len, hashbuf);
memcpy(key, hashbuf, *keylen);
@@ -356,21 +356,21 @@
EVP_sha512(), *keylen, key) != 1) {
logprintf(STDERR_FILENO,
"PKCS5_PBKDF2_HMAC with SHA512 failed\n");
- goto exit;
+ goto err_free_buffer;
}
break;
case KDF_IDENTIFIER_UNKNOWN:
logprintf(STDERR_FILENO,
"Unknown KDF\n");
- goto exit;
+ goto err_free_buffer;
}
ret = 0;
-exit:
-
+err_free_buffer:
free(filebuffer);
+exit:
return ret;
}