You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.0 KiB
65 lines
2.0 KiB
5 years ago
|
From 9dac7f65e7ce9ba42a3edfa24a87b18bd484ef43 Mon Sep 17 00:00:00 2001
|
||
9 years ago
|
From: =?UTF-8?q?Marek=20Marczykowski-G=C3=B3recki?=
|
||
|
<marmarek@invisiblethingslab.com>
|
||
|
Date: Wed, 16 Dec 2015 05:19:37 +0100
|
||
6 years ago
|
Subject: [PATCH] xen-netfront: do not use data already exposed to backend
|
||
9 years ago
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
Backend may freely modify anything on shared page, so use data which was
|
||
|
supposed to be written there, instead of reading it back from the shared
|
||
|
page.
|
||
|
|
||
|
This is part of XSA155.
|
||
|
|
||
|
CC: stable@vger.kernel.org
|
||
|
Signed-off-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
||
|
---
|
||
6 years ago
|
drivers/net/xen-netfront.c | 9 +++++----
|
||
|
1 file changed, 5 insertions(+), 4 deletions(-)
|
||
9 years ago
|
|
||
|
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
|
||
5 years ago
|
index b981a17f2edd..66e972918f5b 100644
|
||
9 years ago
|
--- a/drivers/net/xen-netfront.c
|
||
|
+++ b/drivers/net/xen-netfront.c
|
||
6 years ago
|
@@ -456,7 +456,7 @@ static void xennet_tx_setup_grant(unsigned long gfn, unsigned int offset,
|
||
9 years ago
|
tx->flags = 0;
|
||
9 years ago
|
|
||
9 years ago
|
info->tx = tx;
|
||
|
- info->size += tx->size;
|
||
|
+ info->size += len;
|
||
|
}
|
||
9 years ago
|
|
||
9 years ago
|
static struct xen_netif_tx_request *xennet_make_first_txreq(
|
||
5 years ago
|
@@ -572,7 +572,7 @@ static netdev_tx_t xennet_start_xmit(struct sk_buff *skb, struct net_device *dev
|
||
9 years ago
|
int slots;
|
||
|
struct page *page;
|
||
|
unsigned int offset;
|
||
|
- unsigned int len;
|
||
|
+ unsigned int len, this_len;
|
||
|
unsigned long flags;
|
||
|
struct netfront_queue *queue = NULL;
|
||
|
unsigned int num_queues = dev->real_num_tx_queues;
|
||
5 years ago
|
@@ -632,14 +632,15 @@ static netdev_tx_t xennet_start_xmit(struct sk_buff *skb, struct net_device *dev
|
||
9 years ago
|
}
|
||
|
|
||
|
/* First request for the linear area. */
|
||
9 years ago
|
+ this_len = min_t(unsigned int, XEN_PAGE_SIZE - offset, len);
|
||
|
first_tx = tx = xennet_make_first_txreq(queue, skb,
|
||
|
page, offset, len);
|
||
|
- offset += tx->size;
|
||
|
+ offset += this_len;
|
||
|
if (offset == PAGE_SIZE) {
|
||
|
page++;
|
||
|
offset = 0;
|
||
|
}
|
||
9 years ago
|
- len -= tx->size;
|
||
|
+ len -= this_len;
|
||
|
|
||
|
if (skb->ip_summed == CHECKSUM_PARTIAL)
|
||
|
/* local packet? */
|
||
6 years ago
|
--
|
||
6 years ago
|
2.20.1
|
||
6 years ago
|
|