Since m_split() in some cases returns an mbuf chain, where the pkthdr element contains no data (i.e. m_len == 0), the n->m_len == 0 check in sys/net80211/ieee80211_input.c in the amsdu_decap() function sometimes signals the end of the AMSDU frame too early. Instead it should check the actual length of the data in the remaining mbuf chain with n->m_pkthdr.len == 0.
Index: sys/net80211/ieee80211_input.c =================================================================== RCS file: /cvs/src/sys/net80211/ieee80211_input.c,v retrieving revision 1.184 diff -u -r1.184 ieee80211_input.c --- sys/net80211/ieee80211_input.c 16 Jan 2017 09:35:06 -0000 1.184 +++ sys/net80211/ieee80211_input.c 24 Jan 2017 14:26:19 -0000 @@ -1096,7 +1096,7 @@ } ieee80211_deliver_data(ic, m, ni, mcast); - if (n->m_len == 0) { + if (n->m_pkthdr.len == 0) { m_freem(n); break; }