Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ad9a64f authored by Andy King's avatar Andy King Committed by David S. Miller
Browse files

VMXNET3: Check for map error in vmxnet3_set_mc



We should check if the map of the table actually succeeds, and also free
resources accordingly.

Version bumped to 1.2.1.0

Acked-by: default avatarShelley Gong <shelleygong@vmware.com>
Acked-by: default avatarBhavesh Davda <bhavesh@vmware.com>
Signed-off-by: default avatarAndy King <acking@vmware.com>
Reported-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c5eba0b6
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -2056,7 +2056,6 @@ vmxnet3_set_mc(struct net_device *netdev)
		if (!netdev_mc_empty(netdev)) {
			new_table = vmxnet3_copy_mc(netdev);
			if (new_table) {
				new_mode |= VMXNET3_RXM_MCAST;
				rxConf->mfTableLen = cpu_to_le16(
					netdev_mc_count(netdev) * ETH_ALEN);
				new_table_pa = dma_map_single(
@@ -2064,15 +2063,18 @@ vmxnet3_set_mc(struct net_device *netdev)
							new_table,
							rxConf->mfTableLen,
							PCI_DMA_TODEVICE);
			}

			if (new_table_pa) {
				new_mode |= VMXNET3_RXM_MCAST;
				rxConf->mfTablePA = cpu_to_le64(new_table_pa);
			} else {
				netdev_info(netdev, "failed to copy mcast list"
					    ", setting ALL_MULTI\n");
				netdev_info(netdev,
					    "failed to copy mcast list, setting ALL_MULTI\n");
				new_mode |= VMXNET3_RXM_ALL_MULTI;
			}
		}


	if (!(new_mode & VMXNET3_RXM_MCAST)) {
		rxConf->mfTableLen = 0;
		rxConf->mfTablePA = 0;
@@ -2091,12 +2093,11 @@ vmxnet3_set_mc(struct net_device *netdev)
			       VMXNET3_CMD_UPDATE_MAC_FILTERS);
	spin_unlock_irqrestore(&adapter->cmd_lock, flags);

	if (new_table) {
	if (new_table_pa)
		dma_unmap_single(&adapter->pdev->dev, new_table_pa,
				 rxConf->mfTableLen, PCI_DMA_TODEVICE);
	kfree(new_table);
}
}

void
vmxnet3_rq_destroy_all(struct vmxnet3_adapter *adapter)
+2 −2
Original line number Diff line number Diff line
@@ -69,10 +69,10 @@
/*
 * Version numbers
 */
#define VMXNET3_DRIVER_VERSION_STRING   "1.2.0.0-k"
#define VMXNET3_DRIVER_VERSION_STRING   "1.2.1.0-k"

/* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */
#define VMXNET3_DRIVER_VERSION_NUM      0x01020000
#define VMXNET3_DRIVER_VERSION_NUM      0x01020100

#if defined(CONFIG_PCI_MSI)
	/* RSS only makes sense if MSI-X is supported. */