mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 08:14:15 +08:00
b61e1f3281
Move the in-kernel kprobes insn page to text segment. Rationale: having that page in rw data segment is suboptimal, since as soon as a kprobe is set, this will split the 1:1 kernel mapping for a single page which get new permissions. Note: there is always at least one kprobe present for the kretprobe trampoline; so the mapping will always be split into smaller 4k mappings because of this. Moving the kprobes insn page into text segment makes sure that the page is mapped RO/X in any case, and avoids that the 1:1 mapping is split. The kprobe insn_page is defined as a dummy function which is filled with "br %r14" instructions. Signed-off-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
23 lines
746 B
ArmAsm
23 lines
746 B
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
#include <linux/linkage.h>
|
|
|
|
/*
|
|
* insn_page is a special 4k aligned dummy function for kprobes.
|
|
* It will contain all kprobed instructions that are out-of-line executed.
|
|
* The page must be within the kernel image to guarantee that the
|
|
* out-of-line instructions are within 2GB distance of their original
|
|
* location. Using a dummy function ensures that the insn_page is within
|
|
* the text section of the kernel and mapped read-only/executable from
|
|
* the beginning on, thus avoiding to split large mappings if the page
|
|
* would be in the data section instead.
|
|
*/
|
|
.section .kprobes.text, "ax"
|
|
.align 4096
|
|
ENTRY(kprobes_insn_page)
|
|
.rept 2048
|
|
.word 0x07fe
|
|
.endr
|
|
ENDPROC(kprobes_insn_page)
|
|
.previous
|