fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/42587?usp=email )
Change subject: ipaccess: fix buffer overread in ipacc_parse_supp_flags()
......................................................................
ipaccess: fix buffer overread in ipacc_parse_supp_flags()
The loop used OSMO_MAX(e->len, 4), which iterates at least 4 times
even when the IE is shorter than 4 bytes, causing a buffer overread.
Replace with OSMO_MIN(e->len, sizeof(u32)) to cap the iteration both
at the actual IE length and at the uint32_t accumulator size.
Change-Id: I97c69a71eb650cbef1cc3652d0a2a966cfd6cf60
---
M src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
1 file changed, 1 insertion(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/87/42587/1
diff --git a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
index 23196fc..a197a79 100644
--- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
+++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c
@@ -47,7 +47,7 @@
{
uint32_t u32 = 0;
- for (unsigned int i = 0; i < OSMO_MAX(e->len, 4); i++)
+ for (unsigned int i = 0; i < OSMO_MIN(e->len, sizeof(u32)); i++)
u32 |= e->val[i] << (i * 8);
for (const struct value_string *vs = flags; vs->value && vs->str; vs++) {
if (u32 & vs->value)
--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/42587?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I97c69a71eb650cbef1cc3652d0a2a966cfd6cf60
Gerrit-Change-Number: 42587
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42582?usp=email )
Change subject: bsc: verify Cell ID in BSSMAP HandoverPerformed
......................................................................
bsc: verify Cell ID in BSSMAP HandoverPerformed
As per 3GPP TS 48.008 §3.2.1.25, HANDOVER PERFORMED must report the
target cell. Add an optional cell_id parameter to the template
(defaulting to '?' for backward compatibility) and update the two
intra-BSC handover test helpers to assert that the Cell Identifier
IE carries the target BTS (BTS 1: MCC=001 MNC=01 LAC=1 CI=1).
Also remove the unnecessary interleave wrapper in
f_tc_ho_during_lcs_loc_req(): the two receives arrive on separate
ports (RAN_CONN vs BSSAP_LE) so sequential receive is sufficient.
Change-Id: I82aadcc3a80c183cb93522b829071294b156a218
Related: osmo-bsc.git I4111351dc38fc2dbe844c2bd07b3ecfaaadd864e
---
M bsc/BSC_Tests.ttcn
M library/BSSMAP_Templates.ttcn
2 files changed, 21 insertions(+), 10 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/82/42582/1
diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index e97ecb0..a4c666e 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -5887,8 +5887,14 @@
}
/* Since this is an internal handover we expect the BSC to inform the
- * MSC about the event */
- RAN_CONN.receive(tr_BSSMAP_HandoverPerformed);
+ * MSC about the event. The Cell Identifier must report the *target* BTS
+ * (BTS 1: MCC=001 MNC=01 LAC=1 CI=1), not the source BTS. */
+ alt {
+ [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed(tr_CellId_CGI('00F110'O, 1, 1)));
+ [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed) {
+ setverdict(fail, "BSSMAP HandoverPerformed indicates unexpected Cell ID");
+ }
+ }
/* Check the amount of MGCP transactions is still consistant with the
* test expectation */
@@ -10855,17 +10861,21 @@
[] as_handover(hs);
}
+ /* Expect the BSC to inform the MSC about the handover. The Cell Identifier
+ * must report the *target* BTS (BTS 1: MCC=001 MNC=01 LAC=1 CI=1). */
+ alt {
+ [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed(tr_CellId_CGI('00F110'O, 1, 1)));
+ [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed) {
+ setverdict(fail, "BSSMAP HandoverPerformed indicates unexpected Cell ID");
+ }
+ }
+
var PDU_BSSAP_LE rx_bsslap;
- interleave {
- /* Expect the BSC to inform the MSC about the handover */
- [] RAN_CONN.receive(tr_BSSMAP_HandoverPerformed);
-
/* Expect the BSC to inform the SMLC about the handover */
- [] BSSAP_LE.receive(tr_BSSMAP_LE_ConnInfo(BSSMAP_LE_PROT_BSSLAP, ?)) -> value(rx_bsslap) {
+ BSSAP_LE.receive(tr_BSSMAP_LE_ConnInfo(BSSMAP_LE_PROT_BSSLAP, ?)) -> value(rx_bsslap) {
f_match_bsslap(rx_bsslap, tr_BSSLAP_Reset(BSSLAP_CAUSE_INTRA_BSS_HO));
}
- }
/* SMLC now responds with geo information data. */
BSSAP_LE.send(ts_BSSMAP_LE_PerfLocResp(gad_ell_point_unc_circle, omit));
diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn
index 563d6d1..deeabda 100644
--- a/library/BSSMAP_Templates.ttcn
+++ b/library/BSSMAP_Templates.ttcn
@@ -1331,14 +1331,15 @@
}
}
-template PDU_BSSAP tr_BSSMAP_HandoverPerformed
+template PDU_BSSAP
+tr_BSSMAP_HandoverPerformed(template (present) BSSMAP_IE_CellIdentifier cell_id := ?)
modifies tr_BSSAP_BSSMAP := {
pdu := {
bssmap := {
handoverPerformed := {
messageType := '17'O,
cause := ?,
- cellIdentifier := ?,
+ cellIdentifier := cell_id,
chosenChannel := *,
chosenEncryptionAlgorithm := *,
speechVersion := *,
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42582?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I82aadcc3a80c183cb93522b829071294b156a218
Gerrit-Change-Number: 42582
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
pespin has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42577?usp=email )
Change subject: msc: ASCI: Fix race condition in TC_assign_fail
......................................................................
msc: ASCI: Fix race condition in TC_assign_fail
The f_sleep(0.5) to delay the registration of the PC for the 2nd SCCP
connection sometimes fired too late and we received the VGCS/VBS
Assignment Request before the channel ConnHdlr was registered in
RAN_Emulation.
Then in turn we need to delay call establishment until the channel is
ready.
Implement proper synchronization points to make sure the order of
registers is accomplished while making sure the 2 ConnHdlrs are
registered before they need it.
Change-Id: Id80982b6b968bbe462aeac2b9be646ab50eace83
---
M msc/MSC_Tests_ASCI.ttcn
1 file changed, 22 insertions(+), 3 deletions(-)
Approvals:
fixeria: Looks good to me, approved
Jenkins Builder: Verified
jolly: Looks good to me, but someone else must approve
diff --git a/msc/MSC_Tests_ASCI.ttcn b/msc/MSC_Tests_ASCI.ttcn
index 135edb1..9abcc28 100644
--- a/msc/MSC_Tests_ASCI.ttcn
+++ b/msc/MSC_Tests_ASCI.ttcn
@@ -76,6 +76,8 @@
const charstring COORD_BCC_TERMINATION_FAIL := "BCC_TERMINATION_FAIL";
const charstring COORD_ASSIGNMENT := "ASSIGNMENT";
const charstring COORD_CLEAR := "CLEAR";
+const charstring N_CONNECT_PC_REGISTERED := "N_CONNECT_PC_REGISTERED"
+const charstring N_CALL_ESTABLISH := "N_CALL_ESTABLISH"
template (value) DescriptiveGroupOrBroadcastCallReference_V
ts_BSSMAP_IE_GroupCallRef(integer cr,
@@ -143,6 +145,9 @@
var default mdcx := activate(as_optional_mgcp_mdcx(cpars.mgw_conn_2.mgw_rtp_ip, cpars.mgw_conn_2.mgw_rtp_port));
var default dlcx := activate(as_optional_mgcp_dlcx(cpars));
+ /* Wait for other components to be prepared for the call: */
+ COORD.receive(N_CALL_ESTABLISH);
+
/* Establish connection using the service type, defined by the test. */
if (test == COORD_TEST_COMPLETE_VBS) {
f_establish_fully(EST_TYPE_VBS);
@@ -255,6 +260,7 @@
f_init_handler(pars);
f_create_bssmap_exp_n_connect(193);
+ COORD.send(N_CONNECT_PC_REGISTERED);
timer T := 7.0;
T.start;
@@ -388,9 +394,12 @@
f_init_handler(pars);
- /* Wait some time before registering, because this has to be the second connection to be registered. */
- f_sleep(0.5);
+ /* Wait for "control" to register first (VGCS/VBS Setup), because this has to be the second connection to be
+ * registered (VGCS/VBS Assignment Request). */
+ COORD.receive(N_CONNECT_PC_REGISTERED);
f_create_bssmap_exp_n_connect(193);
+ /* informwe applied the expect and we are ready: */
+ COORD.send(N_CONNECT_PC_REGISTERED);
timer T := 7.0;
T.start;
@@ -464,9 +473,19 @@
connect(self:COORD_control, vc_conn_control:COORD);
connect(self:COORD_channel, vc_conn_channel:COORD);
+ COORD_channel.send(test);
COORD_call.send(test);
COORD_control.send(test);
- COORD_channel.send(test);
+
+ /* We need to make sure control resgisters first to receive the first SCCP connection (VGCS/VBS Setup)
+ * and channel later to receive the follow-up (VGCS/VBS Assignment Request) */
+ COORD_control.receive(N_CONNECT_PC_REGISTERED);
+ COORD_channel.send(N_CONNECT_PC_REGISTERED);
+ /* channel confirms it is also applied on its side: */
+ COORD_channel.receive(N_CONNECT_PC_REGISTERED);
+
+ /* Inform we we can start the call: */
+ COORD_call.send(N_CALL_ESTABLISH);
/* Receive the test events until all three connections are released or not established. */
timer T := 7.0, Texit := 0.5;
--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/42577?usp=email
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Id80982b6b968bbe462aeac2b9be646ab50eace83
Gerrit-Change-Number: 42577
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: jolly <andreas(a)eversberg.eu>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>