Skip to content

Commit be49600

Browse files
author
Gavin Li
committed
Fix "dereferencing a null pointer" in C layout tests
Instead of dereferencing a null pointer, create a MaybeUninit from which we can extract well-defined addresses.
1 parent 92487d4 commit be49600

File tree

235 files changed

+4315
-1623
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

235 files changed

+4315
-1623
lines changed

src/codegen/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2192,7 +2192,9 @@ impl CodeGenerator for CompInfo {
21922192
quote! {
21932193
assert_eq!(
21942194
unsafe {
2195-
&(*(::#prefix::ptr::null::<#canonical_ident>())).#field_name as *const _ as usize
2195+
let uninit = ::#prefix::mem::MaybeUninit::<#canonical_ident>::uninit();
2196+
let ptr = uninit.as_ptr();
2197+
::#prefix::ptr::addr_of!((*ptr).#field_name) as usize - ptr as usize
21962198
},
21972199
#field_offset,
21982200
concat!("Offset of field: ", stringify!(#canonical_ident), "::", stringify!(#field_name))

tests/expectations/tests/16-byte-alignment.rs

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,11 @@ fn bindgen_test_layout_rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1() {
4444
);
4545
assert_eq!(
4646
unsafe {
47-
&(*(::std::ptr::null::<rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1>(
48-
)))
49-
.dport as *const _ as usize
47+
let uninit = ::std::mem::MaybeUninit::<
48+
rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1,
49+
>::uninit();
50+
let ptr = uninit.as_ptr();
51+
::std::ptr::addr_of!((*ptr).dport) as usize - ptr as usize
5052
},
5153
0usize,
5254
concat!(
@@ -58,9 +60,11 @@ fn bindgen_test_layout_rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1() {
5860
);
5961
assert_eq!(
6062
unsafe {
61-
&(*(::std::ptr::null::<rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1>(
62-
)))
63-
.sport as *const _ as usize
63+
let uninit = ::std::mem::MaybeUninit::<
64+
rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1,
65+
>::uninit();
66+
let ptr = uninit.as_ptr();
67+
::std::ptr::addr_of!((*ptr).sport) as usize - ptr as usize
6468
},
6569
2usize,
6670
concat!(
@@ -85,8 +89,11 @@ fn bindgen_test_layout_rte_ipv4_tuple__bindgen_ty_1() {
8589
);
8690
assert_eq!(
8791
unsafe {
88-
&(*(::std::ptr::null::<rte_ipv4_tuple__bindgen_ty_1>())).sctp_tag
89-
as *const _ as usize
92+
let uninit =
93+
::std::mem::MaybeUninit::<rte_ipv4_tuple__bindgen_ty_1>::uninit(
94+
);
95+
let ptr = uninit.as_ptr();
96+
::std::ptr::addr_of!((*ptr).sctp_tag) as usize - ptr as usize
9097
},
9198
0usize,
9299
concat!(
@@ -120,8 +127,9 @@ fn bindgen_test_layout_rte_ipv4_tuple() {
120127
);
121128
assert_eq!(
122129
unsafe {
123-
&(*(::std::ptr::null::<rte_ipv4_tuple>())).src_addr as *const _
124-
as usize
130+
let uninit = ::std::mem::MaybeUninit::<rte_ipv4_tuple>::uninit();
131+
let ptr = uninit.as_ptr();
132+
::std::ptr::addr_of!((*ptr).src_addr) as usize - ptr as usize
125133
},
126134
0usize,
127135
concat!(
@@ -133,8 +141,9 @@ fn bindgen_test_layout_rte_ipv4_tuple() {
133141
);
134142
assert_eq!(
135143
unsafe {
136-
&(*(::std::ptr::null::<rte_ipv4_tuple>())).dst_addr as *const _
137-
as usize
144+
let uninit = ::std::mem::MaybeUninit::<rte_ipv4_tuple>::uninit();
145+
let ptr = uninit.as_ptr();
146+
::std::ptr::addr_of!((*ptr).dst_addr) as usize - ptr as usize
138147
},
139148
4usize,
140149
concat!(
@@ -193,9 +202,11 @@ fn bindgen_test_layout_rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1() {
193202
);
194203
assert_eq!(
195204
unsafe {
196-
&(*(::std::ptr::null::<rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1>(
197-
)))
198-
.dport as *const _ as usize
205+
let uninit = ::std::mem::MaybeUninit::<
206+
rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1,
207+
>::uninit();
208+
let ptr = uninit.as_ptr();
209+
::std::ptr::addr_of!((*ptr).dport) as usize - ptr as usize
199210
},
200211
0usize,
201212
concat!(
@@ -207,9 +218,11 @@ fn bindgen_test_layout_rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1() {
207218
);
208219
assert_eq!(
209220
unsafe {
210-
&(*(::std::ptr::null::<rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1>(
211-
)))
212-
.sport as *const _ as usize
221+
let uninit = ::std::mem::MaybeUninit::<
222+
rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1,
223+
>::uninit();
224+
let ptr = uninit.as_ptr();
225+
::std::ptr::addr_of!((*ptr).sport) as usize - ptr as usize
213226
},
214227
2usize,
215228
concat!(
@@ -234,8 +247,11 @@ fn bindgen_test_layout_rte_ipv6_tuple__bindgen_ty_1() {
234247
);
235248
assert_eq!(
236249
unsafe {
237-
&(*(::std::ptr::null::<rte_ipv6_tuple__bindgen_ty_1>())).sctp_tag
238-
as *const _ as usize
250+
let uninit =
251+
::std::mem::MaybeUninit::<rte_ipv6_tuple__bindgen_ty_1>::uninit(
252+
);
253+
let ptr = uninit.as_ptr();
254+
::std::ptr::addr_of!((*ptr).sctp_tag) as usize - ptr as usize
239255
},
240256
0usize,
241257
concat!(
@@ -269,8 +285,9 @@ fn bindgen_test_layout_rte_ipv6_tuple() {
269285
);
270286
assert_eq!(
271287
unsafe {
272-
&(*(::std::ptr::null::<rte_ipv6_tuple>())).src_addr as *const _
273-
as usize
288+
let uninit = ::std::mem::MaybeUninit::<rte_ipv6_tuple>::uninit();
289+
let ptr = uninit.as_ptr();
290+
::std::ptr::addr_of!((*ptr).src_addr) as usize - ptr as usize
274291
},
275292
0usize,
276293
concat!(
@@ -282,8 +299,9 @@ fn bindgen_test_layout_rte_ipv6_tuple() {
282299
);
283300
assert_eq!(
284301
unsafe {
285-
&(*(::std::ptr::null::<rte_ipv6_tuple>())).dst_addr as *const _
286-
as usize
302+
let uninit = ::std::mem::MaybeUninit::<rte_ipv6_tuple>::uninit();
303+
let ptr = uninit.as_ptr();
304+
::std::ptr::addr_of!((*ptr).dst_addr) as usize - ptr as usize
287305
},
288306
16usize,
289307
concat!(
@@ -324,7 +342,9 @@ fn bindgen_test_layout_rte_thash_tuple() {
324342
);
325343
assert_eq!(
326344
unsafe {
327-
&(*(::std::ptr::null::<rte_thash_tuple>())).v4 as *const _ as usize
345+
let uninit = ::std::mem::MaybeUninit::<rte_thash_tuple>::uninit();
346+
let ptr = uninit.as_ptr();
347+
::std::ptr::addr_of!((*ptr).v4) as usize - ptr as usize
328348
},
329349
0usize,
330350
concat!(
@@ -336,7 +356,9 @@ fn bindgen_test_layout_rte_thash_tuple() {
336356
);
337357
assert_eq!(
338358
unsafe {
339-
&(*(::std::ptr::null::<rte_thash_tuple>())).v6 as *const _ as usize
359+
let uninit = ::std::mem::MaybeUninit::<rte_thash_tuple>::uninit();
360+
let ptr = uninit.as_ptr();
361+
::std::ptr::addr_of!((*ptr).v6) as usize - ptr as usize
340362
},
341363
0usize,
342364
concat!(

tests/expectations/tests/16-byte-alignment_1_0.rs

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,11 @@ fn bindgen_test_layout_rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1() {
8989
);
9090
assert_eq!(
9191
unsafe {
92-
&(*(::std::ptr::null::<rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1>(
93-
)))
94-
.dport as *const _ as usize
92+
let uninit = ::std::mem::MaybeUninit::<
93+
rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1,
94+
>::uninit();
95+
let ptr = uninit.as_ptr();
96+
::std::ptr::addr_of!((*ptr).dport) as usize - ptr as usize
9597
},
9698
0usize,
9799
concat!(
@@ -103,9 +105,11 @@ fn bindgen_test_layout_rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1() {
103105
);
104106
assert_eq!(
105107
unsafe {
106-
&(*(::std::ptr::null::<rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1>(
107-
)))
108-
.sport as *const _ as usize
108+
let uninit = ::std::mem::MaybeUninit::<
109+
rte_ipv4_tuple__bindgen_ty_1__bindgen_ty_1,
110+
>::uninit();
111+
let ptr = uninit.as_ptr();
112+
::std::ptr::addr_of!((*ptr).sport) as usize - ptr as usize
109113
},
110114
2usize,
111115
concat!(
@@ -135,8 +139,11 @@ fn bindgen_test_layout_rte_ipv4_tuple__bindgen_ty_1() {
135139
);
136140
assert_eq!(
137141
unsafe {
138-
&(*(::std::ptr::null::<rte_ipv4_tuple__bindgen_ty_1>())).sctp_tag
139-
as *const _ as usize
142+
let uninit =
143+
::std::mem::MaybeUninit::<rte_ipv4_tuple__bindgen_ty_1>::uninit(
144+
);
145+
let ptr = uninit.as_ptr();
146+
::std::ptr::addr_of!((*ptr).sctp_tag) as usize - ptr as usize
140147
},
141148
0usize,
142149
concat!(
@@ -166,8 +173,9 @@ fn bindgen_test_layout_rte_ipv4_tuple() {
166173
);
167174
assert_eq!(
168175
unsafe {
169-
&(*(::std::ptr::null::<rte_ipv4_tuple>())).src_addr as *const _
170-
as usize
176+
let uninit = ::std::mem::MaybeUninit::<rte_ipv4_tuple>::uninit();
177+
let ptr = uninit.as_ptr();
178+
::std::ptr::addr_of!((*ptr).src_addr) as usize - ptr as usize
171179
},
172180
0usize,
173181
concat!(
@@ -179,8 +187,9 @@ fn bindgen_test_layout_rte_ipv4_tuple() {
179187
);
180188
assert_eq!(
181189
unsafe {
182-
&(*(::std::ptr::null::<rte_ipv4_tuple>())).dst_addr as *const _
183-
as usize
190+
let uninit = ::std::mem::MaybeUninit::<rte_ipv4_tuple>::uninit();
191+
let ptr = uninit.as_ptr();
192+
::std::ptr::addr_of!((*ptr).dst_addr) as usize - ptr as usize
184193
},
185194
4usize,
186195
concat!(
@@ -237,9 +246,11 @@ fn bindgen_test_layout_rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1() {
237246
);
238247
assert_eq!(
239248
unsafe {
240-
&(*(::std::ptr::null::<rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1>(
241-
)))
242-
.dport as *const _ as usize
249+
let uninit = ::std::mem::MaybeUninit::<
250+
rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1,
251+
>::uninit();
252+
let ptr = uninit.as_ptr();
253+
::std::ptr::addr_of!((*ptr).dport) as usize - ptr as usize
243254
},
244255
0usize,
245256
concat!(
@@ -251,9 +262,11 @@ fn bindgen_test_layout_rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1() {
251262
);
252263
assert_eq!(
253264
unsafe {
254-
&(*(::std::ptr::null::<rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1>(
255-
)))
256-
.sport as *const _ as usize
265+
let uninit = ::std::mem::MaybeUninit::<
266+
rte_ipv6_tuple__bindgen_ty_1__bindgen_ty_1,
267+
>::uninit();
268+
let ptr = uninit.as_ptr();
269+
::std::ptr::addr_of!((*ptr).sport) as usize - ptr as usize
257270
},
258271
2usize,
259272
concat!(
@@ -283,8 +296,11 @@ fn bindgen_test_layout_rte_ipv6_tuple__bindgen_ty_1() {
283296
);
284297
assert_eq!(
285298
unsafe {
286-
&(*(::std::ptr::null::<rte_ipv6_tuple__bindgen_ty_1>())).sctp_tag
287-
as *const _ as usize
299+
let uninit =
300+
::std::mem::MaybeUninit::<rte_ipv6_tuple__bindgen_ty_1>::uninit(
301+
);
302+
let ptr = uninit.as_ptr();
303+
::std::ptr::addr_of!((*ptr).sctp_tag) as usize - ptr as usize
288304
},
289305
0usize,
290306
concat!(
@@ -314,8 +330,9 @@ fn bindgen_test_layout_rte_ipv6_tuple() {
314330
);
315331
assert_eq!(
316332
unsafe {
317-
&(*(::std::ptr::null::<rte_ipv6_tuple>())).src_addr as *const _
318-
as usize
333+
let uninit = ::std::mem::MaybeUninit::<rte_ipv6_tuple>::uninit();
334+
let ptr = uninit.as_ptr();
335+
::std::ptr::addr_of!((*ptr).src_addr) as usize - ptr as usize
319336
},
320337
0usize,
321338
concat!(
@@ -327,8 +344,9 @@ fn bindgen_test_layout_rte_ipv6_tuple() {
327344
);
328345
assert_eq!(
329346
unsafe {
330-
&(*(::std::ptr::null::<rte_ipv6_tuple>())).dst_addr as *const _
331-
as usize
347+
let uninit = ::std::mem::MaybeUninit::<rte_ipv6_tuple>::uninit();
348+
let ptr = uninit.as_ptr();
349+
::std::ptr::addr_of!((*ptr).dst_addr) as usize - ptr as usize
332350
},
333351
16usize,
334352
concat!(
@@ -360,7 +378,9 @@ fn bindgen_test_layout_rte_thash_tuple() {
360378
);
361379
assert_eq!(
362380
unsafe {
363-
&(*(::std::ptr::null::<rte_thash_tuple>())).v4 as *const _ as usize
381+
let uninit = ::std::mem::MaybeUninit::<rte_thash_tuple>::uninit();
382+
let ptr = uninit.as_ptr();
383+
::std::ptr::addr_of!((*ptr).v4) as usize - ptr as usize
364384
},
365385
0usize,
366386
concat!(
@@ -372,7 +392,9 @@ fn bindgen_test_layout_rte_thash_tuple() {
372392
);
373393
assert_eq!(
374394
unsafe {
375-
&(*(::std::ptr::null::<rte_thash_tuple>())).v6 as *const _ as usize
395+
let uninit = ::std::mem::MaybeUninit::<rte_thash_tuple>::uninit();
396+
let ptr = uninit.as_ptr();
397+
::std::ptr::addr_of!((*ptr).v6) as usize - ptr as usize
376398
},
377399
0usize,
378400
concat!(

0 commit comments

Comments
 (0)