memmove(skb->data + IEEE80211_3ADDR_LEN,
                        skb->data + IEEE80211_3ADDR_LEN + 8,
                        skb->len - IEEE80211_3ADDR_LEN - 8);
-               skb_trim(skb, skb->len - 8);    /* MIC */
+               if (fc & IEEE80211_FCTL_MOREFRAGS)
+                       skb_trim(skb, skb->len - 16);   /* 2*MIC */
+               else
+                       skb_trim(skb, skb->len - 8);    /* MIC */
                break;
        case SEC_LEVEL_2:
                break;
                memmove(skb->data + IEEE80211_3ADDR_LEN,
                        skb->data + IEEE80211_3ADDR_LEN + 4,
                        skb->len - IEEE80211_3ADDR_LEN - 4);
-               skb_trim(skb, skb->len - 4);    /* ICV */
+               if (fc & IEEE80211_FCTL_MOREFRAGS)
+                       skb_trim(skb, skb->len - 8);    /* 2*ICV */
+               else
+                       skb_trim(skb, skb->len - 4);    /* ICV */
                break;
        case SEC_LEVEL_0:
                break;