commit
3dbe5829408bc1586f75b4667ef60e5aab0209c7 upstream.
In riscv the process of uprobe going to clear spie before exec
the origin insn,and set spie after that.But When access the page
which origin insn has been placed a page fault may happen and
irq was disabled in arch_uprobe_pre_xol function,It cause a WARN
as follows.
There is no need to clear/set spie in arch_uprobe_pre/post/abort_xol.
We can just remove it.
[ 31.684157] BUG: sleeping function called from invalid context at kernel/locking/rwsem.c:1488
[ 31.684677] in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 76, name: work
[ 31.684929] preempt_count: 0, expected: 0
[ 31.685969] CPU: 2 PID: 76 Comm: work Tainted: G
[ 31.686542] Hardware name: riscv-virtio,qemu (DT)
[ 31.686797] Call Trace:
[ 31.687053] [<
ffffffff80006442>] dump_backtrace+0x30/0x38
[ 31.687699] [<
ffffffff80812118>] show_stack+0x40/0x4c
[ 31.688141] [<
ffffffff8081817a>] dump_stack_lvl+0x44/0x5c
[ 31.688396] [<
ffffffff808181aa>] dump_stack+0x18/0x20
[ 31.688653] [<
ffffffff8003e454>] __might_resched+0x114/0x122
[ 31.688948] [<
ffffffff8003e4b2>] __might_sleep+0x50/0x7a
[ 31.689435] [<
ffffffff80822676>] down_read+0x30/0x130
[ 31.689728] [<
ffffffff8000b650>] do_page_fault+0x166/x446
[ 31.689997] [<
ffffffff80003c0c>] ret_from_exception+0x0/0xc
Fixes:
74784081aac8 ("riscv: Add uprobes supported")
Signed-off-by: Yipeng Zou <zouyipeng@huawei.com>
Reviewed-by: Guo Ren <guoren@kernel.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20220721065820.245755-1-zouyipeng@huawei.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
instruction_pointer_set(regs, utask->xol_vaddr);
- regs->status &= ~SR_SPIE;
-
return 0;
}
instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size);
- regs->status |= SR_SPIE;
-
return 0;
}
* address.
*/
instruction_pointer_set(regs, utask->vaddr);
-
- regs->status &= ~SR_SPIE;
}
bool arch_uretprobe_is_alive(struct return_instance *ret, enum rp_check ctx,