• Wang, Rui Y's avatar
    crypto: sha-mb - Fix load failure · fd09967b
    Wang, Rui Y authored
    On  Monday, February 1, 2016 4:18 PM, Herbert Xu wrote:
    >
    > On Wed, Jan 27, 2016 at 05:08:35PM +0800, Rui Wang wrote:
    >>
    >> +static int sha1_mb_async_import(struct ahash_request *req, const void
    >> +*in) {
    >> +	struct ahash_request *mcryptd_req = ahash_request_ctx(req);
    >> +	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
    >> +	struct sha1_mb_ctx *ctx = crypto_ahash_ctx(tfm);
    >> +	struct mcryptd_ahash *mcryptd_tfm = ctx->mcryptd_tfm;
    >> +	struct crypto_shash *child = mcryptd_ahash_child(mcryptd_tfm);
    >> +	struct mcryptd_hash_request_ctx *rctx;
    >> +	struct shash_desc *desc;
    >> +	int err;
    >> +
    >> +	memcpy(mcryptd_req, req, sizeof(*req));
    >> +	ahash_request_set_tfm(mcryptd_req, &mcryptd_tfm->base);
    >> +	rctx = ahash_request_ctx(mcryptd_req);
    >> +	desc = &rctx->desc;
    >> +	desc->tfm = child;
    >> +	desc->flags = CRYPTO_TFM_REQ_MAY_SLEEP;
    >> +
    >> +	err = crypto_shash_init(desc);
    >> +	if (err)
    >> +		return err;
    >
    > What is this desc for?
    
    Hi Herbert,
    
    Yeah I just realized that the call to crypto_shash_init() isn't necessary
    here. What it does is overwritten by crypto_ahash_import(). But this desc
    still needs to be initialized here because it's newly allocated by
    ahash_request_alloc(). We eventually calls the shash version of import()
    which needs desc as an argument. The real context to be imported is then
    derived from shash_desc_ctx(desc).
    
    desc is a sub-field of struct mcryptd_hash_request_ctx, which is again a
    sub-field of the bigger blob allocated by ahash_request_alloc(). The entire
    blob's size is set in sha1_mb_async_init_tfm(). So a better version is as
    follows:
    
    (just removed the call to crypto_shash_init())
    
    >From 4bcb73adbef99aada94c49f352063619aa24d43d Mon Sep 17 00:00:00 2001
    From: Rui Wang <rui.y.wang@intel.com>
    Date: Mon, 14 Dec 2015 17:22:13 +0800
    Subject: [PATCH v2 1/4] crypto x86/sha1_mb: Fix load failure
    
    modprobe sha1_mb fails with the following message:
    
    modprobe: ERROR: could not insert 'sha1_mb': No such device
    
    It is because it needs to set its statesize and implement its
    import() and export() interface.
    
    v2: remove redundant call to crypto_shash_init()
    Signed-off-by: default avatarRui Wang <rui.y.wang@intel.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    fd09967b
sha1_mb.c 26.8 KB