[PATCH] MKA: Process DIST-SAK after SAK-USE.

Greg Goblirsch gregg at thinklogical.com
Mon Apr 25 10:36:21 PDT 2022


ieee802_1x_mka_decode_sak_use_body returns 0 for "KaY: We don't have a latest distributed key - ignore SAK use". Thus DIST-SAK is processed. Updating the MI breaks everything. I could find nothing in the spec for this.

Signed-off-by: Greg Goblirsch <gregg at thinklogical.com>

@@ -3310,22 +3334,10 @@ static int ieee802_1x_kay_decode_mkpdu(struct ieee802_1x_kay *kay,
                        if (mka_body_handler[body_type].body_rx
                                (participant, pos, left_len) != 0) {
                                /* Handle parameter set failure */
-                               if (body_type != MKA_SAK_USE) {
-                                       wpa_printf(MSG_INFO,
-                                                  "KaY: Discarding Rx MKPDU: decode of parameter set type (%d) failed",
-                                                  body_type);
-                                       return -1;
-                               }
-
-                               /* Ideally DIST-SAK should be processed before
-                                * SAK-USE. Unfortunately IEEE Std 802.1X-2010,
-                                * 11.11.3 (Encoding MKPDUs) states SAK-USE(3)
-                                * must always be encoded before DIST-SAK(4).
-                                * Rather than redesigning mka_body_handler so
-                                * that it somehow processes DIST-SAK before
-                                * SAK-USE, just ignore SAK-USE failures if
-                                * DIST-SAK is also present in this MKPDU. */
-                               bad_sak_use = true;
+                               wpa_printf(MSG_INFO,
+                                          "KaY: Discarding Rx MKPDU: decode of parameter set type (%d) failed",
+                                          body_type);
+                               return -1;
                        }
                } else {
                        wpa_printf(MSG_ERROR,
@@ -3334,19 +3346,6 @@ static int ieee802_1x_kay_decode_mkpdu(struct ieee802_1x_kay *kay,
                }
        }
 
-       if (bad_sak_use && !handled[MKA_DISTRIBUTED_SAK]) {
-               wpa_printf(MSG_INFO,
-                          "KaY: Discarding Rx MKPDU: decode of parameter set type (%d) failed",
-                          MKA_SAK_USE);
-               if (!reset_participant_mi(participant))
-                       wpa_printf(MSG_DEBUG, "KaY: Could not update mi");
-               else
-                       wpa_printf(MSG_DEBUG,
-                                  "KaY: Selected a new random MI: %s",
-                                  mi_txt(participant->mi));
-               return -1;
-       }
-
        /* Detect missing parameter sets */
        peer = ieee802_1x_kay_get_live_peer(participant,
                                            participant->current_peer_id.mi);



More information about the Hostap mailing list