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

[Xen-changelog] [qemu-upstream-unstable] xen_disk: mark ioreq as mapped before unmapping in error case

commit 99b5b999a4fc03ad6164b71af97406657c1ff14a
Author:     Matthew Daley <mattjd@xxxxxxxxx>
AuthorDate: Thu Oct 10 14:10:48 2013 +0000
Commit:     Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
CommitDate: Tue Dec 3 14:07:20 2013 -0600

    xen_disk: mark ioreq as mapped before unmapping in error case
    Commit 4472beae modified the semantics of ioreq_{un,}map so that they are
    idempotent if called when they're not needed (ie., twice in a row). However,
    it neglected to handle the case where batch mapping is not being used (the
    default), and one of the grants fails to map. In this case, ioreq_unmap will
    be called to unwind and unmap any mappings already performed, but 
    simply returns due to the aforementioned change (the ioreq has not already
    been marked as mapped).
    The frontend user can therefore force xen_disk to leak grant mappings, a
    per-domain limited resource.
    Fix by marking the ioreq as mapped before calling ioreq_unmap in this
    Signed-off-by: Matthew Daley <mattjd@xxxxxxxxx>
    Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
    (cherry picked from commit a76f48e53382e6f039db6278443e3ce437653302)
    Signed-off-by: Michael Roth <mdroth@xxxxxxxxxxxxxxxxxx>
 hw/block/xen_disk.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
index 727f433..03e30d7 100644
--- a/hw/block/xen_disk.c
+++ b/hw/block/xen_disk.c
@@ -405,6 +405,7 @@ static int ioreq_map(struct ioreq *ioreq)
                 xen_be_printf(&ioreq->blkdev->xendev, 0,
                               "can't map grant ref %d (%s, %d maps)\n",
                               refs[i], strerror(errno), 
+                ioreq->mapped = 1;
                 return -1;
generated by git-patchbot for /home/xen/git/qemu-upstream-unstable.git

Xen-changelog mailing list



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