|
@@ -28,6 +28,7 @@
|
|
|
#include <linux/random.h>
|
|
|
#include <linux/export.h>
|
|
|
#include "wusbhc.h"
|
|
|
+#include <asm/unaligned.h>
|
|
|
|
|
|
static void wusbhc_gtk_rekey_work(struct work_struct *work);
|
|
|
|
|
@@ -367,7 +368,6 @@ int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev,
|
|
|
struct usb_device *usb_dev = wusb_dev->usb_dev;
|
|
|
struct device *dev = &usb_dev->dev;
|
|
|
u32 tkid;
|
|
|
- __le32 tkid_le;
|
|
|
struct usb_handshake *hs;
|
|
|
struct aes_ccm_nonce ccm_n;
|
|
|
u8 mic[8];
|
|
@@ -385,11 +385,10 @@ int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev,
|
|
|
goto error_dev_set_encryption;
|
|
|
|
|
|
tkid = wusbhc_next_tkid(wusbhc, wusb_dev);
|
|
|
- tkid_le = cpu_to_le32(tkid);
|
|
|
|
|
|
hs[0].bMessageNumber = 1;
|
|
|
hs[0].bStatus = 0;
|
|
|
- memcpy(hs[0].tTKID, &tkid_le, sizeof(hs[0].tTKID));
|
|
|
+ put_unaligned_le32(tkid, hs[0].tTKID);
|
|
|
hs[0].bReserved = 0;
|
|
|
memcpy(hs[0].CDID, &wusb_dev->cdid, sizeof(hs[0].CDID));
|
|
|
get_random_bytes(&hs[0].nonce, sizeof(hs[0].nonce));
|
|
@@ -441,7 +440,7 @@ int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev,
|
|
|
|
|
|
/* Setup the CCM nonce */
|
|
|
memset(&ccm_n.sfn, 0, sizeof(ccm_n.sfn)); /* Per WUSB1.0[6.5.2] */
|
|
|
- memcpy(ccm_n.tkid, &tkid_le, sizeof(ccm_n.tkid));
|
|
|
+ put_unaligned_le32(tkid, ccm_n.tkid);
|
|
|
ccm_n.src_addr = wusbhc->uwb_rc->uwb_dev.dev_addr;
|
|
|
ccm_n.dest_addr.data[0] = wusb_dev->addr;
|
|
|
ccm_n.dest_addr.data[1] = 0;
|
|
@@ -472,7 +471,7 @@ int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev,
|
|
|
/* Send Handshake3 */
|
|
|
hs[2].bMessageNumber = 3;
|
|
|
hs[2].bStatus = 0;
|
|
|
- memcpy(hs[2].tTKID, &tkid_le, sizeof(hs[2].tTKID));
|
|
|
+ put_unaligned_le32(tkid, hs[2].tTKID);
|
|
|
hs[2].bReserved = 0;
|
|
|
memcpy(hs[2].CDID, &wusb_dev->cdid, sizeof(hs[2].CDID));
|
|
|
memcpy(hs[2].nonce, hs[0].nonce, sizeof(hs[2].nonce));
|