From: Shahab Vahedi <sha...@synopsys.com>

...after the rebase.
---
 arch/arc/net/bpf_jit_core.c | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/arch/arc/net/bpf_jit_core.c b/arch/arc/net/bpf_jit_core.c
index 00c99b339b4a..6f6b4ffccf2c 100644
--- a/arch/arc/net/bpf_jit_core.c
+++ b/arch/arc/net/bpf_jit_core.c
@@ -1218,15 +1218,10 @@ static int jit_compile(struct jit_context *ctx)
  *
  * prog->jited=1, prog->jited_len=..., prog->bpf_func=...
  */
-static void jit_finalize(struct jit_context *ctx)
+static int jit_finalize(struct jit_context *ctx)
 {
        struct bpf_prog *prog = ctx->prog;
 
-       ctx->success = true;
-       prog->bpf_func = (void *)ctx->jit.buf;
-       prog->jited_len = ctx->jit.len;
-       prog->jited = 1;
-
        /* We're going to need this information for the "do_extra_pass()". */
        if (ctx->need_extra_pass) {
                ctx->jit_data->bpf_header = ctx->bpf_header;
@@ -1237,7 +1232,10 @@ static void jit_finalize(struct jit_context *ctx)
                 * If things seem finalised, then mark the JITed memory
                 * as R-X and flush it.
                 */
-               bpf_jit_binary_lock_ro(ctx->bpf_header);
+               if (bpf_jit_binary_lock_ro(ctx->bpf_header)) {
+                       pr_err("bpf-jit: Could not lock the JIT memory.\n");
+                       return -EFAULT;
+               }
                flush_icache_range((unsigned long)ctx->bpf_header,
                                   (unsigned long)
                                   BUF(ctx->jit.buf, ctx->jit.len));
@@ -1245,8 +1243,15 @@ static void jit_finalize(struct jit_context *ctx)
                bpf_prog_fill_jited_linfo(prog, ctx->bpf2insn);
        }
 
+       ctx->success = true;
+       prog->bpf_func = (void *)ctx->jit.buf;
+       prog->jited_len = ctx->jit.len;
+       prog->jited = 1;
+
        jit_ctx_cleanup(ctx);
        jit_dump(ctx);
+
+       return 0;
 }
 
 /*
@@ -1354,7 +1359,10 @@ static struct bpf_prog *do_normal_pass(struct bpf_prog 
*prog)
                return prog;
        }
 
-       jit_finalize(&ctx);
+       if (jit_finalize(&ctx)) {
+               jit_ctx_cleanup(&ctx);
+               return prog;
+       }
 
        return ctx.prog;
 }
@@ -1389,7 +1397,10 @@ static struct bpf_prog *do_extra_pass(struct bpf_prog 
*prog)
                return prog;
        }
 
-       jit_finalize(&ctx);
+       if (jit_finalize(&ctx)) {
+               jit_ctx_cleanup(&ctx);
+               return prog;
+       }
 
        return ctx.prog;
 }
-- 
2.35.8


_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

Reply via email to