From nobody Sat Jul 25 23:41:45 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 080AC35B631; Sat, 11 Jul 2026 09:44:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763056; cv=none; b=Im4UtZIhxrBgAYmoNV3HOS3UGdTi1DGDYJWVzuAve3apDsOq6R7sOyOt4h2wxQ0NXD1P3s7KUj1H0LuIFjIg3zr4py1jW3CS4QwohPGR0DKNcQhOqmqagrrz7c+9+iIQn/vadxHurweleC0PysN68gF7gXvtvhtoBVbybUKqeAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763056; c=relaxed/simple; bh=y+c5m4difJ9hu52AWtW2xLPtR3mDX1dJE7WtCANf5xs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=amLMae/9QpaxPhchQJ6OH2hqAln+sWzqb5cyMAtT9xk++i5qbR8CLmZdpXteTIlU8xvY94+ZyiyN+3eo5E6+IAOtvjYeyUrJfcyDRvjkXFSdVojHisk2LYPtUsfiMbmx2tbfcWecubUzBlzgBIjv5Sai/WZWTZX6nOgjRQlxhoY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Xb0tCfNo; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Xb0tCfNo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8AA021F00A3A; Sat, 11 Jul 2026 09:44:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783763054; bh=Zv9skHA7Q7cWIm9Y+QOl1xh28sFLpy27C2RaWAQyrfc=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Xb0tCfNo5MNllb7EA+ydd7FSNRGPCscXrUAuSAvrnqkLfzOQw30pDaw89LOMsOC+G RVScABvib+8mPLSAQ06wePi6m1NWrza+6JeVU86WPhvV2fVdyvqtEreCTs/uK3gJoj CmJONAxOl7VKLVrqWpivCRLgo9bP0JuTpj2MRUKkLTxkWtaG4RikrLXc4MQ4WJXAiT 01m0HN+dVqeuCm/kMeCxrCNuP4WLNF1nICqFS2T0D+wIqPv2yvIA3zmKGGJXe42E9q mxTzm6XXdV+oP6fT6Mcz+kE4F5owgvuEQfcRWFwTe8ciPt2c2ghmVLdootRrMkwKh8 fxT+dw7/hQ9MA== From: "Mike Rapoport (Microsoft)" Date: Sat, 11 Jul 2026 12:43:45 +0300 Subject: [PATCH bpf-next v2 1/5] bpf: dispatcher: allocate bpf_dispatcher->rw_image with vmalloc() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-execmem-x86-rox-bpf-v0-v2-1-bfd956d35119@kernel.org> References: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> In-Reply-To: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> To: Alexei Starovoitov , Andrii Nakryiko , Andy Lutomirski , Borislav Petkov , Daniel Borkmann , Dave Hansen , Eduard Zingerman , Ingo Molnar , Kumar Kartikeya Dwivedi , Peter Zijlstra , Song Liu , Thomas Gleixner Cc: Emil Tsalapatis , Jiri Olsa , John Fastabend , Martin KaFai Lau , Mike Rapoport , "H. Peter Anvin" , Yonghong Song , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org X-Mailer: b4 0.16-dev bpf_dispatcher->rw_image is a temporary writable buffer that arch_prepare_bpf_dispatcher() fills and then copies into bpf_dispatcher->image using bpf_arch_text_copy(). The rel32 offsets emitted by emit_bpf_dispatcher() are calculated against ->image, so ->rw_image does not need to live in the module address range. Allocate ->rw_image with vmalloc() to avoid permissions dance when EXECMEM_BPF will be backed by ROX caches. Also saves a bit of space in the more scarce module address space. Signed-off-by: Mike Rapoport (Microsoft) --- kernel/bpf/dispatcher.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/bpf/dispatcher.c b/kernel/bpf/dispatcher.c index ea2d60dc1fee..d85b3e8ad2e4 100644 --- a/kernel/bpf/dispatcher.c +++ b/kernel/bpf/dispatcher.c @@ -148,7 +148,10 @@ void bpf_dispatcher_change_prog(struct bpf_dispatcher = *d, struct bpf_prog *from, d->image =3D bpf_prog_pack_alloc(PAGE_SIZE, bpf_jit_fill_hole_with_zero,= false); if (!d->image) goto out; - d->rw_image =3D bpf_jit_alloc_exec(PAGE_SIZE); + /* d->rw_image doesn't need to be in module memory range, so we + * can use vmalloc. + */ + d->rw_image =3D vmalloc(PAGE_SIZE); if (!d->rw_image) { bpf_prog_pack_free(d->image, PAGE_SIZE); d->image =3D NULL; --=20 2.53.0 From nobody Sat Jul 25 23:41:45 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9D3235B631; Sat, 11 Jul 2026 09:44:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763061; cv=none; b=hO92STMg1sLnvob7kbEErorpeIVeotJ9f7h9hWg8YdIdztn+XyTiRikcl/MrHEeGn3+oSXf8c2idPLZbAjItonmDCVAfOVByqpbpSxhjuPqTcfpLTeQRq5YlzsfrWZMIYsiFBq58htjsj25nwtf9l1yB2Cwqht3C1EkQwLKQcdY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763061; c=relaxed/simple; bh=lmOTQ1n6pV1wNm2gFyUMrAEiIjEvHHmVFcF+U3WmfnY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gH+GYlRSM1VtcfZRoUG2/P0nBax+JXZO/W2KVnZ+cPuJDGdesuG8aCv9DJfYNtHyoB6OFyPe9OysRt3A6A/u589VeErne19rlMb8HKRFhaX93a8kwrf4B4AW+VtmVDyyGhEx+QUpvlMxo4DkqezbaKg2BJpS+8oF7nkdFRZfAjU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Onn8EiJu; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Onn8EiJu" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 31EB91F000E9; Sat, 11 Jul 2026 09:44:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783763060; bh=CtebRvbxm5uNw/fy+A0iTGr4pHE+6vUMv+Jp05j6/1U=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Onn8EiJu41rfBsZxpkNYrymyRqil3LrcDll1npf4bsqGzbIfYkgAoNvnw9kQUvc8L rZC8kmIhfTBzLDCrBMhoZZvlXAsVONypbjgC8rtSkEj5TyEWTJCNoCE7YbY/eIqGh5 +GLX1AOdTDXfTk/24Q0Wt9VqcIL3biiWE9tirJlezQOa0oygxL+5bDYXVaF3sNqY/c siPfYVnkt5UT3YenW+rDLpzUFfhqkFiioyBV6LclZ5y72IQTake35t9rhtuCwexMYv Fo0Vjclt/NA/YbXRsswBIjbEJYX4/MNkQ24ZF2hJagPmNmjhOaRIUKDFGRQ/WAXxrl jRpxItKUHngpQ== From: "Mike Rapoport (Microsoft)" Date: Sat, 11 Jul 2026 12:43:46 +0300 Subject: [PATCH bpf-next v2 2/5] bpf: drop __weak from bpf_jit_alloc_exec() and bpf_jit_free_exec() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-execmem-x86-rox-bpf-v0-v2-2-bfd956d35119@kernel.org> References: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> In-Reply-To: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> To: Alexei Starovoitov , Andrii Nakryiko , Andy Lutomirski , Borislav Petkov , Daniel Borkmann , Dave Hansen , Eduard Zingerman , Ingo Molnar , Kumar Kartikeya Dwivedi , Peter Zijlstra , Song Liu , Thomas Gleixner Cc: Emil Tsalapatis , Jiri Olsa , John Fastabend , Martin KaFai Lau , Mike Rapoport , "H. Peter Anvin" , Yonghong Song , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org X-Mailer: b4 0.16-dev bpf_jit_alloc_exec() and bpf_jit_free_exec() are wrappers for the corresponding execmem APIs. Architectures define the properties of the memory range needed by BPF in their initialization of execmem and don't need to override neither of them. Drop the __weak qualifier from bpf_jit_alloc_exec() and bpf_jit_free_exec(). Signed-off-by: Mike Rapoport (Microsoft) --- kernel/bpf/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 47fe047ad30b..fc75625dc951 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -1116,12 +1116,12 @@ void bpf_jit_uncharge_modmem(u32 size) atomic_long_sub(size, &bpf_jit_current); } =20 -void *__weak bpf_jit_alloc_exec(unsigned long size) +void *bpf_jit_alloc_exec(unsigned long size) { return execmem_alloc(EXECMEM_BPF, size); } =20 -void __weak bpf_jit_free_exec(void *addr) +void bpf_jit_free_exec(void *addr) { execmem_free(addr); } --=20 2.53.0 From nobody Sat Jul 25 23:41:45 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79502381E80; Sat, 11 Jul 2026 09:44:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763068; cv=none; b=DY1A2IHBBJtQf6xL/RKDpNIF9cBTlCxh1cNG1qVdqlBW/s8DqO7bvzAPkV0kP9O9/JEkUQ5GjxK8sK/1pPQ6pEuphuCXoYzf7jteXCmZNUs5dAq7iRl4NlmP71JdoLTzOLb/sHPEpEgek2z2umig69uBbuUG+GnawCuZdFrjsbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763068; c=relaxed/simple; bh=5P0sua/71rPK3l5T6jCA12GMKa2j6NT1JAfTkULYULA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YrKgsCLhCt253N1xOlpFwDtXCBVs5Gi6vlob+4QFAQAN9USCVX8dOHn0FCpHPNwHHPzGHLuTrijzupk9Xf/wiEtIoqPxRu799tT+HKwldKBengWc8o+4r5WK0ajtx10AIOumNSL2tqpz5C+aqb0Ys5VnrfBgiYlCGqgfS3WhXXw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XAoz4on9; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XAoz4on9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 02F7B1F00A3A; Sat, 11 Jul 2026 09:44:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783763067; bh=IatqBvV/RTdCVpUja1LQkhqHsNuZ9wpcED5UwFKZr5M=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=XAoz4on9c26Snv08lb63ljkDeQeteH+ON+KmJTJxrBQ7QAYD6kkAES3VWZjbpz4DA Iz36RjarEwDxD7QzK2V7BqyH6afYxr4gzw70RphGtMILmdeQczCsvmXqXyRdPA3CpU UImGzFsbsxb1jR73T9eWMnRjRbQR3amgFwNl7ARcoYXlfwzvCdPH3QvvyvQWcvGTED qR3JYKk9l0HhUHGT/o0yVihTyl3ygM7i/nTQdvFs/oSyGmGd/XVaKkBntEwCXTPJ9L bX3DSbcmP4Ztu2JpI3LhYEOv/xZpsXQRxh7Nnt3x+Y69wFwgwg1+hkyn1ovndIclL0 tZL0rTHdKfsOw== From: "Mike Rapoport (Microsoft)" Date: Sat, 11 Jul 2026 12:43:47 +0300 Subject: [PATCH bpf-next v2 3/5] bpf: alloc_prog_pack(): skip ROX management for already ROX memory Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-execmem-x86-rox-bpf-v0-v2-3-bfd956d35119@kernel.org> References: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> In-Reply-To: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> To: Alexei Starovoitov , Andrii Nakryiko , Andy Lutomirski , Borislav Petkov , Daniel Borkmann , Dave Hansen , Eduard Zingerman , Ingo Molnar , Kumar Kartikeya Dwivedi , Peter Zijlstra , Song Liu , Thomas Gleixner Cc: Emil Tsalapatis , Jiri Olsa , John Fastabend , Martin KaFai Lau , Mike Rapoport , "H. Peter Anvin" , Yonghong Song , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org X-Mailer: b4 0.16-dev execmem_alloc() can return ROX memory that is already filled with architecture defined trapping instructions. In preparation for enabling this mode for BPF on x86, make sure that there is no redundant management of the ROX memory. There is no need to fill allocated memory with trapping instructions, to request permissions reset on free and to set ROX permissions as this all is handled by execmem_alloc(). Add bpf_jit_mem_is_rox() wrapper for execmem_is_rox(), use it to check if execmem_alloc() returns ROX memory and skip the redundant steps in that case. Signed-off-by: Mike Rapoport (Microsoft) --- kernel/bpf/core.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index fc75625dc951..1b89c18cf246 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -916,6 +916,11 @@ static LIST_HEAD(pack_list); =20 #define BPF_PROG_CHUNK_COUNT (BPF_PROG_PACK_SIZE / BPF_PROG_CHUNK_SIZE) =20 +static bool bpf_jit_mem_is_rox(void) +{ + return execmem_is_rox(EXECMEM_BPF); +} + static struct bpf_prog_pack *alloc_new_pack(bpf_jit_fill_hole_t bpf_fill_i= ll_insns) { struct bpf_prog_pack *pack; @@ -927,16 +932,18 @@ static struct bpf_prog_pack *alloc_new_pack(bpf_jit_f= ill_hole_t bpf_fill_ill_ins pack->ptr =3D bpf_jit_alloc_exec(BPF_PROG_PACK_SIZE); if (!pack->ptr) goto out; - bpf_fill_ill_insns(pack->ptr, BPF_PROG_PACK_SIZE); bitmap_zero(pack->bitmap, BPF_PROG_PACK_SIZE / BPF_PROG_CHUNK_SIZE); =20 if (static_branch_unlikely(&bpf_pred_flush_enabled)) pack->arch_flush_needed =3D true; - set_vm_flush_reset_perms(pack->ptr); - err =3D set_memory_rox((unsigned long)pack->ptr, - BPF_PROG_PACK_SIZE / PAGE_SIZE); - if (err) - goto out; + if (!bpf_jit_mem_is_rox()) { + bpf_fill_ill_insns(pack->ptr, BPF_PROG_PACK_SIZE); + set_vm_flush_reset_perms(pack->ptr); + err =3D set_memory_rox((unsigned long)pack->ptr, + BPF_PROG_PACK_SIZE / PAGE_SIZE); + if (err) + goto out; + } list_add_tail(&pack->list, &pack_list); return pack; =20 @@ -965,7 +972,7 @@ void *bpf_prog_pack_alloc(u32 size, bpf_jit_fill_hole_t= bpf_fill_ill_insns, bool pr_warn_once("BPF: Predictors not flushed for allocations greater than = BPF_PROG_PACK_SIZE\n"); size =3D round_up(size, PAGE_SIZE); ptr =3D bpf_jit_alloc_exec(size); - if (ptr) { + if (ptr && !bpf_jit_mem_is_rox()) { int err; =20 bpf_fill_ill_insns(ptr, size); --=20 2.53.0 From nobody Sat Jul 25 23:41:45 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 941CB375F88; Sat, 11 Jul 2026 09:44:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763074; cv=none; b=s8Bb2wx3EDatP5kmX56zJudUmLIq6OnyUcXHe9TnYGwbDRzKMIEHXNJhy5ZKkf0VHWMZfAZ6Vp8mwTD1B1BChG9xscnVchnlFqecs9FaYwhso9ewSqj7/M+AlgkSTh0NfUvKzvzjmRLTlnMWa3LQ3N59wnn35jHlEvoGvZgBFqQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763074; c=relaxed/simple; bh=duHjMvPTKNUsHVFBmk2zASNmPWRBWn/MrKC3CEPM7Rs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZbUxbcaEyPUUHcqlfU7/QEOZXMa91I/sHn69Z0nKm9sLHH6OJ9cM3Umbtm3BYuco5EstDApXF6na8c+Z3ZR+ZHUHh/wYPCicZ9+J/PjQk15ddgrED32AtGZWblnLeQ2NEDg69OSB5A1ju+equl7NvtV4lwSgXGg+uDSr7MOcbSg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lXpQ7xOn; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lXpQ7xOn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B70971F000E9; Sat, 11 Jul 2026 09:44:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783763073; bh=E06Ic3v1YIX7E/Iklh6+E5eIa7VNqBAM63t+V+fmcL8=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=lXpQ7xOn71hk958X9WZ4a5Qvqb9Ku4JXTI6ifQnoZ0T73SMAMsNDF9nARTUilFUxS er7ZTVhmhyvaWPytfyq1L2ccZ5YTKbk3JouU0uXUbKh5imvcBBAruz5L9Ngry5IlgY /my85KRAD9MGW0w63eY2UPlhFN5xFGI9ZhwF+sa1YLD1oMCDQdzwL0aR6Kg47p0Ja2 Vv/Hpz2gqhvxR9pbLxtIuuIYu/MAEUeX16U/KxlMwGyiupafnUxI6/rXzDa2dKQmDm VdIBVEf5MtzmXaTZ1dYHaDapUmHvTwUICIXQ+OXdaDMcYCbk3qXDb+zrk/Gb0tXptY DxGRHTb9bIwMA== From: "Mike Rapoport (Microsoft)" Date: Sat, 11 Jul 2026 12:43:48 +0300 Subject: [PATCH bpf-next v2 4/5] bpf, x86: make sure allocation in arch_bpf_trampoline_size() is writable Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-execmem-x86-rox-bpf-v0-v2-4-bfd956d35119@kernel.org> References: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> In-Reply-To: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> To: Alexei Starovoitov , Andrii Nakryiko , Andy Lutomirski , Borislav Petkov , Daniel Borkmann , Dave Hansen , Eduard Zingerman , Ingo Molnar , Kumar Kartikeya Dwivedi , Peter Zijlstra , Song Liu , Thomas Gleixner Cc: Emil Tsalapatis , Jiri Olsa , John Fastabend , Martin KaFai Lau , Mike Rapoport , "H. Peter Anvin" , Yonghong Song , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org X-Mailer: b4 0.16-dev arch_bpf_trampoline_size() allocates a buffer to get actual size required for a trampoline. This buffer must be in the module address space because __arch_prepare_bpf_trampoline() calculates rel32 offsets relatively to that buffer. In preparation for enabling ROX mode for EXECMEM_BPF make sure that the allocated memory is writable. Add bpf_jit_alloc_exec_rw() wrapper for execmem_alloc_rw() and use it for buffer allocation in arch_bpf_trampoline_size(). Signed-off-by: Mike Rapoport (Microsoft) --- arch/x86/net/bpf_jit_comp.c | 5 ++--- include/linux/filter.h | 1 + kernel/bpf/core.c | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index de7515ea1bea..b2feec81e231 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -3703,13 +3703,12 @@ int arch_bpf_trampoline_size(const struct btf_func_= model *m, u32 flags, int ret; =20 /* Allocate a temporary buffer for __arch_prepare_bpf_trampoline(). - * This will NOT cause fragmentation in direct map, as we do not - * call set_memory_*() on this buffer. * * We cannot use kvmalloc here, because we need image to be in * module memory range. + * Since it must be writable use bpf_jit_alloc_exec_rw(). */ - image =3D bpf_jit_alloc_exec(PAGE_SIZE); + image =3D bpf_jit_alloc_exec_rw(PAGE_SIZE); if (!image) return -ENOMEM; =20 diff --git a/include/linux/filter.h b/include/linux/filter.h index 14acb2455746..32d5297c557e 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -1333,6 +1333,7 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image= _ptr, void bpf_jit_binary_free(struct bpf_binary_header *hdr); u64 bpf_jit_alloc_exec_limit(void); void *bpf_jit_alloc_exec(unsigned long size); +void *bpf_jit_alloc_exec_rw(unsigned long size); void bpf_jit_free_exec(void *addr); void bpf_jit_free(struct bpf_prog *fp); struct bpf_binary_header * diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 1b89c18cf246..e2076667b245 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -1128,6 +1128,11 @@ void *bpf_jit_alloc_exec(unsigned long size) return execmem_alloc(EXECMEM_BPF, size); } =20 +void *bpf_jit_alloc_exec_rw(unsigned long size) +{ + return execmem_alloc_rw(EXECMEM_BPF, size); +} + void bpf_jit_free_exec(void *addr) { execmem_free(addr); --=20 2.53.0 From nobody Sat Jul 25 23:41:45 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94D27375F88; Sat, 11 Jul 2026 09:44:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763080; cv=none; b=Pcr7IOYcb/nM8i/71ukh6mg0Dc5xkNnnOSlkWFgVpxganSLGOxXSRtV7tRgqVYLUtLzKaSTzT5F4zPgzKHWHQXA8yKAZImc63JkS5mAmghLZ22Ifd9aT6IgQSOhzLWdOPqmrVn34AXnxGiIfpTCT8eQNY9bE9S+YRGk+E0ELaOQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783763080; c=relaxed/simple; bh=0ezK9nb6wN4qDm7eVfl3gFFuWiuh/XD1Fu96JdsDZY4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KMWGomYBNFmqhkKOdgpsqzZSqy8QSDDsD6OZXWwlzhwy6SZHJU4N4uyJvq+E/NTOqAZC9smEqEdWEp6rWt2JjD9vLTFT5Zn81o4rU1FH9oy1F5UG7lvdc8++NQ8wfMyylBL3bRhCsc6JEkqFc/GcIr9/a5ZxRqSd9QYhDwG9gDk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ivx7qeYH; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ivx7qeYH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E18501F00A3A; Sat, 11 Jul 2026 09:44:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1783763079; bh=bsCkJeKP215VVn4x62ogxT2jAVvGPVAbWkkJgMSjygg=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=ivx7qeYHuE4yUaLhOT2jxikNu88xWVFTLYJwFSzEo/kllyyEkyYsCaZuq1da3Pvmt kuotBeYrVNiQ+Ossk8P0yoMPJCsIexeLgAXNm0jgIiN2FWJ61ssMI1MOexZpYQJxAE AYxpqZNcJ0oOnPJznclbx+4N4ozbbQxc0FH5hDJ7qIRwXlTTWY+WXGS2tTlnP/sXIp YWkylwSUpq8STd/aCcIXKjo5Xdb9UzzeFL8ieHM1ObJOr5xcEX43yFfU9poL+JUHvV eEBY4I4TZC1gREZSEwD/dS0NR/Md9wyqZYPuZkecU+TpsuMxi3UJmIvdXRIKGqTfsc v8hVRJ2SnfabQ== From: "Mike Rapoport (Microsoft)" Date: Sat, 11 Jul 2026 12:43:49 +0300 Subject: [PATCH bpf-next v2 5/5] x86/bpf: enable EXECMEM_ROX_CACHE for BPF allocations Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260711-execmem-x86-rox-bpf-v0-v2-5-bfd956d35119@kernel.org> References: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> In-Reply-To: <20260711-execmem-x86-rox-bpf-v0-v2-0-bfd956d35119@kernel.org> To: Alexei Starovoitov , Andrii Nakryiko , Andy Lutomirski , Borislav Petkov , Daniel Borkmann , Dave Hansen , Eduard Zingerman , Ingo Molnar , Kumar Kartikeya Dwivedi , Peter Zijlstra , Song Liu , Thomas Gleixner Cc: Emil Tsalapatis , Jiri Olsa , John Fastabend , Martin KaFai Lau , Mike Rapoport , "H. Peter Anvin" , Yonghong Song , bpf@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org X-Mailer: b4 0.16-dev BPF core and x86 JIT use text poking and temporary writable buffers and thus can handle ROX memory. Enable ROX cache for EXECMEM_BPF when configuration and CPU features allow that. Signed-off-by: Mike Rapoport (Microsoft) --- arch/x86/mm/init.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index fb67217fddcd..079f8c7e9e3c 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -1107,10 +1107,10 @@ struct execmem_info __init *execmem_arch_setup(void) .alignment =3D MODULE_ALIGN, }, [EXECMEM_BPF] =3D { - .flags =3D EXECMEM_KASAN_SHADOW, + .flags =3D flags, .start =3D start, .end =3D MODULES_END, - .pgprot =3D PAGE_KERNEL, + .pgprot =3D pgprot, .alignment =3D MODULE_ALIGN, }, [EXECMEM_MODULE_DATA] =3D { --=20 2.53.0