[PATCH 1/3] powerpc/code-patching: work around code patching verification in patching tests
Christophe Leroy
christophe.leroy at csgroup.eu
Fri Nov 26 17:34:44 AEDT 2021
Le 26/11/2021 à 04:22, Nicholas Piggin a écrit :
> Code patching tests patch the stack and (non-module) vmalloc space now,
> which falls afoul of the new address check.
>
> The stack patching can easily be fixed, but the vmalloc patching is more
> difficult. For now, add an ugly workaround to skip the check while the
> test code is running.
This really looks hacky.
To skip the test, you can call do_patch_instruction() instead of calling
patch_instruction().
>
> Fixes: 8b8a8f0ab3f55 ("powerpc/code-patching: Improve verification of patchability")
> Signed-off-by: Nicholas Piggin <npiggin at gmail.com>
> ---
> arch/powerpc/lib/code-patching.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c
> index 5e2fe133639e..57e160963ab7 100644
> --- a/arch/powerpc/lib/code-patching.c
> +++ b/arch/powerpc/lib/code-patching.c
> @@ -187,10 +187,12 @@ static int do_patch_instruction(u32 *addr, struct ppc_inst instr)
>
> #endif /* CONFIG_STRICT_KERNEL_RWX */
>
> +static bool skip_addr_verif = false;
> +
> int patch_instruction(u32 *addr, struct ppc_inst instr)
> {
> /* Make sure we aren't patching a freed init section */
> - if (!kernel_text_address((unsigned long)addr))
> + if (!skip_addr_verif && !kernel_text_address((unsigned long)addr))
> return 0;
>
> return do_patch_instruction(addr, instr);
> @@ -738,11 +740,13 @@ static int __init test_code_patching(void)
> {
> printk(KERN_DEBUG "Running code patching self-tests ...\n");
>
> + skip_addr_verif = true;
> test_branch_iform();
> test_branch_bform();
> test_create_function_call();
> test_translate_branch();
> test_prefixed_patching();
> + skip_addr_verif = false;
>
> return 0;
> }
>
More information about the Linuxppc-dev
mailing list