linux-hardened/arch/mips/include/uapi/asm
Dave Hansen 49cd53bf14 mm/pkeys: Fix siginfo ABI breakage caused by new u64 field
Stephen Rothwell reported this linux-next build failure:

	http://lkml.kernel.org/r/20160226164406.065a1ffc@canb.auug.org.au

... caused by the Memory Protection Keys patches from the tip tree triggering
a newly introduced build-time sanity check on an ARM build, because they changed
the ABI of siginfo in an unexpected way.

If u64 has a natural alignment of 8 bytes (which is the case on most mainstream
platforms, with the notable exception of x86-32), then the leadup to the
_sifields union matters:

typedef struct siginfo {
        int si_signo;
        int si_errno;
        int si_code;

        union {
	...
        } _sifields;
} __ARCH_SI_ATTRIBUTES siginfo_t;

Note how the first 3 fields give us 12 bytes, so _sifields is not 8
naturally bytes aligned.

Before the _pkey field addition the largest element of _sifields (on
32-bit platforms) was 32 bits. With the u64 added, the minimum alignment
requirement increased to 8 bytes on those (rare) 32-bit platforms. Thus
GCC padded the space after si_code with 4 extra bytes, and shifted all
_sifields offsets by 4 bytes - breaking the ABI of all of those
remaining fields.

On 64-bit platforms this problem was hidden due to _sifields already
having numerous fields with natural 8 bytes alignment (pointers).

To fix this, we replace the u64 with an '__u32'.  The __u32 does not
increase the minimum alignment requirement of the union, and it is
also large enough to store the 16-bit pkey we have today on x86.

Reported-by: Stehen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Acked-by: Stehen Rothwell <sfr@canb.auug.org.au>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Dave Hansen <dave@sr71.net>
Cc: Helge Deller <deller@gmx.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-next@vger.kernel.org
Fixes: cd0ea35ff5 ("signals, pkeys: Notify userspace about protection key faults")
Link: http://lkml.kernel.org/r/20160301125451.02C7426D@viggo.jf.intel.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-03-05 15:00:06 +01:00
..
auxvec.h MIPS: Initial implementation of a VDSO 2015-11-11 08:36:36 +01:00
bitfield.h MIPS: Move definition of __BITFIELD_FIELD to sharable header. 2014-05-21 11:12:45 +02:00
bitsperlong.h
break.h MIPS: Add uprobes support. 2015-09-03 12:08:05 +02:00
byteorder.h
cachectl.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
errno.h errno.h: remove "NFS" from descriptions in comments 2013-11-13 12:09:12 +09:00
fcntl.h Merge branch '3.10-fixes' into mips-for-linux-next 2013-07-12 18:11:43 +02:00
hwcap.h MIPS: AT_HWCAP aux vector infrastructure 2015-09-03 12:07:59 +02:00
inst.h MIPS: Move KVM specific opcodes into asm/inst.h 2016-01-24 03:31:17 +01:00
ioctl.h
ioctls.h mips/uapi: Add definition of TIOC[SG]RS485 2014-09-10 09:28:13 -07:00
Kbuild MIPS: Initial implementation of a VDSO 2015-11-11 08:36:36 +01:00
kvm.h MIPS: KVM: Expose MSA registers 2015-03-27 21:25:21 +00:00
kvm_para.h MIPS: Add functions for hypervisor call 2014-05-30 21:01:11 +02:00
mman.h mm: arch: remove duplicate definitions of MADV_FREE 2016-01-20 17:09:18 -08:00
msgbuf.h MIPS: <uapi/asm/msgbuf.h>: Don't reference CONFIG_* symbols. 2013-06-18 16:28:16 +02:00
param.h
poll.h
posix_types.h
ptrace.h MIPS: ptrace.h: Add a missing include 2014-10-23 13:23:08 +02:00
reg.h MIPS: asm/reg.h: Move to uapi 2014-08-02 00:06:38 +02:00
resource.h MIPS: <uapi/asm/resource.h: Don't reference CONFIG_* symbols. 2013-06-18 16:28:15 +02:00
sembuf.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
setup.h
sgidefs.h
shmbuf.h
sigcontext.h MIPS: Add definitions for extended context 2015-09-03 12:07:58 +02:00
siginfo.h mm/pkeys: Fix siginfo ABI breakage caused by new u64 field 2016-03-05 15:00:06 +01:00
signal.h MIPS: Delete definition of SA_RESTORER. 2013-04-05 15:10:51 +02:00
socket.h soreuseport: setsockopt SO_ATTACH_REUSEPORT_[CE]BPF 2016-01-04 22:49:59 -05:00
sockios.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
stat.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
statfs.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
swab.h MIPS: UAPI: Ignore __arch_swab{16,32,64} when using MIPS16 2015-10-05 11:30:23 +02:00
sysmips.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
termbits.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
termios.h MIPS: Whitespace cleanup. 2013-02-01 10:00:22 +01:00
types.h MIPS: Add __SANE_USERSPACE_TYPES__ to asm/types.h for LL64 2014-05-28 10:51:13 +02:00
ucontext.h MIPS: Add definitions for extended context 2015-09-03 12:07:58 +02:00
unistd.h MIPS: Wire up copy_file_range syscall. 2016-02-05 17:15:42 +01:00