]> xenbits.xensource.com Git - people/liuw/mini-os.git/commitdiff
mini-os: fix use-after-free in xs_daemon_close event iteration
authorMatthew Daley <mattjd@gmail.com>
Tue, 10 Sep 2013 14:34:19 +0000 (02:34 +1200)
committerIan Campbell <ian.campbell@citrix.com>
Fri, 13 Sep 2013 12:14:51 +0000 (13:14 +0100)
We need to get the next pointer before the freeing of the event.

Coverity-ID: 1056173
Signed-off-by: Matthew Daley <mattjd@gmail.com>
Acked-By: Samuel Thibault <samuel.thibault@ens-lyon.org>
lib/xs.c

index a2a122098cce7d42647c328283af021787f83f27..c603d178bf53f4740c7ca4d0dbccbce27eec3786 100644 (file)
--- a/lib/xs.c
+++ b/lib/xs.c
@@ -29,9 +29,12 @@ struct xs_handle *xs_daemon_open()
 void xs_daemon_close(struct xs_handle *h)
 {
     int fd = _xs_fileno(h);
-    struct xenbus_event *event;
-    for (event = files[fd].xenbus.events; event; event = event->next)
+    struct xenbus_event *event, *next;
+    for (event = files[fd].xenbus.events; event; event = next)
+    {
+        next = event->next;
         free(event);
+    }
     files[fd].type = FTYPE_NONE;
 }