crypto: gcm - Only access common skcipher fields on spawn
[linux-2.6-block.git] / crypto / gcm.c
index 4ba624450c3ffb51234174bfacec393f4c8c1526..91ce6e0e2afc1400a6112538b3768fc5607eccce 100644 (file)
@@ -576,10 +576,10 @@ static int crypto_gcm_create_common(struct crypto_template *tmpl,
                                    const char *ctr_name,
                                    const char *ghash_name)
 {
+       struct skcipher_alg_common *ctr;
        u32 mask;
        struct aead_instance *inst;
        struct gcm_instance_ctx *ctx;
-       struct skcipher_alg *ctr;
        struct hash_alg_common *ghash;
        int err;
 
@@ -607,13 +607,12 @@ static int crypto_gcm_create_common(struct crypto_template *tmpl,
                                   ctr_name, 0, mask);
        if (err)
                goto err_free_inst;
-       ctr = crypto_spawn_skcipher_alg(&ctx->ctr);
+       ctr = crypto_spawn_skcipher_alg_common(&ctx->ctr);
 
        /* The skcipher algorithm must be CTR mode, using 16-byte blocks. */
        err = -EINVAL;
        if (strncmp(ctr->base.cra_name, "ctr(", 4) != 0 ||
-           crypto_skcipher_alg_ivsize(ctr) != 16 ||
-           ctr->base.cra_blocksize != 1)
+           ctr->ivsize != 16 || ctr->base.cra_blocksize != 1)
                goto err_free_inst;
 
        err = -ENAMETOOLONG;
@@ -634,7 +633,7 @@ static int crypto_gcm_create_common(struct crypto_template *tmpl,
                                       ctr->base.cra_alignmask;
        inst->alg.base.cra_ctxsize = sizeof(struct crypto_gcm_ctx);
        inst->alg.ivsize = GCM_AES_IV_SIZE;
-       inst->alg.chunksize = crypto_skcipher_alg_chunksize(ctr);
+       inst->alg.chunksize = ctr->chunksize;
        inst->alg.maxauthsize = 16;
        inst->alg.init = crypto_gcm_init_tfm;
        inst->alg.exit = crypto_gcm_exit_tfm;