Commit 56516a42 authored by Marco Elver's avatar Marco Elver Committed by Eric W. Biederman
Browse files

arm: Add compile-time asserts for siginfo_t offsets

To help catch ABI breaks at compile-time, add compile-time assertions to
verify the siginfo_t layout.

This could have caught that we cannot portably add 64-bit integers to
siginfo_t on 32-bit architectures like Arm before reaching -next:
https://lkml.kernel.org/r/20210422191823.79012-1-elver@google.com

Link: https://lkml.kernel.org/r/20210429190734.624918-2-elver@google.com
Link: https://lkml.kernel.org/r/20210505141101.11519-2-ebiederm@xmission.com
Link: https://lkml.kernel.org/r/87y2a7xx9q.fsf_-_@disp2133


Signed-off-by: default avatarMarco Elver <elver@google.com>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 42365abd
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -725,3 +725,40 @@ asmlinkage void do_rseq_syscall(struct pt_regs *regs)
	rseq_syscall(regs);
}
#endif

/*
 * Compile-time assertions for siginfo_t offsets. Check NSIG* as well, as
 * changes likely come with new fields that should be added below.
 */
static_assert(NSIGILL	== 11);
static_assert(NSIGFPE	== 15);
static_assert(NSIGSEGV	== 9);
static_assert(NSIGBUS	== 5);
static_assert(NSIGTRAP	== 6);
static_assert(NSIGCHLD	== 6);
static_assert(NSIGSYS	== 2);
static_assert(offsetof(siginfo_t, si_signo)	== 0x00);
static_assert(offsetof(siginfo_t, si_errno)	== 0x04);
static_assert(offsetof(siginfo_t, si_code)	== 0x08);
static_assert(offsetof(siginfo_t, si_pid)	== 0x0c);
static_assert(offsetof(siginfo_t, si_uid)	== 0x10);
static_assert(offsetof(siginfo_t, si_tid)	== 0x0c);
static_assert(offsetof(siginfo_t, si_overrun)	== 0x10);
static_assert(offsetof(siginfo_t, si_status)	== 0x14);
static_assert(offsetof(siginfo_t, si_utime)	== 0x18);
static_assert(offsetof(siginfo_t, si_stime)	== 0x1c);
static_assert(offsetof(siginfo_t, si_value)	== 0x14);
static_assert(offsetof(siginfo_t, si_int)	== 0x14);
static_assert(offsetof(siginfo_t, si_ptr)	== 0x14);
static_assert(offsetof(siginfo_t, si_addr)	== 0x0c);
static_assert(offsetof(siginfo_t, si_addr_lsb)	== 0x10);
static_assert(offsetof(siginfo_t, si_lower)	== 0x14);
static_assert(offsetof(siginfo_t, si_upper)	== 0x18);
static_assert(offsetof(siginfo_t, si_pkey)	== 0x14);
static_assert(offsetof(siginfo_t, si_perf_data)	== 0x10);
static_assert(offsetof(siginfo_t, si_perf_type)	== 0x14);
static_assert(offsetof(siginfo_t, si_band)	== 0x0c);
static_assert(offsetof(siginfo_t, si_fd)	== 0x10);
static_assert(offsetof(siginfo_t, si_call_addr)	== 0x0c);
static_assert(offsetof(siginfo_t, si_syscall)	== 0x10);
static_assert(offsetof(siginfo_t, si_arch)	== 0x14);