diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 3f300c1a9bd0..2a1bef9203c6 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -726,6 +726,8 @@ static ssize_t pagemap_read(struct file *file, char __user *buf, down_read(¤t->mm->mmap_sem); ret = get_user_pages(current, current->mm, uaddr, pagecount, 1, 0, pages, NULL); + up_read(¤t->mm->mmap_sem); + if (ret < 0) goto out_free; @@ -774,7 +776,6 @@ out_pages: page_cache_release(page); } out_free: - up_read(¤t->mm->mmap_sem); kfree(pages); out_mm: mmput(mm);