diff options
| author | Marc <marc@malloc.me> | 2022-08-10 13:28:51 -0500 |
|---|---|---|
| committer | Marc <marc@malloc.me> | 2022-08-10 13:28:51 -0500 |
| commit | 01d2b9b91d0a7f246028f578f57455c213ef0d7f (patch) | |
| tree | f1509abb475b518c357432128c5d94fe53678165 | |
| parent | 0dc400434fd66ec3d7c732d61d1e1c4939522be8 (diff) | |
| download | libwifi-01d2b9b91d0a7f246028f578f57455c213ef0d7f.tar.gz libwifi-01d2b9b91d0a7f246028f578f57455c213ef0d7f.tar.bz2 libwifi-01d2b9b91d0a7f246028f578f57455c213ef0d7f.zip | |
parse: Check for WEP presence before removing it from bitfield
| -rw-r--r-- | src/libwifi/parse/management/common.c | 8 |
1 files changed, 6 insertions, 2 deletions
| diff --git a/src/libwifi/parse/management/common.c b/src/libwifi/parse/management/common.c index e847415..5e4fbf6 100644 --- a/src/libwifi/parse/management/common.c +++ b/src/libwifi/parse/management/common.c | |||
| @@ -68,7 +68,9 @@ void libwifi_handle_ssid_tag(void *target, int target_type, const char *tag_data | |||
| 68 | int libwifi_bss_handle_rsn_tag(struct libwifi_bss *bss, const unsigned char *rsn_data, int rsn_len) { | 68 | int libwifi_bss_handle_rsn_tag(struct libwifi_bss *bss, const unsigned char *rsn_data, int rsn_len) { |
| 69 | struct libwifi_rsn_info rsn_info = {0}; | 69 | struct libwifi_rsn_info rsn_info = {0}; |
| 70 | 70 | ||
| 71 | bss->encryption_info &= ~(unsigned int) WEP; | 71 | if (bss->encryption_info & WEP) { |
| 72 | bss->encryption_info &= ~(unsigned int) WEP; | ||
| 73 | } | ||
| 72 | 74 | ||
| 73 | int min_len = sizeof(rsn_info.rsn_version) + sizeof(struct libwifi_cipher_suite); | 75 | int min_len = sizeof(rsn_info.rsn_version) + sizeof(struct libwifi_cipher_suite); |
| 74 | if (rsn_len < min_len) { | 76 | if (rsn_len < min_len) { |
| @@ -105,7 +107,9 @@ int libwifi_bss_handle_msft_tag(struct libwifi_bss *bss, const unsigned char *ms | |||
| 105 | 107 | ||
| 106 | switch (vendor_header->type) { | 108 | switch (vendor_header->type) { |
| 107 | case MICROSOFT_OUI_TYPE_WPA: | 109 | case MICROSOFT_OUI_TYPE_WPA: |
| 108 | bss->encryption_info &= ~(unsigned int) WEP; | 110 | if (bss->encryption_info & WEP) { |
| 111 | bss->encryption_info &= ~(unsigned int) WEP; | ||
| 112 | } | ||
| 109 | bss->encryption_info |= WPA; | 113 | bss->encryption_info |= WPA; |
| 110 | 114 | ||
| 111 | // Skip 4 bytes for the OUI (3) and Vendor Tag Type (1) | 115 | // Skip 4 bytes for the OUI (3) and Vendor Tag Type (1) |
