aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libmsc/gsm_04_08.c1
-rw-r--r--src/libvlr/vlr.c2
-rw-r--r--src/libvlr/vlr_access_req_fsm.c1
-rw-r--r--src/libvlr/vlr_lu_fsm.c7
4 files changed, 11 insertions, 0 deletions
diff --git a/src/libmsc/gsm_04_08.c b/src/libmsc/gsm_04_08.c
index d2c56c5a8..472acf00d 100644
--- a/src/libmsc/gsm_04_08.c
+++ b/src/libmsc/gsm_04_08.c
@@ -3388,6 +3388,7 @@ osmo_static_assert(sizeof(((struct gsm0808_encrypt_info*)0)->key) >= sizeof(((st
/* VLR asks us to start using ciphering */
static int msc_vlr_set_ciph_mode(void *msc_conn_ref,
enum vlr_ciph ciph,
+ bool umts_aka,
bool retrieve_imeisv)
{
struct gsm_subscriber_connection *conn = msc_conn_ref;
diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c
index 55b8de006..670ff839d 100644
--- a/src/libvlr/vlr.c
+++ b/src/libvlr/vlr.c
@@ -1096,6 +1096,7 @@ int vlr_set_ciph_mode(struct vlr_instance *vlr,
struct osmo_fsm_inst *fi,
void *msc_conn_ref,
enum vlr_ciph ciph_mode,
+ bool umts_aka,
bool retrieve_imeisv)
{
switch (ciph_mode) {
@@ -1108,6 +1109,7 @@ int vlr_set_ciph_mode(struct vlr_instance *vlr,
ciph_mode, vlr_ciph_name(ciph_mode));
return vlr->ops.set_ciph_mode(msc_conn_ref,
ciph_mode,
+ umts_aka,
retrieve_imeisv);
case VLR_CIPH_A5_2:
diff --git a/src/libvlr/vlr_access_req_fsm.c b/src/libvlr/vlr_access_req_fsm.c
index e90d8de9f..41e629ed2 100644
--- a/src/libvlr/vlr_access_req_fsm.c
+++ b/src/libvlr/vlr_access_req_fsm.c
@@ -294,6 +294,7 @@ static void _proc_arq_vlr_node2(struct osmo_fsm_inst *fi)
if (vlr_set_ciph_mode(vsub->vlr, fi, par->msc_conn_ref,
par->ciphering_required,
+ vlr_use_umts_aka(&vsub->last_tuple->vec, par->is_r99),
vsub->vlr->cfg.retrieve_imeisv_ciphered)) {
LOGPFSML(fi, LOGL_ERROR,
"Failed to send Ciphering Mode Command\n");
diff --git a/src/libvlr/vlr_lu_fsm.c b/src/libvlr/vlr_lu_fsm.c
index a3a68ed98..e540e2ae9 100644
--- a/src/libvlr/vlr_lu_fsm.c
+++ b/src/libvlr/vlr_lu_fsm.c
@@ -826,8 +826,15 @@ static void vlr_loc_upd_post_auth(struct osmo_fsm_inst *fi)
return;
}
+ if (!vsub->last_tuple) {
+ LOGPFSML(fi, LOGL_ERROR, "No auth tuple available\n");
+ vlr_lu_compl_fsm_failure(fi, GSM48_REJECT_NETWORK_FAILURE);
+ return;
+ }
+
if (vlr_set_ciph_mode(vsub->vlr, fi, lfp->msc_conn_ref,
lfp->ciphering_required,
+ vlr_use_umts_aka(&vsub->last_tuple->vec, lfp->is_r99),
vsub->vlr->cfg.retrieve_imeisv_ciphered)) {
LOGPFSML(fi, LOGL_ERROR,
"Failed to send Ciphering Mode Command\n");