abis_om2k: protect MO FSMs by NULL check

Also set MO FSMs to NULL after freeing them.

Change-Id: I30df0b9ab8bc47ba9756c8388e977deed0e40200
This commit is contained in:
Alexander Couzens 2016-11-02 02:41:41 +01:00
parent ce49258a12
commit 3521af7f3a
1 changed files with 17 additions and 1 deletions

View File

@ -1697,9 +1697,19 @@ static void om2k_mo_st_wait_opinfo_accept(struct osmo_fsm_inst *fi, uint32_t eve
static void om2k_mo_s_done_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
{
struct om2k_mo_fsm_priv *omfp = fi->priv;
omfp->mo->fsm = NULL;
osmo_fsm_inst_term(fi, OSMO_FSM_TERM_REGULAR, NULL);
}
static void om2k_mo_s_error_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
{
struct om2k_mo_fsm_priv *omfp = fi->priv;
omfp->mo->fsm = NULL;
osmo_fsm_inst_term(fi, OSMO_FSM_TERM_ERROR, NULL);
}
static const struct osmo_fsm_state om2k_is_states[] = {
[OM2K_ST_INIT] = {
.name = "INIT",
@ -1794,7 +1804,7 @@ static const struct osmo_fsm_state om2k_is_states[] = {
.name = "ERROR",
.in_event_mask = 0,
.out_state_mask = 0,
.onenter = om2k_mo_s_done_onenter,
.onenter = om2k_mo_s_error_onenter,
},
};
@ -2697,6 +2707,12 @@ int abis_om2k_rcvmsg(struct msgb *msg)
msgb_hexdump(msg));
return 0;
}
if (!mo->fsm) {
LOGP(DNM, LOGL_ERROR, "MO object should not generate any message. fsm == NULL "
"%s: %s\n", get_value_string(om2k_msgcode_vals, msg_type),
msgb_hexdump(msg));
return 0;
}
/* Dispatch message to that MO */
om2k_mo_fsm_recvmsg(bts, mo, &odm);