From f77f428767bb91e3052a5d97496697cd0225e8b6 Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Wed, 7 Aug 2024 10:08:28 +0200 Subject: [PATCH 1/2] Small optimization L2 to wireshark the code creates a sink to read all traced packets and drop it. but this works only if we send to a local address and if there is not another sink (like if we trace both UE and gNB in the same machine). this sink's purpose is only to prevent to get automatic packets back from the kernel saying "no listener". So, instead of killing the trace when we can't create the sink (as done previously), we now just let the trace in operation. --- openair2/UTIL/OPT/probe.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c index 465baa7301..a4994421c2 100644 --- a/openair2/UTIL/OPT/probe.c +++ b/openair2/UTIL/OPT/probe.c @@ -254,7 +254,7 @@ int opt_create_listener_socket(char *ip_address, uint16_t port) { LOG_E(OPT, "Failed to bind socket to (%s:%u): %s\n", inet_ntoa(opt_listener.address.sin_addr), ntohs(opt_listener.address.sin_port), strerror(errno)); - opt_type = OPT_NONE; + // we log anyway as planned because other OAI process may have created the sink close(opt_listener.sd); opt_listener.sd = -1; return -1; From 8f46b07b22bce29cdca7408d5056944bb5e8b13d Mon Sep 17 00:00:00 2001 From: Laurent THOMAS Date: Wed, 4 Sep 2024 18:20:49 +0200 Subject: [PATCH 2/2] Lacking RRC check: avoid SEGV if the received packet is not what we believe --- openair2/RRC/NR_UE/rrc_UE.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/openair2/RRC/NR_UE/rrc_UE.c b/openair2/RRC/NR_UE/rrc_UE.c index fdff0bc421..ed8c47ae5f 100644 --- a/openair2/RRC/NR_UE/rrc_UE.c +++ b/openair2/RRC/NR_UE/rrc_UE.c @@ -551,14 +551,16 @@ static void nr_rrc_ue_decode_NR_BCCH_BCH_Message(NR_UE_RRC_INST_t *rrc, } int get_sib = 0; - if (get_softmodem_params()->sa && - bcch_message->message.choice.mib->cellBarred == NR_MIB__cellBarred_notBarred && - rrc->nrRrcState != RRC_STATE_DETACH_NR) { + if (get_softmodem_params()->sa && bcch_message->message.present == NR_BCCH_BCH_MessageType_PR_mib + && bcch_message->message.choice.mib->cellBarred == NR_MIB__cellBarred_notBarred && rrc->nrRrcState != RRC_STATE_DETACH_NR) { NR_UE_RRC_SI_INFO *SI_info = &rrc->perNB[gNB_index].SInfo; // to schedule MAC to get SI if required get_sib = check_si_status(SI_info); } - nr_rrc_mac_config_req_mib(rrc->ue_id, 0, bcch_message->message.choice.mib, get_sib); + if (bcch_message->message.present == NR_BCCH_BCH_MessageType_PR_mib) + nr_rrc_mac_config_req_mib(rrc->ue_id, 0, bcch_message->message.choice.mib, get_sib); + else + LOG_E(NR_RRC, "RRC-received BCCH message is not a MIB\n"); ASN_STRUCT_FREE(asn_DEF_NR_BCCH_BCH_Message, bcch_message); return; }