Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdb2a9fe authored by Jussi Kivilinna's avatar Jussi Kivilinna Committed by John W. Linville
Browse files

rndis_wlan: fix broken data copy



Replace broken code that attempted to copy 6 byte array to 64-bit
integer. Due to missing cast to 64-bit integer, left shift operation
were 32-bit and lead to bytes been copied over each other. New code
uses simple memcpy, for greater readability and efficiency.

Signed-off-by: default avatarJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 8a96df80
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -260,7 +260,7 @@ struct NDIS_802_11_KEY {
	__le32 KeyLength;
	u8 Bssid[6];
	u8 Padding[6];
	__le64 KeyRSC;
	u8 KeyRSC[8];
	u8 KeyMaterial[32];
} __attribute__((packed));

@@ -1508,7 +1508,7 @@ static int rndis_iw_set_encode_ext(struct net_device *dev,
	struct usbnet *usbdev = dev->priv;
	struct rndis_wext_private *priv = get_rndis_wext_priv(usbdev);
	struct NDIS_802_11_KEY ndis_key;
	int i, keyidx, ret;
	int keyidx, ret;
	u8 *addr;

	keyidx = wrqu->encoding.flags & IW_ENCODE_INDEX;
@@ -1543,9 +1543,7 @@ static int rndis_iw_set_encode_ext(struct net_device *dev,
	ndis_key.KeyIndex = cpu_to_le32(keyidx);

	if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) {
		for (i = 0; i < 6; i++)
			ndis_key.KeyRSC |=
				cpu_to_le64(ext->rx_seq[i] << (i * 8));
		memcpy(ndis_key.KeyRSC, ext->rx_seq, 6);
		ndis_key.KeyIndex |= cpu_to_le32(1 << 29);
	}