Skip to content

Instantly share code, notes, and snippets.

@williamtu
Created February 3, 2017 03:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save williamtu/1ae888cea019d065eab3057f74d38905 to your computer and use it in GitHub Desktop.
Save williamtu/1ae888cea019d065eab3057f74d38905 to your computer and use it in GitHub Desktop.
Map 'ebpf_outTable' loaded as pinned!
Map 'ebpf_outTable' (5) injected into prog section 'prog' at offset 295!
Prog section 'prog' loaded (6)!
- Type: 6
- Instructions: 304 (0 over limit)
- License: GPL
Verifier analysis:
0: (bf) r6 = r1
1: (61) r4 = *(u32 *)(r6 +4)
2: (61) r3 = *(u32 *)(r6 +0)
3: (b7) r0 = 0
4: (63) *(u32 *)(r10 -4) = r0
5: (bf) r1 = r3
6: (07) r1 += 14
7: (2d) if r1 > r4 goto pc+295
R0=imm0,min_value=0,max_value=0 R1=pkt(id=0,off=14,r=14) R3=pkt(id=0,off=0,r=14) R4=pkt_end R6=ctx R10=fp
8: (b7) r2 = 14
9: (b7) r0 = 0
10: (69) r1 = *(u16 *)(r3 +12)
11: (dc) (u32) r1 endian (u32) r0
12: (b7) r5 = 0
13: (7b) *(u64 *)(r10 -152) = r5
14: (b7) r5 = 0
15: (7b) *(u64 *)(r10 -112) = r5
16: (b7) r5 = 0
17: (7b) *(u64 *)(r10 -104) = r5
18: (b7) r5 = 0
19: (7b) *(u64 *)(r10 -120) = r5
20: (b7) r5 = 0
21: (7b) *(u64 *)(r10 -136) = r5
22: (b7) r5 = 0
23: (7b) *(u64 *)(r10 -88) = r5
24: (b7) r7 = 0
25: (b7) r5 = 0
26: (7b) *(u64 *)(r10 -96) = r5
27: (b7) r5 = 0
28: (7b) *(u64 *)(r10 -24) = r5
29: (b7) r5 = 0
30: (7b) *(u64 *)(r10 -72) = r5
31: (b7) r5 = 0
32: (7b) *(u64 *)(r10 -40) = r5
33: (b7) r9 = 0
34: (b7) r5 = 0
35: (7b) *(u64 *)(r10 -80) = r5
36: (b7) r5 = 0
37: (7b) *(u64 *)(r10 -56) = r5
38: (b7) r5 = 0
39: (7b) *(u64 *)(r10 -64) = r5
40: (b7) r5 = 0
41: (7b) *(u64 *)(r10 -32) = r5
42: (b7) r8 = 0
43: (7b) *(u64 *)(r10 -128) = r8
44: (b7) r5 = 0
45: (7b) *(u64 *)(r10 -168) = r5
46: (b7) r5 = 0
47: (7b) *(u64 *)(r10 -176) = r5
48: (b7) r8 = 0
49: (7b) *(u64 *)(r10 -144) = r8
50: (b7) r5 = 0
51: (7b) *(u64 *)(r10 -200) = r5
52: (b7) r5 = 0
53: (7b) *(u64 *)(r10 -192) = r5
54: (b7) r5 = 0
55: (7b) *(u64 *)(r10 -160) = r5
56: (b7) r5 = 0
57: (7b) *(u64 *)(r10 -48) = r5
58: (b7) r8 = 0
59: (7b) *(u64 *)(r10 -184) = r8
60: (b7) r8 = 0
61: (7b) *(u64 *)(r10 -216) = r8
62: (b7) r8 = 0
63: (7b) *(u64 *)(r10 -208) = r8
64: (b7) r8 = 0
65: (55) if r1 != 0x800 goto pc+111
R0=imm0,min_value=0,max_value=0 R1=inv,min_value=2048,max_value=2048 R2=imm14,min_value=14,max_value=14 R3=pkt(id=0,off=0,r=14) R4=pkt_end R5=imm0,min_value=0,max_value=0 R6=ctx R7=imm0,min_value=0,max_value=0 R8=imm0,min_value=0,max_value=0 R9=imm0,min_value=0,max_value=0 R10=fp
66: (b7) r0 = 0
67: (bf) r2 = r3
68: (07) r2 += 34
69: (2d) if r2 > r4 goto pc+233
R0=imm0,min_value=0,max_value=0 R1=inv,min_value=2048,max_value=2048 R2=pkt(id=0,off=34,r=34) R3=pkt(id=0,off=0,r=34) R4=pkt_end R5=imm0,min_value=0,max_value=0 R6=ctx R7=imm0,min_value=0,max_value=0 R8=imm0,min_value=0,max_value=0 R9=imm0,min_value=0,max_value=0 R10=fp
70: (b7) r2 = 1
71: (7b) *(u64 *)(r10 -56) = r2
72: (b7) r2 = 0
73: (7b) *(u64 *)(r10 -24) = r2
74: (71) r2 = *(u8 *)(r3 +22)
75: (7b) *(u64 *)(r10 -32) = r2
76: (71) r5 = *(u8 *)(r3 +15)
77: (7b) *(u64 *)(r10 -144) = r5
78: (61) r7 = *(u32 *)(r3 +30)
79: (bf) r8 = r7
80: (dc) (u32) r8 endian (u32) r0
81: (7b) *(u64 *)(r10 -88) = r8
82: (bf) r8 = r7
83: (dc) (u32) r8 endian (u32) r0
84: (7b) *(u64 *)(r10 -96) = r8
85: (61) r5 = *(u32 *)(r3 +26)
86: (bf) r8 = r5
87: (dc) (u32) r8 endian (u32) r0
88: (7b) *(u64 *)(r10 -112) = r8
89: (bf) r8 = r5
90: (dc) (u32) r8 endian (u32) r0
91: (7b) *(u64 *)(r10 -120) = r8
92: (69) r9 = *(u16 *)(r3 +24)
93: (bf) r8 = r9
94: (dc) (u32) r8 endian (u32) r0
95: (7b) *(u64 *)(r10 -128) = r8
96: (69) r0 = *(u16 *)(r3 +20)
97: (bf) r2 = r0
98: (57) r2 &= 31
99: (7b) *(u64 *)(r10 -48) = r2
100: (77) r0 >>= 8
101: (7b) *(u64 *)(r10 -160) = r0
102: (71) r0 = *(u8 *)(r3 +20)
103: (77) r0 >>= 5
104: (7b) *(u64 *)(r10 -168) = r0
105: (bf) r2 = r1
106: (69) r1 = *(u16 *)(r3 +18)
107: (bf) r0 = r1
108: (dc) (u32) r0 endian (u32) r0
109: (7b) *(u64 *)(r10 -184) = r0
110: (69) r0 = *(u16 *)(r3 +16)
111: (7b) *(u64 *)(r10 -224) = r0
112: (dc) (u32) r0 endian (u32) r0
113: (7b) *(u64 *)(r10 -208) = r0
114: (71) r8 = *(u8 *)(r3 +14)
115: (bf) r0 = r8
116: (57) r0 &= 15
117: (7b) *(u64 *)(r10 -200) = r0
118: (77) r8 >>= 4
119: (7b) *(u64 *)(r10 -192) = r8
120: (bf) r8 = r1
121: (bf) r1 = r2
122: (b7) r2 = 34
123: (dc) (u32) r7 endian (u32) r0
124: (bf) r0 = r7
125: (77) r0 >>= 56
126: (7b) *(u64 *)(r10 -136) = r0
127: (77) r7 >>= 40
128: (dc) (u32) r5 endian (u32) r0
129: (bf) r0 = r5
130: (77) r0 >>= 56
131: (7b) *(u64 *)(r10 -152) = r0
132: (77) r5 >>= 40
133: (7b) *(u64 *)(r10 -104) = r5
134: (dc) (u32) r9 endian (u32) r0
135: (77) r9 >>= 56
136: (7b) *(u64 *)(r10 -176) = r9
137: (dc) (u32) r8 endian (u32) r0
138: (77) r8 >>= 56
139: (7b) *(u64 *)(r10 -216) = r8
140: (79) r8 = *(u64 *)(r10 -224)
141: (dc) (u32) r8 endian (u32) r0
142: (77) r8 >>= 56
143: (71) r5 = *(u8 *)(r3 +23)
144: (7b) *(u64 *)(r10 -64) = r5
145: (b7) r5 = 0
146: (7b) *(u64 *)(r10 -72) = r5
147: (79) r5 = *(u64 *)(r10 -48)
148: (b7) r0 = 0
149: (7b) *(u64 *)(r10 -40) = r0
150: (b7) r9 = 0
151: (b7) r0 = 0
152: (7b) *(u64 *)(r10 -80) = r0
153: (b7) r0 = 0
154: (79) r5 = *(u64 *)(r10 -64)
155: (55) if r5 != 0x1 goto pc+21
R0=imm0,min_value=0,max_value=0 R1=inv,min_value=2048,max_value=2048 R2=imm34,min_value=34,max_value=34 R3=pkt(id=0,off=0,r=34) R4=pkt_end R5=inv,min_value=1,max_value=1 R6=ctx R7=inv40 R8=inv56 R9=imm0,min_value=0,max_value=0 R10=fp
156: (7b) *(u64 *)(r10 -232) = r7
157: (b7) r0 = 0
158: (bf) r2 = r3
159: (07) r2 += 38
160: (2d) if r2 > r4 goto pc+142
R0=imm0,min_value=0,max_value=0 R1=inv,min_value=2048,max_value=2048 R2=pkt(id=0,off=38,r=38) R3=pkt(id=0,off=0,r=38) R4=pkt_end R5=inv,min_value=1,max_value=1 R6=ctx R7=inv40 R8=inv56 R9=imm0,min_value=0,max_value=0 R10=fp
161: (b7) r2 = 38
162: (b7) r4 = 1
163: (7b) *(u64 *)(r10 -40) = r4
164: (71) r9 = *(u8 *)(r3 +35)
165: (71) r4 = *(u8 *)(r3 +34)
166: (7b) *(u64 *)(r10 -80) = r4
167: (69) r3 = *(u16 *)(r3 +36)
168: (7b) *(u64 *)(r10 -24) = r3
169: (77) r3 >>= 8
170: (7b) *(u64 *)(r10 -72) = r3
171: (b7) r3 = 1
172: (7b) *(u64 *)(r10 -56) = r3
173: (b7) r3 = 1
174: (7b) *(u64 *)(r10 -64) = r3
175: (79) r7 = *(u64 *)(r10 -232)
176: (b7) r0 = 0
177: (7b) *(u64 *)(r10 -224) = r8
178: (7b) *(u64 *)(r10 -240) = r9
179: (b7) r4 = 160
180: (79) r8 = *(u64 *)(r10 -56)
181: (5d) if r8 != r0 goto pc+1
R0=imm0,min_value=0,max_value=0 R1=inv,min_value=2048,max_value=2048 R2=imm38,min_value=38,max_value=38 R3=imm1,min_value=1,max_value=1 R4=imm160,min_value=160,max_value=160 R5=inv,min_value=1,max_value=1 R6=ctx R7=inv R8=inv,min_value=0,max_value=0 R9=inv56 R10=fp
182: (b7) r4 = 0
183: (79) r9 = *(u64 *)(r10 -48)
184: (79) r3 = *(u64 *)(r10 -32)
185: (7b) *(u64 *)(r10 -32) = r3
186: (79) r3 = *(u64 *)(r10 -24)
187: (7b) *(u64 *)(r10 -24) = r3
188: (bf) r3 = r4
189: (07) r3 += 32
190: (79) r5 = *(u64 *)(r10 -40)
191: (5d) if r5 != r0 goto pc+1
R0=imm0,min_value=0,max_value=0 R1=inv,min_value=2048,max_value=2048 R2=imm38,min_value=38,max_value=38 R3=imm32,min_value=32,max_value=32 R4=imm0,min_value=0,max_value=0 R5=inv,min_value=0,max_value=0 R6=ctx R7=inv R8=inv,min_value=0,max_value=0 R9=inv R10=fp
192: (bf) r3 = r4
193: (7b) *(u64 *)(r10 -232) = r7
194: (b7) r4 = 1
195: (b7) r5 = 2048
196: (5d) if r1 != r5 goto pc+1
R0=imm0,min_value=0,max_value=0 R1=inv,min_value=2048,max_value=2048 R2=imm38,min_value=38,max_value=38 R3=imm0,min_value=0,max_value=0 R4=imm1,min_value=1,max_value=1 R5=imm2048,min_value=2048,max_value=2048 R6=ctx R7=inv R8=inv,min_value=0,max_value=0 R9=inv R10=fp
197: (b7) r4 = 0
198: (b7) r7 = 0
199: (63) *(u32 *)(r10 -12) = r0
200: (73) *(u8 *)(r10 -16) = r4
201: (1f) r2 -= r3
202: (bf) r1 = r6
203: (85) call bpf_xdp_adjust_head#44
204: (bf) r3 = r10
205: (07) r3 += -12
206: (61) r2 = *(u32 *)(r6 +4)
207: (61) r1 = *(u32 *)(r6 +0)
208: (15) if r8 == 0x0 goto pc+51
R0=inv,min_value=0,max_value=0 R1=pkt(id=0,off=0,r=0) R2=pkt_end R3=fp-12 R6=ctx R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
209: (bf) r4 = r1
210: (07) r4 += 20
211: (2d) if r4 > r2 goto pc+80
R0=inv,min_value=0,max_value=0 R1=pkt(id=0,off=0,r=20) R2=pkt_end R3=fp-12 R4=pkt(id=0,off=20,r=20) R6=ctx R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
212: (79) r4 = *(u64 *)(r10 -192)
213: (67) r4 <<= 4
214: (79) r5 = *(u64 *)(r10 -200)
215: (4f) r4 |= r5
216: (73) *(u8 *)(r1 +0) = r4
217: (79) r4 = *(u64 *)(r10 -144)
218: (73) *(u8 *)(r1 +1) = r4
219: (79) r4 = *(u64 *)(r10 -224)
220: (73) *(u8 *)(r1 +2) = r4
221: (79) r4 = *(u64 *)(r10 -208)
222: (73) *(u8 *)(r1 +3) = r4
223: (79) r4 = *(u64 *)(r10 -216)
224: (73) *(u8 *)(r1 +4) = r4
225: (79) r4 = *(u64 *)(r10 -184)
226: (73) *(u8 *)(r1 +5) = r4
227: (79) r5 = *(u64 *)(r10 -168)
228: (67) r5 <<= 5
229: (79) r4 = *(u64 *)(r10 -160)
230: (77) r4 >>= 2
231: (57) r4 &= 7
232: (4f) r4 |= r5
233: (73) *(u8 *)(r1 +6) = r4
234: (73) *(u8 *)(r1 +7) = r9
235: (79) r4 = *(u64 *)(r10 -32)
236: (73) *(u8 *)(r1 +8) = r4
237: (79) r4 = *(u64 *)(r10 -64)
238: (73) *(u8 *)(r1 +9) = r4
239: (79) r4 = *(u64 *)(r10 -176)
240: (73) *(u8 *)(r1 +10) = r4
241: (79) r4 = *(u64 *)(r10 -128)
242: (73) *(u8 *)(r1 +11) = r4
243: (79) r4 = *(u64 *)(r10 -152)
244: (73) *(u8 *)(r1 +12) = r4
245: (79) r4 = *(u64 *)(r10 -112)
246: (73) *(u8 *)(r1 +13) = r4
247: (79) r4 = *(u64 *)(r10 -104)
248: (73) *(u8 *)(r1 +14) = r4
249: (79) r4 = *(u64 *)(r10 -120)
250: (73) *(u8 *)(r1 +15) = r4
251: (79) r4 = *(u64 *)(r10 -136)
252: (73) *(u8 *)(r1 +16) = r4
253: (79) r4 = *(u64 *)(r10 -88)
254: (73) *(u8 *)(r1 +17) = r4
255: (79) r4 = *(u64 *)(r10 -232)
256: (73) *(u8 *)(r1 +18) = r4
257: (79) r4 = *(u64 *)(r10 -96)
258: (73) *(u8 *)(r1 +19) = r4
259: (b7) r7 = 160
260: (bf) r0 = r7
261: (79) r4 = *(u64 *)(r10 -40)
262: (15) if r4 == 0x0 goto pc+29
R0=imm160,min_value=160,max_value=160 R1=pkt(id=0,off=0,r=20) R2=pkt_end R3=fp-12 R4=inv R5=inv R6=ctx R7=imm160,min_value=160,max_value=160 R8=inv,min_value=0,max_value=0 R9=inv56 R10=fp
263: (bf) r4 = r0
264: (07) r4 += 32
265: (77) r4 >>= 3
266: (bf) r5 = r1
267: (0f) r5 += r4
268: (2d) if r5 > r2 goto pc+23
R0=imm160,min_value=160,max_value=160 R1=pkt(id=0,off=0,r=24) R2=pkt_end R3=fp-12 R4=imm24,min_value=24,max_value=24 R5=pkt(id=0,off=24,r=24) R6=ctx R7=imm160,min_value=160,max_value=160 R8=inv,min_value=0,max_value=0 R9=inv56 R10=fp
269: (bf) r2 = r0
270: (77) r2 >>= 3
271: (bf) r4 = r1
272: (0f) r4 += r2
273: (79) r2 = *(u64 *)(r10 -80)
274: (73) *(u8 *)(r4 +0) = r2
275: (47) r0 |= 8
276: (bf) r2 = r0
277: (77) r2 >>= 3
278: (bf) r4 = r1
279: (0f) r4 += r2
280: (79) r2 = *(u64 *)(r10 -240)
281: (73) *(u8 *)(r4 +0) = r2
282: (07) r0 += 8
283: (77) r0 >>= 3
284: (bf) r2 = r1
285: (0f) r2 += r0
286: (79) r4 = *(u64 *)(r10 -24)
287: (73) *(u8 *)(r2 +0) = r4
288: (47) r0 |= 1
289: (0f) r1 += r0
290: (79) r2 = *(u64 *)(r10 -72)
291: (73) *(u8 *)(r1 +0) = r2
292: (bf) r2 = r10
293: (07) r2 += -4
294: (b7) r6 = 0
295: (18) r1 = 0xa73d3a80
297: (b7) r4 = 0
298: (85) call bpf_map_update_elem#2
299: (b7) r0 = 2
300: (71) r1 = *(u8 *)(r10 -16)
301: (1d) if r1 == r6 goto pc+1
R0=imm2,min_value=2,max_value=2 R1=inv56 R6=imm0,min_value=0,max_value=0 R7=imm160,min_value=160,max_value=160 R8=inv,min_value=0,max_value=0 R9=inv56 R10=fp
302: (b7) r0 = 1
303: (95) exit
from 301 to 303: R0=imm2,min_value=2,max_value=2 R1=inv56,min_value=0,max_value=0 R6=imm0,min_value=0,max_value=0 R7=imm160,min_value=160,max_value=160 R8=inv,min_value=0,max_value=0 R9=inv56 R10=fp
303: (95) exit
from 268 to 292: R0=imm160,min_value=160,max_value=160 R1=pkt(id=0,off=0,r=20) R2=pkt_end R3=fp-12 R4=imm24,min_value=24,max_value=24 R5=pkt(id=0,off=24,r=20) R6=ctx R7=imm160,min_value=160,max_value=160 R8=inv,min_value=0,max_value=0 R9=inv56 R10=fp
292: (bf) r2 = r10
293: (07) r2 += -4
294: (b7) r6 = 0
295: (18) r1 = 0xa73d3a80
297: (b7) r4 = 0
298: (85) call bpf_map_update_elem#2
299: safe
from 262 to 292: R0=imm160,min_value=160,max_value=160 R1=pkt(id=0,off=0,r=20) R2=pkt_end R3=fp-12 R4=inv,min_value=0,max_value=0 R5=inv R6=ctx R7=imm160,min_value=160,max_value=160 R8=inv,min_value=0,max_value=0 R9=inv56 R10=fp
292: (bf) r2 = r10
293: (07) r2 += -4
294: (b7) r6 = 0
295: (18) r1 = 0xa73d3a80
297: (b7) r4 = 0
298: (85) call bpf_map_update_elem#2
299: safe
from 211 to 292: R0=inv,min_value=0,max_value=0 R1=pkt(id=0,off=0,r=0) R2=pkt_end R3=fp-12 R4=pkt(id=0,off=20,r=0) R6=ctx R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
292: (bf) r2 = r10
293: (07) r2 += -4
294: (b7) r6 = 0
295: (18) r1 = 0xa73d3a80
297: (b7) r4 = 0
298: (85) call bpf_map_update_elem#2
299: (b7) r0 = 2
300: (71) r1 = *(u8 *)(r10 -16)
301: (1d) if r1 == r6 goto pc+1
R0=imm2,min_value=2,max_value=2 R1=inv56 R6=imm0,min_value=0,max_value=0 R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
302: (b7) r0 = 1
303: (95) exit
from 301 to 303: R0=imm2,min_value=2,max_value=2 R1=inv56,min_value=0,max_value=0 R6=imm0,min_value=0,max_value=0 R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
303: (95) exit
from 208 to 260: R0=inv,min_value=0,max_value=0 R1=pkt(id=0,off=0,r=0) R2=pkt_end R3=fp-12 R6=ctx R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
260: (bf) r0 = r7
261: (79) r4 = *(u64 *)(r10 -40)
262: (15) if r4 == 0x0 goto pc+29
R0=imm0,min_value=0,max_value=0 R1=pkt(id=0,off=0,r=0) R2=pkt_end R3=fp-12 R4=inv R6=ctx R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
263: (bf) r4 = r0
264: (07) r4 += 32
265: (77) r4 >>= 3
266: (bf) r5 = r1
267: (0f) r5 += r4
268: (2d) if r5 > r2 goto pc+23
R0=imm0,min_value=0,max_value=0 R1=pkt(id=0,off=0,r=4) R2=pkt_end R3=fp-12 R4=imm4,min_value=4,max_value=4 R5=pkt(id=0,off=4,r=4) R6=ctx R7=imm0,min_value=0,max_value=0 R8=inv,min_value=0,max_value=0 R9=inv R10=fp
269: (bf) r2 = r0
270: (77) r2 >>= 3
271: (bf) r4 = r1
272: (0f) r4 += r2
addition of negative constant to packet pointer is not allowed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment