Commit 06c11107 authored by Mateusz Kulikowski's avatar Mateusz Kulikowski Committed by Greg Kroah-Hartman

staging: rtl8192e: Make ethernet addresses properly aligned

Reorder ethernet addresses allocated on stack or in non-packed
structures to keep them aligned(2).
Use ETH_ALEN as array length in places where it was hardcoded to 6.

Alignment verified using pahole where possible and target-tested
with BUG_ON() trap in ether_addr_copy.
Signed-off-by: default avatarMateusz Kulikowski <mateusz.kulikowski@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c7ddc288
...@@ -316,12 +316,11 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val) ...@@ -316,12 +316,11 @@ void rtl8192e_SetHwReg(struct net_device *dev, u8 variable, u8 *val)
static void rtl8192_read_eeprom_info(struct net_device *dev) static void rtl8192_read_eeprom_info(struct net_device *dev)
{ {
struct r8192_priv *priv = rtllib_priv(dev); struct r8192_priv *priv = rtllib_priv(dev);
const u8 bMac_Tmp_Addr[ETH_ALEN] = {0x00, 0xe0, 0x4c, 0x00, 0x00, 0x01};
u8 tempval; u8 tempval;
u8 ICVer8192, ICVer8256; u8 ICVer8192, ICVer8256;
u16 i, usValue, IC_Version; u16 i, usValue, IC_Version;
u16 EEPROMId; u16 EEPROMId;
u8 bMac_Tmp_Addr[6] = {0x00, 0xe0, 0x4c, 0x00, 0x00, 0x01};
RT_TRACE(COMP_INIT, "====> rtl8192_read_eeprom_info\n"); RT_TRACE(COMP_INIT, "====> rtl8192_read_eeprom_info\n");
......
...@@ -2573,8 +2573,7 @@ static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -2573,8 +2573,7 @@ static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
int ret = -1; int ret = -1;
struct rtllib_device *ieee = priv->rtllib; struct rtllib_device *ieee = priv->rtllib;
u32 key[4]; u32 key[4];
u8 broadcast_addr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; const u8 broadcast_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
u8 zero_addr[6] = {0};
struct iw_point *p = &wrq->u.data; struct iw_point *p = &wrq->u.data;
struct ieee_param *ipw = NULL; struct ieee_param *ipw = NULL;
...@@ -2611,8 +2610,7 @@ static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) ...@@ -2611,8 +2610,7 @@ static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
} }
if (ieee->pairwise_key_type) { if (ieee->pairwise_key_type) {
if (memcmp(ieee->ap_mac_addr, zero_addr, if (is_zero_ether_addr(ieee->ap_mac_addr))
6) == 0)
ieee->iw_mode = IW_MODE_ADHOC; ieee->iw_mode = IW_MODE_ADHOC;
memcpy((u8 *)key, ipw->u.crypt.key, 16); memcpy((u8 *)key, ipw->u.crypt.key, 16);
EnableHWSecurityConfig8192(dev); EnableHWSecurityConfig8192(dev);
......
...@@ -987,8 +987,8 @@ static int r8192_wx_set_enc_ext(struct net_device *dev, ...@@ -987,8 +987,8 @@ static int r8192_wx_set_enc_ext(struct net_device *dev,
ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra); ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra);
{ {
u8 broadcast_addr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; const u8 broadcast_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
u8 zero[6] = {0}; const u8 zero[ETH_ALEN] = {0};
u32 key[4] = {0}; u32 key[4] = {0};
struct iw_encode_ext *ext = (struct iw_encode_ext *)extra; struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
struct iw_point *encoding = &wrqu->encoding; struct iw_point *encoding = &wrqu->encoding;
......
...@@ -255,8 +255,8 @@ union qos_tclas { ...@@ -255,8 +255,8 @@ union qos_tclas {
u8 Priority; u8 Priority;
u8 ClassifierType; u8 ClassifierType;
u8 Mask; u8 Mask;
u8 SrcAddr[6]; u8 SrcAddr[ETH_ALEN];
u8 DstAddr[6]; u8 DstAddr[ETH_ALEN];
u16 Type; u16 Type;
} TYPE0_ETH; } TYPE0_ETH;
......
...@@ -35,7 +35,7 @@ struct ts_common_info { ...@@ -35,7 +35,7 @@ struct ts_common_info {
struct list_head List; struct list_head List;
struct timer_list SetupTimer; struct timer_list SetupTimer;
struct timer_list InactTimer; struct timer_list InactTimer;
u8 Addr[6]; u8 Addr[ETH_ALEN];
union tspec_body TSpec; union tspec_body TSpec;
union qos_tclas TClass[TCLAS_NUM]; union qos_tclas TClass[TCLAS_NUM];
u8 TClasProc; u8 TClasProc;
......
...@@ -1531,7 +1531,7 @@ struct rtllib_network { ...@@ -1531,7 +1531,7 @@ struct rtllib_network {
u16 CcxRmState[2]; u16 CcxRmState[2];
bool bMBssidValid; bool bMBssidValid;
u8 MBssidMask; u8 MBssidMask;
u8 MBssid[6]; u8 MBssid[ETH_ALEN];
bool bWithCcxVerNum; bool bWithCcxVerNum;
u8 BssCcxVerNumber; u8 BssCcxVerNumber;
/* These are network statistics */ /* These are network statistics */
...@@ -1866,7 +1866,7 @@ struct rt_link_detect { ...@@ -1866,7 +1866,7 @@ struct rt_link_detect {
struct sw_cam_table { struct sw_cam_table {
u8 macaddr[6]; u8 macaddr[ETH_ALEN];
bool bused; bool bused;
u8 key_buf[16]; u8 key_buf[16];
u16 key_type; u16 key_type;
...@@ -1912,10 +1912,10 @@ enum ratr_table_mode_8192s { ...@@ -1912,10 +1912,10 @@ enum ratr_table_mode_8192s {
#define NUM_PMKID_CACHE 16 #define NUM_PMKID_CACHE 16
struct rt_pmkid_list { struct rt_pmkid_list {
u8 bUsed; u8 Bssid[ETH_ALEN];
u8 Bssid[6];
u8 PMKID[16]; u8 PMKID[16];
u8 SsidBuf[33]; u8 SsidBuf[33];
u8 bUsed;
u8 *ssid_octet; u8 *ssid_octet;
u16 ssid_length; u16 ssid_length;
}; };
...@@ -2083,7 +2083,7 @@ struct rtllib_device { ...@@ -2083,7 +2083,7 @@ struct rtllib_device {
u8 *wpa_ie; u8 *wpa_ie;
size_t wps_ie_len; size_t wps_ie_len;
u8 *wps_ie; u8 *wps_ie;
u8 ap_mac_addr[6]; u8 ap_mac_addr[ETH_ALEN];
u16 pairwise_key_type; u16 pairwise_key_type;
u16 group_key_type; u16 group_key_type;
......
...@@ -52,7 +52,8 @@ struct rtllib_tkip_data { ...@@ -52,7 +52,8 @@ struct rtllib_tkip_data {
struct crypto_blkcipher *tx_tfm_arc4; struct crypto_blkcipher *tx_tfm_arc4;
struct crypto_hash *tx_tfm_michael; struct crypto_hash *tx_tfm_michael;
/* scratch buffers for virt_to_page() (crypto API) */ /* scratch buffers for virt_to_page() (crypto API) */
u8 rx_hdr[16], tx_hdr[16]; u8 rx_hdr[16];
u8 tx_hdr[16];
}; };
static void *rtllib_tkip_init(int key_idx) static void *rtllib_tkip_init(int key_idx)
......
...@@ -1258,7 +1258,11 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb, ...@@ -1258,7 +1258,11 @@ static int rtllib_rx_InfraAdhoc(struct rtllib_device *ieee, struct sk_buff *skb,
struct rx_ts_record *pTS = NULL; struct rx_ts_record *pTS = NULL;
u16 fc, sc, SeqNum = 0; u16 fc, sc, SeqNum = 0;
u8 type, stype, multicast = 0, unicast = 0, nr_subframes = 0, TID = 0; u8 type, stype, multicast = 0, unicast = 0, nr_subframes = 0, TID = 0;
u8 dst[ETH_ALEN], src[ETH_ALEN], bssid[ETH_ALEN] = {0}, *payload; u8 *payload;
u8 dst[ETH_ALEN];
u8 src[ETH_ALEN];
u8 bssid[ETH_ALEN] = {0};
size_t hdrlen = 0; size_t hdrlen = 0;
bool bToOtherSTA = false; bool bToOtherSTA = false;
int ret = 0, i = 0; int ret = 0, i = 0;
......
...@@ -1957,9 +1957,9 @@ static inline void rtllib_rx_auth_rq(struct rtllib_device *ieee, ...@@ -1957,9 +1957,9 @@ static inline void rtllib_rx_auth_rq(struct rtllib_device *ieee,
static inline void rtllib_rx_assoc_rq(struct rtllib_device *ieee, static inline void rtllib_rx_assoc_rq(struct rtllib_device *ieee,
struct sk_buff *skb) struct sk_buff *skb)
{ {
u8 dest[ETH_ALEN]; u8 dest[ETH_ALEN];
ieee->softmac_stats.rx_ass_rq++; ieee->softmac_stats.rx_ass_rq++;
if (assoc_rq_parse(skb, dest) != -1) if (assoc_rq_parse(skb, dest) != -1)
rtllib_resp_to_assoc_rq(ieee, dest); rtllib_resp_to_assoc_rq(ieee, dest);
...@@ -2912,7 +2912,7 @@ static void rtllib_associate_retry_wq(void *data) ...@@ -2912,7 +2912,7 @@ static void rtllib_associate_retry_wq(void *data)
struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee) struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee)
{ {
u8 broadcast_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; const u8 broadcast_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
struct sk_buff *skb; struct sk_buff *skb;
struct rtllib_probe_response *b; struct rtllib_probe_response *b;
......
...@@ -579,8 +579,9 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev) ...@@ -579,8 +579,9 @@ int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev)
.seq_ctl = 0, .seq_ctl = 0,
.qos_ctl = 0 .qos_ctl = 0
}; };
u8 dest[ETH_ALEN], src[ETH_ALEN];
int qos_actived = ieee->current_network.qos_data.active; int qos_actived = ieee->current_network.qos_data.active;
u8 dest[ETH_ALEN];
u8 src[ETH_ALEN];
struct lib80211_crypt_data *crypt = NULL; struct lib80211_crypt_data *crypt = NULL;
struct cb_desc *tcb_desc; struct cb_desc *tcb_desc;
u8 bIsMulticast = false; u8 bIsMulticast = false;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment