diff options
| author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2020-06-18 10:41:51 +0000 |
|---|---|---|
| committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2020-06-18 10:41:51 +0000 |
| commit | 1ae4bac217163b0cfd834213dbe1d64464baef5b (patch) | |
| tree | 212f86d18e7acfcf2f45a4bdefa5ea853d666c39 | |
| parent | e5fce44e5127a0f7454203b837487cf86986fc55 (diff) | |
Notes
| -rw-r--r-- | sys/dev/mlx5/mlx5_en/mlx5_en_tx.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c b/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c index 7040e724a03ae..d36e723fea33b 100644 --- a/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c +++ b/sys/dev/mlx5/mlx5_en/mlx5_en_tx.c @@ -228,9 +228,15 @@ mlx5e_get_header_size(const struct mbuf *mb) default: return (0); } - if (unlikely(mb->m_len < eth_hdr_len + sizeof(*th))) - return (0); - th = (const struct tcphdr *)(mb->m_data + eth_hdr_len); + if (unlikely(mb->m_len < eth_hdr_len + sizeof(*th))) { + const struct mbuf *m_th = mb->m_next; + if (unlikely(mb->m_len != eth_hdr_len || + m_th == NULL || m_th->m_len < sizeof(*th))) + return (0); + th = (const struct tcphdr *)(m_th->m_data); + } else { + th = (const struct tcphdr *)(mb->m_data + eth_hdr_len); + } tcp_hlen = th->th_off << 2; eth_hdr_len += tcp_hlen; /* |
