I'm getting about 100 verifier failures on sparc64. The vast majority of them seem to be due to misaligned packet accesses. Here is a sample of some of the failures.
#32/p invalid fp arithmetic FAIL Unexpected error message! 0: (b7) r0 = 0 1: (bf) r1 = r10 2: (17) r1 -= 8 3: (7b) *(u64 *)(r1 +0) = r0 misaligned access off (0x0; 0xffffffffffffffff)+0+0 size 8 ... #160/p raw_stack: skb_load_bytes, spilled regs corruption FAIL Unexpected error message! 0: (b7) r2 = 4 1: (bf) r6 = r10 2: (07) r6 += -8 3: (7b) *(u64 *)(r6 +0) = r1 4: (bf) r3 = r6 5: (b7) r4 = 8 6: (85) call bpf_skb_load_bytes#26 7: (79) r0 = *(u64 *)(r6 +0) 8: (61) r0 = *(u32 *)(r0 +8) misaligned access off (0x0; 0xffffffffffffffff)+0+8 size 4 #161/p raw_stack: skb_load_bytes, spilled regs corruption 2 FAIL Unexpected error message! 0: (b7) r2 = 4 1: (bf) r6 = r10 2: (07) r6 += -16 3: (7b) *(u64 *)(r6 -8) = r1 4: (7b) *(u64 *)(r6 +0) = r1 5: (7b) *(u64 *)(r6 +8) = r1 6: (bf) r3 = r6 7: (b7) r4 = 8 8: (85) call bpf_skb_load_bytes#26 9: (79) r0 = *(u64 *)(r6 -8) 10: (79) r2 = *(u64 *)(r6 +8) 11: (79) r3 = *(u64 *)(r6 +0) 12: (61) r0 = *(u32 *)(r0 +8) 13: (61) r2 = *(u32 *)(r2 +32) 14: (0f) r0 += r2 15: (61) r3 = *(u32 *)(r3 +4) misaligned access off (0x0; 0xffffffffffffffff)+0+4 size 4 ... #184/p direct packet access: test15 (spill with xadd) FAIL Unexpected error message! 0: (61) r2 = *(u32 *)(r1 +76) 1: (61) r3 = *(u32 *)(r1 +80) 2: (bf) r0 = r2 3: (07) r0 += 8 4: (2d) if r0 > r3 goto pc+8 R0=pkt(id=0,off=8,r=8,imm=0) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=8,imm=0) R3=pkt_end(id=0,off=0,imm=0) R10=fp0,call_-1 5: (b7) r5 = 4096 6: (bf) r4 = r10 7: (07) r4 += -8 8: (7b) *(u64 *)(r4 +0) = r2 9: (db) lock *(u64 *)(r4 +0) += r5 10: (79) r2 = *(u64 *)(r4 +0) 11: (63) *(u32 *)(r2 +0) = r5 misaligned access off (0x0; 0xffffffffffffffff)+0+0 size 4 ... #189/p direct packet access: test20 (x += pkt_ptr, 1) FAIL Failed to load prog 'Permission denied'! 0: (61) r2 = *(u32 *)(r1 +76) 1: (61) r3 = *(u32 *)(r1 +80) 2: (b7) r0 = -1 3: (7b) *(u64 *)(r10 -8) = r0 4: (79) r0 = *(u64 *)(r10 -8) 5: (57) r0 &= 32767 6: (bf) r4 = r0 7: (0f) r4 += r2 8: (bf) r5 = r4 9: (07) r4 += 32766 10: (2d) if r4 > r3 goto pc+1 R0=inv(id=0,umax_value=32767,var_off=(0x0; 0x7fff)) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=0,imm=0) R3=pkt_end(id=0,off=0,imm=0) R4=pkt(id=1,off=32766,r=32766,umax_value=32767,var_off=(0x0; 0x7fff)) R5=pkt(id=1,off=0,r=32766,umax_value=32767,var_off=(0x0; 0x7fff)) R10=fp0,call_-1 11: (7b) *(u64 *)(r5 +0) = r4 misaligned packet access off 2+(0x0; 0x7fff)+0+0 size 8 #190/p direct packet access: test21 (x += pkt_ptr, 2) FAIL Failed to load prog 'Permission denied'! 0: (61) r2 = *(u32 *)(r1 +76) 1: (61) r3 = *(u32 *)(r1 +80) 2: (bf) r0 = r2 3: (07) r0 += 8 4: (2d) if r0 > r3 goto pc+9 R0=pkt(id=0,off=8,r=8,imm=0) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=8,imm=0) R3=pkt_end(id=0,off=0,imm=0) R10=fp0,call_-1 5: (b7) r4 = -1 6: (7b) *(u64 *)(r10 -8) = r4 7: (79) r4 = *(u64 *)(r10 -8) 8: (57) r4 &= 32767 9: (0f) r4 += r2 10: (bf) r5 = r4 11: (07) r4 += 32766 12: (2d) if r4 > r3 goto pc+1 R0=pkt(id=0,off=8,r=8,imm=0) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=8,imm=0) R3=pkt_end(id=0,off=0,imm=0) R4=pkt(id=1,off=32766,r=32766,umax_value=32767,var_off=(0x0; 0x7fff)) R5=pkt(id=1,off=0,r=32766,umax_value=32767,var_off=(0x0; 0x7fff)) R10=fp0,call_-1 13: (7b) *(u64 *)(r5 +0) = r4 misaligned packet access off 2+(0x0; 0x7fff)+0+0 size 8 #191/p direct packet access: test22 (x += pkt_ptr, 3) FAIL Failed to load prog 'Permission denied'! 0: (61) r2 = *(u32 *)(r1 +76) 1: (61) r3 = *(u32 *)(r1 +80) 2: (bf) r0 = r2 3: (07) r0 += 8 4: (7b) *(u64 *)(r10 -8) = r2 5: (7b) *(u64 *)(r10 -16) = r3 6: (79) r3 = *(u64 *)(r10 -16) 7: (2d) if r0 > r3 goto pc+11 R0=pkt(id=0,off=8,r=8,imm=0) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=8,imm=0) R3=pkt_end(id=0,off=0,imm=0) R10=fp0,call_-1 fp-8=pkt fp-16=pkt_end 8: (79) r2 = *(u64 *)(r10 -8) 9: (b7) r4 = -1 10: (db) lock *(u64 *)(r10 -8) += r4 11: (79) r4 = *(u64 *)(r10 -8) 12: (77) r4 >>= 49 13: (0f) r4 += r2 14: (bf) r0 = r4 15: (07) r0 += 2 16: (2d) if r0 > r3 goto pc+2 R0=pkt(id=1,off=2,r=2,umax_value=32767,var_off=(0x0; 0x7fff)) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=8,imm=0) R3=pkt_end(id=0,off=0,imm=0) R4=pkt(id=1,off=0,r=2,umax_value=32767,var_off=(0x0; 0x7fff)) R10=fp0,call_-1 fp-16=pkt_end 17: (b7) r2 = 1 18: (6b) *(u16 *)(r4 +0) = r2 misaligned packet access off 2+(0x0; 0x7fff)+0+0 size 2 #192/p direct packet access: test23 (x += pkt_ptr, 4) FAIL Unexpected error message! 0: (61) r2 = *(u32 *)(r1 +76) 1: (61) r3 = *(u32 *)(r1 +80) 2: (b7) r0 = -1 3: (7b) *(u64 *)(r10 -8) = r0 4: (79) r0 = *(u64 *)(r10 -8) 5: (57) r0 &= 65535 6: (bf) r4 = r0 7: (b7) r0 = 31 8: (0f) r0 += r4 9: (0f) r0 += r2 10: (bf) r5 = r0 11: (07) r0 += 65534 12: (2d) if r0 > r3 goto pc+1 R0=pkt(id=1,off=65534,r=0,umin_value=31,umax_value=65566,var_off=(0x0; 0x1ffff)) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=0,imm=0) R3=pkt_end(id=0,off=0,imm=0) R4=inv(id=0,umax_value=65535,var_off=(0x0; 0xffff)) R5=pkt(id=1,off=0,r=0,umin_value=31,umax_value=65566,var_off=(0x0; 0x1ffff)) R10=fp0,call_-1 13: (7b) *(u64 *)(r5 +0) = r0 misaligned packet access off 2+(0x0; 0x1ffff)+0+0 size 8 #193/p direct packet access: test24 (x += pkt_ptr, 5) FAIL Failed to load prog 'Permission denied'! 0: (61) r2 = *(u32 *)(r1 +76) 1: (61) r3 = *(u32 *)(r1 +80) 2: (b7) r0 = -1 3: (7b) *(u64 *)(r10 -8) = r0 4: (79) r0 = *(u64 *)(r10 -8) 5: (57) r0 &= 255 6: (bf) r4 = r0 7: (b7) r0 = 64 8: (0f) r0 += r4 9: (0f) r0 += r2 10: (bf) r5 = r0 11: (07) r0 += 32766 12: (2d) if r0 > r3 goto pc+1 R0=pkt(id=1,off=32766,r=32766,umin_value=64,umax_value=319,var_off=(0x0; 0x1ff)) R1=ctx(id=0,off=0,imm=0) R2=pkt(id=0,off=0,r=0,imm=0) R3=pkt_end(id=0,off=0,imm=0) R4=inv(id=0,umax_value=255,var_off=(0x0; 0xff)) R5=pkt(id=1,off=0,r=32766,umin_value=64,umax_value=319,var_off=(0x0; 0x1ff)) R10=fp0,call_-1 13: (7b) *(u64 *)(r5 +0) = r0 misaligned packet access off 2+(0x0; 0x1ff)+0+0 size 8 ... #221/u valid map access into an array with a variable FAIL Unexpected error message! 0: (7a) *(u64 *)(r10 -8) = 0 1: (bf) r2 = r10 2: (07) r2 += -8 3: (18) r1 = 0x0 5: (85) call bpf_map_lookup_elem#1 6: (15) if r0 == 0x0 goto pc+5 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R10=fp0,call_-1 7: (61) r1 = *(u32 *)(r0 +0) R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R10=fp0,call_-1 8: (35) if r1 >= 0xb goto pc+3 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1=inv(id=0,umax_value=10,var_off=(0x0; 0xf)) R10=fp0,call_-1 9: (67) r1 <<= 2 10: (0f) r0 += r1 11: (7a) *(u64 *)(r0 +0) = 4 misaligned value access off (0x0; 0x3c)+0+0 size 8 #221/p valid map access into an array with a variable FAIL Failed to load prog 'Permission denied'! 0: (7a) *(u64 *)(r10 -8) = 0 1: (bf) r2 = r10 2: (07) r2 += -8 3: (18) r1 = 0xfff8003fb5788e00 5: (85) call bpf_map_lookup_elem#1 6: (15) if r0 == 0x0 goto pc+5 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R10=fp0,call_-1 7: (61) r1 = *(u32 *)(r0 +0) R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R10=fp0,call_-1 8: (35) if r1 >= 0xb goto pc+3 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1=inv(id=0,umax_value=10,var_off=(0x0; 0xf)) R10=fp0,call_-1 9: (67) r1 <<= 2 10: (0f) r0 += r1 11: (7a) *(u64 *)(r0 +0) = 4 misaligned value access off (0x0; 0x3c)+0+0 size 8 ... #222/p valid map access into an array with a signed variable FAIL Failed to load prog 'Permission denied'! 0: (7a) *(u64 *)(r10 -8) = 0 1: (bf) r2 = r10 2: (07) r2 += -8 3: (18) r1 = 0xfff8003fb5789200 5: (85) call bpf_map_lookup_elem#1 6: (15) if r0 == 0x0 goto pc+9 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R10=fp0,call_-1 7: (61) r1 = *(u32 *)(r0 +0) R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R10=fp0,call_-1 8: (65) if r1 s> 0xffffffff goto pc+1 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0,call_-1 9: (b4) (u32) r1 = (u32) 0 10: (b4) (u32) r2 = (u32) 11 11: (6d) if r2 s> r1 goto pc+1 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1=inv0 R2=inv11 R10=fp0,call_-1 12: (b4) (u32) r1 = (u32) 0 13: (64) (u32) r1 <<= (u32) 2 14: (0f) r0 += r1 15: (7a) *(u64 *)(r0 +0) = 4 R0_w=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1_w=inv0 R2=inv11 R10=fp0,call_-1 16: (95) exit from 11 to 13: safe from 8 to 10: R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1=inv(id=0,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R10=fp0,call_-1 10: (b4) (u32) r2 = (u32) 11 11: (6d) if r2 s> r1 goto pc+1 R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1=inv(id=0,umin_value=11,umax_value=4294967295,var_off=(0x0; 0xffffffff)) R2=inv11 R10=fp0,call_-1 12: (b4) (u32) r1 = (u32) 0 13: safe from 11 to 13: R0=map_value(id=0,off=0,ks=8,vs=48,imm=0) R1=inv(id=0,umax_value=10,var_off=(0x0; 0xf)) R2=inv11 R10=fp0,call_-1 13: (64) (u32) r1 <<= (u32) 2 14: (0f) r0 += r1 15: (7a) *(u64 *)(r0 +0) = 4 misaligned value access off (0x0; 0x3c)+0+0 size 8 ... Summary: 603 PASSED, 100 FAILED
