]> git.ipfire.org Git - thirdparty/hostap.git/log
thirdparty/hostap.git
4 years agoMark wpa_bss_get_fils_cache_id() argument const
Jouni Malinen [Mon, 16 Nov 2020 13:52:22 +0000 (15:52 +0200)] 
Mark wpa_bss_get_fils_cache_id() argument const

This function does not modify the BSS entry.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Fix test description strings for couple of SAE cases
Jouni Malinen [Mon, 16 Nov 2020 13:36:59 +0000 (15:36 +0200)] 
tests: Fix test description strings for couple of SAE cases

Remove the extraneous closing parenthesis.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoChange list arguments to const where possible
Hai Shalom [Tue, 3 Nov 2020 02:14:11 +0000 (18:14 -0800)] 
Change list arguments to const where possible

Change struct dl_list pointer argument to const in list functions that
do not manipulate the list: dl_list_len() and dl_list_empty().

Signed-off-by: Hai Shalom <haishalom@google.com>
4 years agonl80211: Send the sae_pwe value to the driver
Rohan Dutta [Sat, 7 Nov 2020 13:53:24 +0000 (19:23 +0530)] 
nl80211: Send the sae_pwe value to the driver

Use NL80211_ATTR_SAE_PWE attribute to indicate the sae_pwe value
to the driver during the NL80211_CMD_START_AP and NL80211_CMD_CONNECT
in WPA3-Personal networks which are using SAE authentication.

Signed-off-by: Rohan Dutta <drohan@codeaurora.org>
4 years agoP2P: Disable P2P in the 6 GHz band for now
Vamsi Krishna [Mon, 16 Nov 2020 07:01:34 +0000 (12:31 +0530)] 
P2P: Disable P2P in the 6 GHz band for now

P2P usage in the 6 GHz band is not standardized yet by WFA. Disable P2P
operations in the 6 GHz band to avoid potential interop issues with
existing P2P devices in production. P2P operations in the 6 GHz band can
be reenabled later after defining standard ways to address potential
interop issues with existing P2P devices.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoP2P: Include p2p_6ghz_disable in global configuration
Sreeramya Soratkal [Thu, 29 Oct 2020 13:45:47 +0000 (19:15 +0530)] 
P2P: Include p2p_6ghz_disable in global configuration

Previously, the configuration to disable the 6 GHz band remained local
to the P2P interface. With this there is a possibility of 6 GHz channels
being included in the channel list when the channel list needs to be
updated if the state changes on one of the interfaces.

Include the configuration to disable the 6 GHz band for P2P as a global
configuration value to prevent the inclusion of 6 GHz channels in the
channel list for P2P when the channel list needs to be updated during
the state change in one of the interfaces.

Signed-off-by: Sreeramya Soratkal <ssramya@codeaurora.org>
4 years agoAdd connect fail reason code from the driver to assoc reject event
Vinita S. Maloo [Thu, 15 Oct 2020 14:58:17 +0000 (20:28 +0530)] 
Add connect fail reason code from the driver to assoc reject event

Add support to report a vendor specific connect fail reason code fetched
from the driver to users by adding the reason code to the event
CTRL-EVENT-ASSOC-REJECT. Fetch the connect fail reason code when the
driver sends a failure connection result and append the reason code, if
available, to assoc reject event.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoVendor feature capability to support concurrent sessions on Wi-Fi bands
Sunil Dutt [Wed, 4 Nov 2020 16:09:38 +0000 (21:39 +0530)] 
Vendor feature capability to support concurrent sessions on Wi-Fi bands

Introduces a vendor specific feature capability
QCA_WLAN_VENDOR_FEATURE_CONCURRENT_BAND_SESSIONS to know if the device
supports concurrent network sessions on different Wi-Fi bands. This feature
capability is attributed to the hardware's capability to support the same
(e.g., DBS).

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoAdd extra parameters to vendor command GPIO attribute
Nandha Kishore Easwaran [Wed, 11 Nov 2020 13:08:02 +0000 (18:38 +0530)] 
Add extra parameters to vendor command GPIO attribute

Add extra parameters mux_config, drive, and init_enable
to the GPIO config command.

Signed-off-by: Nandha Kishore Easwaran <nandhaki@codeaurora.org>
4 years agoSync with mac80211-next.git include/uapi/linux/nl80211.h
Jouni Malinen [Mon, 16 Nov 2020 11:14:27 +0000 (13:14 +0200)] 
Sync with mac80211-next.git include/uapi/linux/nl80211.h

This brings in nl80211 definitions as of 2020-11-11.

Signed-off-by: Jouni Malinen <j@w1.fi>
4 years agoSet NLA_F_NESTED flag with NL80211_ATTR_VENDOR_DATA conditionally
Vinita S. Maloo [Tue, 27 Oct 2020 18:03:59 +0000 (23:33 +0530)] 
Set NLA_F_NESTED flag with NL80211_ATTR_VENDOR_DATA conditionally

The newer kernel versions enforce strict netlink attribute policy
validation and will cause cfg80211 to reject vendor commands with
NL80211_ATTR_VENDOR_DATA if NLA_F_NESTED attribute is not set but
if the vendor command is expecting nested data within
NL80211_ATTR_VENDOR_DATA attribute.

Most of the earlier instances were addressed by adding NLA_F_NESTED
flag in nla_nest_start(). This commit addresses the remaining
instance in which NL80211_ATTR_VENDOR_DATA is populated using data
set by user through the control interface.

Enhance the control interface VENDOR command to indicate whether the
vendor subcommand uses nested attributes within NL80211_ATTR_VENDOR_DATA
attribute or not.

Set NLA_F_NESTED flag for existing QCA vendor commands which use nested
attributes within the NL80211_ATTR_VENDOR_DATA attributes so that the
old frameworks implementations for already existing commands work
without any issues.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoAdd test configuration attr to enable/disable full bandwidth UL MU-MIMO
Srinivas Girigowda [Wed, 28 Oct 2020 21:18:01 +0000 (14:18 -0700)] 
Add test configuration attr to enable/disable full bandwidth UL MU-MIMO

Define a QCA vendor attribute
QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_FULL_BW_UL_MU_MIMO to
enable/disable full bandwidth UL MU-MIMO subfield in the HE PHY
capabilities information field for testing purposes.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoBSS/scan: More conversions to for_each_element_id()
Jouni Malinen [Wed, 4 Nov 2020 17:50:34 +0000 (19:50 +0200)] 
BSS/scan: More conversions to for_each_element_id()

Use the common IE parsing routine in hope of trying to make the length
checks easier for static analyzers. In addition, try to make the
*_vendor_ie_multi() cases easier to analyze as well even though they
cannot use for_each_element_id().

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agodbus: Check eloop registration failure in add_watch handler
Jouni Malinen [Wed, 4 Nov 2020 17:39:08 +0000 (19:39 +0200)] 
dbus: Check eloop registration failure in add_watch handler

Report failures at lower layer to the upper layer D-Bus handling of
socket registration to allow failures to be addressed more cleanly.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoBSS: Convert wpa_bss_get_vendor_ie() to use for_each_element_id()
Jouni Malinen [Tue, 3 Nov 2020 18:36:15 +0000 (20:36 +0200)] 
BSS: Convert wpa_bss_get_vendor_ie() to use for_each_element_id()

Use the common IE parsing routine in hope of trying to make the length
checks easier for static analyzers.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoMake GTK length validation for RSN Group 1/2 easier to analyze
Jouni Malinen [Tue, 3 Nov 2020 18:23:48 +0000 (20:23 +0200)] 
Make GTK length validation for RSN Group 1/2 easier to analyze

This extends the changes in commit c397eff82894 ("Make GTK length
validation easier to analyze") to cover the RSN case as well as the WPA.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Prepare for control interface message change
Jouni Malinen [Tue, 3 Nov 2020 19:08:52 +0000 (21:08 +0200)] 
tests: Prepare for control interface message change

Update ap_wpa2_psk_supp_proto_too_long_gtk_in_group_msg to accept
upcoming change in the parsing validation step that catches the issue.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoEAP-IKEv2: Try to make transform parser simpler to understand
Jouni Malinen [Tue, 3 Nov 2020 18:11:17 +0000 (20:11 +0200)] 
EAP-IKEv2: Try to make transform parser simpler to understand

Use a local variable to try to make ikev2_parse_proposal() easier for
static analyzers to understand. Bounds checking in the loop is really
done by the ikev2_parse_transform() function, so the p->num_transforms
value itself is of no importance for that part and even that was already
implicitly limited in range.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoHS 2.0: Clarify OSU Friendly Name length validation
Jouni Malinen [Tue, 3 Nov 2020 17:56:39 +0000 (19:56 +0200)] 
HS 2.0: Clarify OSU Friendly Name length validation

This extends the changes in commit 0570a3ea7d87 ("HS 2.0: Clarify OSU
Provider list length validation") to cover the length field for the OSU
Friendly Name value to try to get this easier for static analyzers to
understand.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoTDLS: Fix error path for TPK M1 send failure in testing functionality
Jouni Malinen [Tue, 3 Nov 2020 17:45:36 +0000 (19:45 +0200)] 
TDLS: Fix error path for TPK M1 send failure in testing functionality

The previous fix did not actually address this testing functionality
case correctly. Clear the peer pointer to avoid double freeing.

Fixes: a86078c87613 ("TDLS: Fix error path handling for TPK M1 send failures")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoAvoid undefined behavior with memcpy PMK/PSK update
Jouni Malinen [Mon, 2 Nov 2020 16:46:35 +0000 (18:46 +0200)] 
Avoid undefined behavior with memcpy PMK/PSK update

When SAE is used, the local pointer pmk may point to sm->PMK. Skip the
memcpy operation in such a case since it is not really needed and use of
overlapping memory buffers is undefined behavior for memcpy().

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agonl80211: Fix filtering of unsupported bands/modes
Jouni Malinen [Mon, 2 Nov 2020 16:38:41 +0000 (18:38 +0200)] 
nl80211: Fix filtering of unsupported bands/modes

The loop for removing unsupported bands was assuming there is always
exactly one band/mode following the removed band. That was not at all
correct, so fix this by dynamically determining how many (if any) bands
need to be moved.

Fixes: 106d67a93c2d ("nl80211: Filter out unsupported bands")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: TDLS with SAE
Jouni Malinen [Mon, 2 Nov 2020 15:40:18 +0000 (17:40 +0200)] 
tests: TDLS with SAE

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoTDLS: Fix error path handling for TPK M1 send failures
Jouni Malinen [Mon, 2 Nov 2020 15:26:04 +0000 (17:26 +0200)] 
TDLS: Fix error path handling for TPK M1 send failures

Local allocation error or failure to get a random number could have
resulted in the peer entry getting freed and couple of the error path
cases in callers could have tried to reference or delete the peer after
that. Fix this by tracking the errors where the peer is freed.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Fix error path handling in enterprise provisioning
Jouni Malinen [Mon, 2 Nov 2020 14:52:01 +0000 (16:52 +0200)] 
DPP2: Fix error path handling in enterprise provisioning

The allocated memory pointed by the pem pointer was freed on an error
path without clearing the pointer to NULL before returning it from the
function. This could have resulted in use of freed memory in an error
case. Fix this by clearing the pointer so that the function returns NULL
properly in the case of this error.

Fixes: ace3723d9879 ("DPP2: Enterprise provisioning (Enrollee)")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoRemove unused variable update
Jouni Malinen [Mon, 2 Nov 2020 14:36:14 +0000 (16:36 +0200)] 
Remove unused variable update

Commit e8b85c078e73 ("iface match: Unspecified matched interfaces should
not log driver fails") removed the only use of the added interface wpa_s
pointer, but left that pointer setting in place. Remove it to keep
static analyzers happy.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Fix ppkey parsing
Jouni Malinen [Mon, 2 Nov 2020 14:31:02 +0000 (16:31 +0200)] 
DPP2: Fix ppkey parsing

DPP_CONFIGURATOR_ADD processing of the new ppkey parameter had a
copy-paste error in determining the correct length of this parameter.
Fix that by referencing the correct pointer.

Fixes: 9c1fbff07404 ("DPP2: Generate a privacy protection key for Configurator")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years ago6 GHz: Add support for missing 6 GHz operating classes
Veerendranath Jakkam [Wed, 16 Sep 2020 08:21:47 +0000 (13:51 +0530)] 
6 GHz: Add support for missing 6 GHz operating classes

Add support for missing 6 GHz operating classes as defined in
IEEE P802.11ax/D7.0.

This is needed to avoid OCV failures on the 6 GHz band when the channel
width is larger than 20 MHz.

Signed-off-by: Veerendranath Jakkam <vjakkam@codeaurora.org>
4 years ago6 GHz: Fix opclasses mapping in ieee80211_freq_to_channel_ext()
Veerendranath Jakkam [Wed, 16 Sep 2020 08:28:22 +0000 (13:58 +0530)] 
6 GHz: Fix opclasses mapping in ieee80211_freq_to_channel_ext()

Previously only primary channel number used to calculate 6GHz operating
class in ieee80211_freq_to_channel_ext() and it is always giving 131
operating class. Fix this by mapping operating class using chanwidth and
sec_channel also.

This is needed to avoid OCV failures on the 6 GHz band when the channel
width is larger than 20 MHz.

Signed-off-by: Veerendranath Jakkam <vjakkam@codeaurora.org>
4 years agoEAP-SIM peer: Send AT_IDENTITY first
Hai Shalom [Fri, 16 Oct 2020 19:47:28 +0000 (12:47 -0700)] 
EAP-SIM peer: Send AT_IDENTITY first

For EAP-SIM connections, reorder the order of the attributes in
EAP-Response/SIM/Start message: Send AT_IDENTITY first, then
AT_NONCE and AT_VERSION instead of AT_IDENTITY last. Even though there
is no order requirements in the RFC, some implementations expect the
order of the attributes to be exactly as described in the RFC figures.

Peer                                      Authenticator
|                                                 |
|                      +------------------------------+
|                      | Server does not have a       |
|                      | Subscriber identity available|
|                      | When starting EAP-SIM        |
|                      +------------------------------+
|                                                 |
|          EAP-Request/SIM/Start                  |
|          (AT_ANY_ID_REQ, AT_VERSION_LIST)       |
|<------------------------------------------------|
|                                                 |
|                                                 |
| EAP-Response/SIM/Start                          |
| (AT_IDENTITY, AT_NONCE_MT,                      |
|  AT_SELECTED_VERSION)                           |
|------------------------------------------------>|
|                                                 |

Signed-off-by: Hai Shalom <haishalom@google.com>
4 years agonl80211: Check for proper nlmsg allocation in send_and_recv_msgs_owner()
Pooventhiran G [Tue, 27 Oct 2020 06:24:21 +0000 (11:54 +0530)] 
nl80211: Check for proper nlmsg allocation in send_and_recv_msgs_owner()

When nlmsg allocation fails, nl80211_drv_msg() returns NULL and the call
to send_and_recv_msgs_owner() from nl80211_leave_ibss() could have ended
up dereferencing a NULL pointer. Fix this by make
send_and_recv_msgs_owner() more consistent with other send_and_recv*()
cases that check msg == NULL internally.

Fixes: 12ea7dee311b ("nl80211: Use nl80211 control port for receiving EAPOL frames")
Signed-off-by: Pooventhiran G <pooventh@codeaurora.org>
4 years agoDPP2: Explicitly check EC_KEY before dereferencing it
Disha Das [Tue, 27 Oct 2020 07:39:31 +0000 (13:09 +0530)] 
DPP2: Explicitly check EC_KEY before dereferencing it

In theory, the EVP_PKEY_get0_EC_KEY() could fail, so verify that it
succeeds before using the pointer to get the group.

Fixes: 65e94351dc4a ("DPP2: Reconfig Authentication Request processing and Response generation")
Signed-off-by: Disha Das <dishad@codeaurora.org>
4 years agoP2P: Consider BSS entry pending for P2P joining as a known BSS
Sreeramya Soratkal [Mon, 12 Oct 2020 10:42:14 +0000 (16:12 +0530)] 
P2P: Consider BSS entry pending for P2P joining as a known BSS

Consider the BSS entry that is pending for the P2P group join operation
also as a known network along with the existing configured networks.
This prevents removal of the BSS entry that is still in the process of
P2P join operation from the BSS table when the number of entries exceed
bss_max_count.

Signed-off-by: Sreeramya Soratkal <ssramya@codeaurora.org>
4 years agonl80211: Filter out unsupported bands
Jouni Malinen [Mon, 26 Oct 2020 20:34:07 +0000 (22:34 +0200)] 
nl80211: Filter out unsupported bands

If the driver indicates capability for a band that
hostapd/wpa_supplicant does not support, the struct hostapd_hw_modes
array of bands got an empty entry for that with NUM_HOSTAPD_MODES as the
mode. This resulted in various issues, e.g., with fst_hw_mode_to_band()
hitting a WPA_ASSERT(0).

Fix this by filtering out unsupported bands from the internal data
structures.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoP2P: Include p2p_add_cli_chan parameter while cloning the configuration
Sreeramya Soratkal [Thu, 24 Sep 2020 10:38:27 +0000 (16:08 +0530)] 
P2P: Include p2p_add_cli_chan parameter while cloning the configuration

The dynamically created P2P group interface did not consider the
channels that can be used by the P2P client during the P2P group
formation. Copy the p2p_add_cli_chan parameter while cloning the
configuration to the P2P group interface. This allows the dynamically
created group interface case to form the group in the specific
client-only channels when the device is a P2P client in the group.

Signed-off-by: Sreeramya Soratkal <ssramya@codeaurora.org>
4 years agoVendor specific feature capability for Adaptive 11r
Sunil Dutt [Thu, 15 Oct 2020 13:38:45 +0000 (19:08 +0530)] 
Vendor specific feature capability for Adaptive 11r

Add feature capability indication for Adaptive 11r for the drivers
to advertize support for this.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoAdd additional vendor specific hang reason codes
Arun Kumar Khandavalli [Thu, 22 Oct 2020 15:54:41 +0000 (21:24 +0530)] 
Add additional vendor specific hang reason codes

Add additional hang reason codes in enum qca_wlan_vendor_hang_reason to
address potential internal failure cases.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Update dpp_controller_rx_errors to use the assigned TCP port
Jouni Malinen [Tue, 20 Oct 2020 21:31:01 +0000 (00:31 +0300)] 
tests: Update dpp_controller_rx_errors to use the assigned TCP port

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Update the default port number for DPP-over-TCP
Jouni Malinen [Tue, 20 Oct 2020 21:29:38 +0000 (00:29 +0300)] 
DPP2: Update the default port number for DPP-over-TCP

IANA assigned the TCP port 8908 for DPP, so update the implementation to
match the formal assignment.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoFix couple more typos
Jouni Malinen [Mon, 19 Oct 2020 21:19:44 +0000 (00:19 +0300)] 
Fix couple more typos

Couple of similar cases that were not included in the previous commit.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agowpa_supplicant: Fix typos
Yegor Yefremov [Sun, 18 Oct 2020 17:28:23 +0000 (19:28 +0200)] 
wpa_supplicant: Fix typos

Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
4 years agotests: SAE status code handling
Jouni Malinen [Mon, 19 Oct 2020 20:57:11 +0000 (23:57 +0300)] 
tests: SAE status code handling

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoSAE-PK: Do not accept SAE-PK status code when no PK is configured
Jouni Malinen [Mon, 19 Oct 2020 20:35:00 +0000 (23:35 +0300)] 
SAE-PK: Do not accept SAE-PK status code when no PK is configured

Make sae_status_success() more explicit by rejecting SAE-PK status code
when the AP is not configured with PK.

Fixes: 20ccf97b3dc1 ("SAE-PK: AP functionality")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoSAE: Don't use potentially uninitialized keys
Andrei Otcheretianski [Mon, 19 Oct 2020 08:06:30 +0000 (11:06 +0300)] 
SAE: Don't use potentially uninitialized keys

If SAE_CONFIG_PK is not defined and sae->pk isn't zero (which is
possible as it is controlled by the commit message status code),
sae_derive_keys() may end up deriving PMK and KCK from an
uninitialized array. Fix that.

Fixes: 6b9e99e571ee ("SAE-PK: Extend SAE functionality for AP validation")
Fixes: 20ccf97b3dc1 ("SAE-PK: AP functionality")
Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
4 years agowpa_supplicant: Remove unfeasible conditions in config parsing
Andrei Otcheretianski [Mon, 19 Oct 2020 08:06:29 +0000 (11:06 +0300)] 
wpa_supplicant: Remove unfeasible conditions in config parsing

pos can't be NULL in wpa_global_config_parse_str(), so there is no point
checking this, especially when pos was already dereferenced earlier.
Remove the redundant conditions.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
4 years agowpa_cli: Don't access uninitialized variables
Andrei Otcheretianski [Mon, 19 Oct 2020 08:06:28 +0000 (11:06 +0300)] 
wpa_cli: Don't access uninitialized variables

Don't print potentially uninitialized variables in wpa_ctrl_command_bss().
Some compilers and analyzers may warn about it.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
4 years agoOpenSSL: Make openssl_debug_dump_certificate() more robust
Pooventhiran G [Sun, 18 Oct 2020 15:30:09 +0000 (21:00 +0530)] 
OpenSSL: Make openssl_debug_dump_certificate() more robust

SSL_CTX_get0_certificate() returns NULL if no certificate is installed.
While this should not be the case here due to the loop in
openssl_debug_dump_certificate_chains() proceeding only if the
SSL_CTX_set_current_cert() returns success, it is safer to make
openssl_debug_dump_certificate() explicitly check against NULL before
trying to dump details about the certificate.

Signed-off-by: Pooventhiran G <pooventh@codeaurora.org>
4 years agobuild: lib.rules: Add common-clean
Johannes Berg [Thu, 15 Oct 2020 09:42:21 +0000 (11:42 +0200)] 
build: lib.rules: Add common-clean

During the build reshuffling, I missed this, so doing
'make clean' in a certain src/lib folder doesn't clean
up everything anymore. Fix that.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
4 years agowpa_supplicant: Fix frequency config for VHT/HE cases
Markus Theil [Wed, 14 Oct 2020 19:31:15 +0000 (21:31 +0200)] 
wpa_supplicant: Fix frequency config for VHT/HE cases

Fix compilation without CONFIG_P2P and only set secondary channel seg
idx if we use a mode supporting a sec channel for VHT/HE.

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agoFix spelling of "unexpected" in messages
Jouni Malinen [Fri, 16 Oct 2020 09:42:23 +0000 (12:42 +0300)] 
Fix spelling of "unexpected" in messages

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agohostapd: Fix typos
Yegor Yefremov [Thu, 15 Oct 2020 20:00:40 +0000 (22:00 +0200)] 
hostapd: Fix typos

Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
4 years agoeap_peer: Add .gitignore with *.so
Johannes Berg [Fri, 16 Oct 2020 07:21:25 +0000 (09:21 +0200)] 
eap_peer: Add .gitignore with *.so

If wpa_supplicant is built with dynamic EAP methods,
the *.so files land here. Add them to .gitignore.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
4 years agoP2P: Stop old listen radio work before go to WAIT_PEER_IDLE state
Hu Wang [Wed, 29 Jul 2020 03:15:35 +0000 (11:15 +0800)] 
P2P: Stop old listen radio work before go to WAIT_PEER_IDLE state

P2P goes to Listen state while waiting for the peer to become ready for
GO Negotiation. If old listen radio work has not been completed, P2P
fails to go to listen state. This could happen in cases where P2P Action
frame transmission reused ongoing p2p-listen radio work.

p2p0: Add radio work 'p2p-listen'@0x
P2P-FIND-STOPPED
p2p0: Starting radio work 'p2p-listen'@0x after 0.010644 second wait
P2P: Use ongoing radio work for Action frame TX
P2P: Use ongoing radio work for Action frame TX
P2P: State CONNECT -> CONNECT
P2P: State CONNECT -> WAIT_PEER_IDLE
P2P: State WAIT_PEER_IDLE -> WAIT_PEER_CONNECT
P2P: Reject start_listen since p2p_listen_work already exists
P2P: Failed to start listen mode

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoMSCS: Fix decapsulating subelements from MSCS descriptor
Vamsi Krishna [Tue, 13 Oct 2020 15:51:13 +0000 (21:21 +0530)] 
MSCS: Fix decapsulating subelements from MSCS descriptor

Fix pointer sent for decapsulating subelements from MSCS descriptor
IE while processing (re)association response frames.

Fixes: af8ab3208d03 ("MSCS: Parse result of MSCS setup in (Re)Association Response frames")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoAdd QCA interface for driver to report various connect fail reason codes
Vamsi Krishna [Thu, 8 Oct 2020 12:17:19 +0000 (17:47 +0530)] 
Add QCA interface for driver to report various connect fail reason codes

The connection process fails for several reasons and the status codes
defined in IEEE Std 802.11 do not cover the locally generated reason
codes. Add an attribute to QCA_NL80211_VENDOR_SUBCMD_GET_STA_INFO vendor
sub command which can be used by the driver/firmware to report various
additional reason codes for connection failures.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agobuild: Fix libeap_peer.a build
Jouni Malinen [Wed, 14 Oct 2020 19:57:04 +0000 (22:57 +0300)] 
build: Fix libeap_peer.a build

The install target at the beginning of src/eap_peer/Makefile was
confusing make about the build rules for libeap_peer.a and overriding of
the install target between src/eap_peer/Makefile and src/lib.rules was
breaking installation of dynamic EAP peer *.so files.

Fix this by lib.rules defining a default for the install target so that
src/*/Makefile can override that and by moving the install target for
eap_peer to the end of the Makefile.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDFS: Use helper functions for VHT/HE parameters
Markus Theil [Tue, 30 Jun 2020 11:53:23 +0000 (13:53 +0200)] 
DFS: Use helper functions for VHT/HE parameters

This is needed to cover the HE-specific conf->he_oper_chwidth value in
addition to conf->vht_oper_chwidth.

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agohw_features: Better debug messages for some error cases
Markus Theil [Tue, 30 Jun 2020 11:53:22 +0000 (13:53 +0200)] 
hw_features: Better debug messages for some error cases

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agowpa_supplicant: Enable VHT and HE in default config parameters
Markus Theil [Tue, 30 Jun 2020 11:53:21 +0000 (13:53 +0200)] 
wpa_supplicant: Enable VHT and HE in default config parameters

Enable VHT and HE as default config parameters in order for
wpa_supplicant AP mode to use it, if hw support is given.

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agowpa_supplicant: Handle HT40 and mode downgrade in AP mode
Markus Theil [Tue, 30 Jun 2020 11:53:19 +0000 (13:53 +0200)] 
wpa_supplicant: Handle HT40 and mode downgrade in AP mode

Add some missing pieces to the interface configuration of AP/mesh mode
in wpa_supplicant.
 - check for secondary channel and HT40 capability
 - try to downgrade to IEEE 802.11b if 802.11g is not available
Especially with the HT40 check, this code now performs all settings,
which the deleted/duplicated mesh code did.

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agomesh: Fix channel init order, disable pri/sec channel switch
Markus Theil [Tue, 30 Jun 2020 11:53:18 +0000 (13:53 +0200)] 
mesh: Fix channel init order, disable pri/sec channel switch

wpa_supplicant_conf_ap_ht() has to happen before
hostapd_setup_interface() in order for its configuration settings to
have effect on interface configuration.

Disable primary and secondary channel switch because of missing tie
breaking rule/frames in mesh networks. A rather long comment about
this issue is placed in mesh.c in the corresponding place.

I was not able to reproduce the memory corruption during
mesh_secure_ocv_mix_legacy, which lead to a revert of a similar patch in
the past.

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agotests: Remove wpas_mesh_open_5ghz_coex
Markus Theil [Tue, 30 Jun 2020 11:53:18 +0000 (13:53 +0200)] 
tests: Remove wpas_mesh_open_5ghz_coex

This is in preparation for an implementation change that ends up
contradicting the operations enforced in this test case for mesh coex.

Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agoHE/VHT: Fix frequency setup with HE enabled
Markus Theil [Tue, 30 Jun 2020 11:53:17 +0000 (13:53 +0200)] 
HE/VHT: Fix frequency setup with HE enabled

Some places in the code base were not using the wrappers like
hostapd_set_oper_centr_freq_seg0_idx and friends. This could lead to
errors, for example when joining 80 MHz mesh networks. Fix this, by
enforcing usage of these wrappers.

wpa_supplicant_conf_ap_ht() now checks for HE capability before dealing
with VHT in order for these wrappers to work, as they first check HE
support in the config.

While doing these changes, I've noticed that the extra channel setup
code for mesh networks in wpa_supplicant/mesh.c should not be necessary
anymore and dropped it. wpa_supplicant_conf_ap_ht() should handle this
setup already.

Acked-by: John Crispin <john@phrozen.org>
Signed-off-by: Markus Theil <markus.theil@tu-ilmenau.de>
4 years agoDPP2: Add privacyProtectionKey into Configurator backup/restore
Jouni Malinen [Tue, 13 Oct 2020 20:11:40 +0000 (23:11 +0300)] 
DPP2: Add privacyProtectionKey into Configurator backup/restore

This allows the privacyProtectionKey to be transferred to a new
Configurator similarly to the way c-sign-key is transferred.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Use ppKey to decrypt E'-id on Configurator
Jouni Malinen [Tue, 13 Oct 2020 17:57:26 +0000 (20:57 +0300)] 
DPP2: Use ppKey to decrypt E'-id on Configurator

Use the new privacy protection key to decrypt E'-id from Reconfig
Announcement frames.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Use the new privacy protection key to protect E-id on Enrollee
Jouni Malinen [Tue, 13 Oct 2020 17:53:09 +0000 (20:53 +0300)] 
DPP2: Use the new privacy protection key to protect E-id on Enrollee

Use ppKey instead of C-sign-key to encrypted E-id to E'-id into Reconfig
Announcement frame on the Enrollee side.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Copy received ppKey into wpa_supplicant network profile
Jouni Malinen [Tue, 13 Oct 2020 17:29:27 +0000 (20:29 +0300)] 
DPP2: Copy received ppKey into wpa_supplicant network profile

Store the received privacy protection key from Connector into
wpa_supplicant network profile and indicate it through the control
interface similarly to C-sign-key.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Parse ppKey from Connector
Jouni Malinen [Tue, 13 Oct 2020 17:24:56 +0000 (20:24 +0300)] 
DPP2: Parse ppKey from Connector

This will be used to protect E-id in Reconfig Announcement frames.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Add ppKey into Connector
Jouni Malinen [Tue, 13 Oct 2020 17:16:58 +0000 (20:16 +0300)] 
DPP2: Add ppKey into Connector

This provides the new privacy protection key to the Enrollee so that
this can be used to protect E-id in Reconfig Announcement frames.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP2: Generate a privacy protection key for Configurator
Jouni Malinen [Tue, 13 Oct 2020 16:59:29 +0000 (19:59 +0300)] 
DPP2: Generate a privacy protection key for Configurator

Generate a new key for Configurator. This is either generated
automatically for the specified curve or provided from external source
with the new ppkey=<val> argument similarly to the way c-sign-key was
previously generated.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agoDPP: Make dpp_keygen_configurator() a static function
Jouni Malinen [Tue, 13 Oct 2020 16:48:29 +0000 (19:48 +0300)] 
DPP: Make dpp_keygen_configurator() a static function

This was not used anywhere outside dpp.c.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Silence compiler warnings from test-base64
Jouni Malinen [Mon, 12 Oct 2020 18:40:08 +0000 (21:40 +0300)] 
tests: Silence compiler warnings from test-base64

Use typecasting to match the base64_{encode,decode}() function prototype
for signed/unsigned char buffer.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Build test-https and test-https_server as part of ALL
Jouni Malinen [Mon, 12 Oct 2020 18:37:25 +0000 (21:37 +0300)] 
tests: Build test-https and test-https_server as part of ALL

Even though these are not part of run-tests, it is simpler to just build
them like all other tests/test-* tools.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove unnecessary libraries from tests/test-*.c build
Jouni Malinen [Mon, 12 Oct 2020 18:35:26 +0000 (21:35 +0300)] 
tests: Remove unnecessary libraries from tests/test-*.c build

These libraries are not needed anymore with the remaining tests/test-*.c
tools.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete ASN.1 parser/fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:23:02 +0000 (21:23 +0300)] 
tests: Remove obsolete ASN.1 parser/fuzzer

tests/fuzzing/asn1 replaced this more than a year ago, so get rid of the
now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete TLS fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:20:12 +0000 (21:20 +0300)] 
tests: Remove obsolete TLS fuzzer

tests/fuzzing/tls-{client,server} replaced this more than a year ago, so
get rid of the now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete EAPOL-Key fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:17:45 +0000 (21:17 +0300)] 
tests: Remove obsolete EAPOL-Key fuzzer

tests/fuzzing/eapol-key-{auth,supp} replaced this more than a year ago,
so get rid of the now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete json fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:13:08 +0000 (21:13 +0300)] 
tests: Remove obsolete json fuzzer

tests/fuzzing/json replaced this more than a year ago, so get rid
of the now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete ap-mgmt-fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:10:01 +0000 (21:10 +0300)] 
tests: Remove obsolete ap-mgmt-fuzzer

tests/fuzzing/ap-mgmt replaced this more than a year ago, so get rid
of the now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete eapol-fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:06:58 +0000 (21:06 +0300)] 
tests: Remove obsolete eapol-fuzzer

tests/fuzzing/eapol-supp replaced this more than a year ago, so get rid
of the now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete wnm-fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:04:46 +0000 (21:04 +0300)] 
tests: Remove obsolete wnm-fuzzer

tests/fuzzing/wnm replaced this more than a year ago, so get rid of the
now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agotests: Remove obsolete p2p-fuzzer
Jouni Malinen [Mon, 12 Oct 2020 18:00:52 +0000 (21:00 +0300)] 
tests: Remove obsolete p2p-fuzzer

tests/fuzzing/p2p replaced this more than a year ago, so get rid of the
now obsolete version.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
4 years agobuild: Make more library things common
Johannes Berg [Mon, 12 Oct 2020 10:14:05 +0000 (12:14 +0200)] 
build: Make more library things common

We don't really need to duplicate more of this, so just
move the lib.rules include to the end and do more of the
stuff that's common anyway there.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
4 years agobuild: Make a common library build
Johannes Berg [Mon, 12 Oct 2020 10:14:04 +0000 (12:14 +0200)] 
build: Make a common library build

Derive the library name from the directory name, and let each
library Makefile only declare the objects that are needed.

This reduces duplicate code for the ar call. While at it, also
pretty-print that call.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
4 years agobuild: Rebuild libs all the time
Johannes Berg [Mon, 12 Oct 2020 09:30:53 +0000 (11:30 +0200)] 
build: Rebuild libs all the time

When files change that go into a static library such as libutils.a, then
libutils.a doesn't get rebuilt from, e.g., wlantest because the
top-level Makefile just calls the library make if the library doesn't
exist yet.

Change that by making the library depend on a phony target (cannot make
it itself phony due to the pattern) so that the build will always
recurse into the library build, and check there if the library needs to
be rebuilt.

While at it, remove the (actually unnecessary) mkdir so it doesn't get
done each and every time you do 'make'.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
4 years agomesh: Stop SAE auth timer when mesh node is removed
Udhayakumar Mahendiran [Mon, 12 Oct 2020 11:15:29 +0000 (16:45 +0530)] 
mesh: Stop SAE auth timer when mesh node is removed

Not doing this could cause wpa_supplicant to crash.

Signed-off-by: Udhayakumar Mahendiran <udhayakumar@qubercomm.com>
4 years agotests: Fix mesh_open_vht_160 false negative by using common finalizer
Masashi Honma [Sun, 28 Jun 2020 23:23:07 +0000 (08:23 +0900)] 
tests: Fix mesh_open_vht_160 false negative by using common finalizer

mesh_open_vht_160 might fail with this message:

---------------
wlan0: Country code not reset back to 00: is ZA
wlan0: Country code cleared back to 00
---------------

This patch fixes the issue.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
4 years agotests: Fix wpas_mesh_open_vht_80p80 false negative by using common finalizer
Masashi Honma [Sun, 28 Jun 2020 23:23:06 +0000 (08:23 +0900)] 
tests: Fix wpas_mesh_open_vht_80p80 false negative by using common finalizer

wpas_mesh_open_vht_80p80 might fail with this message:

---------------
wlan0: Country code not reset back to 00: is US
wlan0: Country code cleared back to 00
---------------

This patch fixes the issue.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
4 years agotests: Fix wpas_mesh_open_vht20 false negative by using common finalizer
Masashi Honma [Sun, 28 Jun 2020 23:23:05 +0000 (08:23 +0900)] 
tests: Fix wpas_mesh_open_vht20 false negative by using common finalizer

wpas_mesh_open_vht20 might fails with this message:

---------------
wlan0: Country code not reset back to 00: is US
wlan0: Country code cleared back to 00
---------------

This patch fixes the issue.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
4 years agotests: Fix wpas_mesh_open_vht40 false negative by using common finalizer
Masashi Honma [Sun, 28 Jun 2020 23:23:04 +0000 (08:23 +0900)] 
tests: Fix wpas_mesh_open_vht40 false negative by using common finalizer

wpas_mesh_open_vht40 might fail with this message:

---------------
wlan0: Country code not reset back to 00: is US
wlan0: Country code cleared back to 00
---------------

This patch fixes the issue.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
4 years agotests: Fix wpas_mesh_open_ht40 false negative by using common finalizer
Masashi Honma [Sun, 28 Jun 2020 23:23:03 +0000 (08:23 +0900)] 
tests: Fix wpas_mesh_open_ht40 false negative by using common finalizer

wpas_mesh_open_ht40 might fail with this message:

---------------
wlan0: Country code not reset back to 00: is US
wlan0: Country code cleared back to 00
---------------

This patch fixes the issue.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
4 years agotests: Fix wpas_mesh_open_5ghz false negative by using common finalizer
Masashi Honma [Sun, 28 Jun 2020 23:23:02 +0000 (08:23 +0900)] 
tests: Fix wpas_mesh_open_5ghz false negative by using common finalizer

wpas_mesh_open_5ghz might fail with this message:

---------------
wlan0: Country code not reset back to 00: is US
wlan0: Country code cleared back to 00
---------------

This patch fixes the issue.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
4 years agotests: Fix mesh_secure_ocv_mix_legacy false negative by using common finalizer
Masashi Honma [Sun, 28 Jun 2020 23:23:01 +0000 (08:23 +0900)] 
tests: Fix mesh_secure_ocv_mix_legacy false negative by using common finalizer

mesh_secure_ocv_mix_legacy might fail with this message:

---------------
wlan0: Country code not reset back to 00: is AZ
wlan0: Country code cleared back to 00
---------------

This patch fixes the issue.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
4 years agobuild: Fix dependency file inclusion
Johannes Berg [Sun, 11 Oct 2020 19:24:34 +0000 (21:24 +0200)] 
build: Fix dependency file inclusion

The objs.mk include changes for archive files broke things
completely and none of the dependency files (*.d) ever got
included, as the expansion there ended up empty.

Clearly, my mistake, I should've tested that better. As we
don't need the %.a files in the list there use filter-out
to remove them, rather than what I had lazily wanted to do,
which was trying to read %.d files for them. The filter-out
actually works, and avoids looking up files that can never
exist in the first place.

Fixes: 87098d3324e0 ("build: Put archive files into build/ folder too")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
4 years agomacsec_linux: Fix receive-lowest-PN setting
Ze Gan [Thu, 2 Jul 2020 04:16:52 +0000 (12:16 +0800)] 
macsec_linux: Fix receive-lowest-PN setting

Setting of the PN for the receive SA failed because the SCI wasn't
provided. Fix this by adding the needed attribute to the command.

Signed-off-by: Ze Gan <ganze718@gmail.com>
4 years agoDPP2: Add DPP_CHIRP commands to hostapd_cli and wpa_cli
Wystan Schmidt [Fri, 24 Jul 2020 21:29:39 +0000 (15:29 -0600)] 
DPP2: Add DPP_CHIRP commands to hostapd_cli and wpa_cli

Add the DPP control interface chirp commands to the CLIs for greater
visibility and ease of use.

Signed-off-by: Wystan Schmidt <wystan.schmidt@charter.com>
4 years agoP2P: Set ap_configured_cb during group reform process
Jimmy Chen [Wed, 26 Aug 2020 10:55:45 +0000 (18:55 +0800)] 
P2P: Set ap_configured_cb during group reform process

We found that if REMOVE-AND-REFORM occurs before a group is started,
it would not send out GROUP-STARTED-EVENT after AP is enabled.

In the remove-and-reform process, ap_configured_cb is cleared. If a
group is not started, p2p_go_configured() will not be called after
completing AP setup. Fix this by preserving the callback parameters.

Signed-off-by: Jimmy Chen <jimmycmchen@google.com>
4 years agoP2P: Fallback to GO negotiation after running out of GO scan attempts
Jimmy Chen [Wed, 2 Sep 2020 08:50:11 +0000 (16:50 +0800)] 
P2P: Fallback to GO negotiation after running out of GO scan attempts

We found a problem that p2p_fallback_to_go_neg is not handled correctly
after running out of GO scan attempts. When autojoin is enabled and a
group is found in old scan results, supplicant would try to scan the
group several times. If the group is still not found, it reports group
formation failure while p2p_fallback_to_go_neg is enabled already.

If p2p_fallback_to_go_neg is enabled, it should fallback to GO
negotiation, but not report group formation failure after running out of
GO scan attempts.

Signed-off-by: Jimmy Chen <jimmycmchen@google.com>
4 years agohostapd_cli: Add dpp_bootstrap_set command
Andrew Beltrano [Mon, 14 Sep 2020 22:42:59 +0000 (22:42 +0000)] 
hostapd_cli: Add dpp_bootstrap_set command

Expose DPP_BOOTSTRAP_SET through hostapd_cli command
dpp_bootstrap_set <id> <configurator params..>

Signed-off-by: Andrew Beltrano <anbeltra@microsoft.com>
4 years agowpa_cli: Add dpp_bootstrap_set command
Andrew Beltrano [Mon, 14 Sep 2020 22:42:55 +0000 (22:42 +0000)] 
wpa_cli: Add dpp_bootstrap_set command

Expose DPP_BOOTSTRAP_SET through wpa_cli command dpp_bootstrap_set <id>
<configurator params..>

Signed-off-by: Andrew Beltrano <anbeltra@microsoft.com>