diff options
| author | liuxueli <[email protected]> | 2023-09-19 18:32:06 +0800 |
|---|---|---|
| committer | liuxueli <[email protected]> | 2023-09-19 18:32:06 +0800 |
| commit | 1da8dfafcb230fca5456e881a175a693ea01e223 (patch) | |
| tree | 540515228be0f5a0d982f682c50130de6933a0e5 /src/dns.cpp | |
| parent | 8cfb3571160f52be1400e4bbf4d20734d211d8aa (diff) | |
TSG-17148: DNS解析层处理异常数据包时存在内存泄漏v2.1.7
Diffstat (limited to 'src/dns.cpp')
| -rw-r--r-- | src/dns.cpp | 64 |
1 files changed, 32 insertions, 32 deletions
diff --git a/src/dns.cpp b/src/dns.cpp index da556ec..cf8c6d8 100644 --- a/src/dns.cpp +++ b/src/dns.cpp @@ -1,21 +1,21 @@ /* *Author ljp - *V1.01 2015-01-05 ��ͷ�ļ����������µ�stream.h - *V1.02 2015-01-16 ��dns_compress_domain����whileѭ����������\0��Ϊ\n - * ���Ӷ�TCP DNS��ѯ��֧�� + *V1.01 2015-01-05 ��ͷ�ļ����������µ�stream.h + *V1.02 2015-01-16 ��dns_compress_domain����whileѭ����������\0��Ϊ\n + * ���Ӷ�TCP DNS��ѯ��֧�� *V1.03 2015-01-26 cheat pkt TTL set 0.5->1hour - *V1.04 2015-02-05 ��DNS�������ݰ�BUG - *V1.05 2015-02-12 build_dns_payload�����Ӷ�AAAA����Ӧ���֧�� - *V1.06 2015-03-05 ������TCP DNSʱparse_dns��msg��ֵСBUG - *V1.07 2015-03-16 ��A/AAAAӦ���������ϢBUG - *V1.08 2015-05-07 ��au/adӦ���������ϢBUG - *V1.09 2015-07-15 ��qtype��qclass��������δת������������� + *V1.04 2015-02-05 ��DNS�������ݰ�BUG + *V1.05 2015-02-12 build_dns_payload�����Ӷ�AAAA����Ӧ���֧�� + *V1.06 2015-03-05 ������TCP DNSʱparse_dns��msg��ֵСBUG + *V1.07 2015-03-16 ��A/AAAAӦ���������ϢBUG + *V1.08 2015-05-07 ��au/adӦ���������ϢBUG + *V1.09 2015-07-15 ��qtype��qclass��������δת������������� -------------------------------------------------------------------------- - *2015-09-07, LiJia, ��ע���ȡflag_id BUG. - *2015-09-29, LiJia, ��TCPЭ��, û�����������ֶ�BUG. - *2015-10-10, LiJia, ��FLAG_CHANGE()����û��copy�ַ������EOF��BUG. - *2016-09-03, liuxueli, �Ĵ����ʽ + *2015-09-07, LiJia, ��ע���ȡflag_id BUG. + *2015-09-29, LiJia, ��TCPЭ��, û�����������ֶ�BUG. + *2015-10-10, LiJia, ��FLAG_CHANGE()����û��copy�ַ������EOF��BUG. + *2016-09-03, liuxueli, �Ĵ����ʽ */ #include <stdio.h> #include <string.h> @@ -899,7 +899,7 @@ int set_cheat_pkt_question(unsigned char *payload, int payload_len, dns_query_qu int compress_len = 0, used_len = 0; u_char compress_name[DNS_MAX_NAME+1]; - /* ֻ����һ������ */ + /* ֻ����һ������ */ memset(compress_name, 0, sizeof(compress_name)); compress_len = dns_compress_rr_str(query->qname,strlen((char *)(query->qname)), compress_name); @@ -1947,7 +1947,21 @@ int parse_dns_protocol(struct streaminfo *a_stream, unsigned char opstate, char cur_pos = payload + sizeof(dns_hdr_t); if(dns_register_flag&DNS_ALL) - { + { + int ret = parse_query_question(a_stream, &dns_info, payload, payload_len, &cur_pos); + if(ret == APP_STATE_DROPME) + { + FS_operate(g_dns_proto_info.stat_handle, g_dns_proto_info.fild_id[ERR_PKT], 0, FS_OP_ADD, 1); + return APP_STATE_GIVEME; + } + + ret = parse_resource_record(a_stream, &dns_info, payload, payload_len, &cur_pos, DNS_RR_TYPE_ALL); + if(ret == APP_STATE_DROPME) + { + FS_operate(g_dns_proto_info.stat_handle, g_dns_proto_info.fild_id[ERR_PKT], 0, FS_OP_ADD, 1); + return APP_STATE_GIVEME; + } + int message_id=0; if(dns_info.hdr_info.qr==0) { @@ -1976,20 +1990,6 @@ int parse_dns_protocol(struct streaminfo *a_stream, unsigned char opstate, char dir_state=DNS_DIR_RESPONSE; } } - - int ret = parse_query_question(a_stream, &dns_info, payload, payload_len, &cur_pos); - if(ret == APP_STATE_DROPME) - { - FS_operate(g_dns_proto_info.stat_handle, g_dns_proto_info.fild_id[ERR_PKT], 0, FS_OP_ADD, 1); - return APP_STATE_GIVEME; - } - - ret = parse_resource_record(a_stream, &dns_info, payload, payload_len, &cur_pos, DNS_RR_TYPE_ALL); - if(ret == APP_STATE_DROPME) - { - FS_operate(g_dns_proto_info.stat_handle, g_dns_proto_info.fild_id[ERR_PKT], 0, FS_OP_ADD, 1); - return APP_STATE_GIVEME; - } state=callback_dns_business_plug(a_stream, one_session, (void *)&dns_info, DNS_ALL, session_state, thread_seq, a_packet); dns_session_management(a_stream, context, one_session, dns_info.hdr_info.id, dir_state, a_packet); @@ -2104,7 +2104,7 @@ char DNS_TCP_ENTRY(struct streaminfo *a_tcp, void **pme, int thread_seq, void *a switch(a_tcp->opstate) { - case OP_STATE_PENDING: /* ��δ������������Ϣ */ + case OP_STATE_PENDING: /* ��δ������������Ϣ */ if(*pme == NULL) { *pme = dictator_malloc(thread_seq, sizeof(struct dns_context)); @@ -2229,7 +2229,7 @@ int DNS_INIT() /**************************************************************************** ??????:DNS_DESTRORY() -?????DNS???��??????????????????? +?????DNS???��??????????????????? ?????? ??????? *****************************************************************************/ @@ -2303,7 +2303,7 @@ long long FLAG_CHANGE(char* raw_flag_str) return dns_portflag; } -//TODO����δʵ�� +//TODO����δʵ�� void FLAG_PROT_FUNSTAT (long long protflag) { return ; |
