diff options
Diffstat (limited to 'arch/s390/net/bpf_jit_comp.c')
| -rw-r--r-- | arch/s390/net/bpf_jit_comp.c | 11 | 
1 files changed, 5 insertions, 6 deletions
| diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c index e81c16838b90..9557d8b516df 100644 --- a/arch/s390/net/bpf_jit_comp.c +++ b/arch/s390/net/bpf_jit_comp.c @@ -55,8 +55,7 @@ struct bpf_jit {  #define SEEN_LITERAL	8	/* code uses literals */  #define SEEN_FUNC	16	/* calls C functions */  #define SEEN_TAIL_CALL	32	/* code uses tail calls */ -#define SEEN_SKB_CHANGE	64	/* code changes skb data */ -#define SEEN_REG_AX	128	/* code uses constant blinding */ +#define SEEN_REG_AX	64	/* code uses constant blinding */  #define SEEN_STACK	(SEEN_FUNC | SEEN_MEM | SEEN_SKB)  /* @@ -448,12 +447,12 @@ static void bpf_jit_prologue(struct bpf_jit *jit, u32 stack_depth)  			EMIT6_DISP_LH(0xe3000000, 0x0024, REG_W1, REG_0,  				      REG_15, 152);  	} -	if (jit->seen & SEEN_SKB) +	if (jit->seen & SEEN_SKB) {  		emit_load_skb_data_hlen(jit); -	if (jit->seen & SEEN_SKB_CHANGE)  		/* stg %b1,ST_OFF_SKBP(%r0,%r15) */  		EMIT6_DISP_LH(0xe3000000, 0x0024, BPF_REG_1, REG_0, REG_15,  			      STK_OFF_SKBP); +	}  }  /* @@ -983,8 +982,8 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i  		EMIT2(0x0d00, REG_14, REG_W1);  		/* lgr %b0,%r2: load return value into %b0 */  		EMIT4(0xb9040000, BPF_REG_0, REG_2); -		if (bpf_helper_changes_pkt_data((void *)func)) { -			jit->seen |= SEEN_SKB_CHANGE; +		if ((jit->seen & SEEN_SKB) && +		    bpf_helper_changes_pkt_data((void *)func)) {  			/* lg %b1,ST_OFF_SKBP(%r15) */  			EMIT6_DISP_LH(0xe3000000, 0x0004, BPF_REG_1, REG_0,  				      REG_15, STK_OFF_SKBP); |