Re: [PATCH] s390: bpf: fix JMP32 code-gen

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

 



Heiko Carstens writes:

> Commit 626a5f66da0d19 ("s390: bpf: implement jitting of JMP32") added
> JMP32 code-gen support for s390. However it triggers the warning below
> due to some unusual gotos in the original s390 bpf jit code.
>
> Add a couple of additional "is_jmp32" initializations to fix this.
> Also fix the wrong opcode for the "llilf" instruction that was
> introduced with the same commit.
>
> arch/s390/net/bpf_jit_comp.c: In function 'bpf_jit_insn':
> arch/s390/net/bpf_jit_comp.c:248:55: warning: 'is_jmp32' may be used uninitialized in this function [-Wmaybe-uninitialized]
>   _EMIT6(op1 | reg(b1, b2) << 16 | (rel & 0xffff), op2 | mask); \
>                                                        ^
> arch/s390/net/bpf_jit_comp.c:1211:8: note: 'is_jmp32' was declared here
>    bool is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
>
> Fixes: 626a5f66da0d19 ("s390: bpf: implement jitting of JMP32")
> Cc: Jiong Wang <jiong.wang@xxxxxxxxxxxxx>
> Cc: Martin Schwidefsky <schwidefsky@xxxxxxxxxx>
> Signed-off-by: Heiko Carstens <heiko.carstens@xxxxxxxxxx>

Thanks for fixing this.

Acked-by: Jiong Wang <jiong.wang@xxxxxxxxxxxxx>

Regards,
Jiong

> ---
>  arch/s390/net/bpf_jit_comp.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
> index ce9defdff62a..51dd0267d014 100644
> --- a/arch/s390/net/bpf_jit_comp.c
> +++ b/arch/s390/net/bpf_jit_comp.c
> @@ -1154,7 +1154,7 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
>  		mask = 0x7000; /* jnz */
>  		if (BPF_CLASS(insn->code) == BPF_JMP32) {
>  			/* llilf %w1,imm (load zero extend imm) */
> -			EMIT6_IMM(0xc0010000, REG_W1, imm);
> +			EMIT6_IMM(0xc00f0000, REG_W1, imm);
>  			/* nr %w1,%dst */
>  			EMIT2(0x1400, REG_W1, dst_reg);
>  		} else {
> @@ -1216,6 +1216,7 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
>  			  REG_W1, dst_reg, src_reg);
>  		goto branch_oc;
>  branch_ks:
> +		is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
>  		/* lgfi %w1,imm (load sign extend imm) */
>  		EMIT6_IMM(0xc0010000, REG_W1, imm);
>  		/* crj or cgrj %dst,%w1,mask,off */
> @@ -1223,6 +1224,7 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
>  			    dst_reg, REG_W1, i, off, mask);
>  		break;
>  branch_ku:
> +		is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
>  		/* lgfi %w1,imm (load sign extend imm) */
>  		EMIT6_IMM(0xc0010000, REG_W1, imm);
>  		/* clrj or clgrj %dst,%w1,mask,off */
> @@ -1230,11 +1232,13 @@ static noinline int bpf_jit_insn(struct bpf_jit *jit, struct bpf_prog *fp, int i
>  			    dst_reg, REG_W1, i, off, mask);
>  		break;
>  branch_xs:
> +		is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
>  		/* crj or cgrj %dst,%src,mask,off */
>  		EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0076 : 0x0064),
>  			    dst_reg, src_reg, i, off, mask);
>  		break;
>  branch_xu:
> +		is_jmp32 = BPF_CLASS(insn->code) == BPF_JMP32;
>  		/* clrj or clgrj %dst,%src,mask,off */
>  		EMIT6_PCREL(0xec000000, (is_jmp32 ? 0x0077 : 0x0065),
>  			    dst_reg, src_reg, i, off, mask);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Kernel Development]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Info]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Linux Media]     [Device Mapper]

  Powered by Linux