From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
stable@vger.kernel.org, Yonghong Song <yhs@fb.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.11 05/45] bpf, x86: Use kvmalloc_array instead kmalloc_array in bpf_jit_comp
Date: Fri, 9 Apr 2021 11:53:31 +0200 [thread overview]
Message-ID: <20210409095305.566499819@linuxfoundation.org> (raw)
In-Reply-To: <20210409095305.397149021@linuxfoundation.org>
From: Yonghong Song <yhs@fb.com>
[ Upstream commit de920fc64cbaa031f947e9be964bda05fd090380 ]
x86 bpf_jit_comp.c used kmalloc_array to store jited addresses
for each bpf insn. With a large bpf program, we have see the
following allocation failures in our production server:
page allocation failure: order:5, mode:0x40cc0(GFP_KERNEL|__GFP_COMP),
nodemask=(null),cpuset=/,mems_allowed=0"
Call Trace:
dump_stack+0x50/0x70
warn_alloc.cold.120+0x72/0xd2
? __alloc_pages_direct_compact+0x157/0x160
__alloc_pages_slowpath+0xcdb/0xd00
? get_page_from_freelist+0xe44/0x1600
? vunmap_page_range+0x1ba/0x340
__alloc_pages_nodemask+0x2c9/0x320
kmalloc_order+0x18/0x80
kmalloc_order_trace+0x1d/0xa0
bpf_int_jit_compile+0x1e2/0x484
? kmalloc_order_trace+0x1d/0xa0
bpf_prog_select_runtime+0xc3/0x150
bpf_prog_load+0x480/0x720
? __mod_memcg_lruvec_state+0x21/0x100
__do_sys_bpf+0xc31/0x2040
? close_pdeo+0x86/0xe0
do_syscall_64+0x42/0x110
entry_SYSCALL_64_after_hwframe+0x44/0xa9
RIP: 0033:0x7f2f300f7fa9
Code: Bad RIP value.
Dumped assembly:
ffffffff810b6d70 <bpf_int_jit_compile>:
; {
ffffffff810b6d70: e8 eb a5 b4 00 callq 0xffffffff81c01360 <__fentry__>
ffffffff810b6d75: 41 57 pushq %r15
...
ffffffff810b6f39: e9 72 fe ff ff jmp 0xffffffff810b6db0 <bpf_int_jit_compile+0x40>
; addrs = kmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
ffffffff810b6f3e: 8b 45 0c movl 12(%rbp), %eax
; return __kmalloc(bytes, flags);
ffffffff810b6f41: be c0 0c 00 00 movl $3264, %esi
; addrs = kmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
ffffffff810b6f46: 8d 78 01 leal 1(%rax), %edi
; if (unlikely(check_mul_overflow(n, size, &bytes)))
ffffffff810b6f49: 48 c1 e7 02 shlq $2, %rdi
; return __kmalloc(bytes, flags);
ffffffff810b6f4d: e8 8e 0c 1d 00 callq 0xffffffff81287be0 <__kmalloc>
; if (!addrs) {
ffffffff810b6f52: 48 85 c0 testq %rax, %rax
Change kmalloc_array() to kvmalloc_array() to avoid potential
allocation error for big bpf programs.
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20210309015647.3657852-1-yhs@fb.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
arch/x86/net/bpf_jit_comp.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 023ac12f54a2..4cf3612ccd37 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -2038,7 +2038,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
extra_pass = true;
goto skip_init_addrs;
}
- addrs = kmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
+ addrs = kvmalloc_array(prog->len + 1, sizeof(*addrs), GFP_KERNEL);
if (!addrs) {
prog = orig_prog;
goto out_addrs;
@@ -2128,7 +2128,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
if (image)
bpf_prog_fill_jited_linfo(prog, addrs + 1);
out_addrs:
- kfree(addrs);
+ kvfree(addrs);
kfree(jit_data);
prog->aux->jit_data = NULL;
}
--
2.30.2
next prev parent reply other threads:[~2021-04-09 10:15 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-09 9:53 [PATCH 5.11 00/45] 5.11.13-rc1 review Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 01/45] ARM: dts: am33xx: add aliases for mmc interfaces Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 02/45] bus: ti-sysc: Fix warning on unbind if reset is not deasserted Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 03/45] drm/msm: a6xx: Make sure the SQE microcode is safe Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 04/45] platform/x86: intel-hid: Support Lenovo ThinkPad X1 Tablet Gen 2 Greg Kroah-Hartman
2021-04-09 9:53 ` Greg Kroah-Hartman [this message]
2021-04-09 9:53 ` [PATCH 5.11 06/45] net/mlx5e: Enforce minimum value check for ICOSQ size Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 07/45] net: pxa168_eth: Fix a potential data race in pxa168_eth_remove Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 08/45] kunit: tool: Fix a python tuple typing error Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 09/45] mISDN: fix crash in fritzpci Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 10/45] net: arcnet: com20020 fix error handling Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 11/45] can: kvaser_usb: Add support for USBcan Pro 4xHS Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 12/45] mac80211: Check crypto_aead_encrypt for errors Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 13/45] mac80211: choose first enabled channel for monitor Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 14/45] drm/msm/dsi_pll_7nm: Fix variable usage for pll_lockdet_rate Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 15/45] drm/msm/adreno: a5xx_power: Dont apply A540 lm_setup to other GPUs Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 16/45] drm/msm: Ratelimit invalid-fence message Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 17/45] netfilter: conntrack: Fix gre tunneling over ipv6 Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 18/45] netfilter: nftables: skip hook overlap logic if flowtable is stale Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 19/45] net: ipa: fix init header command validation Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 20/45] platform/x86: thinkpad_acpi: Allow the FnLock LED to change state Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 21/45] kselftest/arm64: sve: Do not use non-canonical FFR register value Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 22/45] drm/msm/disp/dpu1: icc path needs to be set before dpu runtime resume Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 23/45] x86/build: Turn off -fcf-protection for realmode targets Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 24/45] block: clear GD_NEED_PART_SCAN later in bdev_disk_changed Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 25/45] platform/x86: intel_pmt_class: Initial resource to 0 Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 26/45] platform/x86: intel_pmc_core: Ignore GBE LTR on Tiger Lake platforms Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 27/45] ptp_qoriq: fix overflow in ptp_qoriq_adjfine() u64 calcalation Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 28/45] scsi: target: pscsi: Clean up after failure in pscsi_map_sg() Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 29/45] arm64: kernel: disable CNP on Carmel Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 30/45] selftests/vm: fix out-of-tree build Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 31/45] ia64: mca: allocate early mca with GFP_ATOMIC Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 32/45] ia64: fix format strings for err_inject Greg Kroah-Hartman
2021-04-09 9:53 ` [PATCH 5.11 33/45] cifs: revalidate mapping when we open files for SMB1 POSIX Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 34/45] cifs: Silently ignore unknown oplock break handle Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 35/45] io_uring: fix timeout cancel return code Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 36/45] math: Export mul_u64_u64_div_u64 Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 37/45] tools/resolve_btfids: Build libbpf and libsubcmd in separate directories Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 38/45] tools/resolve_btfids: Check objects before removing Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 39/45] tools/resolve_btfids: Set srctree variable unconditionally Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 40/45] kbuild: Add resolve_btfids clean to root clean target Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 41/45] kbuild: Do not clean resolve_btfids if the output does not exist Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 42/45] tools/resolve_btfids: Add /libbpf to .gitignore Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 43/45] bpf, x86: Validate computation of branch displacements for x86-64 Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 44/45] bpf, x86: Validate computation of branch displacements for x86-32 Greg Kroah-Hartman
2021-04-09 9:54 ` [PATCH 5.11 45/45] init/Kconfig: make COMPILE_TEST depend on HAS_IOMEM Greg Kroah-Hartman
2021-04-09 20:14 ` [PATCH 5.11 00/45] 5.11.13-rc1 review Guenter Roeck
2021-04-09 20:38 ` Shuah Khan
2021-04-10 6:26 ` Naresh Kamboju
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210409095305.566499819@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=ast@kernel.org \
--cc=daniel@iogearbox.net \
--cc=linux-kernel@vger.kernel.org \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).