Fix Buffer Overflow error. 09/245909/2 accepted/tizen/unified/20201102.124453 submit/tizen/20201027.080049
authorNiraj Kumar Goit <niraj.g@samsung.com>
Mon, 19 Oct 2020 14:17:26 +0000 (19:47 +0530)
committerNiraj Kumar Goit <niraj.g@samsung.com>
Thu, 22 Oct 2020 06:15:18 +0000 (11:45 +0530)
Change-Id: I88a80f81723cf190ecf63b3fef46ca3bf7fd0c48
Signed-off-by: Niraj Kumar Goit <niraj.g@samsung.com>
plugin/pcap/stcplugin-pcap.c

index 13f59410b06b288fbf7ea8db8c2cd8b9063ea4d2..a3967806b475d882a980428f02caa438eea4dd08 100644 (file)
@@ -433,7 +433,7 @@ static char *__pcap_dns_class_info(uint16_t class)
 }
 
 static uint8_t * __pcap_dns_name_info(uint8_t *dns_h,
-                               uint8_t *data, u_char *name)
+                               uint8_t *data, u_char *name, uint32_t *pktlen)
 {
        uint8_t *sec = data;
        u_char *dname = name;
@@ -452,7 +452,7 @@ static uint8_t * __pcap_dns_name_info(uint8_t *dns_h,
                                break;
                        }
 
-                       if (dname + *sec >= name + BUFF_SIZE_NAME) {
+                       if (dname + *sec >= name + *pktlen) {
                                *name = '\0';
                                return NULL;
                        }
@@ -481,7 +481,7 @@ static void __pcap_dns_data_info(const u_char **packet, dns_t *dns_h, uint32_t *
        int i = 0;
 
        for (i = 0; i < qdcount; ++i) {
-               u_char name[BUFF_SIZE_NAME];
+               u_char name[*pktlen];
                uint16_t type;
                uint16_t class;
 
@@ -490,7 +490,7 @@ static void __pcap_dns_data_info(const u_char **packet, dns_t *dns_h, uint32_t *
                                STC_LOGD("[Queries]");
                }
 
-               data = __pcap_dns_name_info((uint8_t *)dns_h, data, name);
+               data = __pcap_dns_name_info((uint8_t *)dns_h, data, name, pktlen);
                if (data == NULL)
                        return;
 
@@ -506,8 +506,8 @@ static void __pcap_dns_data_info(const u_char **packet, dns_t *dns_h, uint32_t *
        }
 
        for (i = 0; i < ancount; ++i) {
-               u_char name[BUFF_SIZE_NAME];
-               u_char cname[BUFF_SIZE_NAME];
+               u_char name[*pktlen];
+               u_char cname[*pktlen];
                uint16_t type;
                uint16_t class;
                uint32_t ttl;
@@ -519,7 +519,7 @@ static void __pcap_dns_data_info(const u_char **packet, dns_t *dns_h, uint32_t *
                                STC_LOGD("[Answers]");
                }
 
-               data = __pcap_dns_name_info((uint8_t *)dns_h, data, name);
+               data = __pcap_dns_name_info((uint8_t *)dns_h, data, name, pktlen);
                if (data == NULL)
                        return;
 
@@ -541,7 +541,7 @@ static void __pcap_dns_data_info(const u_char **packet, dns_t *dns_h, uint32_t *
                                                ttl, length, ip);
                                break;
                        case DNS_QTYPE_CNAME:
-                               __pcap_dns_name_info((uint8_t *)dns_h, &data[10], cname);
+                               __pcap_dns_name_info((uint8_t *)dns_h, &data[10], cname, pktlen);
                                if (STC_PCAP_LOG)
                                        STC_LOGD("Name[%s] Type[%u:%s] Class[0x%04x:%s] "
                                                "TTL[%u] Data length[%u] CName[%s]",