[FIX] Take mmap_sem on urp disarming in mm_release 10/47310/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 1 Sep 2015 15:52:45 +0000 (18:52 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Mon, 7 Sep 2015 08:33:35 +0000 (01:33 -0700)
Change-Id: I565d7f3d611f4173fd751014bd7519ccf7fc6218
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
us_manager/helper.c

index e5eeb2c..3c338e8 100644 (file)
@@ -388,7 +388,15 @@ static void unregister_cp(void)
 static unsigned long mr_cb(void *data)
 {
        struct task_struct *task = *(struct task_struct **)data;
+       struct mm_struct *mm = task->mm;
 
+       if (mm == NULL) {
+               pr_err("mm is NULL\n");
+               return 0;
+       }
+
+       /* TODO: this lock for synchronizing to disarm urp */
+       down_write(&mm->mmap_sem);
        if (task->tgid != task->pid) {
                struct sspt_proc *proc;
                struct hlist_head head = HLIST_HEAD_INIT;
@@ -414,6 +422,7 @@ static unsigned long mr_cb(void *data)
        } else {
                call_mm_release(task);
        }
+       up_write(&mm->mmap_sem);
 
        return 0;
 }