summaryrefslogtreecommitdiffstats
path: root/virtio-net-Fix-DMA-from-the-stack-in-virtnet_set_mac_address.patch
diff options
context:
space:
mode:
Diffstat (limited to 'virtio-net-Fix-DMA-from-the-stack-in-virtnet_set_mac_address.patch')
-rw-r--r--virtio-net-Fix-DMA-from-the-stack-in-virtnet_set_mac_address.patch82
1 files changed, 0 insertions, 82 deletions
diff --git a/virtio-net-Fix-DMA-from-the-stack-in-virtnet_set_mac_address.patch b/virtio-net-Fix-DMA-from-the-stack-in-virtnet_set_mac_address.patch
deleted file mode 100644
index 1a392f929..000000000
--- a/virtio-net-Fix-DMA-from-the-stack-in-virtnet_set_mac_address.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From patchwork Tue Dec 6 02:10:58 2016
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: virtio-net: Fix DMA-from-the-stack in virtnet_set_mac_address()
-From: Andy Lutomirski <luto@kernel.org>
-X-Patchwork-Id: 702984
-X-Patchwork-Delegate: davem@davemloft.net
-Message-Id: <fe889e578d5dffa9ae0834b449a35fcfd1e10694.1480990173.git.luto@kernel.org>
-To: netdev@vger.kernel.org
-Cc: linux-kernel@vger.kernel.org, virtualization@lists.linux-foundation.org,
- Andy Lutomirski <luto@kernel.org>,
- "Michael S . Tsirkin" <mst@redhat.com>, Jason Wang <jasowang@redhat.com>,
- Laura Abbott <labbott@redhat.com>
-Date: Mon, 5 Dec 2016 18:10:58 -0800
-
-With CONFIG_VMAP_STACK=y, virtnet_set_mac_address() can be passed a
-pointer to the stack and it will OOPS. Copy the address to the heap
-to prevent the crash.
-
-Cc: Michael S. Tsirkin <mst@redhat.com>
-Cc: Jason Wang <jasowang@redhat.com>
-Cc: Laura Abbott <labbott@redhat.com>
-Reported-by: zbyszek@in.waw.pl
-Signed-off-by: Andy Lutomirski <luto@kernel.org>
-Acked-by: Jason Wang <jasowang@redhat.com>
-Acked-by: Michael S. Tsirkin <mst@redhat.com>
----
-
-Very lightly tested.
-
- drivers/net/virtio_net.c | 19 ++++++++++++++-----
- 1 file changed, 14 insertions(+), 5 deletions(-)
-
-diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
-index 7276d5a95bd0..cbf1c613c67a 100644
---- a/drivers/net/virtio_net.c
-+++ b/drivers/net/virtio_net.c
-@@ -969,12 +969,17 @@ static int virtnet_set_mac_address(struct net_device *dev, void *p)
- struct virtnet_info *vi = netdev_priv(dev);
- struct virtio_device *vdev = vi->vdev;
- int ret;
-- struct sockaddr *addr = p;
-+ struct sockaddr *addr;
- struct scatterlist sg;
-
-- ret = eth_prepare_mac_addr_change(dev, p);
-+ addr = kmalloc(sizeof(*addr), GFP_KERNEL);
-+ if (!addr)
-+ return -ENOMEM;
-+ memcpy(addr, p, sizeof(*addr));
-+
-+ ret = eth_prepare_mac_addr_change(dev, addr);
- if (ret)
-- return ret;
-+ goto out;
-
- if (virtio_has_feature(vdev, VIRTIO_NET_F_CTRL_MAC_ADDR)) {
- sg_init_one(&sg, addr->sa_data, dev->addr_len);
-@@ -982,7 +987,8 @@ static int virtnet_set_mac_address(struct net_device *dev, void *p)
- VIRTIO_NET_CTRL_MAC_ADDR_SET, &sg)) {
- dev_warn(&vdev->dev,
- "Failed to set mac address by vq command.\n");
-- return -EINVAL;
-+ ret = -EINVAL;
-+ goto out;
- }
- } else if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC) &&
- !virtio_has_feature(vdev, VIRTIO_F_VERSION_1)) {
-@@ -996,8 +1002,11 @@ static int virtnet_set_mac_address(struct net_device *dev, void *p)
- }
-
- eth_commit_mac_addr_change(dev, p);
-+ ret = 0;
-
-- return 0;
-+out:
-+ kfree(addr);
-+ return ret;
- }
-
- static struct rtnl_link_stats64 *virtnet_stats(struct net_device *dev,