aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmsc/ran_msg_iu.c
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2021-10-19 17:09:11 +0200
committerAlexander Couzens <lynxis@fe80.eu>2021-11-05 01:29:05 +0100
commit2aaff7513ba76b6ddacdeced36e37d249c84c5d5 (patch)
tree3eab371620bb07f58551a6757a9bdfb450c95b5d /src/libmsc/ran_msg_iu.c
parent505a94a610fc7dfa4baa4fb3d9197d7564cde0d3 (diff)
Validate the choosen UTRAN encryption algorithm
RANAP Security Command can include an encryption IE. If it includes it the RNC can still ignore it (e.g. unsupported encryption) and return the Security Command Complete with an choosen encryption IE: "no encryption". Validate the encryption element and ensure the encryption is included in the encryption mask. Closes: OS#4144 Change-Id: Icfc135c8b8ae862defe7114db492af600c26407f
Diffstat (limited to 'src/libmsc/ran_msg_iu.c')
-rw-r--r--src/libmsc/ran_msg_iu.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libmsc/ran_msg_iu.c b/src/libmsc/ran_msg_iu.c
index 7b3dd1c01..81147cfa4 100644
--- a/src/libmsc/ran_msg_iu.c
+++ b/src/libmsc/ran_msg_iu.c
@@ -211,12 +211,20 @@ success:
ranap_free_rab_setupormodifieditemies(&setup_ies);
}
-static void ran_iu_decode_security_mode_complete(struct ran_dec *ran_iu_decode)
+static void ran_iu_decode_security_mode_complete(struct ran_dec *ran_iu_decode, const RANAP_SecurityModeCompleteIEs_t *ies)
{
struct ran_msg ran_dec_msg = {
.msg_type = RAN_MSG_CIPHER_MODE_COMPLETE,
.msg_name = "RANAP SecurityModeControl successfulOutcome",
+ .cipher_mode_complete = {
+ .utran_integrity = ies->chosenIntegrityProtectionAlgorithm,
+ .utran_encryption = -1,
+ },
};
+
+ if (ies->presenceMask & SECURITYMODECOMPLETEIES_RANAP_CHOSENENCRYPTIONALGORITHM_PRESENT)
+ ran_dec_msg.cipher_mode_complete.utran_encryption = ies->chosenEncryptionAlgorithm;
+
ran_decoded(ran_iu_decode, &ran_dec_msg);
}
@@ -272,7 +280,7 @@ static void ran_iu_decode_ranap_msg(void *_ran_dec, ranap_message *message)
case RANAP_ProcedureCode_id_SecurityModeControl:
switch (message->direction) {
case RANAP_RANAP_PDU_PR_successfulOutcome:
- ran_iu_decode_security_mode_complete(ran_iu_decode);
+ ran_iu_decode_security_mode_complete(ran_iu_decode, &message->msg.securityModeCompleteIEs);
return;
case RANAP_RANAP_PDU_PR_unsuccessfulOutcome:
ran_iu_decode_security_mode_reject(ran_iu_decode);