mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-12-28 00:35:01 +00:00
comedi: Flush partial mappings in error case
If some remap_pfn_range() calls succeeded before one failed, we still have buffer pages mapped into the userspace page tables when we drop the buffer reference with comedi_buf_map_put(bm). The userspace mappings are only cleaned up later in the mmap error path. Fix it by explicitly flushing all mappings in our VMA on the error path. See commit79a61cc3fc
("mm: avoid leaving partial pfn mappings around in error case"). Cc: stable@vger.kernel.org Fixes:ed9eccbe89
("Staging: add comedi core") Signed-off-by: Jann Horn <jannh@google.com> Link: https://lore.kernel.org/r/20241017-comedi-tlb-v3-1-16b82f9372ce@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9365f0de43
commit
ce8f9fb651
@ -2407,6 +2407,18 @@ static int comedi_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
|
||||
start += PAGE_SIZE;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/*
|
||||
* Leaving behind a partial mapping of a buffer we're about to
|
||||
* drop is unsafe, see remap_pfn_range_notrack().
|
||||
* We need to zap the range here ourselves instead of relying
|
||||
* on the automatic zapping in remap_pfn_range() because we call
|
||||
* remap_pfn_range() in a loop.
|
||||
*/
|
||||
if (retval)
|
||||
zap_vma_ptes(vma, vma->vm_start, size);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (retval == 0) {
|
||||
|
Loading…
Reference in New Issue
Block a user