• Martin KaFai Lau's avatar
    bpf: verbose log bpf_line_info in verifier · d9762e84
    Martin KaFai Lau authored
    This patch adds bpf_line_info during the verifier's verbose.
    It can give error context for debug purpose.
    
    ~~~~~~~~~~
    Here is the verbose log for backedge:
    	while (a) {
    		a += bpf_get_smp_processor_id();
    		bpf_trace_printk(fmt, sizeof(fmt), a);
    	}
    
    ~> bpftool prog load ./test_loop.o /sys/fs/bpf/test_loop type tracepoint
    13: while (a) {
    3: a += bpf_get_smp_processor_id();
    back-edge from insn 13 to 3
    
    ~~~~~~~~~~
    Here is the verbose log for invalid pkt access:
    Modification to test_xdp_noinline.c:
    
    	data = (void *)(long)xdp->data;
    	data_end = (void *)(long)xdp->data_end;
    /*
    	if (data + 4 > data_end)
    		return XDP_DROP;
    */
    	*(u32 *)data = dst->dst;
    
    ~> bpftool prog load ./test_xdp_noinline.o /sys/fs/bpf/test_xdp_noinline type xdp
    ; data = (void *)(long)xdp->data;
    224: (79) r2 = *(u64 *)(r10 -112)
    225: (61) r2 = *(u32 *)(r2 +0)
    ; *(u32 *)data = dst->dst;
    226: (63) *(u32 *)(r2 +0) = r1
    invalid access to packet, off=0 size=4, R2(id=0,off=0,r=0)
    R2 offset is outside of the packet
    Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Acked-by: default avatarYonghong Song <yhs@fb.com>
    Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    d9762e84
verifier.c 198 KB