]> err.no Git - linux-2.6/commitdiff
[CRYPTO] api: Fixed crypto_tfm context alignment
authorHerbert Xu <herbert@gondor.apana.org.au>
Mon, 21 Aug 2006 11:03:52 +0000 (21:03 +1000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 21 Sep 2006 01:16:27 +0000 (11:16 +1000)
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>
include/linux/crypto.h

index 7f946241b8792f9e163765d6b1d8b7a53534a3e8..cb1e6631b132509b5dabb8f40096fb706a7be045 100644 (file)
@@ -21,8 +21,9 @@
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/list.h>
+#include <linux/slab.h>
 #include <linux/string.h>
-#include <asm/page.h>
+#include <linux/uaccess.h>
 
 /*
  * Algorithm masks and types.
 #define CRYPTO_DIR_ENCRYPT             1
 #define CRYPTO_DIR_DECRYPT             0
 
+/*
+ * The macro CRYPTO_MINALIGN_ATTR (along with the void * type in the actual
+ * declaration) is used to ensure that the crypto_tfm context structure is
+ * aligned correctly for the given architecture so that there are no alignment
+ * faults for C data types.  In particular, this is required on platforms such
+ * as arm where pointers are 32-bit aligned but there are data types such as
+ * u64 which require 64-bit alignment.
+ */
+#if defined(ARCH_KMALLOC_MINALIGN)
+#define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN
+#elif defined(ARCH_SLAB_MINALIGN)
+#define CRYPTO_MINALIGN ARCH_SLAB_MINALIGN
+#endif
+
+#ifdef CRYPTO_MINALIGN
+#define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN)))
+#else
+#define CRYPTO_MINALIGN_ATTR
+#endif
+
 struct scatterlist;
 struct crypto_tfm;
 
@@ -231,7 +252,7 @@ struct crypto_tfm {
        
        struct crypto_alg *__crt_alg;
 
-       char __crt_ctx[] __attribute__ ((__aligned__));
+       void *__crt_ctx[] CRYPTO_MINALIGN_ATTR;
 };
 
 /*