From d1a358bd609ab6fb48edf178d70f77c40b7d6bc8 Mon Sep 17 00:00:00 2001 From: weiyanhua Date: Thu, 25 Jun 2020 16:12:27 +0800 Subject: [PATCH] fix bug: offset is outside of the packet. 1. xdp_loader: ./xdp_loader --dev lo -S --progsec xdp_packet_parser verb 2. Problem Description: libbpf: load bpf program failed: Permission denied libbpf: -- BEGIN DUMP LOG --- libbpf: 0: (bf) r6 = r1 1: (b7) r1 = 2 2: (61) r2 = *(u32 *)(r6 +0) 3: (07) r2 += 12 4: (61) r3 = *(u32 *)(r6 +4) 5: (2d) if r2 > r3 goto pc+7 R1=inv2 R2=pkt(id=0,off=12,r=12,imm=0) R3=pkt_end(id=0,off=0,imm=0) R6=ctx(id=0,off=0,imm=0) R10=fp0,call_-1 6: (71) r1 = *(u8 *)(r2 +0) invalid access to packet, off=12 size=1, R2(id=0,off=12,r=12) R2 offset is outside of the packet libbpf: -- END LOG -- libbpf: failed to load program 'xdp_packet_parser' libbpf: failed to load object 'xdp_prog_kern.o' ERR: loading BPF-OBJ file(xdp_prog_kern.o) (-22): Invalid argument Signed-off-by: weiyanhua --- packet01-parsing/xdp_prog_kern.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packet01-parsing/xdp_prog_kern.c b/packet01-parsing/xdp_prog_kern.c index 14a221c9..4500bca6 100644 --- a/packet01-parsing/xdp_prog_kern.c +++ b/packet01-parsing/xdp_prog_kern.c @@ -36,7 +36,7 @@ static __always_inline int parse_ethhdr(struct hdr_cursor *nh, /* Byte-count bounds check; check if current pointer + size of header * is after data_end. */ - if (nh->pos + 1 > data_end) + if (nh->pos + hdrsize > data_end) return -1; nh->pos += hdrsize;