Re: LRW/XTS + Via Padlock Bug in 2.6.24-rc7?

From: Herbert Xu
Date: Thu Jan 10 2008 - 15:48:43 EST


Torben Viets <Viets@xxxxxx> wrote:
>
> After rebuilding the kernel, I tried: cryptsetup -c aes-xts-plain -s 256 luksFormat /dev/raid/test
>
> It does the same as before, dmesg says:
>
> general protection fault: 0000 [#1]
> Modules linked in: xt_TCPMSS xt_tcpmss iptable_mangle ipt_MASQUERADE xt_tcpudp pppoe pppox xt_mark xt_state iptable_nat nf_nat nf_conntrack_ipv4 iptable_filter ip_tables x_tables af_packet ppp_generic slhc aes_i586 dm_crypt dm_mod
>
> Pid: 4409, comm: kcryptd Not tainted (2.6.24-rc7 #2)
> EIP: 0060:[<c03599cc>] EFLAGS: 00010282 CPU: 0
> EIP is at aes_crypt_copy+0x2c/0x50
> EAX: f62e1ff0 EBX: f60ab850 ECX: 00000001 EDX: f60ab830
> ESI: f620dda8 EDI: f620dda8 EBP: f62e1ff0 ESP: f620dda8

Oh I see. I misdiagnosed the problem. The problem is that for some
reason gcc cannot guarantee 16-byte alignment for variables on the
stack in the kernel. As you can see from ESI/EDI above the temporary
buffer is unaligned.

Please try this patch instead.

Thanks,
--
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/drivers/crypto/padlock-aes.c b/drivers/crypto/padlock-aes.c
index a337b69..5f7e718 100644
--- a/drivers/crypto/padlock-aes.c
+++ b/drivers/crypto/padlock-aes.c
@@ -429,8 +429,8 @@ static inline void padlock_xcrypt(const u8 *input, u8 *output, void *key,

static void aes_crypt_copy(const u8 *in, u8 *out, u32 *key, struct cword *cword)
{
- u8 tmp[AES_BLOCK_SIZE * 2]
- __attribute__ ((__aligned__(PADLOCK_ALIGNMENT)));
+ u8 buf[AES_BLOCK_SIZE * 2 + PADLOCK_ALIGNMENT - 1];
+ u8 *tmp = PTR_ALIGN(&buf[0], PADLOCK_ALIGNMENT);

memcpy(tmp, in, AES_BLOCK_SIZE);
padlock_xcrypt(tmp, out, key, cword);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/