mirror of
https://github.com/vanhoefm/fragattacks.git
synced 2024-11-25 08:48:31 -05:00
FILS: Add new information elements
This adds definitions for new information elements from P802.11ai/D11.0 and parsing of these IEs. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
677c2283e7
commit
1d29163035
@ -179,6 +179,90 @@ static int ieee802_11_parse_vendor_specific(const u8 *pos, size_t elen,
|
||||
}
|
||||
|
||||
|
||||
static int ieee802_11_parse_extension(const u8 *pos, size_t elen,
|
||||
struct ieee802_11_elems *elems,
|
||||
int show_errors)
|
||||
{
|
||||
u8 ext_id;
|
||||
|
||||
if (elen < 1) {
|
||||
if (show_errors) {
|
||||
wpa_printf(MSG_MSGDUMP,
|
||||
"short information element (Ext)");
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
ext_id = *pos++;
|
||||
elen--;
|
||||
|
||||
switch (ext_id) {
|
||||
case WLAN_EID_EXT_ASSOC_DELAY_INFO:
|
||||
if (elen != 1)
|
||||
break;
|
||||
elems->assoc_delay_info = pos;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_REQ_PARAMS:
|
||||
if (elen < 3)
|
||||
break;
|
||||
elems->fils_req_params = pos;
|
||||
elems->fils_req_params_len = elen;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_KEY_CONFIRM:
|
||||
elems->fils_key_confirm = pos;
|
||||
elems->fils_key_confirm_len = elen;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_SESSION:
|
||||
if (elen != FILS_SESSION_LEN)
|
||||
break;
|
||||
elems->fils_session = pos;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_HLP_CONTAINER:
|
||||
if (elen < 2 * ETH_ALEN)
|
||||
break;
|
||||
elems->fils_hlp = pos;
|
||||
elems->fils_hlp_len = elen;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_IP_ADDR_ASSIGN:
|
||||
if (elen < 1)
|
||||
break;
|
||||
elems->fils_ip_addr_assign = pos;
|
||||
elems->fils_ip_addr_assign_len = elen;
|
||||
break;
|
||||
case WLAN_EID_EXT_KEY_DELIVERY:
|
||||
if (elen < WPA_KEY_RSC_LEN)
|
||||
break;
|
||||
elems->key_delivery = pos;
|
||||
elems->key_delivery_len = elen;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_WRAPPED_DATA:
|
||||
elems->fils_wrapped_data = pos;
|
||||
elems->fils_wrapped_data_len = elen;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_PUBLIC_KEY:
|
||||
if (elen < 1)
|
||||
break;
|
||||
elems->fils_pk = pos;
|
||||
elems->fils_pk_len = elen;
|
||||
break;
|
||||
case WLAN_EID_EXT_FILS_NONCE:
|
||||
if (elen != FILS_NONCE_LEN)
|
||||
break;
|
||||
elems->fils_nonce = pos;
|
||||
break;
|
||||
default:
|
||||
if (show_errors) {
|
||||
wpa_printf(MSG_MSGDUMP,
|
||||
"IEEE 802.11 element parsing ignored unknown element extension (ext_id=%u elen=%u)",
|
||||
ext_id, (unsigned int) elen);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ieee802_11_parse_elems - Parse information elements in management frames
|
||||
* @start: Pointer to the start of IEs
|
||||
@ -379,6 +463,35 @@ ParseRes ieee802_11_parse_elems(const u8 *start, size_t len,
|
||||
elems->rrm_enabled = pos;
|
||||
elems->rrm_enabled_len = elen;
|
||||
break;
|
||||
case WLAN_EID_CAG_NUMBER:
|
||||
elems->cag_number = pos;
|
||||
elems->cag_number_len = elen;
|
||||
break;
|
||||
case WLAN_EID_AP_CSN:
|
||||
if (elen < 1)
|
||||
break;
|
||||
elems->ap_csn = pos;
|
||||
break;
|
||||
case WLAN_EID_FILS_INDICATION:
|
||||
if (elen < 2)
|
||||
break;
|
||||
elems->fils_indic = pos;
|
||||
elems->fils_indic_len = elen;
|
||||
break;
|
||||
case WLAN_EID_DILS:
|
||||
if (elen < 2)
|
||||
break;
|
||||
elems->dils = pos;
|
||||
elems->dils_len = elen;
|
||||
break;
|
||||
case WLAN_EID_FRAGMENT:
|
||||
/* TODO */
|
||||
break;
|
||||
case WLAN_EID_EXTENSION:
|
||||
if (ieee802_11_parse_extension(pos, elen, elems,
|
||||
show_errors))
|
||||
unknown++;
|
||||
break;
|
||||
default:
|
||||
unknown++;
|
||||
if (!show_errors)
|
||||
|
@ -64,6 +64,20 @@ struct ieee802_11_elems {
|
||||
const u8 *pref_freq_list;
|
||||
const u8 *supp_op_classes;
|
||||
const u8 *rrm_enabled;
|
||||
const u8 *cag_number;
|
||||
const u8 *ap_csn;
|
||||
const u8 *fils_indic;
|
||||
const u8 *dils;
|
||||
const u8 *assoc_delay_info;
|
||||
const u8 *fils_req_params;
|
||||
const u8 *fils_key_confirm;
|
||||
const u8 *fils_session;
|
||||
const u8 *fils_hlp;
|
||||
const u8 *fils_ip_addr_assign;
|
||||
const u8 *key_delivery;
|
||||
const u8 *fils_wrapped_data;
|
||||
const u8 *fils_pk;
|
||||
const u8 *fils_nonce;
|
||||
|
||||
u8 ssid_len;
|
||||
u8 supp_rates_len;
|
||||
@ -96,6 +110,16 @@ struct ieee802_11_elems {
|
||||
u8 pref_freq_list_len;
|
||||
u8 supp_op_classes_len;
|
||||
u8 rrm_enabled_len;
|
||||
u8 cag_number_len;
|
||||
u8 fils_indic_len;
|
||||
u8 dils_len;
|
||||
u8 fils_req_params_len;
|
||||
u8 fils_key_confirm_len;
|
||||
u8 fils_hlp_len;
|
||||
u8 fils_ip_addr_assign_len;
|
||||
u8 key_delivery_len;
|
||||
u8 fils_wrapped_data_len;
|
||||
u8 fils_pk_len;
|
||||
|
||||
struct mb_ies_info mb_ies;
|
||||
};
|
||||
|
@ -292,6 +292,24 @@
|
||||
#define WLAN_EID_VHT_QUIET_CHANNEL 198
|
||||
#define WLAN_EID_VHT_OPERATING_MODE_NOTIFICATION 199
|
||||
#define WLAN_EID_VENDOR_SPECIFIC 221
|
||||
#define WLAN_EID_CAG_NUMBER 237
|
||||
#define WLAN_EID_AP_CSN 239
|
||||
#define WLAN_EID_FILS_INDICATION 240
|
||||
#define WLAN_EID_DILS 241
|
||||
#define WLAN_EID_FRAGMENT 242
|
||||
#define WLAN_EID_EXTENSION 255
|
||||
|
||||
/* Element ID Extension (EID 255) values */
|
||||
#define WLAN_EID_EXT_ASSOC_DELAY_INFO 1
|
||||
#define WLAN_EID_EXT_FILS_REQ_PARAMS 2
|
||||
#define WLAN_EID_EXT_FILS_KEY_CONFIRM 3
|
||||
#define WLAN_EID_EXT_FILS_SESSION 4
|
||||
#define WLAN_EID_EXT_FILS_HLP_CONTAINER 5
|
||||
#define WLAN_EID_EXT_FILS_IP_ADDR_ASSIGN 6
|
||||
#define WLAN_EID_EXT_KEY_DELIVERY 7
|
||||
#define WLAN_EID_EXT_FILS_WRAPPED_DATA 8
|
||||
#define WLAN_EID_EXT_FILS_PUBLIC_KEY 12
|
||||
#define WLAN_EID_EXT_FILS_NONCE 13
|
||||
|
||||
|
||||
/* Action frame categories (IEEE 802.11-2007, 7.3.1.11, Table 7-24) */
|
||||
@ -505,6 +523,9 @@ enum lci_req_subelem {
|
||||
LCI_REQ_SUBELEM_MAX_AGE = 4,
|
||||
};
|
||||
|
||||
#define FILS_NONCE_LEN 16
|
||||
#define FILS_SESSION_LEN 8
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma pack(push, 1)
|
||||
#endif /* _MSC_VER */
|
||||
|
Loading…
Reference in New Issue
Block a user