• Oleg Nesterov's avatar
    uprobes/x86: Introduce sizeof_long(), cleanup adjust_ret_addr() and... · 8faaed1b
    Oleg Nesterov authored
    uprobes/x86: Introduce sizeof_long(), cleanup adjust_ret_addr() and arch_uretprobe_hijack_return_addr()
    
    1. Add the trivial sizeof_long() helper and change other callers of
       is_ia32_task() to use it.
    
       TODO: is_ia32_task() is not what we actually want, TS_COMPAT does
       not necessarily mean 32bit. Fortunately syscall-like insns can't be
       probed so it actually works, but it would be better to rename and
       use is_ia32_frame().
    
    2. As Jim pointed out "ncopied" in arch_uretprobe_hijack_return_addr()
       and adjust_ret_addr() should be named "nleft". And in fact only the
       last copy_to_user() in arch_uretprobe_hijack_return_addr() actually
       needs to inspect the non-zero error code.
    
    TODO: adjust_ret_addr() should die. We can always calculate the value
    we need to write into *regs->sp, just UPROBE_FIX_CALL should record
    insn->length.
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Reviewed-by: default avatarJim Keniston <jkenisto@us.ibm.com>
    8faaed1b
uprobes.c 23.1 KB