diff options
author | Eric Biggers <ebiggers@google.com> | 2020-01-03 06:58:44 +0300 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2020-01-09 06:30:54 +0300 |
commit | 77f7e94d72208a1a84c88ed4de16a9bf368e9ded (patch) | |
tree | 2e1811943519490a5198f2ae13d5e31a336bfcb0 | |
parent | 1b84e7d01da58d6a41ac244b4b5e481e336fd09b (diff) | |
download | linux-77f7e94d72208a1a84c88ed4de16a9bf368e9ded.tar.xz |
crypto: ahash - make struct ahash_instance be the full size
Define struct ahash_instance in a way analogous to struct
skcipher_instance, struct aead_instance, and struct akcipher_instance,
where the struct is defined to include both the algorithm structure at
the beginning and the additional crypto_instance fields at the end.
This is needed to allow allocating ahash instances directly using
kzalloc(sizeof(*inst) + sizeof(*ictx), ...) in the same way as skcipher,
aead, and akcipher instances. In turn, that's needed to make spawns be
initialized in a consistent way everywhere.
Also take advantage of the addition of the base instance to struct
ahash_instance by simplifying the ahash_crypto_instance() and
ahash_instance() functions.
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | include/crypto/internal/hash.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/include/crypto/internal/hash.h b/include/crypto/internal/hash.h index 7f25eff69d36..3b426b09bd32 100644 --- a/include/crypto/internal/hash.h +++ b/include/crypto/internal/hash.h @@ -30,7 +30,13 @@ struct crypto_hash_walk { }; struct ahash_instance { - struct ahash_alg alg; + union { + struct { + char head[offsetof(struct ahash_alg, halg.base)]; + struct crypto_instance base; + } s; + struct ahash_alg alg; + }; }; struct shash_instance { @@ -155,13 +161,13 @@ static inline void crypto_ahash_set_reqsize(struct crypto_ahash *tfm, static inline struct crypto_instance *ahash_crypto_instance( struct ahash_instance *inst) { - return container_of(&inst->alg.halg.base, struct crypto_instance, alg); + return &inst->s.base; } static inline struct ahash_instance *ahash_instance( struct crypto_instance *inst) { - return container_of(&inst->alg, struct ahash_instance, alg.halg.base); + return container_of(inst, struct ahash_instance, s.base); } static inline void *ahash_instance_ctx(struct ahash_instance *inst) |