lynxis lazus has uploaded this change for review.

View Change

libvlr: lu_fsm: split off creation and start of the LU FSM

Similar to the auth_fsm, ensure the lu_fsm don't run into a
use-after-free when the starting event of VLR_AUTH_E_START
result in a terminating.

Change-Id: Iafce776bf1755951e525b6f7f2ef929dd31c7c9d
---
M include/osmocom/vlr/vlr.h
M src/libmsc/gsm_04_08.c
M src/libvlr/vlr_lu_fsm.c
3 files changed, 21 insertions(+), 4 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/11/43511/1
diff --git a/include/osmocom/vlr/vlr.h b/include/osmocom/vlr/vlr.h
index 12b7c6d..d64202b 100644
--- a/include/osmocom/vlr/vlr.h
+++ b/include/osmocom/vlr/vlr.h
@@ -312,6 +312,8 @@
bool is_r99, bool is_utran,
bool assign_tmsi);

+int vlr_loc_start(struct osmo_fsm_inst *fi);
+
struct osmo_fsm_inst *
vlr_ra_update(struct osmo_fsm_inst *parent,
uint32_t parent_event_success,
@@ -328,6 +330,8 @@
bool is_r99, bool is_utran,
bool assign_tmsi);

+int vlr_ra_start(struct osmo_fsm_inst *fi);
+
void vlr_loc_update_cancel(struct osmo_fsm_inst *fi,
enum osmo_fsm_term_cause fsm_cause,
uint8_t gsm48_cause);
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index 7a63220..4692ab9 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -419,6 +419,7 @@
osmo_gsm48_classmark1_is_r99(&lu->classmark1),
is_utran,
net->vlr->cfg.assign_tmsi);
+ vlr_loc_start(lu_fsm);
if (!lu_fsm) {
LOG_MSC_A(msc_a, LOGL_ERROR, "Can't start LU FSM\n");
msc_a_put(msc_a, MSC_A_USE_LOCATION_UPDATING);
diff --git a/src/libvlr/vlr_lu_fsm.c b/src/libvlr/vlr_lu_fsm.c
index c8b2698..8fc54f8 100644
--- a/src/libvlr/vlr_lu_fsm.c
+++ b/src/libvlr/vlr_lu_fsm.c
@@ -1743,11 +1743,17 @@
LOGPFSML(fi, LOGL_ERROR,
"Authentication & Ciphering is off on UTRAN network. Good luck.\n");

- osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL);
-
return fi;
}

+int vlr_loc_start(struct osmo_fsm_inst *fi)
+{
+ if (fi)
+ return osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL);
+
+ return -ENOENT;
+}
+
struct osmo_fsm_inst *
vlr_ra_update(struct osmo_fsm_inst *parent,
uint32_t parent_event_success,
@@ -1801,11 +1807,17 @@
LOGPFSML(fi, LOGL_ERROR,
"Authentication & Ciphering is off on UTRAN network. Good luck.\n");

- osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL);
-
return fi;
}

+int vlr_ra_start(struct osmo_fsm_inst *fi)
+{
+ if (fi)
+ return osmo_fsm_inst_dispatch(fi, VLR_ULA_E_UPDATE_LA, NULL);
+
+ return -ENOENT;
+}
+
void vlr_loc_update_cancel(struct osmo_fsm_inst *fi,
enum osmo_fsm_term_cause fsm_cause,
uint8_t gsm48_cause)

To view, visit change 43511. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: Iafce776bf1755951e525b6f7f2ef929dd31c7c9d
Gerrit-Change-Number: 43511
Gerrit-PatchSet: 1
Gerrit-Owner: lynxis lazus <lynxis@fe80.eu>