aboutsummaryrefslogtreecommitdiffstats
path: root/src/xua_asp_fsm.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2017-04-09 18:44:26 +0200
committerHarald Welte <laforge@gnumonks.org>2017-04-10 11:48:35 +0200
commit440771f18a2891d651eb2220b8f879bd1318e601 (patch)
tree9621198e577ff22016a402a7a3268b82b5a22623 /src/xua_asp_fsm.c
parent312fd7e4b90d9857415b8892323b0568c49c6e47 (diff)
M3UA: Properly reject invalid/unknown routing context
This was discovered (and fix validated) using m3ua-sgp-asptm-i-005 of Michael Tuexne's m3ua-testtool. Change-Id: I217ae287e22371e36dda0f87a7737b62fb1bf2d6
Diffstat (limited to 'src/xua_asp_fsm.c')
-rw-r--r--src/xua_asp_fsm.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/xua_asp_fsm.c b/src/xua_asp_fsm.c
index 9c4a8ca..2830334 100644
--- a/src/xua_asp_fsm.c
+++ b/src/xua_asp_fsm.c
@@ -392,6 +392,8 @@ static void xua_asp_fsm_down_onenter(struct osmo_fsm_inst *fi, uint32_t prev_sta
static void xua_asp_fsm_inactive(struct osmo_fsm_inst *fi, uint32_t event, void *data)
{
+ struct xua_asp_fsm_priv *xafp = fi->priv;
+ struct osmo_ss7_asp *asp = xafp->asp;
struct xua_msg *xua_in;
uint32_t traf_mode;
@@ -434,6 +436,13 @@ static void xua_asp_fsm_inactive(struct osmo_fsm_inst *fi, uint32_t event, void
break;
}
}
+ if (xua_msg_find_tag(xua_in, M3UA_IEI_ROUTE_CTX)) {
+ uint32_t rctx = xua_msg_get_u32(xua_in, M3UA_IEI_ROUTE_CTX);
+ if (!osmo_ss7_as_find_by_rctx(asp->inst, rctx)) {
+ peer_send_error(fi, M3UA_ERR_INVAL_ROUT_CTX);
+ break;
+ }
+ }
/* send ACK */
peer_send(fi, XUA_ASP_E_ASPTM_ASPAC_ACK, NULL);
/* transition state and inform layer manager */