Use WARN_ON(), while running out of stubs in stub_for_addr()
and abort loading of the module instead of BUG_ON().
Signed-off-by: Kamalesh Babulal <redacted>
---
arch/powerpc/kernel/module_64.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
@@ -429,7 +429,8 @@ static unsigned long stub_for_addr(const Elf64_Shdr *sechdrs,/* Find this stub, or if that fails, the next avail. entry */stubs=(void*)sechdrs[me->arch.stubs_section].sh_addr;for(i=0;stub_func_addr(stubs[i].funcdata);i++){-BUG_ON(i>=num_stubs);+if(WARN_ON(i>=num_stubs))+return0;if(stub_func_addr(stubs[i].funcdata)==func_addr(addr))return(unsignedlong)&stubs[i];
On Wednesday 11 October 2017 09:42 AM, Michael Ellerman wrote:
Kamalesh Babulal [off-list ref] writes:
quoted
Use WARN_ON(), while running out of stubs in stub_for_addr()
and abort loading of the module instead of BUG_ON().
Thanks. This looks good in principle. Have you actually tested it to
make sure we do in fact gracefully fail the module load?
Thanks for the review. I tested with little hackish version of this patch:
+ if (!strncmp(me->name, "live", 4))
+ j = 100;
+ for (i = 0; stub_func_addr(stubs[i].funcdata); i+=j) {
+ if (WARN_ON(i >= num_stubs))
+ return 0;
and it fails gracefully.
# modprobe livepatch-sample
modprobe: ERROR: could not insert 'livepatch_sample': Unknown symbol in module, or unknown parameter (see dmesg)
# echo $?
1
# dmesg
------------[ cut here ]------------
WARNING: CPU: 2 PID: 2836 at arch/powerpc/kernel/module_64.c:526 apply_relocate_add+0x71c/0xb00
--
cheers,
Kamalesh.
From: Michael Ellerman <mpe@ellerman.id.au> Date: 2017-10-12 04:29:22
Kamalesh Babulal [off-list ref] writes:
On Wednesday 11 October 2017 09:42 AM, Michael Ellerman wrote:
quoted
Kamalesh Babulal [off-list ref] writes:
quoted
Use WARN_ON(), while running out of stubs in stub_for_addr()
and abort loading of the module instead of BUG_ON().
Thanks. This looks good in principle. Have you actually tested it to
make sure we do in fact gracefully fail the module load?
Thanks for the review. I tested with little hackish version of this patch:
+ if (!strncmp(me->name, "live", 4))
+ j = 100;
+ for (i = 0; stub_func_addr(stubs[i].funcdata); i+=j) {
+ if (WARN_ON(i >= num_stubs))
+ return 0;
and it fails gracefully.
# modprobe livepatch-sample
modprobe: ERROR: could not insert 'livepatch_sample': Unknown symbol in module, or unknown parameter (see dmesg)
# echo $?
1
# dmesg
------------[ cut here ]------------
WARNING: CPU: 2 PID: 2836 at arch/powerpc/kernel/module_64.c:526 apply_relocate_add+0x71c/0xb00
From: Michael Ellerman <hidden> Date: 2017-10-19 04:48:25
On Tue, 2017-10-10 at 14:47:32 UTC, Kamalesh Babulal wrote:
Use WARN_ON(), while running out of stubs in stub_for_addr()
and abort loading of the module instead of BUG_ON().
Signed-off-by: Kamalesh Babulal <redacted>