Re: R11 is invalid with LLVM 12 and later

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 8/9/21 8:12 AM, Paul Chaignon wrote:
Hello,

While trying to use LLVM 12.0.0 in Cilium, we've noticed that it can
generate invalid BPF bytecode:

     $ clang --version
     Ubuntu clang version 12.0.0-++20210409092622+fa0971b87fb2-1~exp1~20210409193326.73
     Target: x86_64-pc-linux-gnu
     Thread model: posix
     InstalledDir: /usr/bin
     $ make -C bpf -j6 KERNEL=419
     $ llvm-objdump -D -section=2/20 bpf/bpf_lxc.o | grep -i r11
          171:   7b ba 18 ff 00 00 00 00 *(u64 *)(r10 - 232) = r11
          436:   79 ab 18 ff 00 00 00 00 r11 = *(u64 *)(r10 - 232)
          484:   bf 8b 00 00 00 00 00 00 r11 = r8

That bytecode is of course rejected by the verifier:

     171: (7b) *(u64 *)(r10 -232) = r11
     R11 is invalid

Thanks for reporting. I can reproduce the problem and will take a look soon.


LLVM 12.0.1 and latest LLVM sources (e.g., commit 2b4a1d4b from today)
have the same issue. We've bisected it to LLVM commit 552c6c23
("PR44406: Follow behavior of array bound constant folding in more
recent versions of GCC."), but that could just be the commit where
the regression was exposed in Cilium's case.

--
Paul




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux