if (ret)
                return ret;
 
+       mld_vif->ap_ibss_active = true;
+
+       if (vif->p2p && mld->p2p_device_vif) {
+               ret = iwl_mld_mac_fw_action(mld, mld->p2p_device_vif,
+                                           FW_CTXT_ACTION_MODIFY);
+               if (ret) {
+                       mld_vif->ap_ibss_active = false;
+                       goto rm_mcast;
+               }
+       }
+
        ret = iwl_mld_add_bcast_sta(mld, vif, link);
        if (ret)
-               goto rm_mcast;
+               goto update_p2p_dev;
 
        /* Those keys were configured by the upper layers before starting the
         * AP. Now that it is started and the bcast and mcast sta were added to
                iwl_mld_vif_update_low_latency(mld, vif, true,
                                               LOW_LATENCY_VIF_TYPE);
 
-       mld_vif->ap_ibss_active = true;
-
-       if (vif->p2p && mld->p2p_device_vif)
-               return iwl_mld_mac_fw_action(mld, mld->p2p_device_vif,
-                                            FW_CTXT_ACTION_MODIFY);
-
        /* When the channel context was added, the link is not yet active, so
         * min_def is always used. Update the PHY again here in case def should
         * actually be used.
        return 0;
 rm_bcast:
        iwl_mld_remove_bcast_sta(mld, vif, link);
+update_p2p_dev:
+       mld_vif->ap_ibss_active = false;
+       if (vif->p2p && mld->p2p_device_vif)
+               iwl_mld_mac_fw_action(mld, mld->p2p_device_vif,
+                                     FW_CTXT_ACTION_MODIFY);
 rm_mcast:
        iwl_mld_remove_mcast_sta(mld, vif, link);
        return ret;