1
0
Fork 0

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: David Howells <dhowells@redhat.com>
Acked-by: Vivek Goyal <vgoyal@redhat.com>
hifive-unleashed-5.1
David Howells 2014-09-16 17:29:03 +01:00
parent 54e2c2c1a9
commit 3cd0920cde
1 changed files with 15 additions and 9 deletions

View File

@ -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)
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)
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: