Commit 12d75ae7 authored by Jennifer Herbert's avatar Jennifer Herbert Committed by Sasha Levin

xenbus: Add proper handling of XS_ERROR from Xenbus for transactions.

[ Upstream commit a2e75bc2 ]

If Xenstore sends back a XS_ERROR for TRANSACTION_END, the driver BUGs
because it cannot find the matching transaction in the 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: default avatarJennifer Herbert <Jennifer.Herbert@citrix.com>
Signed-off-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
parent aad82778
...@@ -326,10 +326,13 @@ static int xenbus_write_transaction(unsigned msg_type, ...@@ -326,10 +326,13 @@ static int xenbus_write_transaction(unsigned msg_type,
} }
if (msg_type == XS_TRANSACTION_START) { if (msg_type == XS_TRANSACTION_START) {
if (u->u.msg.type == XS_ERROR)
kfree(trans);
else {
trans->handle.id = simple_strtoul(reply, NULL, 0); trans->handle.id = simple_strtoul(reply, NULL, 0);
list_add(&trans->list, &u->transactions); list_add(&trans->list, &u->transactions);
} else if (msg_type == XS_TRANSACTION_END) { }
} else if (u->u.msg.type == XS_TRANSACTION_END) {
list_for_each_entry(trans, &u->transactions, list) list_for_each_entry(trans, &u->transactions, list)
if (trans->handle.id == u->u.msg.tx_id) if (trans->handle.id == u->u.msg.tx_id)
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment