xen: Drop DOMCTL_getmemlist and xc_get_pfn_list()

c/s 4ddf474e2 "tools/xen-mceinj: Pass in GPA when injecting through
MSR_MCI_ADDR" removed the remaining user of hypercall.

It has been listed as broken, deprecated and wont-fix since XSA-74, so take
this opportunity to remove it completely.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Andrew Cooper committed 2018-01-26 18:28:47 +00:00
1 parent d933f1a53c
commit 94450e36bf
7 files changed
+1 -129

No files matched your search

-7
View File
@@ -1514,13 +1514,6 @@ unsigned long xc_translate_foreign_address(xc_interface *xch, uint32_t dom,
int vcpu, unsigned long long virt);
/**
* DEPRECATED. Avoid using this, as it does not correctly account for PFNs
* without a backing MFN.
*/
int xc_get_pfn_list(xc_interface *xch, uint32_t domid, uint64_t *pfn_buf,
unsigned long max_pfns);
int xc_copy_to_domain_page(xc_interface *xch, uint32_t domid,
unsigned long dst_pfn, const char *src_page);
-27
View File
@@ -387,33 +387,6 @@ int xc_machphys_mfn_list(xc_interface *xch,
return rc;
}
int xc_get_pfn_list(xc_interface *xch,
uint32_t domid,
uint64_t *pfn_buf,
unsigned long max_pfns)
{
DECLARE_DOMCTL;
DECLARE_HYPERCALL_BOUNCE(pfn_buf, max_pfns * sizeof(*pfn_buf), XC_HYPERCALL_BUFFER_BOUNCE_OUT);
int ret;
if ( xc_hypercall_bounce_pre(xch, pfn_buf) )
{
PERROR("xc_get_pfn_list: pfn_buf bounce failed");
return -1;
}
domctl.cmd = XEN_DOMCTL_getmemlist;
domctl.domain = domid;
domctl.u.getmemlist.max_pfns = max_pfns;
set_xen_guest_handle(domctl.u.getmemlist.buffer, pfn_buf);
ret = do_domctl(xch, &domctl);
xc_hypercall_bounce_post(xch, pfn_buf);
return (ret < 0) ? -1 : domctl.u.getmemlist.num_pfns;
}
long xc_get_tot_pages(xc_interface *xch, uint32_t domid)
{
xc_dominfo_t info;
-3
View File
@@ -244,9 +244,6 @@ external map_foreign_range: handle -> domid -> int
-> nativeint -> Xenmmap.mmap_interface
= "stub_map_foreign_range"
external domain_get_pfn_list: handle -> domid -> nativeint -> nativeint array
= "stub_xc_domain_get_pfn_list"
external domain_assign_device: handle -> domid -> (int * int * int * int) -> unit
= "stub_xc_domain_assign_device"
external domain_deassign_device: handle -> domid -> (int * int * int * int) -> unit
-3
View File
@@ -154,9 +154,6 @@ external domain_memory_increase_reservation :
external map_foreign_range :
handle -> domid -> int -> nativeint -> Xenmmap.mmap_interface
= "stub_map_foreign_range"
external domain_get_pfn_list :
handle -> domid -> nativeint -> nativeint array
= "stub_xc_domain_get_pfn_list"
external domain_assign_device: handle -> domid -> (int * int * int * int) -> unit
= "stub_xc_domain_assign_device"
-32
View File
@@ -1009,38 +1009,6 @@ CAMLprim value stub_shadow_allocation_set(value xch, value domid,
CAMLreturn(Val_unit);
}
CAMLprim value stub_xc_domain_get_pfn_list(value xch, value domid,
value nr_pfns)
{
CAMLparam3(xch, domid, nr_pfns);
CAMLlocal2(array, v);
unsigned long c_nr_pfns;
long ret, i;
uint64_t *c_array;
c_nr_pfns = Nativeint_val(nr_pfns);
c_array = malloc(sizeof(uint64_t) * c_nr_pfns);
if (!c_array)
caml_raise_out_of_memory();
ret = xc_get_pfn_list(_H(xch), _D(domid),
c_array, c_nr_pfns);
if (ret < 0) {
free(c_array);
failwith_xc(_H(xch));
}
array = caml_alloc(ret, 0);
for (i = 0; i < ret; i++) {
v = caml_copy_nativeint(c_array[i]);
Store_field(array, i, v);
}
free(c_array);
CAMLreturn(array);
}
CAMLprim value stub_xc_domain_ioport_permission(value xch, value domid,
value start_port, value nr_ports,
value allow)
-56
View File
@@ -413,62 +413,6 @@ long arch_do_domctl(
break;
}
case XEN_DOMCTL_getmemlist:
{
unsigned long max_pfns = domctl->u.getmemlist.max_pfns;
uint64_t mfn;
struct page_info *page;
if ( unlikely(d->is_dying) )
{
ret = -EINVAL;
break;
}
/*
* XSA-74: This sub-hypercall is broken in several ways:
* - lock order inversion (p2m locks inside page_alloc_lock)
* - no preemption on huge max_pfns input
* - not (re-)checking d->is_dying with page_alloc_lock held
* - not honoring start_pfn input (which libxc also doesn't set)
* Additionally it is rather useless, as the result is stale by the
* time the caller gets to look at it.
* As it only has a single, non-production consumer (xen-mceinj),
* rather than trying to fix it we restrict it for the time being.
*/
if ( /* No nested locks inside copy_to_guest_offset(). */
paging_mode_external(currd) ||
/* Arbitrary limit capping processing time. */
max_pfns > GB(4) / PAGE_SIZE )
{
ret = -EOPNOTSUPP;
break;
}
spin_lock(&d->page_alloc_lock);
ret = i = 0;
page_list_for_each(page, &d->page_list)
{
if ( i >= max_pfns )
break;
mfn = page_to_mfn(page);
if ( copy_to_guest_offset(domctl->u.getmemlist.buffer,
i, &mfn, 1) )
{
ret = -EFAULT;
break;
}
++i;
}
spin_unlock(&d->page_alloc_lock);
domctl->u.getmemlist.num_pfns = i;
copyback = true;
break;
}
case XEN_DOMCTL_getpageframeinfo3:
{
unsigned int num = domctl->u.getpageframeinfo3.num;
+1 -1
View File
@@ -1113,7 +1113,7 @@ struct xen_domctl {
#define XEN_DOMCTL_pausedomain 3
#define XEN_DOMCTL_unpausedomain 4
#define XEN_DOMCTL_getdomaininfo 5
#define XEN_DOMCTL_getmemlist 6
/* #define XEN_DOMCTL_getmemlist 6 Removed */
/* #define XEN_DOMCTL_getpageframeinfo 7 Obsolete - use getpageframeinfo3 */
/* #define XEN_DOMCTL_getpageframeinfo2 8 Obsolete - use getpageframeinfo3 */
#define XEN_DOMCTL_setvcpuaffinity 9
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.