diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-04-09 18:44:26 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-04-10 11:48:35 +0200 |
commit | 440771f18a2891d651eb2220b8f879bd1318e601 (patch) | |
tree | 9621198e577ff22016a402a7a3268b82b5a22623 /src/xua_asp_fsm.c | |
parent | 312fd7e4b90d9857415b8892323b0568c49c6e47 (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.c | 9 |
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 */ |