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: Jan Beulich <jbeulich@suse.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
ad39bafda7
commit
06673c2102
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue