lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <CAH3MdRWg57Aw666ahVGb04UcSTqxrz1Wd33JDLyCqY4fh=xstA@mail.gmail.com> Date: Sat, 27 May 2017 13:52:27 -0700 From: Y Song <ys114321@...il.com> To: Adel Fuchs <adelfuchs@...il.com> Cc: netdev@...r.kernel.org Subject: Re: running an eBPF program On Sat, May 27, 2017 at 1:23 PM, Y Song <ys114321@...il.com> wrote: > > From verifier error message: > ====== > 0: (bf) r6 = r1 > > 1: (18) r9 = 0xffe0000e > > 3: (69) r0 = *(u16 *)(r6 +16) > > invalid bpf_context access off=16 size=2 > ====== > > The offset 16 of struct __sk_buff is hash. > What instruction #3 tries to do is to access 2 bytes of the hash value > instead of full 4 bytes. > This is explicitly not allowed in verifier due to endianness issue. I can reproduce the issue now. My previous statement saying to access "hash" field is not correct. It is accessing the protocol field. static __inline__ bool flow_dissector(struct __sk_buff *skb, struct flow_keys *flow) { int poff, nh_off = BPF_LL_OFF + ETH_HLEN; __be16 proto = skb->protocol; __u8 ip_proto; The plan so far is to see whether we can fix the issue in LLVM side. Yonghong > > > Look at iproute2 example code, it looks like the following may be responsible: > > bpf_tailcall.c:#define MAX_JMP_SIZE 2 > bpf_tailcall.c: tail_call(skb, &jmp_tc, skb->hash & (MAX_JMP_SIZE - 1)); > > I am thinking of implementing something in LLVM to prevent > optimization from LD4=>LD2/DL1 for context access like this. > > > On Fri, May 26, 2017 at 4:00 AM, Adel Fuchs <adelfuchs@...il.com> wrote: > > Hi > > > > I'm trying to run this eBPF program: > > > > https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git/tree/examples/bpf > > > > > > and I get this error: > > > > > > :~/iproute2/examples/bpf$sudo tc filter add dev enx00e11100329b parent > > 1: bpf obj bpf.o exp /tmp/bpf-uds flowid 1:1 action bpf obj bpf.o sec > > action-mark action bpf obj bpf.o sec action-rand ok > > > > [sudo] password for adel: > > > > > > > > Prog section 'classifier' rejected: Permission denied (13)! > > > > - Type: 3 > > > > - Instructions: 218 (0 over limit) > > > > - License: GPL > > > > > > > > Verifier analysis: > > > > > > > > 0: (bf) r6 = r1 > > > > 1: (18) r9 = 0xffe0000e > > > > 3: (69) r0 = *(u16 *)(r6 +16) > > > > invalid bpf_context access off=16 size=2 > > > > > > > > Error fetching program/map! > > > > Failed to retrieve (e)BPF data! > > > > > > Any suggestions? > > > > Thanks, > > > > Adel
Powered by blists - more mailing lists