tools/xenconsoled: Initialise pointers before trying to use them
authorAndrew Cooper <andrew.cooper3@citrix.com>
Thu, 7 Mar 2013 16:20:50 +0000 (16:20 +0000)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Thu, 7 Mar 2013 17:53:55 +0000 (17:53 +0000)
This is a regression introduced by

"Switch from select() to poll() in xenconsoled's IO loop."
  hg c/s 26405:7359c3122c5d
  git cc5434c933153c4b8812d1df901f8915c22830a8

which results in reliable segfaults during VM power operations.

Switch to calloc(3) in an effort to avoid similar problems with changes in the
future.

Signed-off-by: Marcus Granado <marcus.granado@citrix.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
tools/console/daemon/io.c

index 176ac3cc535059dd6857b93b1316a5aa1396ab3c..50f91b58ddccea796be3f47330df9f39cbbfda8b 100644 (file)
@@ -651,7 +651,7 @@ static struct domain *create_domain(int domid)
                return NULL;
        }
 
-       dom = (struct domain *)malloc(sizeof(struct domain));
+       dom = calloc(1, sizeof *dom);
        if (dom == NULL) {
                dolog(LOG_ERR, "Out of memory %s:%s():L%d",
                      __FILE__, __FUNCTION__, __LINE__);
@@ -672,21 +672,11 @@ static struct domain *create_domain(int domid)
        dom->slave_fd = -1;
        dom->log_fd = -1;
 
-       dom->is_dead = false;
-       dom->buffer.data = 0;
-       dom->buffer.consumed = 0;
-       dom->buffer.size = 0;
-       dom->buffer.capacity = 0;
-       dom->buffer.max_capacity = 0;
-       dom->event_count = 0;
        dom->next_period = ((long long)ts.tv_sec * 1000) + (ts.tv_nsec / 1000000) + RATE_LIMIT_PERIOD;
-       dom->next = NULL;
 
        dom->ring_ref = -1;
        dom->local_port = -1;
        dom->remote_port = -1;
-       dom->interface = NULL;
-       dom->xce_handle = NULL;
 
        if (!watch_domain(dom, true))
                goto out;