net80211: drop m_pullup call from ieee80211_crypto_decap.
For most wireless drivers Rx mbuf is allocated as one contiguous chunk; only few are using chains for allocations - but even then at least MCLBYTES (minus Rx descriptor size) is available in the first mbuf. In addition to the above, m_pullup was never called here - otherwise, reallocation will break post-crypto_decap logic (ieee80211_decap, ieee80211_deliver_data...), so just remove it; length check is left in case if some truncated frame appears here. PR: 234241 MFC after: 1 week
This commit is contained in:
parent
b25765b4fa
commit
79e0962d4c
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=343190
@ -662,14 +662,15 @@ ieee80211_crypto_decap(struct ieee80211_node *ni, struct mbuf *m, int hdrlen,
|
|||||||
k = &ni->ni_ucastkey;
|
k = &ni->ni_ucastkey;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Insure crypto header is contiguous for all decap work.
|
* Insure crypto header is contiguous and long enough for all
|
||||||
|
* decap work.
|
||||||
*/
|
*/
|
||||||
cip = k->wk_cipher;
|
cip = k->wk_cipher;
|
||||||
if (m->m_len < hdrlen + cip->ic_header &&
|
if (m->m_len < hdrlen + cip->ic_header) {
|
||||||
(m = m_pullup(m, hdrlen + cip->ic_header)) == NULL) {
|
|
||||||
IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_CRYPTO, wh->i_addr2,
|
IEEE80211_NOTE_MAC(vap, IEEE80211_MSG_CRYPTO, wh->i_addr2,
|
||||||
"unable to pullup %s header", cip->ic_name);
|
"frame is too short (%d < %u) for crypto decap",
|
||||||
vap->iv_stats.is_rx_wepfail++; /* XXX */
|
cip->ic_name, m->m_len, hdrlen + cip->ic_header);
|
||||||
|
vap->iv_stats.is_rx_tooshort++;
|
||||||
*key = NULL;
|
*key = NULL;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user