@@ -14,6 +14,7 @@ LOG_MODULE_REGISTER(net_wifi_mgmt, CONFIG_NET_L2_WIFI_MGMT_LOG_LEVEL);
14
14
#include <errno.h>
15
15
#include <string.h>
16
16
#include <stdio.h>
17
+ #include <zephyr/toolchain.h>
17
18
#include <zephyr/net/net_core.h>
18
19
#include <zephyr/net/net_if.h>
19
20
#include <zephyr/net/wifi_mgmt.h>
@@ -1527,53 +1528,25 @@ BUILD_ASSERT(sizeof(CONFIG_WIFI_CREDENTIALS_STATIC_SSID) != 1,
1527
1528
"CONFIG_WIFI_CREDENTIALS_STATIC_SSID required" );
1528
1529
#endif /* defined(CONFIG_WIFI_CREDENTIALS_STATIC) */
1529
1530
1531
+ /**
1532
+ * Disable -Wcast-qual in this function, the buffers passed in the params argument are mutable.
1533
+ */
1534
+ TOOLCHAIN_DISABLE_WARNING (TOOLCHAIN_WARNING_CAST_QUAL )
1530
1535
static int __stored_creds_to_params (struct wifi_credentials_personal * creds ,
1531
1536
struct wifi_connect_req_params * params )
1532
1537
{
1533
- char * ssid = NULL ;
1534
- char * psk = NULL ;
1535
- #ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE
1536
- char * key_passwd = NULL ;
1537
- #endif /* CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE */
1538
- int ret ;
1539
-
1540
1538
/* SSID */
1541
- ssid = (char * )k_malloc (creds -> header .ssid_len + 1 );
1542
- if (!ssid ) {
1543
- LOG_ERR ("Failed to allocate memory for SSID\n" );
1544
- ret = - ENOMEM ;
1545
- goto err_out ;
1546
- }
1547
-
1548
- memset (ssid , 0 , creds -> header .ssid_len + 1 );
1549
- ret = snprintf (ssid , creds -> header .ssid_len + 1 , "%s" , creds -> header .ssid );
1550
- if (ret > creds -> header .ssid_len ) {
1539
+ if (creds -> header .ssid_len > WIFI_SSID_MAX_LEN ) {
1551
1540
LOG_ERR ("SSID string truncated\n" );
1552
- ret = - EINVAL ;
1553
- goto err_out ;
1541
+ return - EINVAL ;
1554
1542
}
1555
1543
1556
- params -> ssid = ssid ;
1544
+ memcpy (( uint8_t * ) params -> ssid , creds -> header . ssid , creds -> header . ssid_len ) ;
1557
1545
params -> ssid_length = creds -> header .ssid_len ;
1558
1546
1559
1547
/* PSK (optional) */
1560
- if (creds -> password_len > 0 ) {
1561
- psk = (char * )k_malloc (creds -> password_len + 1 );
1562
- if (!psk ) {
1563
- LOG_ERR ("Failed to allocate memory for PSK\n" );
1564
- ret = - ENOMEM ;
1565
- goto err_out ;
1566
- }
1567
-
1568
- memset (psk , 0 , creds -> password_len + 1 );
1569
- ret = snprintf (psk , creds -> password_len + 1 , "%s" , creds -> password );
1570
- if (ret > creds -> password_len ) {
1571
- LOG_ERR ("PSK string truncated\n" );
1572
- ret = - EINVAL ;
1573
- goto err_out ;
1574
- }
1575
-
1576
- params -> psk = psk ;
1548
+ if (creds -> password_len > 0 && creds -> password_len <= WIFI_PSK_MAX_LEN ) {
1549
+ memcpy ((uint8_t * )params -> psk , creds -> password , creds -> password_len );
1577
1550
params -> psk_length = creds -> password_len ;
1578
1551
}
1579
1552
@@ -1583,21 +1556,12 @@ static int __stored_creds_to_params(struct wifi_credentials_personal *creds,
1583
1556
#ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE
1584
1557
if (params -> security == WIFI_SECURITY_TYPE_EAP_TLS ) {
1585
1558
if (creds -> header .key_passwd_length > 0 ) {
1586
- key_passwd = (char * )k_malloc (creds -> header .key_passwd_length + 1 );
1587
- if (!key_passwd ) {
1588
- LOG_ERR ("Failed to allocate memory for key_passwd\n" );
1589
- ret = - ENOMEM ;
1590
- goto err_out ;
1591
- }
1592
- memset (key_passwd , 0 , creds -> header .key_passwd_length + 1 );
1593
- ret = snprintf (key_passwd , creds -> header .key_passwd_length + 1 , "%s" ,
1594
- creds -> header .key_passwd );
1595
- if (ret > creds -> header .key_passwd_length ) {
1559
+ if (creds -> header .key_passwd_length > WIFI_ENT_PSWD_MAX_LEN ) {
1596
1560
LOG_ERR ("key_passwd string truncated\n" );
1597
- ret = - EINVAL ;
1598
- goto err_out ;
1561
+ return - EINVAL ;
1599
1562
}
1600
- params -> key_passwd = key_passwd ;
1563
+ memcpy ((uint8_t * )params -> key_passwd , creds -> header .key_passwd ,
1564
+ creds -> header .key_passwd_length );
1601
1565
params -> key_passwd_length = creds -> header .key_passwd_length ;
1602
1566
}
1603
1567
}
@@ -1632,26 +1596,8 @@ static int __stored_creds_to_params(struct wifi_credentials_personal *creds,
1632
1596
}
1633
1597
1634
1598
return 0 ;
1635
- err_out :
1636
- if (ssid ) {
1637
- k_free (ssid );
1638
- ssid = NULL ;
1639
- }
1640
-
1641
- if (psk ) {
1642
- k_free (psk );
1643
- psk = NULL ;
1644
- }
1645
-
1646
- #ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE
1647
- if (key_passwd ) {
1648
- k_free (key_passwd );
1649
- key_passwd = NULL ;
1650
- }
1651
- #endif /* CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE */
1652
-
1653
- return ret ;
1654
1599
}
1600
+ TOOLCHAIN_ENABLE_WARNING (TOOLCHAIN_WARNING_CAST_QUAL )
1655
1601
1656
1602
static inline const char * wpa_supp_security_txt (enum wifi_security_type security )
1657
1603
{
@@ -1674,31 +1620,37 @@ static int add_network_from_credentials_struct_personal(struct wifi_credentials_
1674
1620
struct net_if * iface )
1675
1621
{
1676
1622
int ret = 0 ;
1677
- struct wifi_connect_req_params cnx_params = {0 };
1623
+ uint8_t ssid [WIFI_SSID_MAX_LEN + 1 ] = {0 };
1624
+ uint8_t psk [WIFI_PSK_MAX_LEN + 1 ] = {0 };
1625
+ #ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE
1626
+ uint8_t key_passwd [WIFI_ENT_PSWD_MAX_LEN + 1 ] = {0 };
1627
+ #endif /* CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE */
1628
+
1629
+ struct wifi_connect_req_params cnx_params = {
1630
+ .ssid = ssid ,
1631
+ .psk = psk ,
1632
+ #ifdef CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE
1633
+ .key_passwd = key_passwd ,
1634
+ #endif /* CONFIG_WIFI_NM_WPA_SUPPLICANT_CRYPTO_ENTERPRISE */
1635
+ };
1678
1636
1679
- if (__stored_creds_to_params (creds , & cnx_params )) {
1637
+ if (__stored_creds_to_params (creds , & cnx_params ) != 0 ) {
1680
1638
ret = - ENOEXEC ;
1681
1639
goto out ;
1682
1640
}
1683
1641
1684
- if (net_mgmt (NET_REQUEST_WIFI_CONNECT , iface , & cnx_params ,
1685
- sizeof (struct wifi_connect_req_params ))) {
1686
- LOG_ERR ("Connection request failed\n" );
1642
+ ret = net_mgmt (NET_REQUEST_WIFI_CONNECT , iface , & cnx_params ,
1643
+ sizeof (struct wifi_connect_req_params ));
1644
+ if (ret < 0 ) {
1645
+ LOG_ERR ("Connection request failed (%d)" , ret );
1687
1646
1688
- return - ENOEXEC ;
1647
+ ret = - ENOEXEC ;
1648
+ goto out ;
1689
1649
}
1690
1650
1691
1651
LOG_INF ("Connection requested" );
1692
1652
1693
1653
out :
1694
- if (cnx_params .psk ) {
1695
- k_free ((void * )cnx_params .psk );
1696
- }
1697
-
1698
- if (cnx_params .ssid ) {
1699
- k_free ((void * )cnx_params .ssid );
1700
- }
1701
-
1702
1654
return ret ;
1703
1655
}
1704
1656
0 commit comments