struct ether_hdr *eth_hdr;
        unsigned short eth_proto;
        struct ieee802_1x_hdr *aa1x_hdr;
+       size_t size;
        int ret;
 
        DPRINTK(3, "\n");
                }
                DPRINTK(4, "SNAP, rx_ind_size = %d\n", rx_ind_size);
 
-               memcpy(skb_put(skb, 12), priv->rxp, 12);        /* 8802/FDDI MAC copy */
+               size = ETH_ALEN * 2;
+               memcpy(skb_put(skb, size), priv->rxp, size);
+
                /* (SNAP+UI..) skip */
-               memcpy(skb_put(skb, rx_ind_size - 12), priv->rxp + 18,
-                      rx_ind_size - 12);       /* copy after Type */
 
-               aa1x_hdr = (struct ieee802_1x_hdr *)(priv->rxp + 20);
+               size = rx_ind_size - (ETH_ALEN * 2);
+               memcpy(skb_put(skb, size), ð_hdr->h_proto, size);
+
+               aa1x_hdr = (struct ieee802_1x_hdr *)(priv->rxp + ETHER_HDR_SIZE);
                if (aa1x_hdr->type == IEEE802_1X_TYPE_EAPOL_KEY &&
                    priv->wpa.rsn_enabled)
                        atomic_set(&priv->psstatus.snooze_guard, 1);
        struct ieee802_1x_hdr *aa1x_hdr;
        struct wpa_eapol_key *eap_key;
        struct ethhdr *eth;
+       size_t size;
        int ret;
 
        skb_len = skb->len;
                goto err_kfree;
        }
 
-       /* MAC address copy */
-       memcpy(p, buffer, 12);  /* DST/SRC MAC address */
-       p += 12;
-       buffer += 12;
-       length -= 12;
+       /* dest and src MAC address copy */
+       size = ETH_ALEN * 2;
+       memcpy(p, buffer, size);
+       p += size;
+       buffer += size;
+       length -= size;
+
        /* EtherType/Length check */
        if (*(buffer + 1) + (*buffer << 8) > 1500) {
                /* ProtocolEAP = *(buffer+1) + (*buffer << 8); */