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:
parent
ce49258a12
commit
3521af7f3a
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue