Message ID | 25b17f31c0bf60f6f1a2915709e9ee2d57f7f230.1576286757.git.fthain@telegraphics.com.au (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fixes for DP8393X SONIC device emulation | expand |
On 12/14/19 2:25 AM, Finn Thain wrote: > A received packet consumes pkt_size bytes in the buffer and the frame > checksum that's appended to it consumes another 4 bytes. The Receive > Buffer Address register takes the former quantity into account but > not the latter. So the next packet written to the buffer overwrites > the frame checksum. Fix this. > > Signed-off-by: Finn Thain <fthain@telegraphics.com.au> > --- > hw/net/dp8393x.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c > index 8e66b1f5de..9f4162c98c 100644 > --- a/hw/net/dp8393x.c > +++ b/hw/net/dp8393x.c > @@ -810,6 +810,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, const uint8_t * buf, > address += rx_len; > address_space_rw(&s->as, address, > MEMTXATTRS_UNSPECIFIED, (uint8_t *)&checksum, 4, 1); > + address += 4; > rx_len += 4; > s->regs[SONIC_CRBA1] = address >> 16; > s->regs[SONIC_CRBA0] = address & 0xffff; > Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
diff --git a/hw/net/dp8393x.c b/hw/net/dp8393x.c index 8e66b1f5de..9f4162c98c 100644 --- a/hw/net/dp8393x.c +++ b/hw/net/dp8393x.c @@ -810,6 +810,7 @@ static ssize_t dp8393x_receive(NetClientState *nc, const uint8_t * buf, address += rx_len; address_space_rw(&s->as, address, MEMTXATTRS_UNSPECIFIED, (uint8_t *)&checksum, 4, 1); + address += 4; rx_len += 4; s->regs[SONIC_CRBA1] = address >> 16; s->regs[SONIC_CRBA0] = address & 0xffff;
A received packet consumes pkt_size bytes in the buffer and the frame checksum that's appended to it consumes another 4 bytes. The Receive Buffer Address register takes the former quantity into account but not the latter. So the next packet written to the buffer overwrites the frame checksum. Fix this. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> --- hw/net/dp8393x.c | 1 + 1 file changed, 1 insertion(+)