aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/net/bpf_jit_comp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm64/net/bpf_jit_comp.c')
-rw-r--r--arch/arm64/net/bpf_jit_comp.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index dc6a4842683a..c81ddd4ff7f7 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -113,9 +113,9 @@ static inline void emit_a64_mov_i(const int is64, const int reg,
113static inline int bpf2a64_offset(int bpf_to, int bpf_from, 113static inline int bpf2a64_offset(int bpf_to, int bpf_from,
114 const struct jit_ctx *ctx) 114 const struct jit_ctx *ctx)
115{ 115{
116 int to = ctx->offset[bpf_to + 1]; 116 int to = ctx->offset[bpf_to];
117 /* -1 to account for the Branch instruction */ 117 /* -1 to account for the Branch instruction */
118 int from = ctx->offset[bpf_from + 1] - 1; 118 int from = ctx->offset[bpf_from] - 1;
119 119
120 return to - from; 120 return to - from;
121} 121}
@@ -640,10 +640,11 @@ static int build_body(struct jit_ctx *ctx)
640 const struct bpf_insn *insn = &prog->insnsi[i]; 640 const struct bpf_insn *insn = &prog->insnsi[i];
641 int ret; 641 int ret;
642 642
643 ret = build_insn(insn, ctx);
644
643 if (ctx->image == NULL) 645 if (ctx->image == NULL)
644 ctx->offset[i] = ctx->idx; 646 ctx->offset[i] = ctx->idx;
645 647
646 ret = build_insn(insn, ctx);
647 if (ret > 0) { 648 if (ret > 0) {
648 i++; 649 i++;
649 continue; 650 continue;