Skip to content

Commit

Permalink
Fix assertion "!IS_IN_SYSENTER(tracee)" on Huawei
Browse files Browse the repository at this point in the history
When syscall was cancelled by poke data workaround,
don't relaunch it if it was cancelled by us
(otherwise we'll relaunch it as cancel wasn't intended,
but required to actually perform different operation (memory write))

#49
  • Loading branch information
michalbednarski authored and Grimler91 committed Jul 25, 2022
1 parent 338f468 commit e413682
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions src/syscall/syscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,14 @@ void translate_syscall(Tracee *tracee)
#ifdef HAS_POKEDATA_WORKAROUND
if (tracee->pokedata_workaround_cancelled_syscall) {
tracee->pokedata_workaround_cancelled_syscall = false;
tracee->pokedata_workaround_relaunched_syscall = true;
tracee->restart_how = PTRACE_SYSCALL;
tracee->status = 0;
poke_reg(tracee, INSTR_POINTER, peek_reg(tracee, CURRENT, INSTR_POINTER) - SYSTRAP_SIZE);
push_specific_regs(tracee, false);
return;
if (get_sysnum(tracee, CURRENT) != PR_void) {
tracee->pokedata_workaround_relaunched_syscall = true;
tracee->restart_how = PTRACE_SYSCALL;
tracee->status = 0;
poke_reg(tracee, INSTR_POINTER, peek_reg(tracee, CURRENT, INSTR_POINTER) - SYSTRAP_SIZE);
push_specific_regs(tracee, false);
return;
}
}
#endif

Expand Down

0 comments on commit e413682

Please sign in to comment.