wifi: use struct_group to copy addresses
authorJohannes Berg <johannes.berg@intel.com>
Mon, 29 Aug 2022 09:46:38 +0000 (11:46 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Sat, 3 Sep 2022 14:40:06 +0000 (16:40 +0200)
We sometimes copy all the addresses from the 802.11 header
for the AAD, which may cause complaints from fortify checks.
Use struct_group() to avoid the compiler warnings/errors.

Change-Id: Ic3ea389105e7813b22095b295079eecdabde5045
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/linux/ieee80211.h
net/mac80211/wpa.c
net/wireless/lib80211_crypt_ccmp.c

index 55e6f4ad0ca622af5455c6a2a8d5fde5251c63a6..b6e6d5b407747196890e7a6bd84df135a62218f4 100644 (file)
@@ -310,9 +310,11 @@ static inline u16 ieee80211_sn_sub(u16 sn1, u16 sn2)
 struct ieee80211_hdr {
        __le16 frame_control;
        __le16 duration_id;
-       u8 addr1[ETH_ALEN];
-       u8 addr2[ETH_ALEN];
-       u8 addr3[ETH_ALEN];
+       struct_group(addrs,
+               u8 addr1[ETH_ALEN];
+               u8 addr2[ETH_ALEN];
+               u8 addr3[ETH_ALEN];
+       );
        __le16 seq_ctrl;
        u8 addr4[ETH_ALEN];
 } __packed __aligned(2);
index 93ec2f34974899786d5290a688dbe70e7f1ed4b3..20f742b5503b449b3972a7434ca3a4865b2e9584 100644 (file)
@@ -351,7 +351,7 @@ static u8 ccmp_gcmp_aad(struct sk_buff *skb, u8 *aad)
         * FC | A1 | A2 | A3 | SC | [A4] | [QC] */
        put_unaligned_be16(len_a, &aad[0]);
        put_unaligned(mask_fc, (__le16 *)&aad[2]);
-       memcpy(&aad[4], &hdr->addr1, 3 * ETH_ALEN);
+       memcpy(&aad[4], &hdr->addrs, 3 * ETH_ALEN);
 
        /* Mask Seq#, leave Frag# */
        aad[22] = *((u8 *) &hdr->seq_ctrl) & 0x0f;
@@ -792,7 +792,7 @@ static void bip_aad(struct sk_buff *skb, u8 *aad)
                                IEEE80211_FCTL_MOREDATA);
        put_unaligned(mask_fc, (__le16 *) &aad[0]);
        /* A1 || A2 || A3 */
-       memcpy(aad + 2, &hdr->addr1, 3 * ETH_ALEN);
+       memcpy(aad + 2, &hdr->addrs, 3 * ETH_ALEN);
 }
 
 
index 6a5f08f7491eba108cd2ffd1d0e20f7b6b5ee5f5..cca5e1cf089ec0a3d25594925d5fc2d8520cbab4 100644 (file)
@@ -136,7 +136,7 @@ static int ccmp_init_iv_and_aad(const struct ieee80211_hdr *hdr,
        pos = (u8 *) hdr;
        aad[0] = pos[0] & 0x8f;
        aad[1] = pos[1] & 0xc7;
-       memcpy(aad + 2, hdr->addr1, 3 * ETH_ALEN);
+       memcpy(aad + 2, &hdr->addrs, 3 * ETH_ALEN);
        pos = (u8 *) & hdr->seq_ctrl;
        aad[20] = pos[0] & 0x0f;
        aad[21] = 0;            /* all bits masked */