| .. | .. |
|---|
| 405 | 405 | } |
|---|
| 406 | 406 | |
|---|
| 407 | 407 | rx_pd = (struct rxpd *)skb->data; |
|---|
| 408 | + pkt_len = le16_to_cpu(rx_pd->rx_pkt_length); |
|---|
| 409 | + if (pkt_len < sizeof(struct ieee80211_hdr) + sizeof(pkt_len)) { |
|---|
| 410 | + mwifiex_dbg(priv->adapter, ERROR, "invalid rx_pkt_length"); |
|---|
| 411 | + return -1; |
|---|
| 412 | + } |
|---|
| 408 | 413 | |
|---|
| 409 | 414 | skb_pull(skb, le16_to_cpu(rx_pd->rx_pkt_offset)); |
|---|
| 410 | 415 | skb_pull(skb, sizeof(pkt_len)); |
|---|
| 411 | | - |
|---|
| 412 | | - pkt_len = le16_to_cpu(rx_pd->rx_pkt_length); |
|---|
| 416 | + pkt_len -= sizeof(pkt_len); |
|---|
| 413 | 417 | |
|---|
| 414 | 418 | ieee_hdr = (void *)skb->data; |
|---|
| 415 | 419 | if (ieee80211_is_mgmt(ieee_hdr->frame_control)) { |
|---|
| .. | .. |
|---|
| 422 | 426 | skb->data + sizeof(struct ieee80211_hdr), |
|---|
| 423 | 427 | pkt_len - sizeof(struct ieee80211_hdr)); |
|---|
| 424 | 428 | |
|---|
| 425 | | - pkt_len -= ETH_ALEN + sizeof(pkt_len); |
|---|
| 429 | + pkt_len -= ETH_ALEN; |
|---|
| 426 | 430 | rx_pd->rx_pkt_length = cpu_to_le16(pkt_len); |
|---|
| 427 | 431 | |
|---|
| 428 | 432 | cfg80211_rx_mgmt(&priv->wdev, priv->roc_cfg.chan.center_freq, |
|---|