diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index d57cf3bd172f1..cf517223652e9 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -6635,10 +6635,20 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 			wlan_hdd_get_intf_addr(hdd_ctx),
 			NET_NAME_UNKNOWN, true);
 	if (!pre_cac_adapter) {
-		hdd_err("error starting pre cac adapter");
+		hdd_err("error opening the pre cac adapter");
 		return -EINVAL;
 	}
 
+	/*
+	 * This interface is internally created by the driver. So, no interface
+	 * up comes for this interface from user space and hence starting
+	 * the adapter internally.
+	 */
+	if (hdd_start_adapter(pre_cac_adapter)) {
+		hdd_err("error starting the pre cac adapter");
+		goto close_pre_cac_adapter;
+	}
+
 	hdd_debug("preparing for start ap/bss on the pre cac adapter");
 
 	wiphy = hdd_ctx->wiphy;
@@ -6652,7 +6662,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 			sizeof(*ap_adapter->sessionCtx.ap.beacon));
 	if (!pre_cac_adapter->sessionCtx.ap.beacon) {
 		hdd_err("failed to alloc mem for beacon");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 	qdf_mem_copy(pre_cac_adapter->sessionCtx.ap.beacon,
 			ap_adapter->sessionCtx.ap.beacon,
@@ -6686,7 +6696,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 	chan = __ieee80211_get_channel(wiphy, freq);
 	if (!chan) {
 		hdd_err("channel converion failed");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	cfg80211_chandef_create(&chandef, chan, channel_type);
@@ -6698,7 +6708,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 	ret = wlan_hdd_set_channel(wiphy, dev, &chandef, channel_type);
 	if (0 != ret) {
 		hdd_err("failed to set channel");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	status = wlan_hdd_cfg80211_start_bss(pre_cac_adapter, NULL,
@@ -6706,7 +6716,7 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 			eHIDDEN_SSID_NOT_IN_USE, false);
 	if (QDF_IS_STATUS_ERROR(status)) {
 		hdd_err("start bss failed");
-		goto close_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	/*
@@ -6717,25 +6727,25 @@ int wlan_hdd_request_pre_cac(uint8_t channel)
 	ret = wlan_hdd_set_pre_cac_status(pre_cac_adapter, true, handle);
 	if (0 != ret) {
 		hdd_err("failed to set pre cac status");
-		goto stop_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	ret = wlan_hdd_set_chan_before_pre_cac(ap_adapter,
 				hdd_ap_ctx->operatingChannel);
 	if (0 != ret) {
 		hdd_err("failed to set channel before pre cac");
-		goto stop_pre_cac_adapter;
+		goto stop_close_pre_cac_adapter;
 	}
 
 	ap_adapter->pre_cac_chan = pre_cac_chan;
 
 	return 0;
 
-stop_pre_cac_adapter:
-	hdd_stop_adapter(hdd_ctx, pre_cac_adapter, false);
-close_pre_cac_adapter:
+stop_close_pre_cac_adapter:
+	hdd_stop_adapter(hdd_ctx, pre_cac_adapter, true);
 	qdf_mem_free(pre_cac_adapter->sessionCtx.ap.beacon);
 	pre_cac_adapter->sessionCtx.ap.beacon = NULL;
+close_pre_cac_adapter:
 	hdd_close_adapter(hdd_ctx, pre_cac_adapter, false);
 	return -EINVAL;
 }
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c
index 22f74ef1ef365..9ea29f4b5d535 100644
--- a/core/hdd/src/wlan_hdd_hostapd.c
+++ b/core/hdd/src/wlan_hdd_hostapd.c
@@ -898,7 +898,7 @@ void wlan_hdd_sap_pre_cac_failure(void *data)
 	}
 
 	cds_ssr_protect(__func__);
-	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, false);
+	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, true);
 	hdd_close_adapter(hdd_ctx, pHostapdAdapter, false);
 	cds_ssr_unprotect(__func__);
 }
@@ -934,7 +934,7 @@ static void wlan_hdd_sap_pre_cac_success(void *data)
 	}
 
 	cds_ssr_protect(__func__);
-	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, false);
+	hdd_stop_adapter(hdd_ctx, pHostapdAdapter, true);
 	hdd_close_adapter(hdd_ctx, pHostapdAdapter, false);
 	cds_ssr_unprotect(__func__);