diff options
author | sbruno <sbruno@FreeBSD.org> | 2016-04-18 20:33:44 +0000 |
---|---|---|
committer | sbruno <sbruno@FreeBSD.org> | 2016-04-18 20:33:44 +0000 |
commit | 6a3325bc6897fdab8da0a1fdcd6609a3602a6593 (patch) | |
tree | 52fe11023eebbe47dc38140af9bc02d07f394803 | |
parent | f78898772ae074bd56c82e718089c92d7c835dc9 (diff) | |
download | FreeBSD-src-6a3325bc6897fdab8da0a1fdcd6609a3602a6593.zip FreeBSD-src-6a3325bc6897fdab8da0a1fdcd6609a3602a6593.tar.gz |
Correct possible underflow conditions when checking for available space
in the tx h/w ring buffer.
Reviewed by: gnn jeb.j.cramer@intel.com
MFC after: 1 week
Sponsored by: Limelight Networks
Differential Revision: https://reviews.freebsd.org/D5918
-rw-r--r-- | sys/dev/e1000/if_em.c | 2 | ||||
-rw-r--r-- | sys/dev/e1000/if_igb.c | 2 | ||||
-rw-r--r-- | sys/dev/e1000/if_lem.c | 2 | ||||
-rw-r--r-- | sys/dev/ixgbe/ix_txrx.c | 2 |
4 files changed, 4 insertions, 4 deletions
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 6f7458c..a989cae 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -2092,7 +2092,7 @@ retry: txr->tx_tso = FALSE; } - if (nsegs > (txr->tx_avail - EM_MAX_SCATTER)) { + if (txr->tx_avail < (nsegs + EM_MAX_SCATTER)) { txr->no_desc_avail++; bus_dmamap_unload(txr->txtag, map); return (ENOBUFS); diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c index 93b33ad..965370d 100644 --- a/sys/dev/e1000/if_igb.c +++ b/sys/dev/e1000/if_igb.c @@ -1887,7 +1887,7 @@ retry: } /* Make certain there are enough descriptors */ - if (nsegs > txr->tx_avail - 2) { + if (txr->tx_avail < (nsegs + 2)) { txr->no_desc_avail++; bus_dmamap_unload(txr->txtag, map); return (ENOBUFS); diff --git a/sys/dev/e1000/if_lem.c b/sys/dev/e1000/if_lem.c index 674fe5b..864ed6b 100644 --- a/sys/dev/e1000/if_lem.c +++ b/sys/dev/e1000/if_lem.c @@ -1699,7 +1699,7 @@ lem_xmit(struct adapter *adapter, struct mbuf **m_headp) return (error); } - if (nsegs > (adapter->num_tx_desc_avail - 2)) { + if (adapter->num_tx_desc_avail < (nsegs + 2)) { adapter->no_tx_desc_avail2++; bus_dmamap_unload(adapter->txtag, map); return (ENOBUFS); diff --git a/sys/dev/ixgbe/ix_txrx.c b/sys/dev/ixgbe/ix_txrx.c index 66bcb25..2f5663f 100644 --- a/sys/dev/ixgbe/ix_txrx.c +++ b/sys/dev/ixgbe/ix_txrx.c @@ -402,7 +402,7 @@ retry: } /* Make certain there are enough descriptors */ - if (nsegs > txr->tx_avail - 2) { + if (txr->tx_avail < (nsegs + 2)) { txr->no_desc_avail++; bus_dmamap_unload(txr->txtag, map); return (ENOBUFS); |