From: Keir Fraser Date: Thu, 21 Jan 2010 15:05:02 +0000 (+0000) Subject: xen/privcmd: mmapbatch-v2 fixes X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=330acc35caaeb8cb5eb071e7b595e3d75976d9b3;p=legacy%2Flinux-2.6.18-xen.git xen/privcmd: mmapbatch-v2 fixes - clear error indication array when no error encountered - no need to copy back mfn array in compat mode shim Signed-off-by: Jan Beulich --- diff --git a/drivers/xen/privcmd/compat_privcmd.c b/drivers/xen/privcmd/compat_privcmd.c index cab5663e..cb336a25 100644 --- a/drivers/xen/privcmd/compat_privcmd.c +++ b/drivers/xen/privcmd/compat_privcmd.c @@ -103,7 +103,7 @@ int privcmd_ioctl_32(int fd, unsigned int cmd, unsigned long arg) struct privcmd_mmapbatch_v2_32 n32; #ifdef xen_pfn32_t xen_pfn_t *__user arr; - xen_pfn32_t *__user arr32; + const xen_pfn32_t *__user arr32; unsigned int i; #endif @@ -134,17 +134,6 @@ int privcmd_ioctl_32(int fd, unsigned int cmd, unsigned long arg) #endif ret = sys_ioctl(fd, IOCTL_PRIVCMD_MMAPBATCH_V2, (unsigned long)p); - -#ifdef xen_pfn32_t - for (i = 0; !ret && i < n32.num; ++i) { - xen_pfn_t mfn; - - if (get_user(mfn, arr + i) || put_user(mfn, arr32 + i)) - ret = -EFAULT; - else if (mfn != (xen_pfn32_t)mfn) - ret = -ERANGE; - } -#endif } break; default: diff --git a/drivers/xen/privcmd/privcmd.c b/drivers/xen/privcmd/privcmd.c index 50f14a9c..8792c2ff 100644 --- a/drivers/xen/privcmd/privcmd.c +++ b/drivers/xen/privcmd/privcmd.c @@ -409,7 +409,8 @@ static long privcmd_ioctl(struct file *file, ret = -EFAULT; i += nr; p += nr; } - } + } else if (clear_user(m.err, nr_pages * sizeof(*m.err))) + ret = -EFAULT; mmapbatch_v2_out: list_for_each_safe(l, l2, &pagelist)