Blob Blame History Raw
From: Song Liu <song@kernel.org>
Date: Mon, 7 Feb 2022 22:25:33 -0800
Subject: bpf, x86_64: Fail gracefully on bpf_jit_binary_pack_finalize failures
Patch-mainline: v5.18-rc1
Git-commit: f95f768f0af4cec806ce86cd67934a10617d96d0
References: jsc#PED-1377

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
Acked-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
---
 arch/x86/net/bpf_jit_comp.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -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;