[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [linux-2.6.18-xen] xenbus: add proper handling of XS_ERROR from Xenbus for transactions
# HG changeset patch # User Jennifer Herbert <Jennifer.Herbert@xxxxxxxxxx> # Date 1425994719 -3600 # Node ID afe2ac5137b8c247dea886c732d09791fe44ac91 # Parent 72387b3c2252e38b55ff2c943388c32f0ae338e6 xenbus: add proper handling of XS_ERROR from Xenbus for transactions If Xenstore sends back a XS_ERROR for TRANSACTION_END, the driver wrongly removes the transaction from the transaction list. For TRANSACTION_START, it leaks memory. Check the message as returned from xenbus_dev_request_and_reply(), and clean up for TRANSACTION_START or discard the error for TRANSACTION_END. Signed-off-by: Jennifer Herbert <Jennifer.Herbert@xxxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Committed-by: Jan Beulich <jbeulich@xxxxxxxx> --- diff -r 72387b3c2252 -r afe2ac5137b8 drivers/xen/xenbus/xenbus_dev.c --- a/drivers/xen/xenbus/xenbus_dev.c Tue Mar 10 14:37:27 2015 +0100 +++ b/drivers/xen/xenbus/xenbus_dev.c Tue Mar 10 14:38:39 2015 +0100 @@ -343,9 +343,13 @@ static ssize_t xenbus_dev_write(struct f } if (msg_type == XS_TRANSACTION_START) { - trans->handle.id = simple_strtoul(reply, NULL, 0); - list_add(&trans->list, &u->transactions); - } else if (msg_type == XS_TRANSACTION_END) { + if (u->u.msg.type == XS_ERROR) + kfree(trans); + else { + trans->handle.id = simple_strtoul(reply, NULL, 0); + list_add(&trans->list, &u->transactions); + } + } else if (u->u.msg.type == XS_TRANSACTION_END) { list_del(&trans->list); kfree(trans); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |