riscv: bpf: Avoid breaking W^X
[ Upstream commit fc8504765ec5e812135b8ccafca7101069a0c6d8 ] We allocate Non-executable pages, then call bpf_jit_binary_lock_ro() to enable executable permission after mapping them read-only. This is to prepare for STRICT_MODULE_RWX in following patch. Signed-off-by: Jisheng Zhang <jszhang@kernel.org> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com> Stable-dep-of: c56fb2aab235 ("riscv, bpf: Fix inconsistent JIT image generation") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
7c61643798
commit
eb3d1d84f3
@@ -153,6 +153,7 @@ skip_init_ctx:
|
|||||||
bpf_flush_icache(jit_data->header, ctx->insns + ctx->ninsns);
|
bpf_flush_icache(jit_data->header, ctx->insns + ctx->ninsns);
|
||||||
|
|
||||||
if (!prog->is_func || extra_pass) {
|
if (!prog->is_func || extra_pass) {
|
||||||
|
bpf_jit_binary_lock_ro(jit_data->header);
|
||||||
out_offset:
|
out_offset:
|
||||||
kfree(ctx->offset);
|
kfree(ctx->offset);
|
||||||
kfree(jit_data);
|
kfree(jit_data);
|
||||||
@@ -170,7 +171,7 @@ void *bpf_jit_alloc_exec(unsigned long size)
|
|||||||
{
|
{
|
||||||
return __vmalloc_node_range(size, PAGE_SIZE, BPF_JIT_REGION_START,
|
return __vmalloc_node_range(size, PAGE_SIZE, BPF_JIT_REGION_START,
|
||||||
BPF_JIT_REGION_END, GFP_KERNEL,
|
BPF_JIT_REGION_END, GFP_KERNEL,
|
||||||
PAGE_KERNEL_EXEC, 0, NUMA_NO_NODE,
|
PAGE_KERNEL, 0, NUMA_NO_NODE,
|
||||||
__builtin_return_address(0));
|
__builtin_return_address(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user