From: Blaisorblade <bla...@ya...> - 2005-02-10 19:42:52
|
Ok, the first thing is the cleanup of PTRACE_SYSEMU_SINGLESTEP. I've carefully moved the handling to go near to PTRACE_SINGLESTEP. As said, it's needed also to port this stuff to 2.6.10 easily (wrt the introduction of {clear,set}_singlestep). The patch is attached both with only my changes, to go on top of the add-SYSEMU_SINGLESTEP one, and in the merged form. They are both for 2.6.9. I'm also going to release both 2.6.9-V8-rc2 and 2.6.10-V8-rc2 with this stuff. I also added a patch about mm->dumpable (still in doubt whether to merge it). Second thing: I've analyzed sysaudit-singlestep-umlhost.... the important thing is #2 below. 1) there is some moving around of do_syscall_trace vars, which I've merged in my cleanup (it's needed for item #3, however it's nice anyway); so I've modified and reattached it. 2) I guess that the ptrace_disable() change (which clears TIF_SYSCALL_TRACE and TIF_SYSCALL_EMU) is just cosmetical. I verified that in kernel/ and arch/i386/kernel the only caller is ptrace_detach (as the comment says), which later clears child->ptrace through __ptrace_unlink. Since everything (I took this for granted) tests current->ptrace | PT_PTRACED, correctness should be ok. It hurts a bit performance, however, because we don't run inside the syscall fastpath, and do one more conditional jump. We must discuss this with mainline, too. 3) a real fix for TIF_SYSCALL_AUDIT | TIF_SINGLESTEP, which is also correct when setting TIF_SYSCALL_EMU too (I had doubts about this, since I was missing that is_singlestep == 1 only for PTRACE_SINGLESTEP and not when doing PTRACE_SYSEMU_SINGLESTEP). I want to merge it before 2.6.11. We must in fact avoid to do the tracing for syscall entry, since TIF_SINGLESTEP does not trigger inside entry.S the syscall tracing (see the marked "testb" line below). (around line 277 of arch/i386/kernel/entry.S): ENTRY(system_call) pushl %eax # save orig_eax SAVE_ALL GET_THREAD_INFO(%ebp) # system call tracing in operation / emulation //in the mask _TIF_SINGLESTEP is not set !!! <<<<<<<<<<<<<< testb $(_TIF_SYSCALL_EMU|_TIF_SYSCALL_TRACE| _TIF_SYSCALL_AUDIT),TI_flags(%ebp) jnz syscall_trace_entry cmpl $(nr_syscalls), %eax jae syscall_badsys syscall_call: call *sys_call_table(,%eax,4) movl %eax,EAX(%esp) # store the return value syscall_exit: -- Paolo Giarrusso, aka Blaisorblade Linux registered user n. 292729 http://www.user-mode-linux.org/~blaisorblade |