Fix for svace issues
authorJiwan Kim <ji-wan.kim@samsung.com>
Tue, 13 Jun 2017 07:00:39 +0000 (16:00 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 17 Jul 2017 02:35:36 +0000 (11:35 +0900)
src/mesh-bridge.c
src/mesh-gdbus.c
src/mesh-interface.c
src/mesh-netlink.c
src/mesh-service-interface.c

index 908a495..12c368a 100644 (file)
@@ -65,7 +65,7 @@ int mesh_bridge_create(const char* bridge_name)
                return MESHD_ERROR_IO_ERROR;
        }
 
-       strncpy(bridge, bridge_name, IFNAMSIZ);
+       snprintf(bridge, IFNAMSIZ, "%s", bridge_name);
 #ifdef SIOCBRADDBR
        val = ioctl(br_fd, SIOCBRADDBR, bridge_name);
 #else
@@ -107,7 +107,7 @@ int mesh_bridge_remove(const char* bridge_name)
                return MESHD_ERROR_IO_ERROR;
        }
 
-       strncpy(bridge, bridge_name, IFNAMSIZ);
+       snprintf(bridge, IFNAMSIZ, "%s", bridge_name);
 #ifdef SIOCBRDELBR
        val = ioctl(br_fd, SIOCBRDELBR, bridge_name);
 #else
@@ -157,7 +157,7 @@ int mesh_bridge_add_interface(const char* bridge_name, const char* interface)
                return MESHD_ERROR_IO_ERROR;
        }
 
-       strncpy(ifr.ifr_name, bridge_name, IFNAMSIZ);
+       snprintf(ifr.ifr_name, IFNAMSIZ, "%s", bridge_name);
 #ifdef SIOCBRADDIF
        ifr.ifr_ifindex = if_index;
        val = ioctl(br_fd, SIOCBRADDIF, &ifr);
@@ -210,7 +210,7 @@ int mesh_bridge_del_interface(const char* bridge_name, const char* interface)
                return MESHD_ERROR_IO_ERROR;
        }
 
-       strncpy(ifr.ifr_name, bridge_name, IFNAMSIZ);
+       snprintf(ifr.ifr_name, IFNAMSIZ, "%s", bridge_name);
 #ifdef SIOCBRDELIF
        ifr.ifr_ifindex = if_index;
        val = ioctl(br_fd, SIOCBRDELIF, &ifr);
index e634c48..19c7683 100644 (file)
@@ -548,13 +548,16 @@ static void _on_scan_result_destroy(gpointer data)
                g_free(scan_item->bssid);
                g_free(scan_item->object_path);
        }
+       g_free(scan_item);
 }
 
 static void _on_peer_info_destroy(gpointer data)
 {
        mesh_peer_info_s *peer = (mesh_peer_info_s *)data;
+
        if (peer)
                g_free(peer->address);
+       g_free(peer);
 }
 
 static void _get_joined_network(mesh_service *service, GVariant *variant)
@@ -737,11 +740,10 @@ static void _get_mesh_peers(mesh_service *service, GVariant *variant)
 static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant)
 {
        GVariantIter *peer = NULL;
-       GVariantIter *property = NULL;
-       gchar *key = NULL;
        GVariant *val = NULL;
        gsize len = 0;
        GVariant *child;
+       GVariant *dict = NULL;
 
        g_variant_get(variant, "(a(a{sv}))", &peer);
        while ((child = g_variant_iter_next_value(peer))) {
@@ -753,19 +755,22 @@ static void _get_connected_mesh_peers(mesh_service *service, GVariant *variant)
                        return;
                }
 
-               g_variant_get(child, "(a{sv})", &property);
-               while (g_variant_iter_loop(property, "{sv}", &key, &val)) {
-                       if (strcasecmp(key, "PeerAddress") == 0)  {
-                               const char *buf = g_variant_get_string(val, &len);
-                               peer_info->address = g_strdup(buf);
-                               MESH_LOGD("    Address : %s", peer_info->address);
-                       }
+               /* a{sv} <- (a{sv}) */
+               dict = g_variant_get_child_value(child, 0);
+               val = g_variant_lookup_value(dict, "PeerAddress", NULL);
+               if (NULL != val) {
+                       const char *buf = g_variant_get_string(val, &len);
+                       peer_info->address = g_strdup(buf);
+                       MESH_LOGD("    Address : %s", peer_info->address);
+                       g_variant_unref(val);
+               } else {
+                       MESH_LOGE("Unable to get address !");
+                       g_free(peer_info);
+                       continue;
                }
-               /* Last element */
+
                service->connected_mesh_peers =
                        g_list_prepend(service->connected_mesh_peers, peer_info);
-
-               g_variant_iter_free(property);
        }
        g_variant_iter_free(peer);
 }
index 189fff0..bb63b17 100644 (file)
@@ -207,16 +207,17 @@ static bool _check_interface_exists(const char* if_name)
 char* mesh_interface_get_address(const char* if_name)
 {
        FILE *pf;
-       char buf[32];
+       char buf[32] = { 0, };
        char *result = NULL;
-       int cnt = 0;
 
        snprintf(buf, sizeof(buf), "/sys/class/net/%s/address", if_name);
        pf = fopen(buf, "r");
        if (NULL != pf) {
-               cnt = fscanf(pf, "%s", buf);
-               MESH_LOGD("Interface[%s] address[%s] %d", if_name, buf, cnt);
-               result = g_strdup(buf);
+               fgets(buf, 31, pf);
+               MESH_LOGD("Interface[%s] address[%s]", if_name, buf);
+
+               if (strlen(buf) > 0)
+                       result = g_strdup(buf);
 
                fclose(pf);
        }
index cce1032..110b0ac 100644 (file)
@@ -510,7 +510,8 @@ static void _on_remove_event_io_handler()
 
 static void mac_addr_n2a(char *mac_addr, unsigned char *arg)
 {
-       snprintf(mac_addr, MAX_MAC_ADDR_LEN+1,
+       /* 11:22:33:44:55:66 (Len:17) */
+       snprintf(mac_addr, MAX_MAC_ADDR_LEN,
                        "%02X:%02X:%02X:%02X:%02X:%02X",
                        arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]);
 }
@@ -708,7 +709,7 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg)
                [NL80211_STA_INFO_BSS_PARAM] = { .type = NLA_NESTED },
                [NL80211_STA_INFO_RX_DURATION] = { .type = NLA_U64 },
        };
-       char mac_addr[20], state_name[10], dev[20];
+       char mac_addr[MAX_MAC_ADDR_LEN], state_name[10], dev[20];
        char *chain;
        mesh_nl_state *state = (mesh_nl_state *)arg;
        mesh_station_info_s *station_info = NULL;
@@ -865,28 +866,28 @@ static int _on_receive_station_info(struct nl_msg *msg, void *arg)
                                nla_get_u8(sinfo[NL80211_STA_INFO_PLINK_STATE]);
                switch (station_info->mesh_plink) {
                case LISTEN:
-                       strcpy(state_name, "LISTEN");
+                       snprintf(state_name, 10, "%s", "LISTEN");
                        break;
                case OPN_SNT:
-                       strcpy(state_name, "OPN_SNT");
+                       snprintf(state_name, 10, "%s", "OPN_SNT");
                        break;
                case OPN_RCVD:
-                       strcpy(state_name, "OPN_RCVD");
+                       snprintf(state_name, 10, "%s", "OPN_RCVD");
                        break;
                case CNF_RCVD:
-                       strcpy(state_name, "CNF_RCVD");
+                       snprintf(state_name, 10, "%s", "CNF_RCVD");
                        break;
                case ESTAB:
-                       strcpy(state_name, "ESTAB");
+                       snprintf(state_name, 10, "%s", "ESTAB");
                        break;
                case HOLDING:
-                       strcpy(state_name, "HOLDING");
+                       snprintf(state_name, 10, "%s", "HOLDING");
                        break;
                case BLOCKED:
-                       strcpy(state_name, "BLOCKED");
+                       snprintf(state_name, 10, "%s", "BLOCKED");
                        break;
                default:
-                       strcpy(state_name, "UNKNOWN");
+                       snprintf(state_name, 10, "%s", "UNKNOWN");
                        break;
                }
                MESH_LOGD("    mesh plink:\t%s", state_name);
@@ -1105,7 +1106,7 @@ static int _on_receive_mesh_event(struct nl_msg *msg, void *arg)
        struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
        struct nlattr *tb[NL80211_ATTR_MAX + 1];
        char ifname[16] = { 0, };
-       char macbuf[6*3];
+       char macbuf[MAX_MAC_ADDR_LEN];
 
        NOTUSED(arg);
 
index a192bba..aa7e7a9 100644 (file)
@@ -279,6 +279,15 @@ static void _on_scan_result_destroy(gpointer data)
                g_free(scan_item->bssid);
                g_free(scan_item->object_path);
        }
+       g_free(scan_item);
+}
+
+static void _on_peer_info_destroy(gpointer data)
+{
+       mesh_peer_info_s *peer = (mesh_peer_info_s *)data;
+       if (peer)
+               g_free(peer->address);
+       g_free(peer);
 }
 
 static void _on_station_list_destroy(gpointer data)
@@ -416,7 +425,7 @@ static gboolean _meshd_dbus_handle_get_joined_mesh_network(NetMesh *object,
        mesh_service *service = (mesh_service *)user_data;
        mesh_network_info_s *joined = NULL;
 
-       ret = mesh_request_get_networks(service);
+       ret = mesh_request_get_joined_network(service);
        if (MESHD_ERROR_NONE == ret) {
                joined = service->joined_network;
                if (joined) {
@@ -1079,6 +1088,10 @@ static void _meshd_dbus_deinit(mesh_service *service)
        g_list_free_full(service->scanned_mesh_network, _on_scan_result_destroy);
        service->scanned_mesh_network = NULL;
 
+       /* Clear connected peers list */
+       g_list_free_full(service->connected_mesh_peers, _on_peer_info_destroy);
+       service->connected_mesh_peers = NULL;
+
        g_free(service->interface_info);
        service->interface_info = NULL;
 }