Jan Beulich
2011-Dec-23  11:36 UTC
[PATCH] linux-2.6.18/blktap: ensure mmap() is called only once per region
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/drivers/xen/blktap/blktap.c
+++ b/drivers/xen/blktap/blktap.c
@@ -635,6 +635,7 @@ static int blktap_release(struct inode *
 
 	info->ring_ok = 0;
 	smp_wmb();
+	info->rings_vstart = 0;
 
 	mm = xchg(&info->mm, NULL);
 	if (mm)
@@ -694,7 +695,13 @@ static int blktap_mmap(struct file *filp
 		WPRINTK("blktap: mmap, retrieving idx failed\n");
 		return -ENOMEM;
 	}
-	
+
+	if (info->rings_vstart) {
+		WPRINTK("mmap already called on filp %p (minor %d)\n",
+			filp, info->minor);
+		return -EPERM;
+	}
+
 	vma->vm_flags |= VM_RESERVED;
 	vma->vm_ops = &blktap_vm_ops;
 
@@ -746,6 +753,7 @@ static int blktap_mmap(struct file *filp
 	/* Clear any active mappings. */
 	zap_page_range(vma, vma->vm_start, 
 		       vma->vm_end - vma->vm_start, NULL);
+	info->rings_vstart = 0;
 
 	return -ENOMEM;
 }
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel