Juergen Gross abf1fd5919 xen/blkfront: don't use gnttab_query_foreign_access() for mapped status
It isn't enough to check whether a grant is still being in use by
calling gnttab_query_foreign_access(), as a mapping could be realized
by the other side just after having called that function.

In case the call was done in preparation of revoking a grant it is
better to do so via gnttab_end_foreign_access_ref() and check the
success of that operation instead.

For the ring allocation use alloc_pages_exact() in order to avoid
high order pages in case of a multi-page ring.

If a grant wasn't unmapped by the backend without persistent grants
being used, set the device state to "error".

This is CVE-2022-23036 / part of XSA-396.

Reported-by: Demi Marie Obenour <demi@invisiblethingslab.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
---
V2:
- use gnttab_try_end_foreign_access()
V4:
- use alloc_pages_exact() and free_pages_exact()
- set state to error if backend didn't unmap (Roger Pau Monné)
2022-03-07 09:48:54 +01:00
..
2022-01-23 06:20:44 +02:00
2021-11-29 06:35:21 -07:00
2022-01-17 07:19:40 -07:00
2021-12-16 10:57:04 -07:00
2021-12-16 10:57:04 -07:00
2021-11-09 11:24:08 -08:00
2021-11-29 06:38:35 -07:00
2021-11-29 06:38:35 -07:00
2021-11-29 06:38:35 -07:00
2021-11-29 06:38:35 -07:00