Skip to content

Commit d3d9844

Browse files
iii-iKernel Patches Daemon
authored andcommitted
s390/bpf: Fully order atomic "add", "and", "or" and "xor"
BPF_ATOMIC_OP() macro documentation states that "BPF_ADD | BPF_FETCH" should be the same as atomic_fetch_add(), which is currently not the case on s390x: the synchronization instruction "bcr 14,0" is missing. This should not be a problem in practice, because s390x is allowed to reorder only stores with subsequent fetches from different addresses. Still, just to be on the safe side, and also for consistency, emit the synchronization instruction. Note that it's not required to do this for BPF_XCHG and BPF_CMPXCHG, because COMPARE AND SWAP performs serialization itself. Fixes: ba3b86b ("s390/bpf: Implement new atomic ops") Reported-by: Puranjay Mohan <[email protected]> Closes: https://lore.kernel.org/bpf/[email protected]/ Signed-off-by: Ilya Leoshkevich <[email protected]>
1 parent e62ff75 commit d3d9844

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

arch/s390/net/bpf_jit_comp.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,6 +1427,8 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp,
14271427
EMIT6_DISP_LH(0xeb000000, is32 ? (op32) : (op64), \
14281428
(insn->imm & BPF_FETCH) ? src_reg : REG_W0, \
14291429
src_reg, dst_reg, off); \
1430+
/* bcr 14,0 - see atomic_fetch_{add,and,or,xor}() */ \
1431+
_EMIT2(0x07e0); \
14301432
if (is32 && (insn->imm & BPF_FETCH)) \
14311433
EMIT_ZERO(src_reg); \
14321434
} while (0)

0 commit comments

Comments
 (0)