Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(amf): PDU-Session accept message coming with extra buffer causing failure of PDU-Session #13103

Merged
merged 4 commits into from
Jul 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
47 changes: 23 additions & 24 deletions lte/gateway/c/core/oai/tasks/ngap/ngap_amf_nas_procedures.c
Original file line number Diff line number Diff line change
Expand Up @@ -680,10 +680,8 @@ void ngap_handle_conn_est_cnf(
session_context->s_NSSAI.sST.buf = (uint8_t*)calloc(1, sizeof(uint8_t));
session_context->s_NSSAI.sST.buf[0] = 0x11;

Ngap_PDUSessionResourceSetupRequestTransfer_t*
pduSessionResourceSetupRequestTransferIEs =
(Ngap_PDUSessionResourceSetupRequestTransfer_t*)calloc(
1, sizeof(Ngap_PDUSessionResourceSetupRequestTransfer_t));
Ngap_PDUSessionResourceSetupRequestTransfer_t
pduSessionResourceSetupRequestTransferIEs = {0};

// filling PDU TX Structure
pdu_session_resource_setup_request_transfer_t*
Expand All @@ -692,14 +690,14 @@ void ngap_handle_conn_est_cnf(

ngap_fill_pdu_session_resource_setup_request_transfer(
amf_pdu_ses_setup_transfer_req,
pduSessionResourceSetupRequestTransferIEs);
&pduSessionResourceSetupRequestTransferIEs);

uint32_t buffer_size = 1024;
char* buffer = (char*)calloc(1, buffer_size);

asn_enc_rval_t er = aper_encode_to_buffer(
&asn_DEF_Ngap_PDUSessionResourceSetupRequestTransfer, NULL,
pduSessionResourceSetupRequestTransferIEs, buffer, buffer_size);
&pduSessionResourceSetupRequestTransferIEs, buffer, buffer_size);

if (er.encoded <= 0) {
OAILOG_ERROR(LOG_NGAP,
Expand All @@ -708,14 +706,15 @@ void ngap_handle_conn_est_cnf(
}

asn_fprint(stderr, &asn_DEF_Ngap_PDUSessionResourceSetupRequestTransfer,
pduSessionResourceSetupRequestTransferIEs);
&pduSessionResourceSetupRequestTransferIEs);
uint32_t encoded_bytes = NGAP_ASN_ENCODED_BYTES(er.encoded);

bstring transfer = blk2bstr(buffer, er.encoded);
bstring transfer = blk2bstr(buffer, encoded_bytes);
session_context->pDUSessionResourceSetupRequestTransfer.buf =
(uint8_t*)calloc(er.encoded, sizeof(uint8_t));
(uint8_t*)calloc(encoded_bytes, sizeof(uint8_t));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[cpplint] reported by reviewdog 🐶
Using C-style cast. Use reinterpret_cast<uint8_t*>(...) instead [readability/casting] [4]


memcpy((void*)session_context->pDUSessionResourceSetupRequestTransfer.buf,
(void*)transfer->data, er.encoded);
(void*)transfer->data, blength(transfer));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[cpplint] reported by reviewdog 🐶
Using C-style cast. Use reinterpret_cast<void*>(...) instead [readability/casting] [4]


session_context->pDUSessionResourceSetupRequestTransfer.size =
blength(transfer);
Expand All @@ -728,8 +727,7 @@ void ngap_handle_conn_est_cnf(

ASN_STRUCT_FREE_CONTENTS_ONLY(
asn_DEF_Ngap_PDUSessionResourceSetupRequestTransfer,
pduSessionResourceSetupRequestTransferIEs);
free(pduSessionResourceSetupRequestTransferIEs);
&pduSessionResourceSetupRequestTransferIEs);

} /*for loop*/
}
Expand Down Expand Up @@ -1211,36 +1209,38 @@ int ngap_amf_nas_pdusession_resource_setup_stream(
&(session_item->PDU_Session_Resource_Setup_Request_Transfer);

/*tx_out*/
Ngap_PDUSessionResourceSetupRequestTransfer_t*
pduSessionResourceSetupRequestTransferIEs =
(Ngap_PDUSessionResourceSetupRequestTransfer_t*)calloc(
1, sizeof(Ngap_PDUSessionResourceSetupRequestTransfer_t));
Ngap_PDUSessionResourceSetupRequestTransfer_t
pduSessionResourceSetupRequestTransferIEs = {0};

ngap_fill_pdu_session_resource_setup_request_transfer(
amf_pdu_ses_setup_transfer_req,
pduSessionResourceSetupRequestTransferIEs);
&pduSessionResourceSetupRequestTransferIEs);
uint32_t buffer_size = 1024;
char* buffer = (char*)calloc(1, buffer_size);

asn_enc_rval_t er = aper_encode_to_buffer(
&asn_DEF_Ngap_PDUSessionResourceSetupRequestTransfer, NULL,
pduSessionResourceSetupRequestTransferIEs, buffer, buffer_size);
&pduSessionResourceSetupRequestTransferIEs, buffer, buffer_size);

if (er.encoded <= 0) {
OAILOG_ERROR(LOG_NGAP, "PDU Session Resource Request IE encode error \n");
OAILOG_FUNC_RETURN(LOG_NGAP, RETURNerror);
}

asn_fprint(stderr, &asn_DEF_Ngap_PDUSessionResourceSetupRequestTransfer,
pduSessionResourceSetupRequestTransferIEs);
&pduSessionResourceSetupRequestTransferIEs);
uint32_t encoded_bytes = NGAP_ASN_ENCODED_BYTES(er.encoded);

bstring transfer = blk2bstr(buffer, er.encoded);
/* Aligned PER encoder of any ASN.1 type. aper_encode function returns the
priya-wavelabs marked this conversation as resolved.
Show resolved Hide resolved
number of encoded bits in the .encoded field of the return value. Use the
following formula to convert to bytes: bytes = ((.encoded + 7) / 8) */
bstring transfer = blk2bstr(buffer, encoded_bytes);
ngap_pdusession_setup_item_ies->pDUSessionResourceSetupRequestTransfer.buf =
(uint8_t*)calloc(er.encoded, sizeof(uint8_t));
(uint8_t*)calloc(encoded_bytes, sizeof(uint8_t));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[cpplint] reported by reviewdog 🐶
Using C-style cast. Use reinterpret_cast<uint8_t*>(...) instead [readability/casting] [4]


memcpy((void*)ngap_pdusession_setup_item_ies
->pDUSessionResourceSetupRequestTransfer.buf,
(void*)transfer->data, er.encoded);
(void*)transfer->data, blength(transfer));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[cpplint] reported by reviewdog 🐶
Using C-style cast. Use reinterpret_cast<void*>(...) instead [readability/casting] [4]


ngap_pdusession_setup_item_ies->pDUSessionResourceSetupRequestTransfer
.size = blength(transfer);
Expand All @@ -1253,8 +1253,7 @@ int ngap_amf_nas_pdusession_resource_setup_stream(

ASN_STRUCT_FREE_CONTENTS_ONLY(
asn_DEF_Ngap_PDUSessionResourceSetupRequestTransfer,
pduSessionResourceSetupRequestTransferIEs);
free(pduSessionResourceSetupRequestTransferIEs);
&pduSessionResourceSetupRequestTransferIEs);

} /*for loop*/

Expand Down
1 change: 1 addition & 0 deletions lte/gateway/c/core/oai/tasks/ngap/ngap_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

#define NGAP_TIMER_INACTIVE_ID (-1)
#define NGAP_UE_CONTEXT_REL_COMP_TIMER 1 // in seconds
#define NGAP_ASN_ENCODED_BYTES(x) (x + 7) >> 3

// Forward declarations
struct gnb_description_s;
Expand Down