mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2025-01-30 16:54:04 -05:00
Remove references to time_t/time()/random()
Replace direct calls in AP mode code with os_*() wrappers.
This commit is contained in:
parent
c2197bc9bc
commit
0b04889f0d
@ -276,6 +276,7 @@ static void accounting_sta_report(struct hostapd_data *hapd,
|
|||||||
struct radius_msg *msg;
|
struct radius_msg *msg;
|
||||||
int cause = sta->acct_terminate_cause;
|
int cause = sta->acct_terminate_cause;
|
||||||
struct hostap_sta_driver_data data;
|
struct hostap_sta_driver_data data;
|
||||||
|
struct os_time now;
|
||||||
u32 gigawords;
|
u32 gigawords;
|
||||||
|
|
||||||
if (!hapd->conf->radius->acct_server)
|
if (!hapd->conf->radius->acct_server)
|
||||||
@ -289,8 +290,9 @@ static void accounting_sta_report(struct hostapd_data *hapd,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
os_get_time(&now);
|
||||||
if (!radius_msg_add_attr_int32(msg, RADIUS_ATTR_ACCT_SESSION_TIME,
|
if (!radius_msg_add_attr_int32(msg, RADIUS_ATTR_ACCT_SESSION_TIME,
|
||||||
time(NULL) - sta->acct_session_start)) {
|
now.sec - sta->acct_session_start)) {
|
||||||
printf("Could not add Acct-Session-Time\n");
|
printf("Could not add Acct-Session-Time\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -345,7 +347,7 @@ static void accounting_sta_report(struct hostapd_data *hapd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!radius_msg_add_attr_int32(msg, RADIUS_ATTR_EVENT_TIMESTAMP,
|
if (!radius_msg_add_attr_int32(msg, RADIUS_ATTR_EVENT_TIMESTAMP,
|
||||||
time(NULL))) {
|
now.sec)) {
|
||||||
printf("Could not add Event-Timestamp\n");
|
printf("Could not add Event-Timestamp\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -476,9 +478,12 @@ static void accounting_report_state(struct hostapd_data *hapd, int on)
|
|||||||
*/
|
*/
|
||||||
int accounting_init(struct hostapd_data *hapd)
|
int accounting_init(struct hostapd_data *hapd)
|
||||||
{
|
{
|
||||||
|
struct os_time now;
|
||||||
|
|
||||||
/* Acct-Session-Id should be unique over reboots. If reliable clock is
|
/* Acct-Session-Id should be unique over reboots. If reliable clock is
|
||||||
* not available, this could be replaced with reboot counter, etc. */
|
* not available, this could be replaced with reboot counter, etc. */
|
||||||
hapd->acct_session_id_hi = time(NULL);
|
os_get_time(&now);
|
||||||
|
hapd->acct_session_id_hi = now.sec;
|
||||||
|
|
||||||
if (radius_client_register(hapd->radius, RADIUS_ACCT,
|
if (radius_client_register(hapd->radius, RADIUS_ACCT,
|
||||||
accounting_receive, hapd))
|
accounting_receive, hapd))
|
||||||
|
@ -227,6 +227,7 @@ void ap_list_process_beacon(struct hostapd_iface *iface,
|
|||||||
struct hostapd_frame_info *fi)
|
struct hostapd_frame_info *fi)
|
||||||
{
|
{
|
||||||
struct ap_info *ap;
|
struct ap_info *ap;
|
||||||
|
struct os_time now;
|
||||||
int new_ap = 0;
|
int new_ap = 0;
|
||||||
size_t len;
|
size_t len;
|
||||||
int set_beacon = 0;
|
int set_beacon = 0;
|
||||||
@ -292,7 +293,8 @@ void ap_list_process_beacon(struct hostapd_iface *iface,
|
|||||||
ap->ht_support = 0;
|
ap->ht_support = 0;
|
||||||
|
|
||||||
ap->num_beacons++;
|
ap->num_beacons++;
|
||||||
time(&ap->last_beacon);
|
os_get_time(&now);
|
||||||
|
ap->last_beacon = now.sec;
|
||||||
if (fi) {
|
if (fi) {
|
||||||
ap->ssi_signal = fi->ssi_signal;
|
ap->ssi_signal = fi->ssi_signal;
|
||||||
ap->datarate = fi->datarate;
|
ap->datarate = fi->datarate;
|
||||||
@ -331,7 +333,7 @@ void ap_list_process_beacon(struct hostapd_iface *iface,
|
|||||||
static void ap_list_timer(void *eloop_ctx, void *timeout_ctx)
|
static void ap_list_timer(void *eloop_ctx, void *timeout_ctx)
|
||||||
{
|
{
|
||||||
struct hostapd_iface *iface = eloop_ctx;
|
struct hostapd_iface *iface = eloop_ctx;
|
||||||
time_t now;
|
struct os_time now;
|
||||||
struct ap_info *ap;
|
struct ap_info *ap;
|
||||||
int set_beacon = 0;
|
int set_beacon = 0;
|
||||||
|
|
||||||
@ -340,12 +342,12 @@ static void ap_list_timer(void *eloop_ctx, void *timeout_ctx)
|
|||||||
if (!iface->ap_list)
|
if (!iface->ap_list)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
time(&now);
|
os_get_time(&now);
|
||||||
|
|
||||||
while (iface->ap_list) {
|
while (iface->ap_list) {
|
||||||
ap = iface->ap_list->prev;
|
ap = iface->ap_list->prev;
|
||||||
if (ap->last_beacon + iface->conf->ap_table_expiration_time >=
|
if (ap->last_beacon + iface->conf->ap_table_expiration_time >=
|
||||||
now)
|
now.sec)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
ap_free_ap(iface, ap);
|
ap_free_ap(iface, ap);
|
||||||
|
@ -45,7 +45,7 @@ struct ap_info {
|
|||||||
int ht_support;
|
int ht_support;
|
||||||
|
|
||||||
unsigned int num_beacons; /* number of beacon frames received */
|
unsigned int num_beacons; /* number of beacon frames received */
|
||||||
time_t last_beacon;
|
os_time_t last_beacon;
|
||||||
|
|
||||||
int already_seen; /* whether API call AP-NEW has already fetched
|
int already_seen; /* whether API call AP-NEW has already fetched
|
||||||
* information about this AP */
|
* information about this AP */
|
||||||
|
@ -244,15 +244,15 @@ static u16 auth_shared_key(struct hostapd_data *hapd, struct sta_info *sta,
|
|||||||
if (!sta->challenge) {
|
if (!sta->challenge) {
|
||||||
/* Generate a pseudo-random challenge */
|
/* Generate a pseudo-random challenge */
|
||||||
u8 key[8];
|
u8 key[8];
|
||||||
time_t now;
|
struct os_time now;
|
||||||
int r;
|
int r;
|
||||||
sta->challenge = os_zalloc(WLAN_AUTH_CHALLENGE_LEN);
|
sta->challenge = os_zalloc(WLAN_AUTH_CHALLENGE_LEN);
|
||||||
if (sta->challenge == NULL)
|
if (sta->challenge == NULL)
|
||||||
return WLAN_STATUS_UNSPECIFIED_FAILURE;
|
return WLAN_STATUS_UNSPECIFIED_FAILURE;
|
||||||
|
|
||||||
now = time(NULL);
|
os_get_time(&now);
|
||||||
r = random();
|
r = os_random();
|
||||||
os_memcpy(key, &now, 4);
|
os_memcpy(key, &now.sec, 4);
|
||||||
os_memcpy(key + 4, &r, 4);
|
os_memcpy(key + 4, &r, 4);
|
||||||
rc4_skip(key, sizeof(key), 0,
|
rc4_skip(key, sizeof(key), 0,
|
||||||
sta->challenge, WLAN_AUTH_CHALLENGE_LEN);
|
sta->challenge, WLAN_AUTH_CHALLENGE_LEN);
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
|
|
||||||
struct hostapd_cached_radius_acl {
|
struct hostapd_cached_radius_acl {
|
||||||
time_t timestamp;
|
os_time_t timestamp;
|
||||||
macaddr addr;
|
macaddr addr;
|
||||||
int accepted; /* HOSTAPD_ACL_* */
|
int accepted; /* HOSTAPD_ACL_* */
|
||||||
struct hostapd_cached_radius_acl *next;
|
struct hostapd_cached_radius_acl *next;
|
||||||
@ -44,7 +44,7 @@ struct hostapd_cached_radius_acl {
|
|||||||
|
|
||||||
|
|
||||||
struct hostapd_acl_query_data {
|
struct hostapd_acl_query_data {
|
||||||
time_t timestamp;
|
os_time_t timestamp;
|
||||||
u8 radius_id;
|
u8 radius_id;
|
||||||
macaddr addr;
|
macaddr addr;
|
||||||
u8 *auth_msg; /* IEEE 802.11 authentication frame from station */
|
u8 *auth_msg; /* IEEE 802.11 authentication frame from station */
|
||||||
@ -71,14 +71,14 @@ static int hostapd_acl_cache_get(struct hostapd_data *hapd, const u8 *addr,
|
|||||||
u32 *acct_interim_interval, int *vlan_id)
|
u32 *acct_interim_interval, int *vlan_id)
|
||||||
{
|
{
|
||||||
struct hostapd_cached_radius_acl *entry;
|
struct hostapd_cached_radius_acl *entry;
|
||||||
time_t now;
|
struct os_time now;
|
||||||
|
|
||||||
time(&now);
|
os_get_time(&now);
|
||||||
entry = hapd->acl_cache;
|
entry = hapd->acl_cache;
|
||||||
|
|
||||||
while (entry) {
|
while (entry) {
|
||||||
if (os_memcmp(entry->addr, addr, ETH_ALEN) == 0) {
|
if (os_memcmp(entry->addr, addr, ETH_ALEN) == 0) {
|
||||||
if (now - entry->timestamp > RADIUS_ACL_TIMEOUT)
|
if (now.sec - entry->timestamp > RADIUS_ACL_TIMEOUT)
|
||||||
return -1; /* entry has expired */
|
return -1; /* entry has expired */
|
||||||
if (entry->accepted == HOSTAPD_ACL_ACCEPT_TIMEOUT)
|
if (entry->accepted == HOSTAPD_ACL_ACCEPT_TIMEOUT)
|
||||||
if (session_timeout)
|
if (session_timeout)
|
||||||
@ -303,7 +303,7 @@ int hostapd_allowed_address(struct hostapd_data *hapd, const u8 *addr,
|
|||||||
|
|
||||||
|
|
||||||
#ifndef CONFIG_NO_RADIUS
|
#ifndef CONFIG_NO_RADIUS
|
||||||
static void hostapd_acl_expire_cache(struct hostapd_data *hapd, time_t now)
|
static void hostapd_acl_expire_cache(struct hostapd_data *hapd, os_time_t now)
|
||||||
{
|
{
|
||||||
struct hostapd_cached_radius_acl *prev, *entry, *tmp;
|
struct hostapd_cached_radius_acl *prev, *entry, *tmp;
|
||||||
|
|
||||||
@ -331,7 +331,8 @@ static void hostapd_acl_expire_cache(struct hostapd_data *hapd, time_t now)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void hostapd_acl_expire_queries(struct hostapd_data *hapd, time_t now)
|
static void hostapd_acl_expire_queries(struct hostapd_data *hapd,
|
||||||
|
os_time_t now)
|
||||||
{
|
{
|
||||||
struct hostapd_acl_query_data *prev, *entry, *tmp;
|
struct hostapd_acl_query_data *prev, *entry, *tmp;
|
||||||
|
|
||||||
@ -367,11 +368,11 @@ static void hostapd_acl_expire_queries(struct hostapd_data *hapd, time_t now)
|
|||||||
static void hostapd_acl_expire(void *eloop_ctx, void *timeout_ctx)
|
static void hostapd_acl_expire(void *eloop_ctx, void *timeout_ctx)
|
||||||
{
|
{
|
||||||
struct hostapd_data *hapd = eloop_ctx;
|
struct hostapd_data *hapd = eloop_ctx;
|
||||||
time_t now;
|
struct os_time now;
|
||||||
|
|
||||||
time(&now);
|
os_get_time(&now);
|
||||||
hostapd_acl_expire_cache(hapd, now);
|
hostapd_acl_expire_cache(hapd, now.sec);
|
||||||
hostapd_acl_expire_queries(hapd, now);
|
hostapd_acl_expire_queries(hapd, now.sec);
|
||||||
|
|
||||||
eloop_register_timeout(10, 0, hostapd_acl_expire, hapd, NULL);
|
eloop_register_timeout(10, 0, hostapd_acl_expire, hapd, NULL);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user