gprs_gmm: Check for RAT change and ensure this only happens for RAU/ATT
Change-Id: I38cb31907eddeade5350cdb648df179408d908d2 Related: OS#3727
This commit is contained in:
parent
394aa533e9
commit
d999e54aa2
|
@ -1099,6 +1099,16 @@ static inline void ptmsi_update(struct sgsn_mm_ctx *ctx)
|
||||||
osmo_fsm_inst_dispatch(ctx->gmm_fsm, E_GMM_COMMON_PROC_INIT_REQ, NULL);
|
osmo_fsm_inst_dispatch(ctx->gmm_fsm, E_GMM_COMMON_PROC_INIT_REQ, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Detect if RAT has changed */
|
||||||
|
static bool mmctx_did_rat_change(struct sgsn_mm_ctx *mmctx, struct msgb *msg)
|
||||||
|
{
|
||||||
|
if (MSG_IU_UE_CTX(msg) && mmctx->ran_type != MM_CTX_T_UTRAN_Iu)
|
||||||
|
return true;
|
||||||
|
if (!MSG_IU_UE_CTX(msg) && mmctx->ran_type != MM_CTX_T_GERAN_Gb)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* 3GPP TS 24.008 § 9.4.1 Attach request */
|
/* 3GPP TS 24.008 § 9.4.1 Attach request */
|
||||||
static int gsm48_rx_gmm_att_req(struct sgsn_mm_ctx *ctx, struct msgb *msg,
|
static int gsm48_rx_gmm_att_req(struct sgsn_mm_ctx *ctx, struct msgb *msg,
|
||||||
struct gprs_llc_llme *llme)
|
struct gprs_llc_llme *llme)
|
||||||
|
@ -1944,6 +1954,23 @@ int gsm0408_rcv_gmm(struct sgsn_mm_ctx *mmctx, struct msgb *msg,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* A RAT change is only expected/allowed for RAU/Attach Req */
|
||||||
|
if (mmctx && mmctx_did_rat_change(mmctx, msg)) {
|
||||||
|
switch (gh->msg_type) {
|
||||||
|
case GSM48_MT_GMM_RA_UPD_REQ:
|
||||||
|
case GSM48_MT_GMM_ATTACH_REQ:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
/* This shouldn't happen with other message types and
|
||||||
|
* we need to error out to prevent a crash */
|
||||||
|
LOGMMCTXP(LOGL_NOTICE, mmctx, "Dropping GMM %s which was received on different "
|
||||||
|
"RAT (mmctx ran_type=%u, msg_iu_ue_ctx=%p\n",
|
||||||
|
get_value_string(gprs_msgt_gmm_names, gh->msg_type),
|
||||||
|
mmctx->ran_type, MSG_IU_UE_CTX(msg));
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For a few messages, mmctx may be NULL. For most, we want to ensure a
|
* For a few messages, mmctx may be NULL. For most, we want to ensure a
|
||||||
* non-NULL mmctx. At the same time, we want to keep the message
|
* non-NULL mmctx. At the same time, we want to keep the message
|
||||||
|
|
Loading…
Reference in New Issue