Commit 06673c21 authored by Jan Beulich's avatar Jan Beulich Committed by Paolo Abeni
Browse files

xen-netfront: re-order error checks in xennet_get_responses()



Check the retrieved grant reference first; there's no point trying to
have xennet_move_rx_slot() move invalid data (and further defer
recognition of the issue, likely making diagnosis yet more difficult).

Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent ad39bafd
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -1043,16 +1043,6 @@ static int xennet_get_responses(struct netfront_queue *queue,
	}

	for (;;) {
		if (unlikely(rx->status < 0 ||
			     rx->offset + rx->status > XEN_PAGE_SIZE)) {
			if (net_ratelimit())
				dev_warn(dev, "rx->offset: %u, size: %d\n",
					 rx->offset, rx->status);
			xennet_move_rx_slot(queue, skb, ref);
			err = -EINVAL;
			goto next;
		}

		/*
		 * This definitely indicates a bug, either in this driver or in
		 * the backend driver. In future this should flag the bad
@@ -1066,6 +1056,16 @@ static int xennet_get_responses(struct netfront_queue *queue,
			goto next;
		}

		if (unlikely(rx->status < 0 ||
			     rx->offset + rx->status > XEN_PAGE_SIZE)) {
			if (net_ratelimit())
				dev_warn(dev, "rx->offset: %u, size: %d\n",
					 rx->offset, rx->status);
			xennet_move_rx_slot(queue, skb, ref);
			err = -EINVAL;
			goto next;
		}

		if (!gnttab_end_foreign_access_ref(ref)) {
			dev_alert(dev,
				  "Grant still in use by backend domain\n");