Patch "crypto: ccp - Limit the amount of information exported" has been added to the 4.4-stable tree
This is a note to let you know that I've just added the patch titled
crypto: ccp - Limit the amount of information exported
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
crypto-ccp-limit-the-amount-of-information-exported.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
d1662165ae612ec8b5f94a6b07e65ea58b6dce34Mon Sep 17 00:00:00 2001
From: Tom Lendacky <[email protected]>
Date: Fri, 29 Jan 2016 12:45:14 -0600
Subject: crypto: ccp - Limit the amount of information exported
From: Tom Lendacky <[email protected]>
commit d1662165ae612ec8b5f94a6b07e65ea58b6dce34 upstream.
Since the exported information can be exposed to user-space, instead of exporting the entire request context only export the minimum information needed.
--- drivers/crypto/ccp/ccp-crypto-aes-cmac.c | 16 +++++++++++----- drivers/crypto/ccp/ccp-crypto-sha.c | 20 +++++++++++++++----- drivers/crypto/ccp/ccp-crypto.h | 22 ++++++++++++++++++++++ 3 files changed, 48 insertions(+), 10 deletions(-)
drivers/crypto/ccp/ccp-crypto-aes-cmac.c +11 -5
@@ -223,9 +223,12 @@ static int ccp_aes_cmac_digest(struct ahstatic int ccp_aes_cmac_export (struct ahash_request *req,void *out) {struct ccp_aes_cmac_req_ctx *rctx =ahash_request_ctx (req); -struct ccp_aes_cmac_req_ctx *state = out; +struct ccp_aes_cmac_exp_ctx *state = out; - *state = *rctx; + state->null_msg = rctx->null_msg; +memcpy (state->iv, rctx->iv,sizeof (state->iv)); + state->buf_count = rctx->buf_count; +memcpy (state->buf, rctx->buf,sizeof (state->buf));return 0 ; }
@@ -233,9 +236,12 @@ static int ccp_aes_cmac_export(struct ahstatic int ccp_aes_cmac_import (struct ahash_request *req,const void *in) {struct ccp_aes_cmac_req_ctx *rctx =ahash_request_ctx (req); -const struct ccp_aes_cmac_req_ctx *state = in; +const struct ccp_aes_cmac_exp_ctx *state = in; - *rctx = *state; + rctx->null_msg = state->null_msg; +memcpy (rctx->iv, state->iv,sizeof (rctx->iv)); + rctx->buf_count = state->buf_count; +memcpy (rctx->buf, state->buf,sizeof (rctx->buf));return 0 ; }
@@ -378,7 +384,7 @@ int ccp_register_aes_cmac_algs(struct li halg = &alg->halg; halg->digestsize =AES_BLOCK_SIZE ; - halg->statesize =sizeof (struct ccp_aes_cmac_req_ctx ); + halg->statesize =sizeof (struct ccp_aes_cmac_exp_ctx ); base = &halg->base;snprintf (base->cra_name,CRYPTO_MAX_ALG_NAME ,"cmac(aes)" );
drivers/crypto/ccp/ccp-crypto-sha.c +15 -5
@@ -210,9 +210,14 @@ static int ccp_sha_digest(struct ahash_rstatic int ccp_sha_export (struct ahash_request *req,void *out) {struct ccp_sha_req_ctx *rctx =ahash_request_ctx (req); -struct ccp_sha_req_ctx *state = out; +struct ccp_sha_exp_ctx *state = out; - *state = *rctx; + state->type = rctx->type; + state->msg_bits = rctx->msg_bits; + state->first = rctx->first; +memcpy (state->ctx, rctx->ctx,sizeof (state->ctx)); + state->buf_count = rctx->buf_count; +memcpy (state->buf, rctx->buf,sizeof (state->buf));return 0 ; }
@@ -220,9 +225,14 @@ static int ccp_sha_export(struct ahash_rstatic int ccp_sha_import (struct ahash_request *req,const void *in) {struct ccp_sha_req_ctx *rctx =ahash_request_ctx (req); -const struct ccp_sha_req_ctx *state = in; +const struct ccp_sha_exp_ctx *state = in; - *rctx = *state; + rctx->type = state->type; + rctx->msg_bits = state->msg_bits; + rctx->first = state->first; +memcpy (rctx->ctx, state->ctx,sizeof (rctx->ctx)); + rctx->buf_count = state->buf_count; +memcpy (rctx->buf, state->buf,sizeof (rctx->buf));return 0 ; }
@@ -428,7 +438,7 @@ static int ccp_register_sha_alg(struct l halg = &alg->halg; halg->digestsize = def->digest_size; - halg->statesize =sizeof (struct ccp_sha_req_ctx ); + halg->statesize =sizeof (struct ccp_sha_exp_ctx ); base = &halg->base;snprintf (base->cra_name,CRYPTO_MAX_ALG_NAME ,"%s" , def->name);
drivers/crypto/ccp/ccp-crypto.h +22 -0
@@ -129,6 +129,15 @@ struct ccp_aes_cmac_req_ctx {struct ccp_cmd cmd; }; +struct ccp_aes_cmac_exp_ctx { +unsigned int null_msg; + +u8 iv[AES_BLOCK_SIZE ]; + +unsigned int buf_count; +u8 buf[AES_BLOCK_SIZE ]; +}; +/***** SHA related defines *****/ #define MAX_SHA_CONTEXT_SIZE SHA256_DIGEST_SIZE#define MAX_SHA_BLOCK_SIZE SHA256_BLOCK_SIZE
@@ -171,6 +180,19 @@ struct ccp_sha_req_ctx {struct ccp_cmd cmd; }; +struct ccp_sha_exp_ctx { +enum ccp_sha_type type; + +u64 msg_bits; + +unsigned int first; + +u8 ctx[MAX_SHA_CONTEXT_SIZE ]; + +unsigned int buf_count; +u8 buf[MAX_SHA_BLOCK_SIZE ]; +}; +/***** Common Context Structure *****/ struct ccp_ctx {int (*complete)(struct crypto_async_request *req,int ret);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/crypto-ccp-add-hash-state-import-and-export-support.patch queue-4.4/crypto-ccp-don-t-assume-export-import-areas-are-aligned.patch queue-4.4/crypto-ccp-memset-request-context-to-zero-during-import.patch queue-4.4/crypto-ccp-limit-the-amount-of-information-exported.patch