Skip to content

Commit

Permalink
tracer: avoid crash in case bind_address is not present
Browse files Browse the repository at this point in the history
Introduced in a13e034

(cherry picked from commit b7f471f)
  • Loading branch information
razvancrainea committed Apr 15, 2024
1 parent 9a08528 commit f4921e3
Showing 1 changed file with 14 additions and 6 deletions.
20 changes: 14 additions & 6 deletions modules/tracer/tracer.c
Original file line number Diff line number Diff line change
Expand Up @@ -2096,6 +2096,14 @@ do { \
_col_port.val.int_val = trace_local_port; \
} while (0)

#define TRACE_GET_DST_IP(_msg) \
(((_msg)->rcv.bind_address && (_msg)->rcv.bind_address->adv_sock_str.len)? \
(struct ip_addr *)&(_msg)->rcv.bind_address->adv_address:&(_msg)->rcv.dst_ip)
#define TRACE_GET_DST_PORT(_msg) \
(((_msg)->rcv.bind_address && (_msg)->rcv.bind_address->adv_sock_str.len)? \
(_msg)->rcv.bind_address->adv_port:(_msg)->rcv.dst_port)




static int sip_trace(struct sip_msg *msg, trace_info_p info, int leg_flag)
Expand Down Expand Up @@ -2151,7 +2159,7 @@ static int sip_trace(struct sip_msg *msg, trace_info_p info, int leg_flag)
&msg->rcv.src_ip, msg->rcv.src_port, msg->rcv.proto);

set_sock_columns( db_vals[7], db_vals[8], db_vals[9], toip_buff,
msg->rcv.bind_address->adv_sock_str.len?(struct ip_addr *)&msg->rcv.bind_address->adv_address:&msg->rcv.dst_ip, msg->rcv.bind_address->adv_sock_str.len?msg->rcv.bind_address->adv_port:msg->rcv.dst_port, msg->rcv.proto);
TRACE_GET_DST_IP(msg), TRACE_GET_DST_PORT(msg), msg->rcv.proto);

db_vals[10].val.time_val = time(NULL);

Expand Down Expand Up @@ -2238,7 +2246,7 @@ static int sip_trace_instance(struct sip_msg* msg,
&msg->rcv.src_ip, msg->rcv.src_port, msg->rcv.proto);

set_sock_columns( db_vals[7], db_vals[8], db_vals[9], toip_buff,
msg->rcv.bind_address->adv_sock_str.len?(struct ip_addr *)&msg->rcv.bind_address->adv_address:&msg->rcv.dst_ip, msg->rcv.bind_address->adv_sock_str.len?msg->rcv.bind_address->adv_port:msg->rcv.dst_port, msg->rcv.proto);
TRACE_GET_DST_IP(msg), TRACE_GET_DST_PORT(msg), msg->rcv.proto);

db_vals[10].val.time_val = time(NULL);

Expand Down Expand Up @@ -2367,7 +2375,7 @@ static void trace_slreply_out(struct sip_msg* req, str *buffer,int rpl_code,
set_columns_to_trace_local_ip( db_vals[4], db_vals[5], db_vals[6]);
} else {
set_sock_columns( db_vals[4], db_vals[5], db_vals[6], fromip_buff,
req->rcv.bind_address->adv_sock_str.len?(struct ip_addr *)&req->rcv.bind_address->adv_address:&req->rcv.dst_ip, req->rcv.bind_address->adv_sock_str.len?req->rcv.bind_address->adv_port:req->rcv.dst_port, req->rcv.proto);
TRACE_GET_DST_IP(req), TRACE_GET_DST_PORT(req), req->rcv.proto);
}

char * str_code = int2str(rpl_code, &len);
Expand Down Expand Up @@ -2514,7 +2522,7 @@ static void trace_msg_out(struct sip_msg* msg, str *sbuf,
if(send_sock==0 || send_sock->sock_str.s==0)
{
set_sock_columns( db_vals[4], db_vals[5], db_vals[6], fromip_buff,
msg->rcv.bind_address->adv_sock_str.len?(struct ip_addr *)&msg->rcv.bind_address->adv_address:&msg->rcv.dst_ip, msg->rcv.bind_address->adv_sock_str.len?msg->rcv.bind_address->adv_port:msg->rcv.dst_port, msg->rcv.proto);
TRACE_GET_DST_IP(msg), TRACE_GET_DST_PORT(msg), msg->rcv.proto);
} else {
char *nbuff = proto2str(send_sock->proto,fromip_buff);
db_vals[4].val.str_val.s = fromip_buff;
Expand Down Expand Up @@ -2644,7 +2652,7 @@ static void trace_onreply_in(struct cell* t, int type, struct tmcb_params *ps,
}
else {
set_sock_columns( db_vals[7], db_vals[8], db_vals[9], toip_buff,
msg->rcv.bind_address->adv_sock_str.len?(struct ip_addr *)&msg->rcv.bind_address->adv_address:&msg->rcv.dst_ip, msg->rcv.bind_address->adv_sock_str.len?msg->rcv.bind_address->adv_port:msg->rcv.dst_port, msg->rcv.proto);
TRACE_GET_DST_IP(msg), TRACE_GET_DST_PORT(msg), msg->rcv.proto);
}

db_vals[10].val.time_val = time(NULL);
Expand Down Expand Up @@ -2802,7 +2810,7 @@ static void trace_onreply_out(struct cell* t, int type, struct tmcb_params *ps,
if(dst==NULL || dst->send_sock==0 || dst->send_sock->sock_str.s==0)
{
set_sock_columns( db_vals[4], db_vals[5], db_vals[6], fromip_buff,
msg->rcv.bind_address->adv_sock_str.len?(struct ip_addr *)&msg->rcv.bind_address->adv_address:&msg->rcv.dst_ip, msg->rcv.bind_address->adv_sock_str.len?msg->rcv.bind_address->adv_port:msg->rcv.dst_port, msg->rcv.proto);
TRACE_GET_DST_IP(msg), TRACE_GET_DST_PORT(msg), msg->rcv.proto);
} else {
char *nbuff = proto2str(dst->send_sock->proto,fromip_buff);
db_vals[4].val.str_val.s = fromip_buff;
Expand Down

0 comments on commit f4921e3

Please sign in to comment.