Skip to content

Commit 65f90e8

Browse files
authored
Add test cases for metadata region access (#863)
* add metadata test cases * add false negative Signed-off-by: Laksh Kotian <[email protected]>
1 parent 4b2e639 commit 65f90e8

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

test-data/packet.yaml

+80
Original file line numberDiff line numberDiff line change
@@ -195,3 +195,83 @@ code:
195195
post: ["r0.type=number",
196196
"r6.type=ctx", "r6.ctx_offset=0",
197197
"r7.type=number", "r7.svalue=23", "r7.uvalue=23"]
198+
---
199+
test-case: meta_offset lower bound access
200+
201+
pre: ["meta_offset=-8", "packet_size=0",
202+
"r1.type=packet", "r1.packet_offset=0", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]"]
203+
204+
code:
205+
<start>: |
206+
r2 = *(u64 *)(r1 - 8)
207+
208+
post: ["meta_offset=-8", "packet_size=0",
209+
"r1.type=packet", "r1.packet_offset=0", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]",
210+
"r2.type=number"]
211+
messages: []
212+
---
213+
test-case: meta_offset lower bound incorrect access
214+
215+
pre: ["meta_offset=0", "packet_size=8",
216+
"r1.type=packet", "r1.packet_offset=0", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]"]
217+
218+
code:
219+
<start>: |
220+
r2 = *(u64 *)(r1 - 8)
221+
222+
post: ["meta_offset=0", "packet_size=8",
223+
"r1.type=packet", "r1.packet_offset=0", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]",
224+
"r2.type=number"]
225+
messages:
226+
- "0: Lower bound must be at least meta_offset (valid_access(r1.offset-8, width=8) for read)"
227+
---
228+
test-case: meta_offset upper bound incorrect access
229+
230+
pre: ["meta_offset=-8", "packet_size=0",
231+
"r1.type=packet", "r1.packet_offset=-8", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]"]
232+
233+
code:
234+
<start>: |
235+
r2 = *(u64 *)(r1 + 8)
236+
237+
post: ["meta_offset=-8", "packet_size=0",
238+
"r1.type=packet", "r1.packet_offset=-8", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]",
239+
"r2.type=number"]
240+
messages:
241+
- "0: Upper bound must be at most packet_size (valid_access(r1.offset+8, width=8) for read)"
242+
---
243+
test-case: meta_offset upper bound access
244+
245+
pre: ["meta_offset=-8", "packet_size=0",
246+
"r1.type=packet", "r1.packet_offset=-8", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]"]
247+
248+
code:
249+
<start>: |
250+
r2 = *(u64 *)(r1 + 0)
251+
252+
post: ["meta_offset=-8", "packet_size=0",
253+
"r1.type=packet", "r1.packet_offset=-8", "r1.svalue=[4098, 2147418112]", "r1.uvalue=[4098, 2147418112]",
254+
"r2.type=number"]
255+
---
256+
# This test case demonstrates a false negative generated by the verifier where data_meta + offset < data is known
257+
# but packet access at that offset is not allowed.
258+
259+
test-case: meta access with data bound check
260+
pre: ["meta_offset=[-4098, 0]", "meta_offset=r2.packet_offset",
261+
"r2.packet_offset=[-4098, 0]", "r2.svalue=[4098, 2147418112]", "r2.type=packet",
262+
"r1.packet_offset=0", "r1.svalue=[4098, 2147418112]", "r1.type=packet"]
263+
264+
code:
265+
<start>: |
266+
r1 -= r2
267+
r3 = 101
268+
assume r3 s<= r1;
269+
r0 = *(u8 *)(r2 + 100);
270+
271+
post: ["meta_offset=[-4098, 0]",
272+
"r0.svalue=[0, 255]", "r0.type=number", "r0.uvalue=[0, 255]",
273+
"r1.svalue=[101, 4098]", "r1.type=number", "r1.uvalue=r1.svalue",
274+
"r2.packet_offset=meta_offset", "r2.svalue=[4098, 2147418112]", "r2.type=packet",
275+
"r3.svalue=101", "r3.type=number", "r3.uvalue=101"]
276+
messages:
277+
- "3: Upper bound must be at most packet_size (valid_access(r2.offset+100, width=1) for read)"

0 commit comments

Comments
 (0)