mt76_mcu_msg_alloc(const void *data, int head_len,
                   int data_len, int tail_len)
 {
+       int length = head_len + data_len + tail_len;
        struct sk_buff *skb;
 
-       skb = alloc_skb(head_len + data_len + tail_len,
-                       GFP_KERNEL);
+       skb = alloc_skb(length, GFP_KERNEL);
        if (!skb)
                return NULL;
 
+       memset(skb->head, 0, length);
        skb_reserve(skb, head_len);
+
        if (data && data_len)
                skb_put_data(skb, data, data_len);
 
 
                seq = ++mdev->mcu.msg_seq & 0xf;
 
        txd = (struct mt7603_mcu_txd *)skb_push(skb, hdrlen);
-       memset(txd, 0, hdrlen);
 
        txd->len = cpu_to_le16(skb->len);
        if (cmd == -MCU_CMD_FW_SCATTER)
 
                seq = ++dev->mt76.mcu.msg_seq & 0xf;
 
        mcu_txd = (struct mt7615_mcu_txd *)skb_push(skb, sizeof(*mcu_txd));
-       memset(mcu_txd, 0, sizeof(*mcu_txd));
 
        if (cmd != -MCU_CMD_FW_SCATTER) {
                q_idx = MT_TX_MCU_PORT_RX_Q0;