Message ID | 68d7d57675e0963fe5e2c4b84b0cb2390c78638c.1637912333.git.christophe.leroy@csgroup.eu (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc/code-patching: Relax verification of patchability | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/github-powerpc_ppctests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_selftests | success | Successfully ran 8 jobs. |
snowpatch_ozlabs/github-powerpc_clang | success | Successfully ran 7 jobs. |
snowpatch_ozlabs/github-powerpc_sparse | success | Successfully ran 4 jobs. |
snowpatch_ozlabs/github-powerpc_kernel_qemu | success | Successfully ran 24 jobs. |
Le 26/11/2021 à 08:39, Christophe Leroy a écrit : > Commit 8b8a8f0ab3f5 ("powerpc/code-patching: Improve verification of > patchability") introduced a stricter verification of the patched > area by checking it is proper kernel text. > > But as least two usages of patch_instruction() fall outside: > - Code patching selftests, which use stack and vmalloc space. > - Ftrace > > So for the time being, partially revert commit 8b8a8f0ab3f5 and add > a onetime warning: > > Running code patching self-tests ... > patch_instruction() called on invalid text address 0xe1011e58 from test_code_patching+0x34/0xd6c > > Reported-by: Sachin Sant <sachinp@linux.vnet.ibm.com> > Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> > Cc: Nicholas Piggin <npiggin@gmail.com> > Fixes: 8b8a8f0ab3f5 ("powerpc/code-patching: Improve verification of patchability") > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> > --- > 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 1dd636a85cc1..c87eea773930 100644 > --- a/arch/powerpc/lib/code-patching.c > +++ b/arch/powerpc/lib/code-patching.c > @@ -190,9 +190,13 @@ static int do_patch_instruction(u32 *addr, struct ppc_inst instr) > 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 (system_state >= SYSTEM_FREEING_INITMEM && init_section_contains(addr, 4)) > return 0; > > + if (!kernel_text_address((unsigned long)addr)) > + pr_warn_once("%s() called on invalid text address 0x%p from %pS\n", > + __func__, addr, __builtin_return_address(0)); > + May it be better to use pr_warn_ratelimited() instead in order to catch more than the first occurence ? > return do_patch_instruction(addr, instr); > } > NOKPROBE_SYMBOL(patch_instruction); >
> Running code patching self-tests ... > patch_instruction() called on invalid text address 0xe1011e58 from test_code_patching+0x34/0xd6c > > Reported-by: Sachin Sant <sachinp@linux.vnet.ibm.com> > Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> > Cc: Nicholas Piggin <npiggin@gmail.com> > Fixes: 8b8a8f0ab3f5 ("powerpc/code-patching: Improve verification of patchability") > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> > --- > arch/powerpc/lib/code-patching.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > This fixes the problem for me. Tested-by: Sachin Sant <sachinp@linux.vnet.ibm.com> Thanks -Sachin
diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-patching.c index 1dd636a85cc1..c87eea773930 100644 --- a/arch/powerpc/lib/code-patching.c +++ b/arch/powerpc/lib/code-patching.c @@ -190,9 +190,13 @@ static int do_patch_instruction(u32 *addr, struct ppc_inst instr) 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 (system_state >= SYSTEM_FREEING_INITMEM && init_section_contains(addr, 4)) return 0; + if (!kernel_text_address((unsigned long)addr)) + pr_warn_once("%s() called on invalid text address 0x%p from %pS\n", + __func__, addr, __builtin_return_address(0)); + return do_patch_instruction(addr, instr); } NOKPROBE_SYMBOL(patch_instruction);
Commit 8b8a8f0ab3f5 ("powerpc/code-patching: Improve verification of patchability") introduced a stricter verification of the patched area by checking it is proper kernel text. But as least two usages of patch_instruction() fall outside: - Code patching selftests, which use stack and vmalloc space. - Ftrace So for the time being, partially revert commit 8b8a8f0ab3f5 and add a onetime warning: Running code patching self-tests ... patch_instruction() called on invalid text address 0xe1011e58 from test_code_patching+0x34/0xd6c Reported-by: Sachin Sant <sachinp@linux.vnet.ibm.com> Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Nicholas Piggin <npiggin@gmail.com> Fixes: 8b8a8f0ab3f5 ("powerpc/code-patching: Improve verification of patchability") Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> --- arch/powerpc/lib/code-patching.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)