summaryrefslogtreecommitdiff
path: root/include/crypto/internal
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2015-06-18 14:00:49 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2015-06-19 14:16:30 +0800
commitf5d8660acb9623470adcef426c6ff7b07cbe4b74 (patch)
treec52e647c29fb7cb5cc2a27aba720bea0253bb5b5 /include/crypto/internal
parentedf18b9108f5025f9e83b2c167c9122954acbc62 (diff)
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>
Diffstat (limited to 'include/crypto/internal')
-rw-r--r--include/crypto/internal/aead.h9
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 {