bpf, x86_64: Fail gracefully on bpf_jit_binary_pack_finalize failures
authorSong Liu <song@kernel.org>
Tue, 8 Feb 2022 06:25:33 +0000 (22:25 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 8 Feb 2022 17:23:18 +0000 (09:23 -0800)
Instead of BUG_ON(), fail gracefully and return orig_prog.

Fixes: 1022a5498f6f ("bpf, x86_64: Use bpf_jit_binary_pack_alloc")
Signed-off-by: Song Liu <song@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20220208062533.3802081-1-song@kernel.org
arch/x86/net/bpf_jit_comp.c

index 643f38b91e30b6e1cb756c3d27b06eea3b887730..c7db0fe4de2f167372f64f79791f020b9e6e302d 100644 (file)
@@ -2378,9 +2378,13 @@ out_image:
                         *   1) header is not pointing to proper module memory;
                         *   2) the arch doesn't support bpf_arch_text_copy().
                         *
-                        * Both cases are serious bugs that we should not continue.
+                        * Both cases are serious bugs and justify WARN_ON.
                         */
-                       BUG_ON(bpf_jit_binary_pack_finalize(prog, header, rw_header));
+                       if (WARN_ON(bpf_jit_binary_pack_finalize(prog, header, rw_header))) {
+                               prog = orig_prog;
+                               goto out_addrs;
+                       }
+
                        bpf_tail_call_direct_fixup(prog);
                } else {
                        jit_data->addrs = addrs;