Avoid buffer overflow when sending slirp packets.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1744 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
pbrook 2006-02-04 22:15:28 +00:00
parent 191abaa2f0
commit d861b05ea3
5 changed files with 68 additions and 20 deletions

View file

@ -593,6 +593,17 @@ static uint32_t smc91c111_readl(void *opaque, target_phys_addr_t offset)
return val;
}
static int smc91c111_can_receive(void *opaque)
{
smc91c111_state *s = (smc91c111_state *)opaque;
if ((s->rcr & RCR_RXEN) == 0 || (s->rcr & RCR_SOFT_RST))
return 1;
if (s->allocated == (1 << NUM_PACKETS) - 1)
return 0;
return 1;
}
static void smc91c111_receive(void *opaque, const uint8_t *buf, int size)
{
smc91c111_state *s = (smc91c111_state *)opaque;
@ -697,6 +708,7 @@ void smc91c111_init(NICInfo *nd, uint32_t base, void *pic, int irq)
smc91c111_reset(s);
s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive, s);
s->vc = qemu_new_vlan_client(nd->vlan, smc91c111_receive,
smc91c111_can_receive, s);
/* ??? Save/restore. */
}