struct rb_root refs_by_node;
        int pid;
        struct vm_area_struct *vma;
+       struct mm_struct *vma_vm_mm;
        struct task_struct *tsk;
        struct files_struct *files;
        struct hlist_node deferred_work_node;
        if (mm) {
                down_write(&mm->mmap_sem);
                vma = proc->vma;
-               if (vma && mm != vma->vm_mm) {
+               if (vma && mm != proc->vma_vm_mm) {
                        pr_err("binder: %d: vma mm and task mm mismatch\n",
                                proc->pid);
                        vma = NULL;
                     (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags,
                     (unsigned long)pgprot_val(vma->vm_page_prot));
        proc->vma = NULL;
+       proc->vma_vm_mm = NULL;
        binder_defer_work(proc, BINDER_DEFERRED_PUT_FILES);
 }
 
        barrier();
        proc->files = get_files_struct(proc->tsk);
        proc->vma = vma;
+       proc->vma_vm_mm = vma->vm_mm;
 
        /*printk(KERN_INFO "binder_mmap: %d %lx-%lx maps %p\n",
                 proc->pid, vma->vm_start, vma->vm_end, proc->buffer);*/