aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2021-02-06 16:47:39 +0100
committerAlexander Couzens <lynxis@fe80.eu>2021-11-05 01:29:05 +0100
commit274b70f1a8d477908f88c262dc67b065b6b6e4dc (patch)
treeb0a62f95fdd7b9b8ccbc7b043d3bff8552284bcb
parentefa6c5b7d688ceea902d3b02ba78b813185d3c40 (diff)
Fix enabling of UMTS UEA encryption
The existing code allowed the user to configure UMTS encryption in the vty, but we never actually passed this information down to RANAP. As a result, the RAN had no chance of ever enabling encryption on the air interface. Change-Id: Ieaaa6b23b7337b7edb902fad8031e195e0c5e9d2 Related: OS#4144
-rw-r--r--include/osmocom/msc/ran_msg.h3
-rw-r--r--src/libmsc/msc_a.c3
-rw-r--r--src/libmsc/ran_msg_iu.c2
3 files changed, 7 insertions, 1 deletions
diff --git a/include/osmocom/msc/ran_msg.h b/include/osmocom/msc/ran_msg.h
index fd2439fef..816ef1f92 100644
--- a/include/osmocom/msc/ran_msg.h
+++ b/include/osmocom/msc/ran_msg.h
@@ -102,6 +102,9 @@ struct ran_cipher_mode_command {
/* out-argument to return the key to the caller, pass NULL if not needed. */
struct geran_encr *chosen_key;
} geran;
+ struct {
+ bool uea_encryption;
+ } utran;
};
struct ran_handover_request {
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index 9b6b60223..fe3af14e4 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -348,6 +348,9 @@ static int msc_a_ran_enc_ciphering(struct msc_a *msc_a, bool umts_aka, bool retr
/* for ran_a.c to store the GERAN key that is actually used */
.chosen_key = &msc_a->geran_encr,
},
+ .utran = {
+ .uea_encryption = net->uea_encryption
+ }
},
};
diff --git a/src/libmsc/ran_msg_iu.c b/src/libmsc/ran_msg_iu.c
index 5d134605e..6120918d9 100644
--- a/src/libmsc/ran_msg_iu.c
+++ b/src/libmsc/ran_msg_iu.c
@@ -369,7 +369,7 @@ static struct msgb *ran_iu_make_security_mode_command(struct osmo_fsm_inst *call
LOG_RAN_IU_ENC(caller_fi, LOGL_DEBUG, "Tx RANAP SECURITY MODE COMMAND to RNC, ik %s\n",
osmo_hexdump_nospc(cm->vec->ik, 16));
- return ranap_new_msg_sec_mod_cmd(cm->vec->ik, NULL, RANAP_KeyStatus_new);
+ return ranap_new_msg_sec_mod_cmd(cm->vec->ik, cm->utran.uea_encryption ? cm->vec->ck : NULL, RANAP_KeyStatus_new);
}