xen/xenbus: ensure xenbus_map_ring_valloc() returns proper grant status
authorJuergen Gross <jgross@suse.com>
Thu, 26 Mar 2020 08:03:58 +0000 (09:03 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 2 May 2020 06:48:57 +0000 (08:48 +0200)
commitd9d4ea17d6d6f08f9f2700ead1d591f123baaddf
tree62aacb043c53b72a0923b82179ef96cac7cff0a0
parent8c627d4b15de928cad99a8017e3cb115aaf01a5c
xen/xenbus: ensure xenbus_map_ring_valloc() returns proper grant status

[ Upstream commit 6b51fd3f65a22e3d1471b18a1d56247e246edd46 ]

xenbus_map_ring_valloc() maps a ring page and returns the status of the
used grant (0 meaning success).

There are Xen hypervisors which might return the value 1 for the status
of a failed grant mapping due to a bug. Some callers of
xenbus_map_ring_valloc() test for errors by testing the returned status
to be less than zero, resulting in no error detected and crashing later
due to a not available ring page.

Set the return value of xenbus_map_ring_valloc() to GNTST_general_error
in case the grant status reported by Xen is greater than zero.

This is part of XSA-316.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Wei Liu <wl@xen.org>
Link: https://lore.kernel.org/r/20200326080358.1018-1-jgross@suse.com
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/xen/xenbus/xenbus_client.c