• Hengqi Chen's avatar
    LoongArch: Preserve syscall nr across execve() · d6c5f06e
    Hengqi Chen authored
    Currently, we store syscall nr in pt_regs::regs[11] and syscall execve()
    accidentally overrides it during its execution:
    
        sys_execve()
          -> do_execve()
            -> do_execveat_common()
              -> bprm_execve()
                -> exec_binprm()
                  -> search_binary_handler()
                    -> load_elf_binary()
                      -> ELF_PLAT_INIT()
    
    ELF_PLAT_INIT() reset regs[11] to 0, so in syscall_exit_to_user_mode()
    we later get a wrong syscall nr. This breaks tools like execsnoop since
    it relies on execve() tracepoints.
    
    Skip pt_regs::regs[11] reset in ELF_PLAT_INIT() to fix the issue.
    Signed-off-by: default avatarHengqi Chen <hengqi.chen@gmail.com>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    d6c5f06e
elf.h 9.23 KB