AP: Use monotonic time for PMKSA cache
authorJohannes Berg <johannes.berg@intel.com>
Mon, 16 Dec 2013 20:08:23 +0000 (21:08 +0100)
committerJouni Malinen <j@w1.fi>
Tue, 24 Dec 2013 05:01:07 +0000 (07:01 +0200)
Since the PMKSA cache only uses relative time, use the monotonic time
functions instead of wall time to be correct when the clock jumps.

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

src/ap/pmksa_cache_auth.c

index 40972e9..4720b59 100644 (file)
@@ -91,9 +91,9 @@ void pmksa_cache_free_entry(struct rsn_pmksa_cache *pmksa,
 static void pmksa_cache_expire(void *eloop_ctx, void *timeout_ctx)
 {
        struct rsn_pmksa_cache *pmksa = eloop_ctx;
-       struct os_time now;
+       struct os_reltime now;
 
-       os_get_time(&now);
+       os_get_reltime(&now);
        while (pmksa->pmksa && pmksa->pmksa->expiration <= now.sec) {
                wpa_printf(MSG_DEBUG, "RSN: expired PMKSA cache entry for "
                           MACSTR, MAC2STR(pmksa->pmksa->spa));
@@ -107,12 +107,12 @@ static void pmksa_cache_expire(void *eloop_ctx, void *timeout_ctx)
 static void pmksa_cache_set_expiration(struct rsn_pmksa_cache *pmksa)
 {
        int sec;
-       struct os_time now;
+       struct os_reltime now;
 
        eloop_cancel_timeout(pmksa_cache_expire, pmksa, NULL);
        if (pmksa->pmksa == NULL)
                return;
-       os_get_time(&now);
+       os_get_reltime(&now);
        sec = pmksa->pmksa->expiration - now.sec;
        if (sec < 0)
                sec = 0;
@@ -241,7 +241,7 @@ pmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa,
                struct eapol_state_machine *eapol, int akmp)
 {
        struct rsn_pmksa_cache_entry *entry, *pos;
-       struct os_time now;
+       struct os_reltime now;
 
        if (pmk_len > PMK_LEN)
                return NULL;
@@ -253,7 +253,7 @@ pmksa_cache_auth_add(struct rsn_pmksa_cache *pmksa,
        entry->pmk_len = pmk_len;
        rsn_pmkid(pmk, pmk_len, aa, spa, entry->pmkid,
                  wpa_key_mgmt_sha256(akmp));
-       os_get_time(&now);
+       os_get_reltime(&now);
        entry->expiration = now.sec;
        if (session_timeout > 0)
                entry->expiration += session_timeout;