Blob Blame History Raw
From: Martin Schwidefsky <schwidefsky@de.ibm.com>
Subject: s390: use expoline thunks for all branches generated by the BPF JIT
References: bsc#1103421
Patch-mainline: never, code removed

Commit e1cf4befa297b149149f633eff746593e400c030 (bpf, s390x: remove
ld_abs/ld_ind) removed the code that generated the indirect branch
"basr %b5,%w1" from the BPF JIT. Older versions of the BPF which
still have support for LD_ABS/LD_IND need a patch to add the
execute trampoline for this branch instruction.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Acked-by: Petr Tesarik <ptesarik@suse.cz>
---
 arch/s390/net/bpf_jit_comp.c |    9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

--- a/arch/s390/net/bpf_jit_comp.c
+++ b/arch/s390/net/bpf_jit_comp.c
@@ -1303,8 +1303,13 @@ call_fn:
 			/* lg %skb_data,data_off(%b6) */
 			EMIT6_DISP_LH(0xe3000000, 0x0004, REG_SKB_DATA, REG_0,
 				      BPF_REG_6, offsetof(struct sk_buff, data));
-		/* basr %b5,%w1 (%b5 is call saved) */
-		EMIT2(0x0d00, BPF_REG_5, REG_W1);
+		if (IS_ENABLED(CC_USING_EXPOLINE) && !nospec_disable) {
+			/* brasl %r5,__s390_indirect_jump_r1 */
+			EMIT6_PCREL_RILB(0xc0050000, BPF_REG_5, jit->r1_thunk_ip);
+		} else {
+			/* basr %b5,%w1 (%b5 is call saved) */
+			EMIT2(0x0d00, BPF_REG_5, REG_W1);
+		}
 
 		/*
 		 * Note: For fast access we jump directly after the