No changes in ptrace.o, change ptrace_resume() to not return from
inside switch().

---

 kernel/ptrace.c |   19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

--- PU/kernel/ptrace.c~49_PTRACE_REQUEST_ENGINE 2009-09-17 20:35:09.000000000 
+0200
+++ PU/kernel/ptrace.c  2009-09-17 20:46:55.000000000 +0200
@@ -1021,16 +1021,18 @@ static int ptrace_resume(struct task_str
 int ptrace_request(struct task_struct *child, long request,
                   long addr, long data)
 {
-       int ret = -EIO;
        siginfo_t siginfo;
+       int ret;
 
        switch (request) {
        case PTRACE_PEEKTEXT:
        case PTRACE_PEEKDATA:
-               return generic_ptrace_peekdata(child, addr, data);
+               ret = generic_ptrace_peekdata(child, addr, data);
+               break;
        case PTRACE_POKETEXT:
        case PTRACE_POKEDATA:
-               return generic_ptrace_pokedata(child, addr, data);
+               ret = generic_ptrace_pokedata(child, addr, data);
+               break;
 
 #ifdef PTRACE_OLDSETOPTIONS
        case PTRACE_OLDSETOPTIONS:
@@ -1073,14 +1075,17 @@ int ptrace_request(struct task_struct *c
 #endif
        case PTRACE_SYSCALL:
        case PTRACE_CONT:
-               return ptrace_resume(child, request, data);
+               ret = ptrace_resume(child, request, data);
+               break;
 
        case PTRACE_KILL:
-               if (child->exit_state)  /* already dead */
-                       return 0;
-               return ptrace_resume(child, request, SIGKILL);
+               ret = 0;
+               if (!child->exit_state) /* already dead */
+                       ret = ptrace_resume(child, request, SIGKILL);
+               break;
 
        default:
+               ret = -EIO;
                break;
        }
 

Reply via email to