[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] hw/eepro100.c: Use extended TBD only where applicab
From: |
Naphtali Sprei |
Subject: |
[Qemu-devel] [PATCH] hw/eepro100.c: Use extended TBD only where applicable |
Date: |
Thu, 13 Aug 2009 15:01:20 +0300 |
User-agent: |
Thunderbird 2.0.0.22 (X11/20090804) |
Bug fix for segfault when run as i82551 HW:
Use Extended TBD only when HW supports it (i82558 and up).
Added assertions to guard from such buffer overflow
Introduce the MAX_TCB_BYTE_COUNT macro
Allocate buf big enough as HW needs (MAX_ETH_FRAME_SIZE -> MAX_TCB_BYTE_COUNT)
I don't feel 100% OK with the "s->device >= i82558B" condition
since it relies on the numeric (hex) value of those defines, which currently
is correct, but changes (which I don't forsee now) might break it.
Signed-off-by: Naphtali Sprei <address@hidden>
---
hw/eepro100.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/hw/eepro100.c b/hw/eepro100.c
index ec31a6a..907c0a1 100644
--- a/hw/eepro100.c
+++ b/hw/eepro100.c
@@ -715,8 +715,8 @@ static void eepro100_cu_command(EEPRO100State * s, uint8_t
val)
} else {
/* Flexible mode. */
uint8_t tbd_count = 0;
- if (!(s->configuration[6] & BIT(4))) {
- /* Extended TCB. */
+ if ((s->device >= i82558B) && !(s->configuration[6] & BIT(4)))
{
+ /* Extended Flexible TCB. */
assert(tcb_bytes == 0);
for (; tbd_count < 2; tbd_count++) {
uint32_t tx_buffer_address = ldl_phys(tbd_address);
@@ -724,7 +724,7 @@ static void eepro100_cu_command(EEPRO100State * s, uint8_t
val)
uint16_t tx_buffer_el = lduw_phys(tbd_address + 6);
tbd_address += 8;
logout
- ("TBD (extended mode): buffer address 0x%08x, size
0x%04x\n",
+ ("TBD (extended flexible mode): buffer address
0x%08x, size 0x%04x\n",
tx_buffer_address, tx_buffer_size);
cpu_physical_memory_read(tx_buffer_address, &buf[size],
tx_buffer_size);
--
1.6.3.3
- [Qemu-devel] [PATCH] hw/eepro100.c: Use extended TBD only where applicable,
Naphtali Sprei <=