mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-03 19:08:58 +00:00
o correct alignment of 802.11 addresses passed to ether_ntoa to fix
segfaults on amd64 o while here correct printf formats for size_t args Identified by: Pascal Hofstee MFC after: 3 days
This commit is contained in:
parent
8157976a26
commit
601079f992
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=149628
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
|
#include <net/ethernet.h>
|
||||||
|
|
||||||
#include <net80211/ieee80211.h>
|
#include <net80211/ieee80211.h>
|
||||||
#include <net80211/ieee80211_crypto.h>
|
#include <net80211/ieee80211_crypto.h>
|
||||||
@ -231,8 +232,11 @@ wpa_driver_bsd_del_key(struct wpa_driver_bsd_data *drv, int key_idx,
|
|||||||
memset(&wk, 0, sizeof(wk));
|
memset(&wk, 0, sizeof(wk));
|
||||||
if (addr != NULL &&
|
if (addr != NULL &&
|
||||||
bcmp(addr, "\xff\xff\xff\xff\xff\xff", IEEE80211_ADDR_LEN) != 0) {
|
bcmp(addr, "\xff\xff\xff\xff\xff\xff", IEEE80211_ADDR_LEN) != 0) {
|
||||||
|
struct ether_addr ea;
|
||||||
|
|
||||||
|
memcpy(&ea, addr, IEEE80211_ADDR_LEN);
|
||||||
wpa_printf(MSG_DEBUG, "%s: addr=%s keyidx=%d",
|
wpa_printf(MSG_DEBUG, "%s: addr=%s keyidx=%d",
|
||||||
__func__, ether_ntoa(addr), key_idx);
|
__func__, ether_ntoa(&ea), key_idx);
|
||||||
memcpy(wk.idk_macaddr, addr, IEEE80211_ADDR_LEN);
|
memcpy(wk.idk_macaddr, addr, IEEE80211_ADDR_LEN);
|
||||||
wk.idk_keyix = (uint8_t) IEEE80211_KEYIX_NONE;
|
wk.idk_keyix = (uint8_t) IEEE80211_KEYIX_NONE;
|
||||||
} else {
|
} else {
|
||||||
@ -250,6 +254,7 @@ wpa_driver_bsd_set_key(void *priv, wpa_alg alg,
|
|||||||
{
|
{
|
||||||
struct wpa_driver_bsd_data *drv = priv;
|
struct wpa_driver_bsd_data *drv = priv;
|
||||||
struct ieee80211req_key wk;
|
struct ieee80211req_key wk;
|
||||||
|
struct ether_addr ea;
|
||||||
char *alg_name;
|
char *alg_name;
|
||||||
u_int8_t cipher;
|
u_int8_t cipher;
|
||||||
|
|
||||||
@ -275,18 +280,19 @@ wpa_driver_bsd_set_key(void *priv, wpa_alg alg,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memcpy(&ea, addr, IEEE80211_ADDR_LEN);
|
||||||
wpa_printf(MSG_DEBUG,
|
wpa_printf(MSG_DEBUG,
|
||||||
"%s: alg=%s addr=%s key_idx=%d set_tx=%d seq_len=%d key_len=%d",
|
"%s: alg=%s addr=%s key_idx=%d set_tx=%d seq_len=%zu key_len=%zu",
|
||||||
__func__, alg_name, ether_ntoa(addr), key_idx, set_tx,
|
__func__, alg_name, ether_ntoa(&ea), key_idx, set_tx,
|
||||||
seq_len, key_len);
|
seq_len, key_len);
|
||||||
|
|
||||||
if (seq_len > sizeof(u_int64_t)) {
|
if (seq_len > sizeof(u_int64_t)) {
|
||||||
wpa_printf(MSG_DEBUG, "%s: seq_len %d too big",
|
wpa_printf(MSG_DEBUG, "%s: seq_len %zu too big",
|
||||||
__func__, seq_len);
|
__func__, seq_len);
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
if (key_len > sizeof(wk.ik_keydata)) {
|
if (key_len > sizeof(wk.ik_keydata)) {
|
||||||
wpa_printf(MSG_DEBUG, "%s: key length %d too big",
|
wpa_printf(MSG_DEBUG, "%s: key length %zu too big",
|
||||||
__func__, key_len);
|
__func__, key_len);
|
||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user