summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/fsm.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/fsm.c b/src/fsm.c
index d62fd792..3f8de9cd 100644
--- a/src/fsm.c
+++ b/src/fsm.c
@@ -146,6 +146,10 @@ struct osmo_fsm_inst *osmo_fsm_inst_find_by_id(const struct osmo_fsm *fsm,
*/
int osmo_fsm_register(struct osmo_fsm *fsm)
{
+ if (!osmo_identifier_valid(fsm->name)) {
+ LOGP(DLGLOBAL, LOGL_ERROR, "Attempting to register FSM with illegal identifier '%s'\n", fsm->name);
+ return -EINVAL;
+ }
if (osmo_fsm_find_by_name(fsm->name))
return -EEXIST;
llist_add_tail(&fsm->list, &osmo_g_fsms);
@@ -206,8 +210,15 @@ struct osmo_fsm_inst *osmo_fsm_inst_alloc(struct osmo_fsm *fsm, void *ctx, void
fi->priv = priv;
fi->log_level = log_level;
osmo_timer_setup(&fi->timer, fsm_tmr_cb, fi);
- if (id)
+ if (id) {
+ if (!osmo_identifier_valid(id)) {
+ LOGP(DLGLOBAL, LOGL_ERROR, "Attempting to allocate FSM instance of type '%s'"
+ " with illegal identifier '%s'\n", fsm->name, id);
+ talloc_free(fi);
+ return NULL;
+ }
fi->id = talloc_strdup(fi, id);
+ }
if (!fsm_log_addr) {
if (id)