[MERGED] openbsc[master]: filter/nat: Fix the context for the imsi assignment

Submitted by gerrit-no-reply@lists.osmocom.org on May 25, 2016, 7:43 p.m.


Message ID 20160525194340.07A661329B@lists.osmocom.org
State New
Series "openbsc[master]: filter/nat: Fix the context for the imsi assignment"
Headers show

Commit Message

gerrit-no-reply@lists.osmocom.org May 25, 2016, 7:43 p.m.
Holger Freyther has submitted this change and it was merged.

Change subject: filter/nat: Fix the context for the imsi assignment

filter/nat: Fix the context for the imsi assignment

In c09f8a3b7fb94ccef41e33c32bfe2bff1ffe0e44 as part of a cleanup
I accidently changed the talloc context from "con" to "bsc". The
issue occurred at an earlier commit when assigning req.ctx to the
"wrong" context. The allocation needs to be scoped by the struct
nat_sccp_connection and not the connection from BSC to NAT.

Before we have a nat_sccp_connection we scope the copied imsi to
the bsc_connection and then steal it, but for the identity resp
we will always have a nat_sccp_connection and can already use the
right context.

Change-Id: I53789aad2809e19338ad3b2deb72c4757e7bd524
Related: OS#1733
Reviewed-on: https://gerrit.osmocom.org/102
Tested-by: Jenkins Builder
Reviewed-by: Harald Welte <laforge@gnumonks.org>
Reviewed-by: daniel <dwillmann@sysmocom.de>
Reviewed-by: Holger Freyther <holger@freyther.de>
M openbsc/src/osmo-bsc_nat/bsc_nat_filter.c
M openbsc/tests/bsc-nat/bsc_nat_test.c
2 files changed, 4 insertions(+), 1 deletion(-)

  daniel: Looks good to me, but someone else must approve
  Harald Welte: Looks good to me, but someone else must approve
  Jenkins Builder: Verified
  Holger Freyther: Looks good to me, approved

Patch hide | download patch | download mbox

diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_filter.c b/openbsc/src/osmo-bsc_nat/bsc_nat_filter.c
index 393aea3..e735290 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat_filter.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat_filter.c
@@ -109,7 +109,7 @@ 
 	if (!hdr48)
 		return -1;
-	req.ctx = bsc;
+	req.ctx = con;
 	req.black_list = &bsc->nat->imsi_black_list;
 	req.access_lists = &bsc->nat->access_lists;
 	req.local_lst_name = bsc->cfg->acc_lst_name;
diff --git a/openbsc/tests/bsc-nat/bsc_nat_test.c b/openbsc/tests/bsc-nat/bsc_nat_test.c
index a405763..b531c6b 100644
--- a/openbsc/tests/bsc-nat/bsc_nat_test.c
+++ b/openbsc/tests/bsc-nat/bsc_nat_test.c
@@ -978,10 +978,13 @@ 
 	memset(&cause, 0, sizeof(cause));
+	OSMO_ASSERT(!con->filter_state.imsi);
 	if (bsc_nat_filter_dt(bsc, msg, con, parsed, &cause) != 1) {
 		printf("FAIL: Should have passed..\n");
+	OSMO_ASSERT(con->filter_state.imsi);
+	OSMO_ASSERT(talloc_parent(con->filter_state.imsi) == con);
 	/* just some basic length checking... */
 	for (i = ARRAY_SIZE(id_resp); i >= 0; --i) {