当sapp先淘汰时,pmeinfo中引用了已经无效的streaminfo,导致段错误。修复cmsg未释放干净的bug。修复cmsg double free的bug。
This commit is contained in:
@@ -54,7 +54,13 @@ struct pme_info{
|
||||
int tfe_release;
|
||||
int sapp_release;
|
||||
//kafka log
|
||||
struct streaminfo *stream;
|
||||
struct layer_addr *addr;
|
||||
unsigned char dir;
|
||||
uint64_t server_bytes;
|
||||
uint64_t client_bytes;
|
||||
uint64_t server_pkts;
|
||||
uint64_t client_pkts;
|
||||
|
||||
time_t start_time;
|
||||
time_t end_time;
|
||||
uint64_t con_duration_ms;
|
||||
@@ -143,7 +149,7 @@ static struct pme_info* pme_info_new(const struct streaminfo *stream, int thread
|
||||
uuid_t uu;
|
||||
uuid_generate_random(uu);
|
||||
uuid_unparse(uu, pmeinfo->stream_trace_id);
|
||||
pmeinfo->stream = (struct streaminfo*)stream;
|
||||
pmeinfo->addr = layer_addr_dup(&(stream->addr));
|
||||
pmeinfo->start_time = time(NULL);
|
||||
pmeinfo->logger = logger;
|
||||
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_TOT_STM], 0, FS_OP_ADD, 1);
|
||||
@@ -168,7 +174,7 @@ static int sendlog_to_kafka(struct pme_info *pmeinfo, void *local_logger){
|
||||
//con_duration_ms
|
||||
cJSON_AddNumberToObject(log_obj, "con_duration_ms", (pmeinfo->end_time - pmeinfo->start_time) * 1000);
|
||||
//stream_info: addr_type, trans_proto, client_ip, client_port, server_ip, server_port
|
||||
const struct layer_addr *addr = &(pmeinfo->stream->addr);
|
||||
const struct layer_addr *addr = pmeinfo->addr;
|
||||
char client_ip_str[INET6_ADDRSTRLEN] = "";
|
||||
char server_ip_str[INET6_ADDRSTRLEN] = "";
|
||||
switch(addr->addrtype){
|
||||
@@ -224,7 +230,7 @@ static int sendlog_to_kafka(struct pme_info *pmeinfo, void *local_logger){
|
||||
//direction: 0
|
||||
cJSON_AddNumberToObject(log_obj, "direction", 0);
|
||||
//stream_dir: from sapp
|
||||
cJSON_AddNumberToObject(log_obj, "stream_dir", pmeinfo->stream->dir);
|
||||
cJSON_AddNumberToObject(log_obj, "stream_dir", pmeinfo->dir);
|
||||
//cap_ip: kni ip
|
||||
char local_ipv4_str[INET6_ADDRSTRLEN];
|
||||
inet_ntop(AF_INET, &(g_kni_handle->local_ipv4), local_ipv4_str, sizeof(local_ipv4_str));
|
||||
@@ -236,13 +242,13 @@ static int sendlog_to_kafka(struct pme_info *pmeinfo, void *local_logger){
|
||||
//sni: ssl only
|
||||
cJSON_AddStringToObject(log_obj, "sni", pmeinfo->sni);
|
||||
//c2s_pkt_num
|
||||
cJSON_AddNumberToObject(log_obj, "c2s_pkt_num", pmeinfo->stream->ptcpdetail->serverpktnum);
|
||||
cJSON_AddNumberToObject(log_obj, "c2s_pkt_num", pmeinfo->server_pkts);
|
||||
//s2c_pkt_num
|
||||
cJSON_AddNumberToObject(log_obj, "s2c_pkt_num", pmeinfo->stream->ptcpdetail->clientpktnum);
|
||||
cJSON_AddNumberToObject(log_obj, "s2c_pkt_num", pmeinfo->client_pkts);
|
||||
//c2s_byte_num
|
||||
cJSON_AddNumberToObject(log_obj, "c2s_byte_num", pmeinfo->stream->ptcpdetail->serverbytes);
|
||||
cJSON_AddNumberToObject(log_obj, "c2s_byte_num", pmeinfo->server_bytes);
|
||||
//s2c_byte_num
|
||||
cJSON_AddNumberToObject(log_obj, "s2c_byte_num", pmeinfo->stream->ptcpdetail->clientbytes);
|
||||
cJSON_AddNumberToObject(log_obj, "s2c_byte_num", pmeinfo->client_bytes);
|
||||
int ret = -1;
|
||||
char *log_msg = cJSON_PrintUnformatted(log_obj);
|
||||
cJSON_Delete(log_obj);
|
||||
@@ -284,6 +290,8 @@ static void pme_info_destroy(struct pme_info *pmeinfo){
|
||||
if(pmeinfo->server_tcpopt != NULL){
|
||||
FREE(&(pmeinfo->server_tcpopt));
|
||||
}
|
||||
layer_addr_free(pmeinfo->addr);
|
||||
pmeinfo->addr=NULL;
|
||||
FREE(&pmeinfo);
|
||||
}
|
||||
/* TODO: segment fault
|
||||
@@ -631,6 +639,11 @@ static char close_opstate(const struct streaminfo *stream, struct pme_info *pmei
|
||||
kni_stream_addr_trans((struct ipaddr*)(&stream->addr), stream_addr, sizeof(stream_addr));
|
||||
int len = pktinfo->ip_totlen;
|
||||
int ret;
|
||||
pmeinfo->server_bytes=stream->ptcpdetail->serverbytes;
|
||||
pmeinfo->client_bytes=stream->ptcpdetail->clientbytes;
|
||||
pmeinfo->server_pkts=stream->ptcpdetail->serverpktnum;
|
||||
pmeinfo->client_pkts=stream->ptcpdetail->clientpktnum;
|
||||
pmeinfo->dir=stream->dir;
|
||||
switch(pmeinfo->action){
|
||||
case KNI_ACTION_INTERCEPT:
|
||||
ret = send_to_tfe(g_kni_handle->marsio_handle, buf, len, thread_seq, pmeinfo->tfe_id);
|
||||
@@ -855,7 +868,6 @@ static long traceid2pme_htable_search_cb(void *data, const uchar *key, uint size
|
||||
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_PINNING_STATE, sizeof(pmeinfo->pinningst), logger);
|
||||
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_CERT_VERIFY, sizeof(pmeinfo->ssl_cert_verify), logger);
|
||||
wrapped_kni_cmsg_get(pmeinfo, cmsg, TFE_CMSG_SSL_ERROR, sizeof(pmeinfo->ssl_error), logger);
|
||||
FREE(&cmsg);
|
||||
pmeinfo->tfe_release = 1;
|
||||
pmeinfo->end_time = time(NULL);
|
||||
int key_size = strnlen(pmeinfo->stream_trace_id, sizeof(pmeinfo->stream_trace_id));
|
||||
@@ -870,7 +882,7 @@ static long traceid2pme_htable_search_cb(void *data, const uchar *key, uint size
|
||||
"traceid2pme_htable", pmeinfo->stream_trace_id, key_size);
|
||||
}
|
||||
}
|
||||
FREE(&cmsg);
|
||||
kni_cmsg_destroy(cmsg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user