From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 14F4AC25B74 for ; Mon, 27 May 2024 13:27:49 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9FFCE6B0093; Mon, 27 May 2024 09:27:48 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 9B10D6B0095; Mon, 27 May 2024 09:27:48 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 877BF6B0096; Mon, 27 May 2024 09:27:48 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 68A2B6B0093 for ; Mon, 27 May 2024 09:27:48 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 087EC81531 for ; Mon, 27 May 2024 13:27:48 +0000 (UTC) X-FDA: 82164253416.17.06D8E3E Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf25.hostedemail.com (Postfix) with ESMTP id A58F5A001D for ; Mon, 27 May 2024 13:27:45 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=kwQT7jWa; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf25.hostedemail.com: domain of rppt@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=rppt@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1716816466; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=V/tsxcKsedYBMPsnoGyVrH2sHeBRXhFaD5LDsz+7Q+U=; b=y7pZbpx5Ih/ZMiDBPCkjvacbyyBsJF17JCTEK8Oflshbp8cjKW3qniuQOJXguYO7awZpCt 3Nq2Wwadr0Mx9L9treFtwMC8e5YRk1uVOIOKvYVBWc6HDGEobvq+ybBEDLu4DNtMwVNXd9 uCpmL2r5aYI1a+LgRcIB4k4+VWEOj2U= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1716816466; a=rsa-sha256; cv=none; b=qDawfvjihyJaUwtvGV3UmtSvu4Q2s11qKWcmhp4I+sWVYHFtMQ885jL6JTsJ1uTuOsJKkS CYnuT8pDCCrCmOpPpDbPVMNwy9PcR0KoEm3oxcNOI/4IsbPufHFifaL+9lMiTWUn8W38as bVYXDWvQqBaCTTaC15eGg1z6ebegDy4= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=kwQT7jWa; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf25.hostedemail.com: domain of rppt@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=rppt@kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 4338ECE0E38; Mon, 27 May 2024 13:27:42 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0480FC32781; Mon, 27 May 2024 13:27:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1716816461; bh=PG17aG7jguWncrVjP8NipYKQkmc8tXJesn99NtwIu78=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=kwQT7jWa4lQAXzmuLAM8NsQpZnd7dQc1YKLJaF0bJxQEQNwkAXksUPF+wjxY1mQP6 mOkX5pw1P5aTzweCbh9XDLsARtxT8nNzWQsXzDD52KS0V6yT5xGLcAMq1qPyPh4re+ XYuTl6h3mxIXhvRQAFg5Yii5DM4ncMfpQHqdJ0g0N77ZoqRzPSJOPBGwhXec+1KhJb 3pA9T+klo0dfrmV2kwYkqR8XtluBIz+8NdaD9z27sEVP7Ed2coNhtQq/6cmg5PFfMF 8kZcXs6qvKyWACPmMCPl79C0SrDBfivPiP/mP8hSgrlDnN0pLcJoit1lVhKkoeJy0f g31LDGZjMVoIw== Date: Mon, 27 May 2024 16:25:54 +0300 From: Mike Rapoport To: Cong Wang Cc: netdev@vger.kernel.org, linux-mm@kvack.org, Andrew Morton , bpf@vger.kernel.org, Cong Wang , Luis Chamberlain Subject: Re: [Patch bpf] vmalloc: relax is_vmalloc_or_module_addr() check Message-ID: References: <20240526230648.188550-1-xiyou.wangcong@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240526230648.188550-1-xiyou.wangcong@gmail.com> X-Stat-Signature: hzzczi45te9snk58ondztme1zkom4nys X-Rspamd-Queue-Id: A58F5A001D X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1716816465-814777 X-HE-Meta: U2FsdGVkX188/Yu/NN+zOzBqqxH+b4MtcYc3P4UX9M+f1645L53cPJpOhaHCvqFCzf5OtdG4XtvEDabwIcYM2vo7qfyQa0TNRwu4FYSXUQWhIPfyK7xj8YUPwtOrkZEPqg3bkZdosjchEhhfrqvVTFFm3bP3wtkaEcRwDUYqk3SNAuvmqIRBncCvKIyuKQ5z6zWXJ1cZNCDDh71zLLN9YX8Agerhx1ate1QNaPB7DfkOsyvqwvUvQvp4hlz0HMkTzODHQkZH+YVyjBs0536Y11REUhJ3oOrVAtHDzOsUPZ0imFRoN7xqgpgacdKUD8kRXdm8dZ6QKcDgHcJLZbb+9SdjDg8ZQr13i4o6mgaKMnsLV2puvOx2ZFWlATvA2X5MJyMFx3zYqPrtqt5ESkhbrY7pHQGOj6X3HYxY732YVxFQWfkpt7UCLB+39A+ausBfIzW4+GPAiT2jaVWa4Scjilx/XWyhCYba/k3xhcfjw4PhJUvSLCcaaiDy86jFTANlOr2uZMFH8ebVG4K6mWQ1o6A7nKsFDnjVlnhZg9htQDHOAhb9dk0TUb+BCJugG0m8HWzdHbdpFC+cHtG//DA4tK6qoci1Qno9qsIqvfDJMwV78812kXyPHcZfH/gIGG+EIlFmpoNIUQqO+sNZjMUlqHTePqA2eb9g+QeZy9h5dvV3FnyECvM38X6trZHiQwueyoAdpvcyvMvpF+VSUp4UnMIj7vLPoB0oiq93SBAZu8zYfm9UvfnJgImNjfUvxU1tv78bSqK+lZhfSEwduwN8JSKFWcRZBjR1jgauty5kh0piQsqqQf/+o/XHsW3D9aAESgqwd/b7S3JzUqCQU7IIC9a2WdqXwMrhxyCwZQdsUu2iv53rgZBBq82p+Isb7zPIuMiM2fbyPWKbrnTesAsyM/q/vZqAJ86XWKeFwD3UqZCfJ2jugvLhENjSv2XSsksCY5mKhtC54xeOVt2zTHg jC2l8btI 6LfU38ZCDW01uQm8uBULcksEmvABUIb67IWnGHZfKlPZSlh+FxXuzQyDOs8h3ELTcBwnb4fSJK1ODViH4RKHrP6xrmKvMj+2ciuC1+FIqnUIFTfDs+VzJNpJCqH1cddylCgemCkzDjijz2+3pyqOOZjzeXr1mz6Li3m9BbR+ZK34UjrQ/1qPK+Eo9UrPafeooXSO6qHXLWbAGBBnW3QzPqY3AIbE0ZuKlCvVXt4Rw6z8GBAgF3NA3EDFu/6BIbZ0KNqRzGgeom0nogvmenlMBSMVBsDKGBUX0iblL7KiRypYJhFoLpWbWUW0Vju1+aL1qTMz2FPqvKaz+V0twihInxAJedpYdu3YVIeH9Xm8xo5xUfuuKiSQxWIfw0j16Cy7tZN9Xwm16addo7KmGXRuZjptW4e7A9SkHqPl2BAZadDeP9WA= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Sun, May 26, 2024 at 04:06:48PM -0700, Cong Wang wrote: > From: Cong Wang > > After commit 2c9e5d4a0082 ("bpf: remove CONFIG_BPF_JIT dependency on CONFIG_MODULES of") > CONFIG_BPF_JIT does not depend on CONFIG_MODULES any more and bpf jit > also uses the MODULES_VADDR ~ MODULES_END memory region. But > is_vmalloc_or_module_addr() still checks CONFIG_MODULES, which then > returns false for a bpf jit memory region when CONFIG_MODULES is not > defined. It leads to the following kernel BUG: > > [ 1.567023] ------------[ cut here ]------------ > [ 1.567883] kernel BUG at mm/vmalloc.c:745! > [ 1.568477] Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI > [ 1.569367] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.9.0+ #448 > [ 1.570247] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014 > [ 1.570786] RIP: 0010:vmalloc_to_page+0x48/0x1ec > [ 1.570786] Code: 0f 00 00 e8 eb 1a 05 00 b8 37 00 00 00 48 ba fe ff ff ff ff 1f 00 00 4c 03 25 76 49 c6 02 48 c1 e0 28 48 01 e8 48 39 d0 76 02 <0f> 0b 4c 89 e7 e8 bf 1a 05 00 49 8b 04 24 48 a9 9f ff ff ff 0f 84 > [ 1.570786] RSP: 0018:ffff888007787960 EFLAGS: 00010212 > [ 1.570786] RAX: 000036ffa0000000 RBX: 0000000000000640 RCX: ffffffff8147e93c > [ 1.570786] RDX: 00001ffffffffffe RSI: dffffc0000000000 RDI: ffffffff840e32c8 > [ 1.570786] RBP: ffffffffa0000000 R08: 0000000000000000 R09: 0000000000000000 > [ 1.570786] R10: ffff888007787a88 R11: ffffffff8475d8e7 R12: ffffffff83e80ff8 > [ 1.570786] R13: 0000000000000640 R14: 0000000000000640 R15: 0000000000000640 > [ 1.570786] FS: 0000000000000000(0000) GS:ffff88806cc00000(0000) knlGS:0000000000000000 > [ 1.570786] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 1.570786] CR2: ffff888006a01000 CR3: 0000000003e80000 CR4: 0000000000350ef0 > [ 1.570786] Call Trace: > [ 1.570786] > [ 1.570786] ? __die_body+0x1b/0x58 > [ 1.570786] ? die+0x31/0x4b > [ 1.570786] ? do_trap+0x9d/0x138 > [ 1.570786] ? vmalloc_to_page+0x48/0x1ec > [ 1.570786] ? do_error_trap+0xcd/0x102 > [ 1.570786] ? vmalloc_to_page+0x48/0x1ec > [ 1.570786] ? vmalloc_to_page+0x48/0x1ec > [ 1.570786] ? handle_invalid_op+0x2f/0x38 > [ 1.570786] ? vmalloc_to_page+0x48/0x1ec > [ 1.570786] ? exc_invalid_op+0x2b/0x41 > [ 1.570786] ? asm_exc_invalid_op+0x16/0x20 > [ 1.570786] ? vmalloc_to_page+0x26/0x1ec > [ 1.570786] ? vmalloc_to_page+0x48/0x1ec > [ 1.570786] __text_poke+0xb6/0x458 > [ 1.570786] ? __pfx_text_poke_memcpy+0x10/0x10 > [ 1.570786] ? __pfx___mutex_lock+0x10/0x10 > [ 1.570786] ? __pfx___text_poke+0x10/0x10 > [ 1.570786] ? __pfx_get_random_u32+0x10/0x10 > [ 1.570786] ? srso_return_thunk+0x5/0x5f > [ 1.570786] text_poke_copy_locked+0x70/0x84 > [ 1.570786] text_poke_copy+0x32/0x4f > [ 1.570786] bpf_arch_text_copy+0xf/0x27 > [ 1.570786] bpf_jit_binary_pack_finalize+0x26/0x5a > [ 1.570786] bpf_int_jit_compile+0x576/0x8ad > [ 1.570786] ? __pfx_bpf_int_jit_compile+0x10/0x10 > [ 1.570786] ? srso_return_thunk+0x5/0x5f > [ 1.570786] ? __kmalloc_node_track_caller+0x2b5/0x2e0 > [ 1.570786] bpf_prog_select_runtime+0x7c/0x199 > [ 1.570786] bpf_prepare_filter+0x1e9/0x25b > [ 1.570786] ? __pfx_bpf_prepare_filter+0x10/0x10 > [ 1.570786] ? srso_return_thunk+0x5/0x5f > [ 1.570786] ? _find_next_bit+0x29/0x7e > [ 1.570786] bpf_prog_create+0xb8/0xe0 > [ 1.570786] ptp_classifier_init+0x75/0xa1 > [ 1.570786] ? __pfx_ptp_classifier_init+0x10/0x10 > [ 1.570786] ? srso_return_thunk+0x5/0x5f > [ 1.570786] ? register_pernet_subsys+0x36/0x42 > [ 1.570786] ? srso_return_thunk+0x5/0x5f > [ 1.570786] sock_init+0x99/0xa3 > [ 1.570786] ? __pfx_sock_init+0x10/0x10 > [ 1.570786] do_one_initcall+0x104/0x2c4 > [ 1.570786] ? __pfx_do_one_initcall+0x10/0x10 > [ 1.570786] ? parameq+0x25/0x2d > [ 1.570786] ? rcu_is_watching+0x1c/0x3c > [ 1.570786] ? trace_kmalloc+0x81/0xb2 > [ 1.570786] ? srso_return_thunk+0x5/0x5f > [ 1.570786] ? __kmalloc+0x29c/0x2c7 > [ 1.570786] ? srso_return_thunk+0x5/0x5f > [ 1.570786] do_initcalls+0xf9/0x123 > [ 1.570786] kernel_init_freeable+0x24f/0x289 > [ 1.570786] ? __pfx_kernel_init+0x10/0x10 > [ 1.570786] kernel_init+0x19/0x13a > [ 1.570786] ret_from_fork+0x24/0x41 > [ 1.570786] ? __pfx_kernel_init+0x10/0x10 > [ 1.570786] ret_from_fork_asm+0x1a/0x30 > [ 1.570786] > [ 1.570819] ---[ end trace 0000000000000000 ]--- > [ 1.571463] RIP: 0010:vmalloc_to_page+0x48/0x1ec > [ 1.572111] Code: 0f 00 00 e8 eb 1a 05 00 b8 37 00 00 00 48 ba fe ff ff ff ff 1f 00 00 4c 03 25 76 49 c6 02 48 c1 e0 28 48 01 e8 48 39 d0 76 02 <0f> 0b 4c 89 e7 e8 bf 1a 05 00 49 8b 04 24 48 a9 9f ff ff ff 0f 84 > [ 1.574632] RSP: 0018:ffff888007787960 EFLAGS: 00010212 > [ 1.575129] RAX: 000036ffa0000000 RBX: 0000000000000640 RCX: ffffffff8147e93c > [ 1.576097] RDX: 00001ffffffffffe RSI: dffffc0000000000 RDI: ffffffff840e32c8 > [ 1.577084] RBP: ffffffffa0000000 R08: 0000000000000000 R09: 0000000000000000 > [ 1.578077] R10: ffff888007787a88 R11: ffffffff8475d8e7 R12: ffffffff83e80ff8 > [ 1.578810] R13: 0000000000000640 R14: 0000000000000640 R15: 0000000000000640 > [ 1.579823] FS: 0000000000000000(0000) GS:ffff88806cc00000(0000) knlGS:0000000000000000 > [ 1.580992] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 1.581869] CR2: ffff888006a01000 CR3: 0000000003e80000 CR4: 0000000000350ef0 > [ 1.582800] Kernel panic - not syncing: Fatal exception > [ 1.583765] ---[ end Kernel panic - not syncing: Fatal exception ]--- > > Fixes: 2c9e5d4a0082 ("bpf: remove CONFIG_BPF_JIT dependency on CONFIG_MODULES of") > Cc: Luis Chamberlain > Cc: Mike Rapoport (IBM) > Signed-off-by: Cong Wang > --- > mm/vmalloc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index 125427cbdb87..168a5c7c2fdf 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -714,7 +714,7 @@ int is_vmalloc_or_module_addr(const void *x) > * and fall back on vmalloc() if that fails. Others > * just put it in the vmalloc space. > */ > -#if defined(CONFIG_MODULES) && defined(MODULES_VADDR) > +#if defined(MODULES_VADDR) Let's make it #if defined(CONFIG_EXECMEM) && defined(MODULES_VADDR) to avoid increasing kernel size on systems that don't use modules and BPF > unsigned long addr = (unsigned long)kasan_reset_tag(x); > if (addr >= MODULES_VADDR && addr < MODULES_END) > return 1; > -- > 2.34.1 > -- Sincerely yours, Mike.