]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
wps_registrar: Use monotonic time for PBC session timeout
authorJohannes Berg <johannes.berg@intel.com>
Mon, 16 Dec 2013 20:08:36 +0000 (21:08 +0100)
committerJouni Malinen <j@w1.fi>
Tue, 24 Dec 2013 05:52:49 +0000 (07:52 +0200)
PBC sessions are just time-stamped when activated, and
eventually time out, so should use monotonic time.

While at it, make the code use os_reltime_expired().

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

src/wps/wps_registrar.c

index a18f91b932176054ffcfed3ade76877c9371142f..5c399309b47200e118b3c94f543ffb216cfaee5a 100644 (file)
@@ -113,7 +113,7 @@ struct wps_pbc_session {
        struct wps_pbc_session *next;
        u8 addr[ETH_ALEN];
        u8 uuid_e[WPS_UUID_LEN];
-       struct os_time timestamp;
+       struct os_reltime timestamp;
 };
 
 
@@ -311,9 +311,9 @@ static void wps_registrar_add_pbc_session(struct wps_registrar *reg,
                                          const u8 *addr, const u8 *uuid_e)
 {
        struct wps_pbc_session *pbc, *prev = NULL;
-       struct os_time now;
+       struct os_reltime now;
 
-       os_get_time(&now);
+       os_get_reltime(&now);
 
        pbc = reg->pbc_sessions;
        while (pbc) {
@@ -347,7 +347,8 @@ static void wps_registrar_add_pbc_session(struct wps_registrar *reg,
        pbc = pbc->next;
 
        while (pbc) {
-               if (now.sec > pbc->timestamp.sec + WPS_PBC_WALK_TIME) {
+               if (os_reltime_expired(&now, &pbc->timestamp,
+                                      WPS_PBC_WALK_TIME)) {
                        prev->next = NULL;
                        wps_free_pbc_sessions(pbc);
                        break;
@@ -395,9 +396,9 @@ int wps_registrar_pbc_overlap(struct wps_registrar *reg,
        int count = 0;
        struct wps_pbc_session *pbc;
        struct wps_pbc_session *first = NULL;
-       struct os_time now;
+       struct os_reltime now;
 
-       os_get_time(&now);
+       os_get_reltime(&now);
 
        wpa_printf(MSG_DEBUG, "WPS: Checking active PBC sessions for overlap");
 
@@ -413,9 +414,9 @@ int wps_registrar_pbc_overlap(struct wps_registrar *reg,
                           MAC2STR(pbc->addr));
                wpa_hexdump(MSG_DEBUG, "WPS: UUID-E",
                            pbc->uuid_e, WPS_UUID_LEN);
-               if (now.sec > pbc->timestamp.sec + WPS_PBC_WALK_TIME) {
-                       wpa_printf(MSG_DEBUG, "WPS: PBC walk time has "
-                                  "expired");
+               if (os_reltime_expired(&now, &pbc->timestamp,
+                                      WPS_PBC_WALK_TIME)) {
+                       wpa_printf(MSG_DEBUG, "WPS: PBC walk time has expired");
                        break;
                }
                if (first &&