]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
wpa_supplicant: Use relative time for TKIP Michael MIC failures
authorJohannes Berg <johannes.berg@intel.com>
Mon, 16 Dec 2013 20:08:42 +0000 (21:08 +0100)
committerJouni Malinen <j@w1.fi>
Tue, 24 Dec 2013 06:18:47 +0000 (08:18 +0200)
The MMIC failure code should use monotonic time to check
whether 60 seconds have elapsed or not. For type-safety,
use struct os_reltime for the timestamp variable, and
also convert to using os_reltime_expired().

Signed-hostap: Johannes Berg <johannes.berg@intel.com>

wpa_supplicant/events.c
wpa_supplicant/wpa_supplicant_i.h

index fd12cf810e1d8dafb0ddc9fe78375f72e7b52e0f..fa5d68180f170b2938133f459dc2c69b0e231203 100644 (file)
@@ -2183,13 +2183,13 @@ wpa_supplicant_event_michael_mic_failure(struct wpa_supplicant *wpa_s,
                                         union wpa_event_data *data)
 {
        int pairwise;
-       struct os_time t;
+       struct os_reltime t;
 
        wpa_msg(wpa_s, MSG_WARNING, "Michael MIC failure detected");
        pairwise = (data && data->michael_mic_failure.unicast);
-       os_get_time(&t);
-       if ((wpa_s->last_michael_mic_error &&
-            t.sec - wpa_s->last_michael_mic_error <= 60) ||
+       os_get_reltime(&t);
+       if ((wpa_s->last_michael_mic_error.sec &&
+            !os_reltime_expired(&t, &wpa_s->last_michael_mic_error, 60)) ||
            wpa_s->pending_mic_error_report) {
                if (wpa_s->pending_mic_error_report) {
                        /*
@@ -2267,7 +2267,7 @@ wpa_supplicant_event_michael_mic_failure(struct wpa_supplicant *wpa_s,
                wpa_sm_key_request(wpa_s->wpa, 1, pairwise);
 #endif /* CONFIG_DELAYED_MIC_ERROR_REPORT */
        }
-       wpa_s->last_michael_mic_error = t.sec;
+       wpa_s->last_michael_mic_error = t;
        wpa_s->mic_errors_seen++;
 }
 
index 648b313dacbef6f142c14c95ed0833d23bb0fa14..86122715bc256a143a1936fdc6eb9be0ca0337f6 100644 (file)
@@ -344,7 +344,7 @@ struct wpa_supplicant {
        char *confanother;
        struct wpa_config *conf;
        int countermeasures;
-       os_time_t last_michael_mic_error;
+       struct os_reltime last_michael_mic_error;
        u8 bssid[ETH_ALEN];
        u8 pending_bssid[ETH_ALEN]; /* If wpa_state == WPA_ASSOCIATING, this
                                     * field contains the target BSSID. */