[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[xen staging] tools/xenstore: don't store domU's mfn of ring page in xenstored



commit 122b52230aa5b79d65e18b8b77094027faa2f8e2
Author:     Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Thu Apr 30 07:38:42 2020 +0200
Commit:     Julien Grall <jgrall@xxxxxxxxxx>
CommitDate: Thu May 14 09:35:30 2020 +0100

    tools/xenstore: don't store domU's mfn of ring page in xenstored
    
    The XS_INTRODUCE command has two parameters: the mfn (or better: gfn)
    of the domain's xenstore ring page and the event channel of the
    domain for communicating with Xenstore.
    
    The gfn is not really needed. It is stored in the per-domain struct
    in xenstored and in case of another XS_INTRODUCE for the domain it
    is tested to match the original value. If it doesn't match the
    command is aborted via EINVAL, otherwise the event channel to the
    domain is recreated.
    
    As XS_INTRODUCE is limited to dom0 and there is no real downside of
    recreating the event channel just omit the test for the gfn to
    match and don't return EINVAL for multiple XS_INTRODUCE calls.
    
    Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
    Reviewed-by: Julien Grall <jgrall@xxxxxxxxxx>
    Acked-by: Wei Liu <wl@xxxxxxx>
---
 tools/xenstore/xenstored_domain.c | 15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

diff --git a/tools/xenstore/xenstored_domain.c 
b/tools/xenstore/xenstored_domain.c
index 5858185211..06359503f0 100644
--- a/tools/xenstore/xenstored_domain.c
+++ b/tools/xenstore/xenstored_domain.c
@@ -55,10 +55,6 @@ struct domain
           repeated domain introductions. */
        evtchn_port_t remote_port;
 
-       /* The mfn associated with the event channel, used only to validate
-          repeated domain introductions. */
-       unsigned long mfn;
-
        /* Domain path in store. */
        char *path;
 
@@ -363,13 +359,12 @@ static void domain_conn_reset(struct domain *domain)
        domain->interface->rsp_cons = domain->interface->rsp_prod = 0;
 }
 
-/* domid, mfn, evtchn, path */
+/* domid, gfn, evtchn, path */
 int do_introduce(struct connection *conn, struct buffered_data *in)
 {
        struct domain *domain;
        char *vec[3];
        unsigned int domid;
-       unsigned long mfn;
        evtchn_port_t port;
        int rc;
        struct xenstore_domain_interface *interface;
@@ -381,7 +376,7 @@ int do_introduce(struct connection *conn, struct 
buffered_data *in)
                return EACCES;
 
        domid = atoi(vec[0]);
-       mfn = atol(vec[1]);
+       /* Ignore the gfn, we don't need it. */
        port = atoi(vec[2]);
 
        /* Sanity check args. */
@@ -402,21 +397,19 @@ int do_introduce(struct connection *conn, struct 
buffered_data *in)
                        return rc;
                }
                domain->interface = interface;
-               domain->mfn = mfn;
 
                /* Now domain belongs to its connection. */
                talloc_steal(domain->conn, domain);
 
                fire_watches(NULL, in, "@introduceDomain", false);
-       } else if ((domain->mfn == mfn) && (domain->conn != conn)) {
+       } else {
                /* Use XS_INTRODUCE for recreating the xenbus event-channel. */
                if (domain->port)
                        xenevtchn_unbind(xce_handle, domain->port);
                rc = xenevtchn_bind_interdomain(xce_handle, domid, port);
                domain->port = (rc == -1) ? 0 : rc;
                domain->remote_port = port;
-       } else
-               return EINVAL;
+       }
 
        domain_conn_reset(domain);
 
--
generated by git-patchbot for /home/xen/git/xen.git#staging



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.