Skip to content

Commit

Permalink
PKCS#7: Provide a single place to do signed info block freeing
Browse files Browse the repository at this point in the history
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 <[email protected]>
Acked-by: Vivek Goyal <[email protected]>
  • Loading branch information
dhowells committed Sep 16, 2014
1 parent 54e2c2c commit 3cd0920
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions crypto/asymmetric_keys/pkcs7_parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ struct pkcs7_parse_context {
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: The PKCS#7 message to free
Expand All @@ -54,9 +66,7 @@ void pkcs7_free_message(struct pkcs7_message *pkcs7)
while (pkcs7->signed_infos) {
sinfo = pkcs7->signed_infos;
pkcs7->signed_infos = sinfo->next;
mpi_free(sinfo->sig.mpi[0]);
kfree(sinfo->sig.digest);
kfree(sinfo);
pkcs7_free_signed_info(sinfo);
}
kfree(pkcs7);
}
Expand Down Expand Up @@ -100,16 +110,12 @@ struct pkcs7_message *pkcs7_parse_message(const void *data, size_t datalen)
ctx->certs = cert->next;
x509_free_certificate(cert);
}
mpi_free(ctx->sinfo->sig.mpi[0]);
kfree(ctx->sinfo->sig.digest);
kfree(ctx->sinfo);
pkcs7_free_signed_info(ctx->sinfo);
kfree(ctx);
return msg;

error_decode:
mpi_free(ctx->sinfo->sig.mpi[0]);
kfree(ctx->sinfo->sig.digest);
kfree(ctx->sinfo);
pkcs7_free_signed_info(ctx->sinfo);
error_no_sinfo:
kfree(ctx);
error_no_ctx:
Expand Down

0 comments on commit 3cd0920

Please sign in to comment.