Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2e75bc2 authored by Jennifer Herbert's avatar Jennifer Herbert Committed by David Vrabel
Browse files

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



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>
parent dab069c6
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -326,10 +326,13 @@ static int xenbus_write_transaction(unsigned msg_type,
	}

	if (msg_type == XS_TRANSACTION_START) {
		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 (msg_type == XS_TRANSACTION_END) {
		}
	} else if (u->u.msg.type == XS_TRANSACTION_END) {
		list_for_each_entry(trans, &u->transactions, list)
			if (trans->handle.id == u->u.msg.tx_id)
				break;