Message ID | 20210506023449.3568630-3-jniethe5@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc: Further Strict RWX support | expand |
Related | show |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | success | Successfully applied on branch powerpc/merge (7619d98e5041d5c25aba5428704dba6121237a9a) |
snowpatch_ozlabs/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 25 lines checked |
snowpatch_ozlabs/needsstable | success | Patch has no Fixes tags |
Le 06/05/2021 à 04:34, Jordan Niethe a écrit : > setup_text_poke_area() is a late init call so it runs before > mark_rodata_ro() and after the init calls. This lets all the init code > patching simply write to their locations. In the future, kprobes is > going to allocate its instruction pages RO which means they will need > setup_text__poke_area() to have been already called for their code > patching. However, init_kprobes() (which allocates and patches some > instruction pages) is an early init call so it happens before > setup_text__poke_area(). > > start_kernel() calls poking_init() before any of the init calls. On > powerpc, poking_init() is currently a nop. setup_text_poke_area() relies > on kernel virtual memory, cpu hotplug and per_cpu_areas being setup. > setup_per_cpu_areas(), boot_cpu_hotplug_init() and mm_init() are called > before poking_init(). > > Turn setup_text_poke_area() into poking_init(). > > Reviewed-by: Russell Currey <ruscur@russell.cc> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com> Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> > --- > v9: New to series > --- > arch/powerpc/lib/code-patching.c | 12 ++++-------- > 1 file changed, 4 insertions(+), 8 deletions(-) > > diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c > index 870b30d9be2f..15296207e1ba 100644 > --- a/arch/powerpc/lib/code-patching.c > +++ b/arch/powerpc/lib/code-patching.c > @@ -70,14 +70,11 @@ static int text_area_cpu_down(unsigned int cpu) > } > > /* > - * Run as a late init call. This allows all the boot time patching to be done > - * simply by patching the code, and then we're called here prior to > - * mark_rodata_ro(), which happens after all init calls are run. Although > - * BUG_ON() is rude, in this case it should only happen if ENOMEM, and we judge > - * it as being preferable to a kernel that will crash later when someone tries > - * to use patch_instruction(). > + * Although BUG_ON() is rude, in this case it should only happen if ENOMEM, and > + * we judge it as being preferable to a kernel that will crash later when > + * someone tries to use patch_instruction(). > */ > -static int __init setup_text_poke_area(void) > +int __init poking_init(void) > { > BUG_ON(!cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, > "powerpc/text_poke:online", text_area_cpu_up, > @@ -85,7 +82,6 @@ static int __init setup_text_poke_area(void) > > return 0; > } > -late_initcall(setup_text_poke_area); > > /* > * This can be called for kernel text or a module. >
diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c index 870b30d9be2f..15296207e1ba 100644 --- a/arch/powerpc/lib/code-patching.c +++ b/arch/powerpc/lib/code-patching.c @@ -70,14 +70,11 @@ static int text_area_cpu_down(unsigned int cpu) } /* - * Run as a late init call. This allows all the boot time patching to be done - * simply by patching the code, and then we're called here prior to - * mark_rodata_ro(), which happens after all init calls are run. Although - * BUG_ON() is rude, in this case it should only happen if ENOMEM, and we judge - * it as being preferable to a kernel that will crash later when someone tries - * to use patch_instruction(). + * Although BUG_ON() is rude, in this case it should only happen if ENOMEM, and + * we judge it as being preferable to a kernel that will crash later when + * someone tries to use patch_instruction(). */ -static int __init setup_text_poke_area(void) +int __init poking_init(void) { BUG_ON(!cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "powerpc/text_poke:online", text_area_cpu_up, @@ -85,7 +82,6 @@ static int __init setup_text_poke_area(void) return 0; } -late_initcall(setup_text_poke_area); /* * This can be called for kernel text or a module.