• Guo Ren's avatar
    riscv: Add support for function error injection · ee55ff80
    Guo Ren authored
    Inspired by the commit 42d038c4 ("arm64: Add support for function
    error injection"), this patch supports function error injection for
    riscv.
    
    This patch mainly support two functions: one is regs_set_return_value()
    which is used to overwrite the return value; the another function is
    override_function_with_return() which is to override the probed
    function returning and jump to its caller.
    
    Test log:
     cd /sys/kernel/debug/fail_function
     echo sys_clone > inject
     echo 100 > probability
     echo 1 > interval
     ls /
    [  313.176875] FAULT_INJECTION: forcing a failure.
    [  313.176875] name fail_function, interval 1, probability 100, space 0, times 1
    [  313.184357] CPU: 0 PID: 87 Comm: sh Not tainted 5.8.0-rc5-00007-g6a758cc #117
    [  313.187616] Call Trace:
    [  313.189100] [<ffffffe0002036b6>] walk_stackframe+0x0/0xc2
    [  313.191626] [<ffffffe00020395c>] show_stack+0x40/0x4c
    [  313.193927] [<ffffffe000556c60>] dump_stack+0x7c/0x96
    [  313.194795] [<ffffffe0005522e8>] should_fail+0x140/0x142
    [  313.195923] [<ffffffe000299ffc>] fei_kprobe_handler+0x2c/0x5a
    [  313.197687] [<ffffffe0009e2ec4>] kprobe_breakpoint_handler+0xb4/0x18a
    [  313.200054] [<ffffffe00020357e>] do_trap_break+0x36/0xca
    [  313.202147] [<ffffffe000201bca>] ret_from_exception+0x0/0xc
    [  313.204556] [<ffffffe000201bbc>] ret_from_syscall+0x0/0x2
    -sh: can't fork: Invalid argument
    Signed-off-by: default avatarGuo Ren <guoren@linux.alibaba.com>
    Reviewed-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Cc: Palmer Dabbelt <palmerdabbelt@google.com>
    Cc: Paul Walmsley <paul.walmsley@sifive.com>
    Signed-off-by: default avatarPalmer Dabbelt <palmerdabbelt@google.com>
    ee55ff80
error-inject.c 251 Bytes