aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/crypto.h
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2006-08-21 07:03:52 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2006-09-20 21:16:27 -0400
commit799111020c66c41aef621a3b53ad112543754124 (patch)
treeda9fc944ada8607cf534a2d0b0774ba8e0549fcc /include/linux/crypto.h
parente478bec0ba0a83a48a0f6982934b6de079e7e6b3 (diff)
[CRYPTO] api: Fixed crypto_tfm context alignment
Previously the __aligned__ attribute was added to the crypto_tfm context member to ensure it is alinged correctly on architectures such as arm. Unfortunately kmalloc does not use the same minimum alignment rules as gcc so this is useless. This patch changes it to use kmalloc's minimum alignment. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'include/linux/crypto.h')
-rw-r--r--include/linux/crypto.h25
1 files changed, 23 insertions, 2 deletions
diff --git a/include/linux/crypto.h b/include/linux/crypto.h
index 7f946241b879..cb1e6631b132 100644
--- a/include/linux/crypto.h
+++ b/include/linux/crypto.h
@@ -21,8 +21,9 @@
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/types.h> 22#include <linux/types.h>
23#include <linux/list.h> 23#include <linux/list.h>
24#include <linux/slab.h>
24#include <linux/string.h> 25#include <linux/string.h>
25#include <asm/page.h> 26#include <linux/uaccess.h>
26 27
27/* 28/*
28 * Algorithm masks and types. 29 * Algorithm masks and types.
@@ -61,6 +62,26 @@
61#define CRYPTO_DIR_ENCRYPT 1 62#define CRYPTO_DIR_ENCRYPT 1
62#define CRYPTO_DIR_DECRYPT 0 63#define CRYPTO_DIR_DECRYPT 0
63 64
65/*
66 * The macro CRYPTO_MINALIGN_ATTR (along with the void * type in the actual
67 * declaration) is used to ensure that the crypto_tfm context structure is
68 * aligned correctly for the given architecture so that there are no alignment
69 * faults for C data types. In particular, this is required on platforms such
70 * as arm where pointers are 32-bit aligned but there are data types such as
71 * u64 which require 64-bit alignment.
72 */
73#if defined(ARCH_KMALLOC_MINALIGN)
74#define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
75#elif defined(ARCH_SLAB_MINALIGN)
76#define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
77#endif
78
79#ifdef CRYPTO_MINALIGN
80#define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))
81#else
82#define CRYPTO_MINALIGN_ATTR
83#endif
84
64struct scatterlist; 85struct scatterlist;
65struct crypto_tfm; 86struct crypto_tfm;
66 87
@@ -231,7 +252,7 @@ struct crypto_tfm {
231 252
232 struct crypto_alg *__crt_alg; 253 struct crypto_alg *__crt_alg;
233 254
234 char __crt_ctx[] __attribute__ ((__aligned__)); 255 void *__crt_ctx[] CRYPTO_MINALIGN_ATTR;
235}; 256};
236 257
237/* 258/*