]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
task_mmu rcu fix
authorLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 16 Mar 2021 19:58:05 +0000 (15:58 -0400)
committerLiam R. Howlett <Liam.Howlett@Oracle.com>
Tue, 16 Mar 2021 19:58:05 +0000 (15:58 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
fs/proc/task_mmu.c

index 5dec40a64023015a657143fbaa0a057bd8043eb2..e1b6c070a5c71daec23b00562df9aad8c60aef7c 100644 (file)
@@ -1241,12 +1241,14 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
                }
                tlb_gather_mmu(&tlb, mm, 0, -1);
                if (type == CLEAR_REFS_SOFT_DIRTY) {
+                       mas_lock(&mas);
                        mas_for_each(&mas, vma, ULONG_MAX) {
                                if (!(vma->vm_flags & VM_SOFTDIRTY))
                                        continue;
                                mmap_read_unlock(mm);
                                if (mmap_write_lock_killable(mm)) {
                                        count = -EINTR;
+                                       mas_unlock(&mas);
                                        goto out_mm;
                                }
                                mas_set(&mas, 0);
@@ -1257,6 +1259,7 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
                                mmap_write_downgrade(mm);
                                break;
                        }
+                       mas_unlock(&mas);
 
                        mmu_notifier_range_init(&range, MMU_NOTIFY_SOFT_DIRTY,
                                                0, NULL, mm, 0, -1UL);