Skip to content

Commit

Permalink
uprobes/x86: Change __skip_sstep() to actually skip the whole insn
Browse files Browse the repository at this point in the history
__skip_sstep() doesn't update regs->ip. Currently this is correct
but only "by accident" and it doesn't skip the whole insn. Change
it to advance ->ip by the length of the detected 0x66*0x90 sequence.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
  • Loading branch information
Oleg Nesterov committed Feb 8, 2013
1 parent da1816b commit cf31ec3
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion arch/x86/kernel/uprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -680,8 +680,11 @@ static bool __skip_sstep(struct arch_uprobe *auprobe, struct pt_regs *regs)
if (auprobe->insn[i] == 0x66)
continue;

if (auprobe->insn[i] == 0x90)
if (auprobe->insn[i] == 0x90) {
regs->ip = uprobe_get_swbp_addr(regs);
regs->ip += i + 1;
return true;
}

break;
}
Expand Down

0 comments on commit cf31ec3

Please sign in to comment.