diff options
| author | James Harper | 2007-02-10 01:28:41 +0100 |
|---|---|---|
| committer | James Harper | 2007-02-10 01:28:41 +0100 |
| commit | e1735d5fc26b15177e49f0756fa76c9850a30b21 (patch) | |
| tree | c434da5f95136b0d5400727e5f9c33349c423f89 /src/drivers/net/tg3.c | |
| parent | Fix padding problem - from Michael (diff) | |
| download | ipxe-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.c | 12 |
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; |
