Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

bpf, mips: Implement DADDI workarounds for JIT

For DADDI errata we just workaround by disable immediate operation
for BPF_ADD / BPF_SUB to avoid generation of DADDIU.

All other use cases in JIT won't cause overflow thus they are all safe.

Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Acked-by: Johan Almbladh <johan.almbladh@anyfinetworks.com>
Link: https://lore.kernel.org/bpf/20230228113305.83751-2-jiaxun.yang@flygoat.com

authored by

Jiaxun Yang and committed by
Daniel Borkmann
bbefef2f c8ee37bd

+4 -1
-1
arch/mips/Kconfig
··· 64 64 select HAVE_DMA_CONTIGUOUS 65 65 select HAVE_DYNAMIC_FTRACE 66 66 select HAVE_EBPF_JIT if !CPU_MICROMIPS && \ 67 - !CPU_DADDI_WORKAROUNDS && \ 68 67 !CPU_R4000_WORKAROUNDS && \ 69 68 !CPU_R4400_WORKAROUNDS 70 69 select HAVE_EXIT_THREAD
+4
arch/mips/net/bpf_jit_comp.c
··· 218 218 /* All legal eBPF values are valid */ 219 219 return true; 220 220 case BPF_ADD: 221 + if (IS_ENABLED(CONFIG_CPU_DADDI_WORKAROUNDS)) 222 + return false; 221 223 /* imm must be 16 bits */ 222 224 return imm >= -0x8000 && imm <= 0x7fff; 223 225 case BPF_SUB: 226 + if (IS_ENABLED(CONFIG_CPU_DADDI_WORKAROUNDS)) 227 + return false; 224 228 /* -imm must be 16 bits */ 225 229 return imm >= -0x7fff && imm <= 0x8000; 226 230 case BPF_AND: