PR 1354/bsps
	* network/network.c: In some cases it can occur that an empty mbuf is
	put on the descriptor chain. (We found it especially then when
	transmitting fragmented IP Packets.) Since the actual buffer
	descriptor pointer will be incremented after every inserted mbuf
	(txBd = sc->txBdBase + sc->txBdHead;) even if m->m_len of the current
	mbuf was zero. This leads to the bug.
This commit is contained in:
Joel Sherrill
2009-01-21 18:17:47 +00:00
parent 4c18d8c3d2
commit e026b96386
2 changed files with 11 additions and 1 deletions

View File

@@ -1,3 +1,13 @@
2009-01-21 Frank Ueberschar <frank.ueberschar@dsa-volgmann.de>
PR 1354/bsps
* network/network.c: In some cases it can occur that an empty mbuf is
put on the descriptor chain. (We found it especially then when
transmitting fragmented IP Packets.) Since the actual buffer
descriptor pointer will be incremented after every inserted mbuf
(txBd = sc->txBdBase + sc->txBdHead;) even if m->m_len of the current
mbuf was zero. This leads to the bug.
2008-12-04 Joel Sherrill <joel.sherrill@oarcorp.com>
* bsp_specs: Move -e start from *link to *startfile to avoid warning

View File

@@ -548,10 +548,10 @@ fec_sendpacket(struct ifnet *ifp, struct mbuf *m)
* The IP fragmentation routine in ip_output
* can produce fragments with zero length.
*/
txBd = sc->txBdBase + sc->txBdHead;
if (m->m_len){
char *p = mtod(m, char *);
int offset = (int) p & 0x3;
txBd = sc->txBdBase + sc->txBdHead;
if (offset == 0) {
txBd->buffer = p;
txBd->length = m->m_len;