Commit 3cd0920c authored by David Howells's avatar David Howells

PKCS#7: Provide a single place to do signed info block freeing

The code to free a signed info block is repeated several times, so move the
code to do it into a function of its own.  This gives us a place to add clean
ups for stuff that gets added to pkcs7_signed_info.
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarVivek Goyal <vgoyal@redhat.com>
parent 54e2c2c1
...@@ -31,6 +31,18 @@ struct pkcs7_parse_context { ...@@ -31,6 +31,18 @@ struct pkcs7_parse_context {
unsigned sinfo_index; unsigned sinfo_index;
}; };
/*
* Free a signed information block.
*/
static void pkcs7_free_signed_info(struct pkcs7_signed_info *sinfo)
{
if (sinfo) {
mpi_free(sinfo->sig.mpi[0]);
kfree(sinfo->sig.digest);
kfree(sinfo);
}
}
/** /**
* pkcs7_free_message - Free a PKCS#7 message * pkcs7_free_message - Free a PKCS#7 message
* @pkcs7: The PKCS#7 message to free * @pkcs7: The PKCS#7 message to free
...@@ -54,9 +66,7 @@ void pkcs7_free_message(struct pkcs7_message *pkcs7) ...@@ -54,9 +66,7 @@ void pkcs7_free_message(struct pkcs7_message *pkcs7)
while (pkcs7->signed_infos) { while (pkcs7->signed_infos) {
sinfo = pkcs7->signed_infos; sinfo = pkcs7->signed_infos;
pkcs7->signed_infos = sinfo->next; pkcs7->signed_infos = sinfo->next;
mpi_free(sinfo->sig.mpi[0]); pkcs7_free_signed_info(sinfo);
kfree(sinfo->sig.digest);
kfree(sinfo);
} }
kfree(pkcs7); kfree(pkcs7);
} }
...@@ -100,16 +110,12 @@ struct pkcs7_message *pkcs7_parse_message(const void *data, size_t datalen) ...@@ -100,16 +110,12 @@ struct pkcs7_message *pkcs7_parse_message(const void *data, size_t datalen)
ctx->certs = cert->next; ctx->certs = cert->next;
x509_free_certificate(cert); x509_free_certificate(cert);
} }
mpi_free(ctx->sinfo->sig.mpi[0]); pkcs7_free_signed_info(ctx->sinfo);
kfree(ctx->sinfo->sig.digest);
kfree(ctx->sinfo);
kfree(ctx); kfree(ctx);
return msg; return msg;
error_decode: error_decode:
mpi_free(ctx->sinfo->sig.mpi[0]); pkcs7_free_signed_info(ctx->sinfo);
kfree(ctx->sinfo->sig.digest);
kfree(ctx->sinfo);
error_no_sinfo: error_no_sinfo:
kfree(ctx); kfree(ctx);
error_no_ctx: error_no_ctx:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment