@@ -43,6 +43,13 @@ static inline void signal_compat_build_tests(void)
43
43
BUILD_BUG_ON (offsetof(compat_siginfo_t , _sifields ) != 3 * sizeof (int ));
44
44
#define CHECK_CSI_OFFSET (name ) BUILD_BUG_ON(_sifields_offset != offsetof(compat_siginfo_t, _sifields.name))
45
45
46
+ BUILD_BUG_ON (offsetof(siginfo_t , si_signo ) != 0 );
47
+ BUILD_BUG_ON (offsetof(siginfo_t , si_errno ) != 4 );
48
+ BUILD_BUG_ON (offsetof(siginfo_t , si_code ) != 8 );
49
+
50
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_signo ) != 0 );
51
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_errno ) != 4 );
52
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_code ) != 8 );
46
53
/*
47
54
* Ensure that the size of each si_field never changes.
48
55
* If it does, it is a sign that the
@@ -63,36 +70,94 @@ static inline void signal_compat_build_tests(void)
63
70
CHECK_CSI_SIZE (_kill , 2 * sizeof (int ));
64
71
CHECK_SI_SIZE (_kill , 2 * sizeof (int ));
65
72
73
+ BUILD_BUG_ON (offsetof(siginfo_t , si_pid ) != 0x10 );
74
+ BUILD_BUG_ON (offsetof(siginfo_t , si_uid ) != 0x14 );
75
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_pid ) != 0xC );
76
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_uid ) != 0x10 );
77
+
66
78
CHECK_CSI_OFFSET (_timer );
67
79
CHECK_CSI_SIZE (_timer , 3 * sizeof (int ));
68
80
CHECK_SI_SIZE (_timer , 6 * sizeof (int ));
69
81
82
+ BUILD_BUG_ON (offsetof(siginfo_t , si_tid ) != 0x10 );
83
+ BUILD_BUG_ON (offsetof(siginfo_t , si_overrun ) != 0x14 );
84
+ BUILD_BUG_ON (offsetof(siginfo_t , si_value ) != 0x18 );
85
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_tid ) != 0x0C );
86
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_overrun ) != 0x10 );
87
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_value ) != 0x14 );
88
+
70
89
CHECK_CSI_OFFSET (_rt );
71
90
CHECK_CSI_SIZE (_rt , 3 * sizeof (int ));
72
91
CHECK_SI_SIZE (_rt , 4 * sizeof (int ));
73
92
93
+ BUILD_BUG_ON (offsetof(siginfo_t , si_pid ) != 0x10 );
94
+ BUILD_BUG_ON (offsetof(siginfo_t , si_uid ) != 0x14 );
95
+ BUILD_BUG_ON (offsetof(siginfo_t , si_value ) != 0x18 );
96
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_pid ) != 0x0C );
97
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_uid ) != 0x10 );
98
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_value ) != 0x14 );
99
+
74
100
CHECK_CSI_OFFSET (_sigchld );
75
101
CHECK_CSI_SIZE (_sigchld , 5 * sizeof (int ));
76
102
CHECK_SI_SIZE (_sigchld , 8 * sizeof (int ));
77
103
104
+ BUILD_BUG_ON (offsetof(siginfo_t , si_pid ) != 0x10 );
105
+ BUILD_BUG_ON (offsetof(siginfo_t , si_uid ) != 0x14 );
106
+ BUILD_BUG_ON (offsetof(siginfo_t , si_status ) != 0x18 );
107
+ BUILD_BUG_ON (offsetof(siginfo_t , si_utime ) != 0x20 );
108
+ BUILD_BUG_ON (offsetof(siginfo_t , si_stime ) != 0x28 );
109
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_pid ) != 0x0C );
110
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_uid ) != 0x10 );
111
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_status ) != 0x14 );
112
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_utime ) != 0x18 );
113
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_stime ) != 0x1C );
114
+
78
115
#ifdef CONFIG_X86_X32_ABI
79
116
CHECK_CSI_OFFSET (_sigchld_x32 );
80
117
CHECK_CSI_SIZE (_sigchld_x32 , 7 * sizeof (int ));
81
118
/* no _sigchld_x32 in the generic siginfo_t */
119
+ BUILD_BUG_ON (offsetof (compat_siginfo_t , _sifields ._sigchld_x32 ._utime ) != 0x18 );
120
+ BUILD_BUG_ON (offsetof (compat_siginfo_t , _sifields ._sigchld_x32 ._stime ) != 0x20 );
82
121
#endif
83
122
84
123
CHECK_CSI_OFFSET (_sigfault );
85
124
CHECK_CSI_SIZE (_sigfault , 4 * sizeof (int ));
86
125
CHECK_SI_SIZE (_sigfault , 8 * sizeof (int ));
87
126
127
+ BUILD_BUG_ON (offsetof(siginfo_t , si_addr ) != 0x10 );
128
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_addr ) != 0x0C );
129
+
130
+ BUILD_BUG_ON (offsetof(siginfo_t , si_addr_lsb ) != 0x18 );
131
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_addr_lsb ) != 0x10 );
132
+
133
+ BUILD_BUG_ON (offsetof(siginfo_t , si_lower ) != 0x20 );
134
+ BUILD_BUG_ON (offsetof(siginfo_t , si_upper ) != 0x28 );
135
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_lower ) != 0x14 );
136
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_upper ) != 0x18 );
137
+
138
+ BUILD_BUG_ON (offsetof(siginfo_t , si_pkey ) != 0x20 );
139
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_pkey ) != 0x14 );
140
+
88
141
CHECK_CSI_OFFSET (_sigpoll );
89
142
CHECK_CSI_SIZE (_sigpoll , 2 * sizeof (int ));
90
143
CHECK_SI_SIZE (_sigpoll , 4 * sizeof (int ));
91
144
145
+ BUILD_BUG_ON (offsetof(siginfo_t , si_band ) != 0x10 );
146
+ BUILD_BUG_ON (offsetof(siginfo_t , si_fd ) != 0x18 );
147
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_band ) != 0x0C );
148
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_fd ) != 0x10 );
149
+
92
150
CHECK_CSI_OFFSET (_sigsys );
93
151
CHECK_CSI_SIZE (_sigsys , 3 * sizeof (int ));
94
152
CHECK_SI_SIZE (_sigsys , 4 * sizeof (int ));
95
153
154
+ BUILD_BUG_ON (offsetof(siginfo_t , si_call_addr ) != 0x10 );
155
+ BUILD_BUG_ON (offsetof(siginfo_t , si_syscall ) != 0x18 );
156
+ BUILD_BUG_ON (offsetof(siginfo_t , si_arch ) != 0x1C );
157
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_call_addr ) != 0x0C );
158
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_syscall ) != 0x10 );
159
+ BUILD_BUG_ON (offsetof(compat_siginfo_t , si_arch ) != 0x14 );
160
+
96
161
/* any new si_fields should be added here */
97
162
}
98
163
0 commit comments