xen/netfront: don't use gnttab_query_foreign_access() for mapped status

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Juergen Gross <jgross@xxxxxxxx>

Commit 31185df7e2b1d2fa1de4900247a12d7b9c7087eb upstream.

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.

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

Reported-by: Demi Marie Obenour <demi@xxxxxxxxxxxxxxxxxxxxxx>
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
 drivers/net/xen-netfront.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -424,14 +424,12 @@ static bool xennet_tx_buf_gc(struct netf
 			queue->tx_link[id] = TX_LINK_NONE;
 			skb = queue->tx_skbs[id];
 			queue->tx_skbs[id] = NULL;
-			if (unlikely(gnttab_query_foreign_access(
-				queue->grant_tx_ref[id]) != 0)) {
+			if (unlikely(!gnttab_end_foreign_access_ref(
+				queue->grant_tx_ref[id], GNTMAP_readonly))) {
 				dev_alert(dev,
 					  "Grant still in use by backend domain\n");
 				goto err;
 			}
-			gnttab_end_foreign_access_ref(
-				queue->grant_tx_ref[id], GNTMAP_readonly);
 			gnttab_release_grant_reference(
 				&queue->gref_tx_head, queue->grant_tx_ref[id]);
 			queue->grant_tx_ref[id] = GRANT_INVALID_REF;


Patches currently in stable-queue which might be from jgross@xxxxxxxx are

queue-5.16/xen-remove-gnttab_query_foreign_access.patch
queue-5.16/xen-netfront-don-t-use-gnttab_query_foreign_access-for-mapped-status.patch
queue-5.16/xen-scsifront-don-t-use-gnttab_query_foreign_access-for-mapped-status.patch
queue-5.16/xen-gnttab-fix-gnttab_end_foreign_access-without-page-specified.patch
queue-5.16/xen-netfront-react-properly-to-failing-gnttab_end_foreign_access_ref.patch
queue-5.16/xen-gntalloc-don-t-use-gnttab_query_foreign_access.patch
queue-5.16/xen-xenbus-don-t-let-xenbus_grant_ring-remove-grants-in-error-case.patch
queue-5.16/xen-grant-table-add-gnttab_try_end_foreign_access.patch
queue-5.16/xen-9p-use-alloc-free_pages_exact.patch
queue-5.16/xen-blkfront-don-t-use-gnttab_query_foreign_access-for-mapped-status.patch
queue-5.16/xen-pvcalls-use-alloc-free_pages_exact.patch



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux