diff options
author | Christophe Leroy <christophe.leroy@csgroup.eu> | 2024-02-16 11:13:28 +0100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2024-02-22 21:55:33 +1100 |
commit | f7f18e30b468458b2611ca65d745b50edcda9f43 (patch) | |
tree | c1b572793d590d339f5da11bfca4684c3d18dbf5 /arch/powerpc | |
parent | 09ca1b11716f96461a4675eb0418d5cb97687389 (diff) |
powerpc/kprobes: Handle error returned by set_memory_rox()
set_memory_rox() can fail.
In case it fails, free allocated memory and return NULL.
Link: https://github.com/KSPP/linux/issues/7
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/b4907cf4339bd086abc40430d91311436cb0c18e.1708078401.git.christophe.leroy@csgroup.eu
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/kernel/kprobes.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c index b20ee72e873a..bbca90a5e2ec 100644 --- a/arch/powerpc/kernel/kprobes.c +++ b/arch/powerpc/kernel/kprobes.c @@ -134,10 +134,16 @@ void *alloc_insn_page(void) if (!page) return NULL; - if (strict_module_rwx_enabled()) - set_memory_rox((unsigned long)page, 1); + if (strict_module_rwx_enabled()) { + int err = set_memory_rox((unsigned long)page, 1); + if (err) + goto error; + } return page; +error: + module_memfree(page); + return NULL; } int arch_prepare_kprobe(struct kprobe *p) |