[lkml]   [2002]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
Patch in this message
Subject[patch] mmap bug with drivers that adjust vm_start
Hello all,

The patch below fixes a problem whereby a vma which has its vm_start
address changed by the file's mmap operation can result in the vma
being inserted into the wrong location within the vma tree. This
results in page faults not being handled correctly leading to SEGVs,
as well as various BUG()s hitting on exit of the mm. The fix is to
recalculate the insertion point when we know the address has changed.
Comments? Patch is against 2.4.19-pre4.

"A man with a bass just walked in,
and he's putting it down
on the floor."

:r ~/patches/v2.4.19-pre4-mmap_fix.diff
--- retest.3/mm/ Mon Mar 25 19:38:10 2002
+++ retest.3/mm/mmap.c Mon Mar 25 22:40:40 2002
@@ -548,7 +548,14 @@
* Answer: Yes, several device drivers can do it in their
* f_op->mmap method. -DaveM
- addr = vma->vm_start;
+ if (addr != vma->vm_start) {
+ /* Since addr changed, we rely on the mmap op to prevent
+ * collisions with existing vmas and just use find_vma_prepare
+ * to update the tree pointers.
+ */
+ addr = vma->vm_start;
+ find_vma_prepare(mm, addr, &prev, &rb_link, &rb_parent);
+ }

vma_link(mm, vma, prev, rb_link, rb_parent);
if (correct_wcount)
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at
Please read the FAQ at

 \ /
  Last update: 2005-03-22 13:22    [W:0.085 / U:0.944 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site