Re: [tip:x86/x32] x32: Fix alignment fail in struct compat_siginfo
From: H. Peter Anvin
Date: Wed Mar 14 2012 - 19:45:10 EST
On 03/14/2012 04:33 PM, Derek Fawcus wrote:
> On Wed, Mar 14, 2012 at 04:17:29PM -0700, H.J. Lu wrote:
>> Just for the record, although the offsets of _utime and _stime are
>> multiple of 8 bytes, struct siginfo is only aligned at 4 bytes. So
>> the addresses of _utime and _stime may not be 8byte aligned.
>> But misaligned int64 load/store are OK for x86-64.
>
> So whereas on i386 and x86_64 we can set eflags.AC (or rflags.AC) to test the
> code for aligment safeness, we'll not be able to do so with x32?
>
> (Simply 'cause this could get false positive on syscalls).
>
> Granted this is not a common use, but I've done it for checking that code
> will easily port to ppc/mips.
>
I'm surprised you have been able to do so at all... there is tons of
regular x86 code which is totally broken if AC=1, simply because they
know that if you're on an x86 you can do unaligned references (on MIPS
they would do load right/load left, on ARM use the swizzled data, and so
on.)
But yes, due to the reuse of some of the i386 ABI data structures the
data structures that operate on the kernel ABI will not be AC-safe in
the general case. Normal user space code will be naturally aligned in
all cases.
-hpa
--
H. Peter Anvin, Intel Open Source Technology Center
I work for Intel. I don't speak on their behalf.
--
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/