All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] Fix broken IOCTL_PRIVCMD_MMAPBATCH (old version).
@ 2012-11-16 10:47 Mats Petersson
  2012-11-16 14:46 ` David Vrabel
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Mats Petersson @ 2012-11-16 10:47 UTC (permalink / raw)
  To: xen-devel; +Cc: Mats Petersson, konrad.wilk

Most code-paths prefer the MMAPBATCH_V2, so this wasn't very obvious
that it broke. The return value is set early on to -EINVAL, and if all
goes well, the "set top bits of the MFN's" never gets called, so the
return value is still EINVAL when the function gets to the end, causing
the caller to think it went wrong (which it didn't!)

Signed off by: Mats Petersson <mats.petersson@citrix.com>
---
 drivers/xen/privcmd.c |   18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/drivers/xen/privcmd.c b/drivers/xen/privcmd.c
index 8adb9cc..b378343 100644
--- a/drivers/xen/privcmd.c
+++ b/drivers/xen/privcmd.c
@@ -347,6 +347,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata, int version)
 
 	if (ret)
 		goto out;
+
 	if (list_empty(&pagelist)) {
 		ret = -EINVAL;
 		goto out;
@@ -383,12 +384,17 @@ static long privcmd_ioctl_mmap_batch(void __user *udata, int version)
 
 	up_write(&mm->mmap_sem);
 
-	if (state.global_error && (version == 1)) {
-		/* Write back errors in second pass. */
-		state.user_mfn = (xen_pfn_t *)m.arr;
-		state.err      = err_array;
-		ret = traverse_pages(m.num, sizeof(xen_pfn_t),
-				     &pagelist, mmap_return_errors_v1, &state);
+	if (version == 1) {
+		if (state.global_error) {
+			/* Write back errors in second pass. */
+			state.user_mfn = (xen_pfn_t *)m.arr;
+			state.err      = err_array;
+			ret = traverse_pages(m.num, sizeof(xen_pfn_t),
+					     &pagelist, mmap_return_errors_v1, &state);
+		}
+		else
+			ret = 0;
+
 	} else if (version == 2) {
 		ret = __copy_to_user(m.err, err_array, m.num * sizeof(int));
 		if (ret)
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-11-16 15:35 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-16 10:47 [PATCH 1/2] Fix broken IOCTL_PRIVCMD_MMAPBATCH (old version) Mats Petersson
2012-11-16 14:46 ` David Vrabel
2012-11-16 15:02 ` [PATCH] Correctly return success from IOCTL_PRIVCMD_MMAPBATCH Mats Petersson
2012-11-16 15:35   ` Konrad Rzeszutek Wilk
2012-11-16 15:12 ` Mats Petersson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.