diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 2bfbd1e..368ae4f 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -170,10 +170,41 @@
     return system(str_cmd);
 }
 
+static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len);
+
+static const char * inner_get_ap_interface_name()
+{
+    char * p;
+    char cmd[128]={0};
+
+    sprintf(cmd, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
+    if (0 != exec_cmd(cmd, s_ap_iterface_name, sizeof(s_ap_iterface_name)) || s_ap_iterface_name[0] == '\0')
+    {
+        memset(s_ap_iterface_name, 0, sizeof (s_ap_iterface_name));
+        return NULL;
+    }
+    p = strchr(s_ap_iterface_name, ' ');
+    if (NULL != p)
+    {
+        *p = '\0';
+    }
+    p = strchr(s_ap_iterface_name, '\n');
+    if (NULL != p)
+    {
+        *p = '\0';
+    }
+    if (s_ap_iterface_name[0] == '\0')
+    {
+        return NULL;
+    }
+
+    return s_ap_iterface_name;
+}
+
 static void check_tether_and_notify()
 {
     RLOGD("check_tether_and_notify called");
-    if (s_ap_iterface_name[0] != '\0' && 0 == system_call_v("ifconfig | grep %s", s_ap_iterface_name))
+    if (inner_get_ap_interface_name() == NULL || 0 == system_call_v("ifconfig | grep %s", s_ap_iterface_name))
     {
         return;
     }
@@ -279,8 +310,6 @@
     }while (0)
 
 
-static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len);
-
 static int check_connection(struct wpa_ctrl * wpa_ctrl)
 {
     size_t reply_len = MAX_RET;
@@ -1886,9 +1915,9 @@
 
     CHECK_WPA_CTRL(CTRL_AP);
 
-    sprintf(LYNQ_WIFI_CMD, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
-    if (0 != exec_cmd(LYNQ_WIFI_CMD, s_ap_iterface_name, sizeof(s_ap_iterface_name)) || s_ap_iterface_name[0] == '\0')
+    if (inner_get_ap_interface_name() == NULL)
     {
+        RLOGE("lynq_wifi_ap_start get ap name fail");
         return -1;
     }
 
@@ -1898,8 +1927,6 @@
     sprintf(LYNQ_WIFI_CMD,"SELECT_NETWORK %d",AP_NETWORK_0);
     DO_OK_FAIL_REQUEST(LYNQ_WIFI_CMD);
 
-    check_tether_and_notify();
-
     ret = system_call_v("%s %s", start_stop_ap_script, "start");
     if (ret != 0)
     {
@@ -1907,6 +1934,8 @@
         return -1;
     }
 
+    check_tether_and_notify();
+
     return 0;
 }
 
@@ -3159,7 +3188,11 @@
 
     CHECK_WPA_CTRL(CTRL_STA);
 
-//    system(clean_last_re); // youchen @ 2023-04-14 temp delete ,next time to fix the orginal bug
+    if (g_sta_scan_finish_flag == 1 && s_sta_status == INNER_STA_STATUS_INIT) // temp add
+    {
+        RLOGD("tmp clear scanlist");
+        system(clean_last_re);
+    }
     g_sta_scan_finish_flag = 0;
     DO_REQUEST(lynq_scan_cmd);
     if (reply_len >=9 && memcmp(cmd_reply, "FAIL-BUSY", 9) == 0 )
@@ -3431,7 +3464,12 @@
 
     if (idx == 1)
     {
-       ifaName = s_ap_iterface_name;
+       ifaName = inner_get_ap_interface_name();
+       if (ifaName == NULL)
+       {
+           RLOGE("[lynq_get_interface_ip] ap name get fail");
+           return -1;
+       }
     }
     else if (idx != 0)
     {
@@ -3740,7 +3778,7 @@
     nmax = 6;
     ncheckcount = nidlecount = 0;
 
-    if (s_ap_iterface_name[0] == '\0')
+    if (inner_get_ap_interface_name() == NULL)
     {
         RLOGE("------gbw thread run\n");
         return;
