#include <net/ieee80211.h>
 #include <net/iw_handler.h>
 
+#include <asm/unaligned.h>
+
 #include "host.h"
 #include "decl.h"
 #include "dev.h"
 
        if (*bytesleft >= sizeof(beaconsize)) {
                /* Extract & convert beacon size from the command buffer */
-               beaconsize = le16_to_cpup((void *)*pbeaconinfo);
+               beaconsize = le16_to_cpu(get_unaligned((u16 *)*pbeaconinfo));
                *bytesleft -= sizeof(beaconsize);
                *pbeaconinfo += sizeof(beaconsize);
        }
                goto done;
        }
 
-       bytesleft = le16_to_cpu(pscan->bssdescriptsize);
+       bytesleft = le16_to_cpu(get_unaligned((u16*)&pscan->bssdescriptsize));
        lbs_deb_scan("SCAN_RESP: bssdescriptsize %d\n", bytesleft);
 
-       scanrespsize = le16_to_cpu(resp->size);
+       scanrespsize = le16_to_cpu(get_unaligned((u16*)&resp->size));
        lbs_deb_scan("SCAN_RESP: returned %d AP before parsing\n",
               pscan->nr_sets);