|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC Patch v4 5/9] check if mfn is supported by IOCTL_PRIVCMD_MMAPBATCH before calling ioctl()
If mfn is invalid, ioctl(fd, IOCTL_PRIVCMD_MMAPBATCH, ..) also returns 0,
and set error information in error bits(bits28-31). So if the user input
a large valid mfn, we cannot reliably distinguish between a large MFN and
an error. So we should check the input mfn before calling ioctl().
The user can input more than one mfn, and part of them are ~0UL. In this
case, the user expects we can map the memory for all valid mfn. So we
cannot just return NULL if some mfn is not supported.
Signed-off-by: Wen Congyang <wency@xxxxxxxxxxxxxx>
---
tools/libxc/xc_linux_osdep.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/tools/libxc/xc_linux_osdep.c b/tools/libxc/xc_linux_osdep.c
index a19e4b6..d11bcee 100644
--- a/tools/libxc/xc_linux_osdep.c
+++ b/tools/libxc/xc_linux_osdep.c
@@ -321,6 +321,18 @@ static void *linux_privcmd_map_foreign_bulk(xc_interface
*xch, xc_osdep_handle h
}
memcpy(pfn, arr, num * sizeof(*arr));
+ for ( i = 0; i < num; i++ )
+ {
+ /*
+ * IOCTL_PRIVCMD_MMAPBATCH doesn't support the mfn which
+ * error bits are set
+ */
+ if ( pfn[i] & PRIVCMD_MMAPBATCH_MFN_ERROR )
+ {
+ pfn[i] = ~0UL;
+ err[i] = -EINVAL;
+ }
+ }
ioctlx.num = num;
ioctlx.dom = dom;
@@ -333,6 +345,9 @@ static void *linux_privcmd_map_foreign_bulk(xc_interface
*xch, xc_osdep_handle h
for ( i = 0; i < num; ++i )
{
+ if ( pfn[i] == ~0UL )
+ continue;
+
switch ( pfn[i] ^ arr[i] )
{
case 0:
--
1.9.3
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |