Staging: rtl8192e: Use ether_addr_copy() instead of memcpy()
authorKsenija Stanojevic <ksenija.stanojevic@gmail.com>
Sat, 28 Feb 2015 18:46:57 +0000 (19:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 2 Mar 2015 01:07:43 +0000 (17:07 -0800)
This patch replaces memcpy with ether_addr_copy.
Also pathole was used to make sure that arguments passed to ether_addr_copy
are aligned to u16.
First argument is iwe.u.ap_addr.sa_data i output of pahole is:
struct iw_event {
__u16                      len;                  /*     0     2 */
__u16                      cmd;                  /*     2     2 */

/* XXX 4 bytes hole, try to pack */

union iwreq_data           u;                    /*     8    16 */

/* size: 24, cachelines: 1, members: 3 */
/* sum members: 20, holes: 1, sum holes: 4 */
/* last cacheline: 24 bytes */
};
and inside union iwreq_data u is sa_data:
struct sockaddr {
/* typedef sa_family_t -> __kernel_sa_family_t */ short unsigned int sa_family; /*     8     2 */
char       sa_data[14];                                          /*    10    14 */
} ap_addr; /*          16 */

sa_data is a char array of size 14, and the number of bytes copied using
ether_addr_copy() is 6.

Second argument is network->bssid and output of pahole is:
struct rtllib_network {
u8                         bssid[6];             /*     0     6 */
u8                         channel;              /*     6     1 */
u8                         ssid[33];             /*     7    33 */
u8                         ssid_len;             /*    40     1 */
u8                         hidden_ssid[33];      /*    41    33 */
/* --- cacheline 1 boundary (64 bytes) was 10 bytes ago --- */
u8                         hidden_ssid_len;      /*    74     1 */

/* XXX 1 byte hole, try to pack */

struct rtllib_qos_data     qos_data;             /*    76    48 */
bool                       bWithAironetIE;       /*   124     1 */
bool                       bCkipSupported;       /*   125     1 */
bool                       bCcxRmEnable;         /*   126     1 */

/* XXX 1 byte hole, try to pack */

/* --- cacheline 2 boundary (128 bytes) --- */
u16                        CcxRmState[2];        /*   128     4 */
bool                       bMBssidValid;         /*   132     1 */
u8                         MBssidMask;           /*   133     1 */
u8                         MBssid[6];            /*   134     6 */
bool                       bWithCcxVerNum;       /*   140     1 */
u8                         BssCcxVerNumber;      /*   141     1 */

/* XXX 2 bytes hole, try to pack */

struct rtllib_rx_stats     stats;                /*   144   120 */
/* --- cacheline 4 boundary (256 bytes) was 8 bytes ago --- */
u16                        capability;           /*   264     2 */
u8                         rates[12];            /*   266    12 */
u8                         rates_len;            /*   278     1 */
u8                         rates_ex[16];         /*   279    16 */
u8                         rates_ex_len;         /*   295     1 */
long unsigned int          last_scanned;         /*   296     8 */
u8                         mode;                 /*   304     1 */

/* XXX 3 bytes hole, try to pack */

u32                        flags;                /*   308     4 */
u32                        last_associate;       /*   312     4 */
u32                        time_stamp[2];        /*   316     8 */
/* --- cacheline 5 boundary (320 bytes) was 4 bytes ago --- */
u16                        beacon_interval;      /*   324     2 */
u16                        listen_interval;      /*   326     2 */
u16                        atim_window;          /*   328     2 */
u8                         erp_value;            /*   330     1 */
u8                         wpa_ie[64];           /*   331    64 */

/* XXX 5 bytes hole, try to pack */

/* --- cacheline 6 boundary (384 bytes) was 16 bytes ago --- */
size_t                     wpa_ie_len;           /*   400     8 */
u8                         rsn_ie[64];           /*   408    64 */
/* --- cacheline 7 boundary (448 bytes) was 24 bytes ago --- */
size_t                     rsn_ie_len;           /*   472     8 */
u8                         wzc_ie[256];          /*   480   256 */
/* --- cacheline 11 boundary (704 bytes) was 32 bytes ago --- */
size_t                     wzc_ie_len;           /*   736     8 */
struct rtllib_tim_parameters tim;                /*   744     2 */
u8                         dtim_period;          /*   746     1 */
u8                         dtim_data;            /*   747     1 */

/* XXX 4 bytes hole, try to pack */

u64                        last_dtim_sta_time;   /*   752     8 */
u8                         wmm_info;             /*   760     1 */

/* XXX 1 byte hole, try to pack */

struct rtllib_wmm_ac_param wmm_param[4];         /*   762    16 */
/* --- cacheline 12 boundary (768 bytes) was 10 bytes ago --- */
u8                         Turbo_Enable;         /*   778     1 */

/* XXX 1 byte hole, try to pack */

u16                        CountryIeLen;         /*   780     2 */
u8                         CountryIeBuf[255];    /*   782   255 */

/* XXX 3 bytes hole, try to pack */

/* --- cacheline 16 boundary (1024 bytes) was 16 bytes ago --- */
struct bss_ht              bssht;                /*  1040    84 */
/* --- cacheline 17 boundary (1088 bytes) was 36 bytes ago --- */
bool                       broadcom_cap_exist;   /*  1124     1 */
bool                       realtek_cap_exit;     /*  1125     1 */
bool                       marvell_cap_exist;    /*  1126     1 */
bool                       ralink_cap_exist;     /*  1127     1 */
bool                       atheros_cap_exist;    /*  1128     1 */
bool                       cisco_cap_exist;      /*  1129     1 */
bool                       airgo_cap_exist;      /*  1130     1 */
bool                       unknown_cap_exist;    /*  1131     1 */
bool                       berp_info_valid;      /*  1132     1 */
bool                       buseprotection;       /*  1133     1 */
bool                       bIsNetgear854T;       /*  1134     1 */
u8                         SignalStrength;       /*  1135     1 */
u8                         RSSI;                 /*  1136     1 */

/* XXX 7 bytes hole, try to pack */

struct list_head           list;                 /*  1144    16 */
/* --- cacheline 18 boundary (1152 bytes) was 8 bytes ago --- */

/* size: 1160, cachelines: 19, members: 61 */
/* sum members: 1132, holes: 10, sum holes: 28 */
/* last cacheline: 8 bytes */
};

network->bssid is char array of size 6.

Issue found by checkpatch.pl

Signed-off-by: Ksenija Stanojevic <ksenija.stanojevic@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8192e/rtllib_wx.c

index 02faaf3980e7a252f8df034541c7a5a4a2e6f6db..d5f4bcb738cec76c19921d87a0f541c1d1329df1 100644 (file)
@@ -32,7 +32,7 @@
 #include <linux/wireless.h>
 #include <linux/kmod.h>
 #include <linux/module.h>
-
+#include <linux/etherdevice.h>
 #include "rtllib.h"
 struct modes_unit {
        char *mode_string;
@@ -65,7 +65,7 @@ static inline char *rtl819x_translate_scan(struct rtllib_device *ieee,
        /* First entry *MUST* be the AP MAC address */
        iwe.cmd = SIOCGIWAP;
        iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
-       memcpy(iwe.u.ap_addr.sa_data, network->bssid, ETH_ALEN);
+       ether_addr_copy(iwe.u.ap_addr.sa_data, network->bssid);
        start = iwe_stream_add_event_rsl(info, start, stop,
                                         &iwe, IW_EV_ADDR_LEN);
        /* Remaining entries will be displayed in the order we provide them */