From: David Howells Date: Tue, 15 Jan 2013 15:33:40 +0000 (+0000) Subject: pefile: Parse the presumed PKCS#7 content of the certificate blob X-Git-Tag: next-20130218~61^2~4 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=f978aa2443a891c18a301c2a4a5542ed0b5b7091;p=karo-tx-linux.git pefile: Parse the presumed PKCS#7 content of the certificate blob Parse the content of the certificate blob, presuming it to be PKCS#7 format. Signed-off-by: David Howells Reviewed-by: Kees Cook --- diff --git a/crypto/asymmetric_keys/pefile_parser.c b/crypto/asymmetric_keys/pefile_parser.c index f2d4df06f1dd..056500f4dd60 100644 --- a/crypto/asymmetric_keys/pefile_parser.c +++ b/crypto/asymmetric_keys/pefile_parser.c @@ -205,6 +205,7 @@ static int pefile_strip_sig_wrapper(struct key_preparsed_payload *prep, */ static int pefile_key_preparse(struct key_preparsed_payload *prep) { + struct pkcs7_message *pkcs7; struct pefile_context ctx; int ret; @@ -219,7 +220,22 @@ static int pefile_key_preparse(struct key_preparsed_payload *prep) if (ret < 0) return ret; - return -ENOANO; // Not yet complete + pkcs7 = pkcs7_parse_message(prep->data + ctx.sig_offset, ctx.sig_len); + if (IS_ERR(pkcs7)) + return PTR_ERR(pkcs7); + ctx.pkcs7 = pkcs7; + + if (!ctx.pkcs7->data || !ctx.pkcs7->data_len) { + pr_devel("PKCS#7 message does not contain data\n"); + ret = -EBADMSG; + goto error; + } + + ret = -ENOANO; // Not yet complete + +error: + pkcs7_free_message(ctx.pkcs7); + return ret; } static struct asymmetric_key_parser pefile_key_parser = {