ocfs2: fix null pointer dereference when access dlm_state before launching dlm thread
authorZongxun Wang <wangzongxun@huawei.com>
Thu, 3 Apr 2014 21:46:45 +0000 (14:46 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 3 Apr 2014 23:20:53 +0000 (16:20 -0700)
When mounting an ocfs2 volume, it will firstly generate a file
/sys/kernel/debug/o2dlm/<uuid>/dlm_state, and then launch the dlm thread.
So the following situation will cause a null pointer dereference.
dlm_debug_init -> access file dlm_state which will call dlm_state_print ->
dlm_launch_thread

Move dlm_debug_init after dlm_launch_thread and dlm_launch_recovery_thread
can fix this issue.

Signed-off-by: Zongxun Wang <wangzongxun@huawei.com>
Signed-off-by: Joseph Qi <joseph.qi@huawei.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/ocfs2/dlm/dlmdomain.c

index 33660a4a52fac7f3a2da8439ffe5b45107e211b2..1307a8cff8dbedce7ae396d367d483a71fad91d1 100644 (file)
@@ -1877,19 +1877,19 @@ static int dlm_join_domain(struct dlm_ctxt *dlm)
                goto bail;
        }
 
-       status = dlm_debug_init(dlm);
+       status = dlm_launch_thread(dlm);
        if (status < 0) {
                mlog_errno(status);
                goto bail;
        }
 
-       status = dlm_launch_thread(dlm);
+       status = dlm_launch_recovery_thread(dlm);
        if (status < 0) {
                mlog_errno(status);
                goto bail;
        }
 
-       status = dlm_launch_recovery_thread(dlm);
+       status = dlm_debug_init(dlm);
        if (status < 0) {
                mlog_errno(status);
                goto bail;