]> granicus.if.org Git - strace/commitdiff
On clearing "breakpopint", restore syscall number too
authorDenys Vlasenko <vda.linux@googlemail.com>
Mon, 14 May 2012 14:40:28 +0000 (16:40 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 14 May 2012 14:40:28 +0000 (16:40 +0200)
This fixes Fedora bug 659382.
Low risk: this code is not supposed to be used on any non-acient kernel.

* util.c (clearbpt): Restore syscall number too.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
util.c

diff --git a/util.c b/util.c
index f27acdf6c35387c04ae19b702cde4089caf401ec..3975f492b5b38d67e139dce28e0dfa33a03ecc85 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1512,9 +1512,9 @@ setbpt(struct tcb *tcp)
                 || set_arg0(tcp, &state, new_arg0) < 0
                 || arg_finish_change(tcp, &state) < 0)
                        return -1;
-               tcp->flags |= TCB_BPTSET;
                tcp->inst[0] = tcp->u_arg[arg0_index];
                tcp->inst[1] = tcp->u_arg[arg1_index];
+               tcp->flags |= TCB_BPTSET;
                return 0;
        }
 
@@ -1528,6 +1528,7 @@ clearbpt(struct tcb *tcp)
 {
        arg_setup_state state;
        if (arg_setup(tcp, &state) < 0
+           || change_syscall(tcp, tcp->scno) < 0
            || restore_arg0(tcp, &state, tcp->inst[0]) < 0
            || restore_arg1(tcp, &state, tcp->inst[1]) < 0
            || arg_finish_change(tcp, &state))