Use strerror_r function for thread safety 36/215736/2 accepted/tizen_5.5_unified_mobile_hotfix tizen_5.5_mobile_hotfix accepted/tizen/5.5/unified/20191031.005532 accepted/tizen/5.5/unified/mobile/hotfix/20201027.062436 accepted/tizen/unified/20191016.000359 submit/tizen/20191015.083053 submit/tizen_5.5/20191031.000006 submit/tizen_5.5_mobile_hotfix/20201026.185106 tizen_5.5.m2_release
authorhyunuk.tak <hyunuk.tak@samsung.com>
Tue, 15 Oct 2019 05:57:57 +0000 (14:57 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Tue, 15 Oct 2019 08:02:46 +0000 (17:02 +0900)
Change-Id: Ibe007510349c923a79e47a78dcb4697d141acdb7
Signed-off-by: hyunuk.tak <hyunuk.tak@samsung.com>
src/clatd.c
src/ifc_utils.c
src/main.c

index 7333632..de03a36 100644 (file)
@@ -57,6 +57,9 @@
 
 /* 40 bytes IPv6 header - 20 bytes IPv4 header + 8 bytes fragment header */
 #define MTU_DELTA 28
+#if defined TIZEN_EXT
+#define MAX_SIZE_ERROR_BUFFER 256
+#endif
 
 volatile sig_atomic_t running = 1;
 
@@ -497,15 +500,18 @@ void configure_interface(const char *uplink_interface, const char *plat_prefix,
        }
 
 #if defined TIZEN_EXT
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
        int error = tun_alloc(tunnel->device4, tunnel->fd4, sizeof(tunnel->device4));
        if (error < 0) {
-               CLATD_LOG(LOG_FATAL, "tun_alloc/4 failed: %s", strerror(errno));
+               CLATD_LOG(LOG_FATAL, "tun_alloc/4 failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
                return;
        }
 
        error = set_nonblocking(tunnel->fd4);
        if (error < 0) {
-               CLATD_LOG(LOG_FATAL, "set_nonblocking failed: %s", strerror(errno));
+               CLATD_LOG(LOG_FATAL, "set_nonblocking failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
                return;
        }
 #endif
index 3833384..a4c2d52 100644 (file)
@@ -62,6 +62,9 @@ void printerr(char *fmt, ...);
 #define DBG 0
 #endif
 
+#if defined TIZEN_EXT
+#define MAX_SIZE_ERROR_BUFFER 256
+#endif
 #define INET_ADDRLEN 4
 #define INET6_ADDRLEN 16
 
@@ -125,13 +128,17 @@ int string_to_ip(const char *string, struct sockaddr_storage *ss)
 int ifc_init(void)
 {
        int ret;
+#if defined TIZEN_EXT
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
+#endif
 
        pthread_mutex_lock(&ifc_sock_mutex);
        if (ifc_ctl_sock == -1) {
                ifc_ctl_sock = socket(AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, 0);
                if (ifc_ctl_sock < 0) {
 #if defined TIZEN_EXT
-                       CLATD_LOG(LOG_ERROR, "socket() failed: %s", strerror(errno));
+                       CLATD_LOG(LOG_ERROR, "socket() failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 #else
                        printerr("socket() failed: %s\n", strerror(errno));
 #endif
@@ -147,12 +154,17 @@ int ifc_init(void)
 
 int ifc_init6(void)
 {
+#if defined TIZEN_EXT
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
+#endif
+
        pthread_mutex_lock(&ifc_sock6_mutex);
        if (ifc_ctl_sock6 == -1) {
                ifc_ctl_sock6 = socket(AF_INET6, SOCK_DGRAM | SOCK_CLOEXEC, 0);
                if (ifc_ctl_sock6 < 0) {
 #if defined TIZEN_EXT
-                       CLATD_LOG(LOG_ERROR, "socket() failed: %s", strerror(errno));
+                       CLATD_LOG(LOG_ERROR, "socket() failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 #else
                        printerr("socket() failed: %s\n", strerror(errno));
 #endif
@@ -696,6 +708,9 @@ int ifc_remove_default_route(const char *ifname)
 {
        struct rtentry rt;
        int result;
+#if defined TIZEN_EXT
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
+#endif
 
        ifc_init();
        memset(&rt, 0, sizeof(rt));
@@ -704,7 +719,8 @@ int ifc_remove_default_route(const char *ifname)
        init_sockaddr_in(&rt.rt_dst, 0);
        if ((result = ioctl(ifc_ctl_sock, SIOCDELRT, &rt)) < 0) {
 #if defined TIZEN_EXT
-               CLATD_LOG(LOG_ERROR, "failed to remove default route for %s: %s", ifname, strerror(errno));
+               CLATD_LOG(LOG_ERROR, "failed to remove default route for %s: %s",
+                        ifname, strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 #else
                ALOGD("failed to remove default route for %s: %s", ifname, strerror(errno));
 #endif
@@ -721,7 +737,9 @@ ifc_configure(const char *ifname,
                in_addr_t dns1,
                in_addr_t dns2)
 {
-#if !defined TIZEN_EXT
+#if defined TIZEN_EXT
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
+#else
        char dns_prop_name[PROPERTY_KEY_MAX];
 #endif
 
@@ -729,7 +747,8 @@ ifc_configure(const char *ifname,
 
        if (ifc_up(ifname)) {
 #if defined TIZEN_EXT
-               CLATD_LOG(LOG_ERROR, "failed to turn on interface %s: %s", ifname, strerror(errno));
+               CLATD_LOG(LOG_ERROR, "failed to turn on interface %s: %s",
+                       ifname, strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 #else
                printerr("failed to turn on interface %s: %s\n", ifname, strerror(errno));
 #endif
@@ -738,7 +757,8 @@ ifc_configure(const char *ifname,
        }
        if (ifc_set_addr(ifname, address)) {
 #if defined TIZEN_EXT
-               CLATD_LOG(LOG_ERROR, "failed to set ipaddr %s: %s", ipaddr_to_string(address), strerror(errno));
+               CLATD_LOG(LOG_ERROR, "failed to set ipaddr %s: %s",
+                       ipaddr_to_string(address), strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 #else
                printerr("failed to set ipaddr %s: %s\n", ipaddr_to_string(address), strerror(errno));
 #endif
@@ -747,7 +767,8 @@ ifc_configure(const char *ifname,
        }
        if (ifc_set_prefixLength(ifname, prefixLength)) {
 #if defined TIZEN_EXT
-               CLATD_LOG(LOG_ERROR, "failed to set prefixLength %d: %s", prefixLength, strerror(errno));
+               CLATD_LOG(LOG_ERROR, "failed to set prefixLength %d: %s",
+                       prefixLength, strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 #else
                printerr("failed to set prefixLength %d: %s\n", prefixLength, strerror(errno));
 #endif
@@ -756,7 +777,8 @@ ifc_configure(const char *ifname,
        }
        if (ifc_create_default_route(ifname, gateway)) {
 #if defined TIZEN_EXT
-               CLATD_LOG(LOG_ERROR, "failed to set default route %s: %s", ipaddr_to_string(gateway), strerror(errno));
+               CLATD_LOG(LOG_ERROR, "failed to set default route %s: %s",
+                       ipaddr_to_string(gateway), strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 #else
                printerr("failed to set default route %s: %s\n", ipaddr_to_string(gateway), strerror(errno));
 #endif
index 065dd0b..c883d78 100644 (file)
@@ -58,6 +58,8 @@ void print_help() {
 }
 
 #if defined(TIZEN_EXT)
+#define MAX_SIZE_ERROR_BUFFER 256
+
 static void  _graceful_terminate(gpointer data);
 static gboolean on_sigterm(gpointer user_data);
 
@@ -100,6 +102,7 @@ static gboolean _method_start(GDBusInterfaceSkeleton *di,
        unsigned net_id = NETID_UNSET;
        uint32_t mark = MARK_UNSET;
        unsigned len = 0;
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
 
        cl = user_data;
 
@@ -180,7 +183,7 @@ static gboolean _method_start(GDBusInterfaceSkeleton *di,
 
        CLATD_LOG(LOG_INFO, "Starting clat version %s on %s netid=%s mark=%s",
                        CLATD_VERSION, uplink_interface,net_id_str ? net_id_str : "(none)",
-                       mark_str ? mark_str : "(none)", 
+                       mark_str ? mark_str : "(none)",
                        plat_prefix ? plat_prefix : "(none)",
                        v4_addr ? v4_addr : "(none)",
                        v6_addr ? v6_addr : "(none)");
@@ -198,7 +201,8 @@ static gboolean _method_start(GDBusInterfaceSkeleton *di,
        // we can create tun devices as non-root because we're in the VPN group.
        cl->tunnel.fd4 = tun_open();
        if (cl->tunnel.fd4 < 0) {
-               CLATD_LOG(LOG_FATAL, "tun_open4 failed: %s", strerror(errno));
+               CLATD_LOG(LOG_FATAL, "tun_open4 failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
                goto error_case;
        }
 
@@ -238,15 +242,18 @@ static gboolean _method_stop(GDBusInterfaceSkeleton *di,
                             GDBusMethodInvocation *invoc, gpointer user_data)
 {
        struct _clat *cl = 0;
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
 
        cl = user_data;
 
 //< RNTFIX::to make clat4 interface persistently
        if (if_down(cl->tunnel.device4) < 0) {
-               CLATD_LOG(LOG_FATAL, "if_down failed: %s", strerror(errno));
+               CLATD_LOG(LOG_FATAL, "if_down failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
        }
        if (delete_address(cl->tunnel.device4, AF_INET, &Global_Clatd_Config.ipv4_local_subnet, 32) < 0) {
-               CLATD_LOG(LOG_FATAL, "delete_address failed: %s", strerror(errno));
+               CLATD_LOG(LOG_FATAL, "delete_address failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
        }
 
 //> RNTFIX::to make clat4 interface persistently
@@ -263,16 +270,20 @@ static gboolean _method_stop(GDBusInterfaceSkeleton *di,
 static void  _graceful_terminate(gpointer data)
 {
        struct _clat *cl = NULL;
+       char error_buf[MAX_SIZE_ERROR_BUFFER] = {0, };
+
        cl = (struct _clat *)data;
        CLATD_LOG(LOG_INFO, "terminate gracfully");
 
        errno = 0;
        if (if_down(cl->tunnel.device4) < 0)
-               CLATD_LOG(LOG_FATAL, "if_down failed: %s", strerror(errno));
+               CLATD_LOG(LOG_FATAL, "if_down failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 
        errno = 0;
        if (delete_address(cl->tunnel.device4, AF_INET, &Global_Clatd_Config.ipv4_local_subnet, 32) < 0)
-               CLATD_LOG(LOG_FATAL, "delete_address failed: %s", strerror(errno));
+               CLATD_LOG(LOG_FATAL, "delete_address failed: %s",
+                               strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER));
 
        CLATD_LOG(LOG_INFO, "Shutting down clat on %s", cl->tunnel.device4);
        del_anycast_address(cl->tunnel.write_fd6, &Global_Clatd_Config.ipv6_local_subnet);