aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/rx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/rx.c')
-rw-r--r--net/mac80211/rx.c168
1 files changed, 98 insertions, 70 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 2b0debb0422b..3e57f96c9666 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -638,6 +638,27 @@ static int ieee80211_get_mmie_keyidx(struct sk_buff *skb)
638 return le16_to_cpu(mmie->key_id); 638 return le16_to_cpu(mmie->key_id);
639} 639}
640 640
641static int iwl80211_get_cs_keyid(const struct ieee80211_cipher_scheme *cs,
642 struct sk_buff *skb)
643{
644 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
645 __le16 fc;
646 int hdrlen;
647 u8 keyid;
648
649 fc = hdr->frame_control;
650 hdrlen = ieee80211_hdrlen(fc);
651
652 if (skb->len < hdrlen + cs->hdr_len)
653 return -EINVAL;
654
655 skb_copy_bits(skb, hdrlen + cs->key_idx_off, &keyid, 1);
656 keyid &= cs->key_idx_mask;
657 keyid >>= cs->key_idx_shift;
658
659 return keyid;
660}
661
641static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx) 662static ieee80211_rx_result ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
642{ 663{
643 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data; 664 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
@@ -729,9 +750,7 @@ static void ieee80211_release_reorder_frames(struct ieee80211_sub_if_data *sdata
729 lockdep_assert_held(&tid_agg_rx->reorder_lock); 750 lockdep_assert_held(&tid_agg_rx->reorder_lock);
730 751
731 while (ieee80211_sn_less(tid_agg_rx->head_seq_num, head_seq_num)) { 752 while (ieee80211_sn_less(tid_agg_rx->head_seq_num, head_seq_num)) {
732 index = ieee80211_sn_sub(tid_agg_rx->head_seq_num, 753 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
733 tid_agg_rx->ssn) %
734 tid_agg_rx->buf_size;
735 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index, 754 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
736 frames); 755 frames);
737 } 756 }
@@ -757,8 +776,7 @@ static void ieee80211_sta_reorder_release(struct ieee80211_sub_if_data *sdata,
757 lockdep_assert_held(&tid_agg_rx->reorder_lock); 776 lockdep_assert_held(&tid_agg_rx->reorder_lock);
758 777
759 /* release the buffer until next missing frame */ 778 /* release the buffer until next missing frame */
760 index = ieee80211_sn_sub(tid_agg_rx->head_seq_num, 779 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
761 tid_agg_rx->ssn) % tid_agg_rx->buf_size;
762 if (!tid_agg_rx->reorder_buf[index] && 780 if (!tid_agg_rx->reorder_buf[index] &&
763 tid_agg_rx->stored_mpdu_num) { 781 tid_agg_rx->stored_mpdu_num) {
764 /* 782 /*
@@ -793,15 +811,11 @@ static void ieee80211_sta_reorder_release(struct ieee80211_sub_if_data *sdata,
793 } else while (tid_agg_rx->reorder_buf[index]) { 811 } else while (tid_agg_rx->reorder_buf[index]) {
794 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index, 812 ieee80211_release_reorder_frame(sdata, tid_agg_rx, index,
795 frames); 813 frames);
796 index = ieee80211_sn_sub(tid_agg_rx->head_seq_num, 814 index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
797 tid_agg_rx->ssn) %
798 tid_agg_rx->buf_size;
799 } 815 }
800 816
801 if (tid_agg_rx->stored_mpdu_num) { 817 if (tid_agg_rx->stored_mpdu_num) {
802 j = index = ieee80211_sn_sub(tid_agg_rx->head_seq_num, 818 j = index = tid_agg_rx->head_seq_num % tid_agg_rx->buf_size;
803 tid_agg_rx->ssn) %
804 tid_agg_rx->buf_size;
805 819
806 for (; j != (index - 1) % tid_agg_rx->buf_size; 820 for (; j != (index - 1) % tid_agg_rx->buf_size;
807 j = (j + 1) % tid_agg_rx->buf_size) { 821 j = (j + 1) % tid_agg_rx->buf_size) {
@@ -861,8 +875,7 @@ static bool ieee80211_sta_manage_reorder_buf(struct ieee80211_sub_if_data *sdata
861 875
862 /* Now the new frame is always in the range of the reordering buffer */ 876 /* Now the new frame is always in the range of the reordering buffer */
863 877
864 index = ieee80211_sn_sub(mpdu_seq_num, 878 index = mpdu_seq_num % tid_agg_rx->buf_size;
865 tid_agg_rx->ssn) % tid_agg_rx->buf_size;
866 879
867 /* check if we already stored this frame */ 880 /* check if we already stored this frame */
868 if (tid_agg_rx->reorder_buf[index]) { 881 if (tid_agg_rx->reorder_buf[index]) {
@@ -1115,6 +1128,13 @@ static void sta_ps_end(struct sta_info *sta)
1115 sta->sta.addr, sta->sta.aid); 1128 sta->sta.addr, sta->sta.aid);
1116 1129
1117 if (test_sta_flag(sta, WLAN_STA_PS_DRIVER)) { 1130 if (test_sta_flag(sta, WLAN_STA_PS_DRIVER)) {
1131 /*
1132 * Clear the flag only if the other one is still set
1133 * so that the TX path won't start TX'ing new frames
1134 * directly ... In the case that the driver flag isn't
1135 * set ieee80211_sta_ps_deliver_wakeup() will clear it.
1136 */
1137 clear_sta_flag(sta, WLAN_STA_PS_STA);
1118 ps_dbg(sta->sdata, "STA %pM aid %d driver-ps-blocked\n", 1138 ps_dbg(sta->sdata, "STA %pM aid %d driver-ps-blocked\n",
1119 sta->sta.addr, sta->sta.aid); 1139 sta->sta.addr, sta->sta.aid);
1120 return; 1140 return;
@@ -1369,6 +1389,7 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1369 struct ieee80211_key *sta_ptk = NULL; 1389 struct ieee80211_key *sta_ptk = NULL;
1370 int mmie_keyidx = -1; 1390 int mmie_keyidx = -1;
1371 __le16 fc; 1391 __le16 fc;
1392 const struct ieee80211_cipher_scheme *cs = NULL;
1372 1393
1373 /* 1394 /*
1374 * Key selection 101 1395 * Key selection 101
@@ -1406,11 +1427,19 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1406 1427
1407 /* start without a key */ 1428 /* start without a key */
1408 rx->key = NULL; 1429 rx->key = NULL;
1430 fc = hdr->frame_control;
1409 1431
1410 if (rx->sta) 1432 if (rx->sta) {
1411 sta_ptk = rcu_dereference(rx->sta->ptk); 1433 int keyid = rx->sta->ptk_idx;
1412 1434
1413 fc = hdr->frame_control; 1435 if (ieee80211_has_protected(fc) && rx->sta->cipher_scheme) {
1436 cs = rx->sta->cipher_scheme;
1437 keyid = iwl80211_get_cs_keyid(cs, rx->skb);
1438 if (unlikely(keyid < 0))
1439 return RX_DROP_UNUSABLE;
1440 }
1441 sta_ptk = rcu_dereference(rx->sta->ptk[keyid]);
1442 }
1414 1443
1415 if (!ieee80211_has_protected(fc)) 1444 if (!ieee80211_has_protected(fc))
1416 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb); 1445 mmie_keyidx = ieee80211_get_mmie_keyidx(rx->skb);
@@ -1472,6 +1501,7 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1472 return RX_CONTINUE; 1501 return RX_CONTINUE;
1473 } else { 1502 } else {
1474 u8 keyid; 1503 u8 keyid;
1504
1475 /* 1505 /*
1476 * The device doesn't give us the IV so we won't be 1506 * The device doesn't give us the IV so we won't be
1477 * able to look up the key. That's ok though, we 1507 * able to look up the key. That's ok though, we
@@ -1487,15 +1517,21 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1487 1517
1488 hdrlen = ieee80211_hdrlen(fc); 1518 hdrlen = ieee80211_hdrlen(fc);
1489 1519
1490 if (rx->skb->len < 8 + hdrlen) 1520 if (cs) {
1491 return RX_DROP_UNUSABLE; /* TODO: count this? */ 1521 keyidx = iwl80211_get_cs_keyid(cs, rx->skb);
1492 1522
1493 /* 1523 if (unlikely(keyidx < 0))
1494 * no need to call ieee80211_wep_get_keyidx, 1524 return RX_DROP_UNUSABLE;
1495 * it verifies a bunch of things we've done already 1525 } else {
1496 */ 1526 if (rx->skb->len < 8 + hdrlen)
1497 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1); 1527 return RX_DROP_UNUSABLE; /* TODO: count this? */
1498 keyidx = keyid >> 6; 1528 /*
1529 * no need to call ieee80211_wep_get_keyidx,
1530 * it verifies a bunch of things we've done already
1531 */
1532 skb_copy_bits(rx->skb, hdrlen + 3, &keyid, 1);
1533 keyidx = keyid >> 6;
1534 }
1499 1535
1500 /* check per-station GTK first, if multicast packet */ 1536 /* check per-station GTK first, if multicast packet */
1501 if (is_multicast_ether_addr(hdr->addr1) && rx->sta) 1537 if (is_multicast_ether_addr(hdr->addr1) && rx->sta)
@@ -1543,11 +1579,7 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx)
1543 result = ieee80211_crypto_aes_cmac_decrypt(rx); 1579 result = ieee80211_crypto_aes_cmac_decrypt(rx);
1544 break; 1580 break;
1545 default: 1581 default:
1546 /* 1582 result = ieee80211_crypto_hw_decrypt(rx);
1547 * We can reach here only with HW-only algorithms
1548 * but why didn't it decrypt the frame?!
1549 */
1550 return RX_DROP_UNUSABLE;
1551 } 1583 }
1552 1584
1553 /* the hdr variable is invalid after the decrypt handlers */ 1585 /* the hdr variable is invalid after the decrypt handlers */
@@ -1938,20 +1970,17 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
1938 } 1970 }
1939 } 1971 }
1940 1972
1941 if (skb) {
1942 int align __maybe_unused;
1943
1944#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 1973#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
1945 /* 1974 if (skb) {
1946 * 'align' will only take the values 0 or 2 here 1975 /* 'align' will only take the values 0 or 2 here since all
1947 * since all frames are required to be aligned 1976 * frames are required to be aligned to 2-byte boundaries
1948 * to 2-byte boundaries when being passed to 1977 * when being passed to mac80211; the code here works just
1949 * mac80211; the code here works just as well if 1978 * as well if that isn't true, but mac80211 assumes it can
1950 * that isn't true, but mac80211 assumes it can 1979 * access fields as 2-byte aligned (e.g. for ether_addr_equal)
1951 * access fields as 2-byte aligned (e.g. for
1952 * compare_ether_addr)
1953 */ 1980 */
1954 align = ((unsigned long)(skb->data + sizeof(struct ethhdr))) & 3; 1981 int align;
1982
1983 align = (unsigned long)(skb->data + sizeof(struct ethhdr)) & 3;
1955 if (align) { 1984 if (align) {
1956 if (WARN_ON(skb_headroom(skb) < 3)) { 1985 if (WARN_ON(skb_headroom(skb) < 3)) {
1957 dev_kfree_skb(skb); 1986 dev_kfree_skb(skb);
@@ -1964,14 +1993,14 @@ ieee80211_deliver_skb(struct ieee80211_rx_data *rx)
1964 skb_set_tail_pointer(skb, len); 1993 skb_set_tail_pointer(skb, len);
1965 } 1994 }
1966 } 1995 }
1996 }
1967#endif 1997#endif
1968 1998
1969 if (skb) { 1999 if (skb) {
1970 /* deliver to local stack */ 2000 /* deliver to local stack */
1971 skb->protocol = eth_type_trans(skb, dev); 2001 skb->protocol = eth_type_trans(skb, dev);
1972 memset(skb->cb, 0, sizeof(skb->cb)); 2002 memset(skb->cb, 0, sizeof(skb->cb));
1973 netif_receive_skb(skb); 2003 netif_receive_skb(skb);
1974 }
1975 } 2004 }
1976 2005
1977 if (xmit_skb) { 2006 if (xmit_skb) {
@@ -2057,7 +2086,6 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2057 struct ieee80211_sub_if_data *sdata = rx->sdata; 2086 struct ieee80211_sub_if_data *sdata = rx->sdata;
2058 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 2087 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
2059 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; 2088 struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh;
2060 __le16 reason = cpu_to_le16(WLAN_REASON_MESH_PATH_NOFORWARD);
2061 u16 q, hdrlen; 2089 u16 q, hdrlen;
2062 2090
2063 hdr = (struct ieee80211_hdr *) skb->data; 2091 hdr = (struct ieee80211_hdr *) skb->data;
@@ -2165,7 +2193,9 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
2165 } else { 2193 } else {
2166 /* unable to resolve next hop */ 2194 /* unable to resolve next hop */
2167 mesh_path_error_tx(sdata, ifmsh->mshcfg.element_ttl, 2195 mesh_path_error_tx(sdata, ifmsh->mshcfg.element_ttl,
2168 fwd_hdr->addr3, 0, reason, fwd_hdr->addr2); 2196 fwd_hdr->addr3, 0,
2197 WLAN_REASON_MESH_PATH_NOFORWARD,
2198 fwd_hdr->addr2);
2169 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route); 2199 IEEE80211_IFSTA_MESH_CTR_INC(ifmsh, dropped_frames_no_route);
2170 kfree_skb(fwd_skb); 2200 kfree_skb(fwd_skb);
2171 return RX_DROP_MONITOR; 2201 return RX_DROP_MONITOR;
@@ -3053,8 +3083,8 @@ void ieee80211_release_reorder_timeout(struct sta_info *sta, int tid)
3053 3083
3054/* main receive path */ 3084/* main receive path */
3055 3085
3056static int prepare_for_handlers(struct ieee80211_rx_data *rx, 3086static bool prepare_for_handlers(struct ieee80211_rx_data *rx,
3057 struct ieee80211_hdr *hdr) 3087 struct ieee80211_hdr *hdr)
3058{ 3088{
3059 struct ieee80211_sub_if_data *sdata = rx->sdata; 3089 struct ieee80211_sub_if_data *sdata = rx->sdata;
3060 struct sk_buff *skb = rx->skb; 3090 struct sk_buff *skb = rx->skb;
@@ -3065,29 +3095,29 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
3065 switch (sdata->vif.type) { 3095 switch (sdata->vif.type) {
3066 case NL80211_IFTYPE_STATION: 3096 case NL80211_IFTYPE_STATION:
3067 if (!bssid && !sdata->u.mgd.use_4addr) 3097 if (!bssid && !sdata->u.mgd.use_4addr)
3068 return 0; 3098 return false;
3069 if (!multicast && 3099 if (!multicast &&
3070 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) { 3100 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
3071 if (!(sdata->dev->flags & IFF_PROMISC) || 3101 if (!(sdata->dev->flags & IFF_PROMISC) ||
3072 sdata->u.mgd.use_4addr) 3102 sdata->u.mgd.use_4addr)
3073 return 0; 3103 return false;
3074 status->rx_flags &= ~IEEE80211_RX_RA_MATCH; 3104 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
3075 } 3105 }
3076 break; 3106 break;
3077 case NL80211_IFTYPE_ADHOC: 3107 case NL80211_IFTYPE_ADHOC:
3078 if (!bssid) 3108 if (!bssid)
3079 return 0; 3109 return false;
3080 if (ether_addr_equal(sdata->vif.addr, hdr->addr2) || 3110 if (ether_addr_equal(sdata->vif.addr, hdr->addr2) ||
3081 ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2)) 3111 ether_addr_equal(sdata->u.ibss.bssid, hdr->addr2))
3082 return 0; 3112 return false;
3083 if (ieee80211_is_beacon(hdr->frame_control)) { 3113 if (ieee80211_is_beacon(hdr->frame_control)) {
3084 return 1; 3114 return true;
3085 } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) { 3115 } else if (!ieee80211_bssid_match(bssid, sdata->u.ibss.bssid)) {
3086 return 0; 3116 return false;
3087 } else if (!multicast && 3117 } else if (!multicast &&
3088 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) { 3118 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
3089 if (!(sdata->dev->flags & IFF_PROMISC)) 3119 if (!(sdata->dev->flags & IFF_PROMISC))
3090 return 0; 3120 return false;
3091 status->rx_flags &= ~IEEE80211_RX_RA_MATCH; 3121 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
3092 } else if (!rx->sta) { 3122 } else if (!rx->sta) {
3093 int rate_idx; 3123 int rate_idx;
@@ -3103,7 +3133,7 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
3103 if (!multicast && 3133 if (!multicast &&
3104 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) { 3134 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) {
3105 if (!(sdata->dev->flags & IFF_PROMISC)) 3135 if (!(sdata->dev->flags & IFF_PROMISC))
3106 return 0; 3136 return false;
3107 3137
3108 status->rx_flags &= ~IEEE80211_RX_RA_MATCH; 3138 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
3109 } 3139 }
@@ -3112,7 +3142,7 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
3112 case NL80211_IFTYPE_AP: 3142 case NL80211_IFTYPE_AP:
3113 if (!bssid) { 3143 if (!bssid) {
3114 if (!ether_addr_equal(sdata->vif.addr, hdr->addr1)) 3144 if (!ether_addr_equal(sdata->vif.addr, hdr->addr1))
3115 return 0; 3145 return false;
3116 } else if (!ieee80211_bssid_match(bssid, sdata->vif.addr)) { 3146 } else if (!ieee80211_bssid_match(bssid, sdata->vif.addr)) {
3117 /* 3147 /*
3118 * Accept public action frames even when the 3148 * Accept public action frames even when the
@@ -3122,26 +3152,26 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
3122 */ 3152 */
3123 if (!multicast && 3153 if (!multicast &&
3124 !ether_addr_equal(sdata->vif.addr, hdr->addr1)) 3154 !ether_addr_equal(sdata->vif.addr, hdr->addr1))
3125 return 0; 3155 return false;
3126 if (ieee80211_is_public_action(hdr, skb->len)) 3156 if (ieee80211_is_public_action(hdr, skb->len))
3127 return 1; 3157 return true;
3128 if (!ieee80211_is_beacon(hdr->frame_control)) 3158 if (!ieee80211_is_beacon(hdr->frame_control))
3129 return 0; 3159 return false;
3130 status->rx_flags &= ~IEEE80211_RX_RA_MATCH; 3160 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
3131 } 3161 }
3132 break; 3162 break;
3133 case NL80211_IFTYPE_WDS: 3163 case NL80211_IFTYPE_WDS:
3134 if (bssid || !ieee80211_is_data(hdr->frame_control)) 3164 if (bssid || !ieee80211_is_data(hdr->frame_control))
3135 return 0; 3165 return false;
3136 if (!ether_addr_equal(sdata->u.wds.remote_addr, hdr->addr2)) 3166 if (!ether_addr_equal(sdata->u.wds.remote_addr, hdr->addr2))
3137 return 0; 3167 return false;
3138 break; 3168 break;
3139 case NL80211_IFTYPE_P2P_DEVICE: 3169 case NL80211_IFTYPE_P2P_DEVICE:
3140 if (!ieee80211_is_public_action(hdr, skb->len) && 3170 if (!ieee80211_is_public_action(hdr, skb->len) &&
3141 !ieee80211_is_probe_req(hdr->frame_control) && 3171 !ieee80211_is_probe_req(hdr->frame_control) &&
3142 !ieee80211_is_probe_resp(hdr->frame_control) && 3172 !ieee80211_is_probe_resp(hdr->frame_control) &&
3143 !ieee80211_is_beacon(hdr->frame_control)) 3173 !ieee80211_is_beacon(hdr->frame_control))
3144 return 0; 3174 return false;
3145 if (!ether_addr_equal(sdata->vif.addr, hdr->addr1) && 3175 if (!ether_addr_equal(sdata->vif.addr, hdr->addr1) &&
3146 !multicast) 3176 !multicast)
3147 status->rx_flags &= ~IEEE80211_RX_RA_MATCH; 3177 status->rx_flags &= ~IEEE80211_RX_RA_MATCH;
@@ -3152,7 +3182,7 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
3152 break; 3182 break;
3153 } 3183 }
3154 3184
3155 return 1; 3185 return true;
3156} 3186}
3157 3187
3158/* 3188/*
@@ -3168,13 +3198,11 @@ static bool ieee80211_prepare_and_rx_handle(struct ieee80211_rx_data *rx,
3168 struct ieee80211_sub_if_data *sdata = rx->sdata; 3198 struct ieee80211_sub_if_data *sdata = rx->sdata;
3169 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); 3199 struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
3170 struct ieee80211_hdr *hdr = (void *)skb->data; 3200 struct ieee80211_hdr *hdr = (void *)skb->data;
3171 int prepares;
3172 3201
3173 rx->skb = skb; 3202 rx->skb = skb;
3174 status->rx_flags |= IEEE80211_RX_RA_MATCH; 3203 status->rx_flags |= IEEE80211_RX_RA_MATCH;
3175 prepares = prepare_for_handlers(rx, hdr);
3176 3204
3177 if (!prepares) 3205 if (!prepare_for_handlers(rx, hdr))
3178 return false; 3206 return false;
3179 3207
3180 if (!consume) { 3208 if (!consume) {