diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2015-06-18 14:00:49 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-06-19 14:16:30 +0800 |
commit | f5d8660acb9623470adcef426c6ff7b07cbe4b74 (patch) | |
tree | c52e647c29fb7cb5cc2a27aba720bea0253bb5b5 | |
parent | edf18b9108f5025f9e83b2c167c9122954acbc62 (diff) | |
download | linux-f5d8660acb9623470adcef426c6ff7b07cbe4b74.tar.bz2 |
crypto: aead - Fix aead_instance struct size
The struct aead_instance is meant to extend struct crypto_instance
by incorporating the extra members of struct aead_alg. However,
the current layout which is copied from shash/ahash does not specify
the struct fully. In particular only aead_alg is present.
For shash/ahash this works because users there add extra headroom
to sizeof(struct crypto_instance) when allocating the instance.
Unfortunately for aead, this bit was lost when the new aead_instance
was added.
Rather than fixing it like shash/ahash, this patch simply expands
struct aead_instance to contain what is supposed to be there, i.e.,
adding struct crypto_instance.
In order to not break existing AEAD users, this is done through an
anonymous union.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | include/crypto/internal/aead.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/include/crypto/internal/aead.h b/include/crypto/internal/aead.h index ba52c37b8c40..4b2547186519 100644 --- a/include/crypto/internal/aead.h +++ b/include/crypto/internal/aead.h @@ -15,12 +15,19 @@ #include <crypto/aead.h> #include <crypto/algapi.h> +#include <linux/stddef.h> #include <linux/types.h> struct rtattr; struct aead_instance { - struct aead_alg alg; + union { + struct { + char head[offsetof(struct aead_alg, base)]; + struct crypto_instance base; + } s; + struct aead_alg alg; + }; }; struct crypto_aead_spawn { |