Eric Biggers <ebiggers@xxxxxxxxxx> wrote: > > @@ -875,14 +873,21 @@ static void cbcmac_exit_tfm(struct crypto_tfm *tfm) > > static int cbcmac_create(struct crypto_template *tmpl, struct rtattr **tb) > { > + struct crypto_attr_type *algt; > struct shash_instance *inst; > struct crypto_cipher_spawn *spawn; > struct crypto_alg *alg; > + u32 mask; > int err; > > - err = crypto_check_attr_type(tb, CRYPTO_ALG_TYPE_SHASH); > - if (err) > - return err; > + algt = crypto_get_attr_type(tb); > + if (IS_ERR(algt)) > + return PTR_ERR(algt); > + > + if ((algt->type ^ CRYPTO_ALG_TYPE_SHASH) & algt->mask) > + return -EINVAL; > + > + mask = crypto_algt_inherited_mask(algt); How about moving the types check into crypto_algt_inherited_mask, e.g., u32 mask; int err; err = crypto_algt_inherited_mask(tb, CRYPTO_ALG_TYPE_SHASH); if (err < 0) return err; mask = err; This could then be used to simplify other templates too, such as gcm. Thanks, -- Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt