summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/tg3.c
diff options
context:
space:
mode:
authorJames Harper2007-02-10 01:28:41 +0100
committerJames Harper2007-02-10 01:28:41 +0100
commite1735d5fc26b15177e49f0756fa76c9850a30b21 (patch)
treec434da5f95136b0d5400727e5f9c33349c423f89 /src/drivers/net/tg3.c
parentFix padding problem - from Michael (diff)
downloadipxe-e1735d5fc26b15177e49f0756fa76c9850a30b21.tar.gz
ipxe-e1735d5fc26b15177e49f0756fa76c9850a30b21.tar.xz
ipxe-e1735d5fc26b15177e49f0756fa76c9850a30b21.zip
Fix some bad pointer arithmatic in the tg3 driver that was causing the dynamic memory pool to be corrupted (or worse)
Diffstat (limited to 'src/drivers/net/tg3.c')
-rw-r--r--src/drivers/net/tg3.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/drivers/net/tg3.c b/src/drivers/net/tg3.c
index 1d94ba79..973573de 100644
--- a/src/drivers/net/tg3.c
+++ b/src/drivers/net/tg3.c
@@ -3167,16 +3167,16 @@ static void tg3_transmit(struct nic *nic, const char *dst_addr,
/* Copy the packet to the our local buffer */
frame = &tg3_bss.tx_frame[frame_idx];
- memcpy(frame[frame_idx].dst_addr, dst_addr, ETH_ALEN);
- memcpy(frame[frame_idx].src_addr, nic->node_addr, ETH_ALEN);
- frame[frame_idx].type = htons(type);
- memset(frame[frame_idx].data, 0, sizeof(frame[frame_idx].data));
- memcpy(frame[frame_idx].data, packet, size);
+ memcpy(frame->dst_addr, dst_addr, ETH_ALEN);
+ memcpy(frame->src_addr, nic->node_addr, ETH_ALEN);
+ frame->type = htons(type);
+ memset(frame->data, 0, sizeof(frame->data));
+ memcpy(frame->data, packet, size);
/* Setup the ring buffer entry to transmit */
txd = &tp->tx_ring[entry];
txd->addr_hi = 0; /* Etherboot runs under 4GB */
- txd->addr_lo = virt_to_bus(&frame[frame_idx]);
+ txd->addr_lo = virt_to_bus(frame);
txd->len_flags = ((size + ETH_HLEN) << TXD_LEN_SHIFT) | TXD_FLAG_END;
txd->vlan_tag = 0 << TXD_VLAN_TAG_SHIFT;