As you suggested, we can simplify ptrace_request()->ptrace_resume()
path, ptrace_resume_action() checks all "for resume" requests except
PTRACE_CONT.

---

 kernel/ptrace.c |   22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)

--- PU/kernel/ptrace.c~125_PTRACE_REQUEST_DEFAULT_RESUME        2009-10-30 
04:25:53.000000000 +0100
+++ PU/kernel/ptrace.c  2009-11-01 22:48:24.000000000 +0100
@@ -854,6 +854,11 @@ static int ptrace_resume_action(struct t
        case PTRACE_SYSCALL:
                events |= UTRACE_EVENT_SYSCALL;
                break;
+
+       case PTRACE_CONT:
+               break;
+       default:
+               return -EIO;
        }
 
        if (events != engine->flags &&
@@ -975,21 +980,6 @@ int ptrace_request(struct task_struct *c
                ret = ptrace_detach(child, data);
                break;
 
-#ifdef PTRACE_SINGLESTEP
-       case PTRACE_SINGLESTEP:
-#endif
-#ifdef PTRACE_SINGLEBLOCK
-       case PTRACE_SINGLEBLOCK:
-#endif
-#ifdef PTRACE_SYSEMU
-       case PTRACE_SYSEMU:
-       case PTRACE_SYSEMU_SINGLESTEP:
-#endif
-       case PTRACE_SYSCALL:
-       case PTRACE_CONT:
-               ret = ptrace_resume(child, engine, request, data);
-               break;
-
        case PTRACE_KILL:
                /* Ugly historical behaviour. */
                if (task_is_traced(child))
@@ -998,7 +988,7 @@ int ptrace_request(struct task_struct *c
                break;
 
        default:
-               ret = -EIO;
+               ret = ptrace_resume(child, engine, request, data);
                break;
        }
 

Reply via email to