Messages in this thread Patch in this message | | | Date | Sat, 05 Oct 2013 13:53:26 +0800 | From | Chen Gang <> | Subject | [PATCH] kernel/exit.c: call read_unlock() when failure occurs after already called read_lock() in do_wait(). |
| |
If failure occurs after called read_lock(), need call read_unlock() too.
It can fail in multiple position, so add new tag 'fail_lock' for it (also can let 'if' only content one jump statement).
Signed-off-by: Chen Gang <gang.chen@asianux.com> --- kernel/exit.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/kernel/exit.c b/kernel/exit.c index a949819..3da5476 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -1527,11 +1527,11 @@ repeat: do { retval = do_wait_thread(wo, tsk); if (retval) - goto end; + goto fail_lock; retval = ptrace_do_wait(wo, tsk); if (retval) - goto end; + goto fail_lock; if (wo->wo_flags & __WNOTHREAD) break; @@ -1551,6 +1551,10 @@ end: __set_current_state(TASK_RUNNING); remove_wait_queue(¤t->signal->wait_chldexit, &wo->child_wait); return retval; + +fail_lock: + read_unlock(&tasklist_lock); + goto end; } SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *, -- 1.7.7.6
| |