From 0c41b6933efc3dcc57bb8cd0151640306abd95ce Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Wed, 6 Oct 2010 00:48:36 +0800 Subject: [PATCH] nat: Possible crash fix, only filter non local connections For local connections con_msc is not set and sending a RLSD to the network would have ended up in a segfault. --- openbsc/src/nat/bsc_nat.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/openbsc/src/nat/bsc_nat.c b/openbsc/src/nat/bsc_nat.c index 2aa2d7369..48407b9a8 100644 --- a/openbsc/src/nat/bsc_nat.c +++ b/openbsc/src/nat/bsc_nat.c @@ -839,17 +839,20 @@ static int forward_sccp_to_msc(struct bsc_connection *bsc, struct msgb *msg) case SCCP_MSG_TYPE_IT: con = patch_sccp_src_ref_to_msc(msg, parsed, bsc); if (con) { - filter = bsc_nat_filter_dt(bsc, msg, con, parsed); - if (filter < 0) { - bsc_stat_reject(filter, bsc, 1); - bsc_send_con_release(bsc, con); - con = NULL; - goto exit2; - } else { - con_bsc = con->bsc; - con_msc = con->msc_con; - con_filter = con->con_local; + /* only filter non local connections */ + if (!con->con_local) { + filter = bsc_nat_filter_dt(bsc, msg, con, parsed); + if (filter < 0) { + bsc_stat_reject(filter, bsc, 1); + bsc_send_con_release(bsc, con); + con = NULL; + goto exit2; + } } + + con_bsc = con->bsc; + con_msc = con->msc_con; + con_filter = con->con_local; } break; case SCCP_MSG_TYPE_RLC: