Changes of Revision 6

open5gs_2.4.8.202206300002.dsc -> open5gs_2.4.8.202207010002.dsc Changed
x
 
1
@@ -2,7 +2,7 @@
2
 Source: open5gs
3
 Binary: open5gs-common, open5gs-mme, open5gs-sgwc, open5gs-smf, open5gs-amf, open5gs-sgwu, open5gs-upf, open5gs-hss, open5gs-pcrf, open5gs-nrf, open5gs-ausf, open5gs-udm, open5gs-pcf, open5gs-nssf, open5gs-bsf, open5gs-udr, open5gs, open5gs-dbg
4
 Architecture: any
5
-Version: 2.4.8.202206300002
6
+Version: 2.4.8.202207010002
7
 Maintainer: Harald Welte <laforge@gnumonks.org>
8
 Uploaders: Sukchan Lee <acetcom@gmail.com>
9
 Homepage: https://open5gs.org
10
@@ -30,8 +30,8 @@
11
  open5gs-udr deb net optional arch=any
12
  open5gs-upf deb net optional arch=any
13
 Checksums-Sha1:
14
- 70a011ee684d644a03b3eb5f70f9431c117c5744 11444120 open5gs_2.4.8.202206300002.tar.xz
15
+ fc5dd83e6e1531f4819b9b29515e9a95b6679fd5 11444060 open5gs_2.4.8.202207010002.tar.xz
16
 Checksums-Sha256:
17
- ab387b7f01f43118ca0e224189627812f200a7050b327b706f553fde05edb37c 11444120 open5gs_2.4.8.202206300002.tar.xz
18
+ 52963ee9bf7ce27f5fe1de65b86b152cdcc0ff54d6811302976f0cffa73e2d01 11444060 open5gs_2.4.8.202207010002.tar.xz
19
 Files:
20
- 7447ec56414ce907330f78528419f548 11444120 open5gs_2.4.8.202206300002.tar.xz
21
+ 00282b87d56da28014e0d41348c65f67 11444060 open5gs_2.4.8.202207010002.tar.xz
22
open5gs_2.4.8.202206300002.tar.xz/debian/changelog -> open5gs_2.4.8.202207010002.tar.xz/debian/changelog Changed
12
 
1
@@ -1,8 +1,8 @@
2
-open5gs (2.4.8.202206300002) UNRELEASED; urgency=medium
3
+open5gs (2.4.8.202207010002) UNRELEASED; urgency=medium
4
 
5
   * Snapshot build
6
 
7
- -- Sukchan Lee <acetcom@gmail.com>  Thu, 30 Jun 2022 00:09:09 +0000
8
+ -- Sukchan Lee <acetcom@gmail.com>  Fri, 01 Jul 2022 00:09:11 +0000
9
 
10
 open5gs (2.4.8) unstable; urgency=medium
11
 
12
open5gs_2.4.8.202206300002.tar.xz/debian/control -> open5gs_2.4.8.202207010002.tar.xz/debian/control Changed
163
 
1
@@ -31,7 +31,7 @@
2
 Package: open5gs-common
3
 Architecture: any
4
 Multi-Arch: same
5
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
6
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
7
          ${misc:Depends}
8
 Description: 5G Core and EPC (Shared Files)
9
  Open5GS is a C-language implementation of 5G Core and EPC
10
@@ -43,7 +43,7 @@
11
 Package: open5gs-mme
12
 Architecture: any
13
 Multi-Arch: same
14
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
15
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
16
          ${misc:Depends},
17
          open5gs-common (= ${binary:Version})
18
 Description: MME (Mobility Management Entity)
19
@@ -58,7 +58,7 @@
20
 Package: open5gs-sgwc
21
 Architecture: any
22
 Multi-Arch: same
23
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
24
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
25
          ${misc:Depends},
26
          open5gs-common (= ${binary:Version})
27
 Description: SGW-C (Serving Gateway - Control Plane)
28
@@ -72,7 +72,7 @@
29
 Package: open5gs-smf
30
 Architecture: any
31
 Multi-Arch: same
32
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
33
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
34
          ${misc:Depends},
35
          open5gs-common (= ${binary:Version})
36
 Description: SMF (Session Management Function)
37
@@ -84,7 +84,7 @@
38
 Package: open5gs-amf
39
 Architecture: any
40
 Multi-Arch: same
41
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
42
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
43
          ${misc:Depends},
44
          open5gs-common (= ${binary:Version})
45
 Description: AMF (Access and Mobility Management Function)
46
@@ -96,7 +96,7 @@
47
 Package: open5gs-sgwu
48
 Architecture: any
49
 Multi-Arch: same
50
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
51
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
52
          ${misc:Depends},
53
          open5gs-common (= ${binary:Version})
54
 Description: SGW-U (Serving Gateway - User Plane)
55
@@ -110,7 +110,7 @@
56
 Package: open5gs-upf
57
 Architecture: any
58
 Multi-Arch: same
59
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
60
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
61
          ${misc:Depends},
62
          udev,
63
          open5gs-common (= ${binary:Version})
64
@@ -123,7 +123,7 @@
65
 Package: open5gs-hss
66
 Architecture: any
67
 Multi-Arch: same
68
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
69
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
70
          ${misc:Depends},
71
          mongodb-org | mongodb,
72
          open5gs-common (= ${binary:Version})
73
@@ -140,7 +140,7 @@
74
 Package: open5gs-pcrf
75
 Architecture: any
76
 Multi-Arch: same
77
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
78
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
79
          ${misc:Depends},
80
          mongodb-org | mongodb,
81
          open5gs-common (= ${binary:Version})
82
@@ -156,7 +156,7 @@
83
 Package: open5gs-nrf
84
 Architecture: any
85
 Multi-Arch: same
86
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
87
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
88
          ${misc:Depends},
89
          open5gs-common (= ${binary:Version})
90
 Description: NRF (Network Repository Function)
91
@@ -168,7 +168,7 @@
92
 Package: open5gs-ausf
93
 Architecture: any
94
 Multi-Arch: same
95
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
96
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
97
          ${misc:Depends},
98
          open5gs-common (= ${binary:Version})
99
 Description: AUSF (Authentication Server Function)
100
@@ -180,7 +180,7 @@
101
 Package: open5gs-udm
102
 Architecture: any
103
 Multi-Arch: same
104
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
105
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
106
          ${misc:Depends},
107
          open5gs-common (= ${binary:Version})
108
 Description: UDM (Unified Data Management)
109
@@ -192,7 +192,7 @@
110
 Package: open5gs-pcf
111
 Architecture: any
112
 Multi-Arch: same
113
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
114
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
115
          ${misc:Depends},
116
          open5gs-common (= ${binary:Version})
117
 Description: PCF (Policy Control Function)
118
@@ -204,7 +204,7 @@
119
 Package: open5gs-nssf
120
 Architecture: any
121
 Multi-Arch: same
122
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
123
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
124
          ${misc:Depends},
125
          open5gs-common (= ${binary:Version})
126
 Description: NSSF (Network Slice Selection Function)
127
@@ -216,7 +216,7 @@
128
 Package: open5gs-bsf
129
 Architecture: any
130
 Multi-Arch: same
131
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
132
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
133
          ${misc:Depends},
134
          open5gs-common (= ${binary:Version})
135
 Description: BSF (Binding Support Function)
136
@@ -228,7 +228,7 @@
137
 Package: open5gs-udr
138
 Architecture: any
139
 Multi-Arch: same
140
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${shlibs:Depends},
141
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${shlibs:Depends},
142
          ${misc:Depends},
143
          open5gs-common (= ${binary:Version})
144
 Description: UDR (Unified Data Repository)
145
@@ -240,7 +240,7 @@
146
 Package: open5gs
147
 Architecture: any
148
 Multi-Arch: same
149
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${misc:Depends},
150
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${misc:Depends},
151
          open5gs-common (= ${binary:Version}),
152
          open5gs-mme (= ${binary:Version}),
153
          open5gs-sgwc (= ${binary:Version}),
154
@@ -266,7 +266,7 @@
155
 Package: open5gs-dbg
156
 Architecture: any
157
 Multi-Arch: same
158
-Depends: osmocom-nightly (= 1.0.0.202206300002), ${misc:Depends},
159
+Depends: osmocom-nightly (= 1.0.0.202207010002), ${misc:Depends},
160
          open5gs (= ${binary:Version})
161
 Description: Debug symbols for Open5GS
162
  Open5GS is a C-language implementation of 5G Core and EPC
163
open5gs_2.4.8.202206300002.tar.xz/src/amf/context.c -> open5gs_2.4.8.202207010002.tar.xz/src/amf/context.c Changed
11
 
1
@@ -2057,7 +2057,9 @@
2
 
3
     ogs_assert(amf_ue);
4
 
5
+    ogs_assert(amf_ue->num_of_slice <= OGS_MAX_NUM_OF_SLICE);
6
     for (i = 0; i < amf_ue->num_of_slice; i++) {
7
+        ogs_assert(amf_ue->slicei.num_of_session <= OGS_MAX_NUM_OF_SESS);
8
         for (j = 0; j < amf_ue->slicei.num_of_session; j++) {
9
             ogs_assert(amf_ue->slicei.sessionj.name);
10
             ogs_free(amf_ue->slicei.sessionj.name);
11
open5gs_2.4.8.202206300002.tar.xz/src/amf/gmm-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/amf/gmm-handler.c Changed
40
 
1
@@ -1000,6 +1000,11 @@
2
 
3
 
4
             for (i = 0; i < amf_ue->num_of_slice; i++) {
5
+                if (i >= OGS_MAX_NUM_OF_SLICE) {
6
+                    ogs_warn("Ignore max slice count overflow %d>=%d",
7
+                            amf_ue->num_of_slice, OGS_MAX_NUM_OF_SLICE);
8
+                    break;
9
+                }
10
                 if (ul_nas_transport->presencemask &
11
                         OGS_NAS_5GS_UL_NAS_TRANSPORT_S_NSSAI_PRESENT) {
12
                     ogs_nas_s_nssai_ie_t ie;
13
@@ -1015,6 +1020,12 @@
14
                     }
15
                 }
16
                 for (j = 0; j < amf_ue->allowed_nssai.num_of_s_nssai; j++) {
17
+                    if (j >= OGS_MAX_NUM_OF_SLICE) {
18
+                        ogs_warn("Ignore max slice count overflow %d>=%d",
19
+                                amf_ue->allowed_nssai.num_of_s_nssai,
20
+                                OGS_MAX_NUM_OF_SLICE);
21
+                        break;
22
+                    }
23
                     if (amf_ue->slicei.s_nssai.sst ==
24
                             amf_ue->allowed_nssai.s_nssaij.sst &&
25
                         amf_ue->slicei.s_nssai.sd.v ==
26
@@ -1025,6 +1036,13 @@
27
 
28
                             for (k = 0;
29
                                     k < amf_ue->slicei.num_of_session; k++) {
30
+                                if (k >= OGS_MAX_NUM_OF_SESS) {
31
+                                    ogs_warn("Ignore max session "
32
+                                        "count overflow %d>=%d",
33
+                                        amf_ue->slicei.num_of_session,
34
+                                        OGS_MAX_NUM_OF_SESS);
35
+                                    break;
36
+                                }
37
                                 if (!strcmp(dnn->value,
38
                                             amf_ue->slicei.sessionk.name)) {
39
 
40
open5gs_2.4.8.202206300002.tar.xz/src/hss/hss-s6a-path.c -> open5gs_2.4.8.202207010002.tar.xz/src/hss/hss-s6a-path.c Changed
18
 
1
@@ -566,7 +566,15 @@
2
             struct avp *pdn_gw_allocation_type;
3
             struct avp *vplmn_dynamic_address_allowed;
4
 
5
-            ogs_session_t *session = &slice_data->sessioni;
6
+            ogs_session_t *session = NULL;
7
+
8
+            if (i >= OGS_MAX_NUM_OF_SESS) {
9
+                ogs_warn("Ignore max session count overflow %d>=%d",
10
+                    slice_data->num_of_session, OGS_MAX_NUM_OF_SESS);
11
+                break;
12
+            }
13
+
14
+            session = &slice_data->sessioni;
15
             ogs_assert(session);
16
             session->context_identifier = i+1;
17
 
18
open5gs_2.4.8.202206300002.tar.xz/src/hss/hss-swx-path.c -> open5gs_2.4.8.202207010002.tar.xz/src/hss/hss-swx-path.c Changed
18
 
1
@@ -592,7 +592,15 @@
2
             struct avp *pdn_gw_allocation_type;
3
             struct avp *vplmn_dynamic_address_allowed;
4
 
5
-            ogs_session_t *session = &slice_data->sessioni;
6
+            ogs_session_t *session = NULL;
7
+
8
+            if (i >= OGS_MAX_NUM_OF_SESS) {
9
+                ogs_warn("Ignore max session count overflow %d>=%d",
10
+                    slice_data->num_of_session, OGS_MAX_NUM_OF_SESS);
11
+                break;
12
+            }
13
+
14
+            session = &slice_data->sessioni;
15
             ogs_assert(session);
16
             session->context_identifier = i+1;
17
 
18
open5gs_2.4.8.202206300002.tar.xz/src/mme/mme-context.c -> open5gs_2.4.8.202207010002.tar.xz/src/mme/mme-context.c Changed
25
 
1
@@ -3281,6 +3281,7 @@
2
 
3
     ogs_assert(mme_ue);
4
 
5
+    ogs_assert(mme_ue->num_of_session <= OGS_MAX_NUM_OF_SESS);
6
     for (i = 0; i < mme_ue->num_of_session; i++) {
7
         if (mme_ue->sessioni.name)
8
             ogs_free(mme_ue->sessioni.name);
9
@@ -3297,6 +3298,7 @@
10
     ogs_assert(mme_ue);
11
     ogs_assert(apn);
12
 
13
+    ogs_assert(mme_ue->num_of_session <= OGS_MAX_NUM_OF_SESS);
14
     for (i = 0; i < mme_ue->num_of_session; i++) {
15
         session = &mme_ue->sessioni;
16
         ogs_assert(session->name);
17
@@ -3314,6 +3316,7 @@
18
 
19
     ogs_assert(mme_ue);
20
 
21
+    ogs_assert(mme_ue->num_of_session <= OGS_MAX_NUM_OF_SESS);
22
     for (i = 0; i < mme_ue->num_of_session; i++) {
23
         session = &mme_ue->sessioni;
24
         if (session->context_identifier == mme_ue->context_identifier)
25
open5gs_2.4.8.202206300002.tar.xz/src/mme/mme-fd-path.c -> open5gs_2.4.8.202207010002.tar.xz/src/mme/mme-fd-path.c Changed
18
 
1
@@ -913,8 +913,14 @@
2
                  */
3
                 case OGS_DIAM_S6A_AVP_CODE_APN_CONFIGURATION:
4
                 {
5
-                    ogs_session_t *session =
6
-                        &slice_data->sessionslice_data->num_of_session;
7
+                    ogs_session_t *session = NULL;
8
+
9
+                    if (slice_data->num_of_session >= OGS_MAX_NUM_OF_SESS) {
10
+                        ogs_warn("Ignore max session count overflow %d>=%d",
11
+                            slice_data->num_of_session, OGS_MAX_NUM_OF_SESS);
12
+                        break;
13
+                    }
14
+                    session = &slice_data->sessionslice_data->num_of_session;
15
                     ogs_assert(session);
16
 
17
                     /* AVP: 'Service-Selection'(493)
18
open5gs_2.4.8.202206300002.tar.xz/src/mme/mme-s11-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/mme/mme-s11-handler.c Changed
201
 
1
@@ -78,7 +78,7 @@
2
 }
3
 
4
 void mme_s11_handle_create_session_response(
5
-        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
6
+        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
7
         ogs_gtp2_create_session_response_t *rsp)
8
 {
9
     int rv, i;
10
@@ -91,6 +91,7 @@
11
 
12
     mme_bearer_t *bearer = NULL;
13
     mme_sess_t *sess = NULL;
14
+    mme_ue_t *mme_ue = NULL;
15
     sgw_ue_t *source_ue = NULL, *target_ue = NULL;
16
     ogs_session_t *session = NULL;
17
     ogs_gtp2_bearer_qos_t bearer_qos;
18
@@ -98,7 +99,6 @@
19
     uint16_t decoded = 0;
20
     int create_action = 0;
21
 
22
-    ogs_assert(mme_ue);
23
     ogs_assert(rsp);
24
 
25
     ogs_debug("Create Session Response");
26
@@ -110,6 +110,8 @@
27
     create_action = xact->create_action;
28
     sess = xact->data;
29
     ogs_assert(sess);
30
+    mme_ue = sess->mme_ue;
31
+    ogs_assert(mme_ue);
32
     source_ue = sgw_ue_cycle(mme_ue->sgw_ue);
33
     ogs_assert(source_ue);
34
 
35
@@ -129,6 +131,11 @@
36
      ************************/
37
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
38
 
39
+    if (!mme_ue_from_teid) {
40
+        ogs_error("No Context in TEID");
41
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
42
+    }
43
+
44
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
45
         if (create_action == OGS_GTP_CREATE_IN_ATTACH_REQUEST) {
46
             ogs_error("%s Attach reject", mme_ue->imsi_bcd);
47
@@ -393,7 +400,7 @@
48
 }
49
 
50
 void mme_s11_handle_modify_bearer_response(
51
-        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
52
+        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
53
         ogs_gtp2_modify_bearer_response_t *rsp)
54
 {
55
     int rv;
56
@@ -401,9 +408,9 @@
57
     int modify_action = 0;
58
     ogs_gtp2_cause_t *cause = NULL;
59
 
60
+    mme_ue_t *mme_ue = NULL;
61
     sgw_ue_t *sgw_ue = NULL;
62
 
63
-    ogs_assert(mme_ue);
64
     ogs_assert(rsp);
65
 
66
     ogs_debug("Modify Bearer Response");
67
@@ -413,6 +420,8 @@
68
      ********************/
69
     ogs_assert(xact);
70
     modify_action = xact->modify_action;
71
+    mme_ue = xact->data;
72
+    ogs_assert(mme_ue);
73
     sgw_ue = sgw_ue_cycle(mme_ue->sgw_ue);
74
     ogs_assert(sgw_ue);
75
 
76
@@ -424,6 +433,11 @@
77
      ************************/
78
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
79
 
80
+    if (!mme_ue_from_teid) {
81
+        ogs_error("No Context in TEID");
82
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
83
+    }
84
+
85
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
86
         mme_send_delete_session_or_mme_ue_context_release(mme_ue);
87
         return;
88
@@ -480,7 +494,7 @@
89
 }
90
 
91
 void mme_s11_handle_delete_session_response(
92
-        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
93
+        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
94
         ogs_gtp2_delete_session_response_t *rsp)
95
 {
96
     int rv;
97
@@ -488,8 +502,8 @@
98
     int action = 0;
99
     sgw_ue_t *source_ue = NULL, *target_ue = NULL;
100
     mme_sess_t *sess = NULL;
101
+    mme_ue_t *mme_ue = NULL;
102
 
103
-    ogs_assert(mme_ue);
104
     ogs_assert(rsp);
105
 
106
     ogs_debug("Delete Session Response");
107
@@ -502,6 +516,8 @@
108
     ogs_assert(action);
109
     sess = xact->data;
110
     ogs_assert(sess);
111
+    mme_ue = sess->mme_ue;
112
+    ogs_assert(mme_ue);
113
     target_ue = sgw_ue_cycle(mme_ue->sgw_ue);
114
     ogs_assert(target_ue);
115
 
116
@@ -516,6 +532,13 @@
117
     rv = ogs_gtp_xact_commit(xact);
118
     ogs_expect_or_return(rv == OGS_OK);
119
 
120
+    /************************
121
+     * Check MME-UE Context
122
+     ************************/
123
+    if (!mme_ue_from_teid) {
124
+        ogs_error("No Context in TEID");
125
+    }
126
+
127
     /********************
128
      * Check Cause Value
129
      ********************/
130
@@ -1053,7 +1076,7 @@
131
 }
132
 
133
 void mme_s11_handle_release_access_bearers_response(
134
-        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
135
+        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
136
         ogs_gtp2_release_access_bearers_response_t *rsp)
137
 {
138
     int rv;
139
@@ -1062,10 +1085,10 @@
140
     enb_ue_t *enb_ue = NULL;
141
 
142
     sgw_ue_t *sgw_ue = NULL;;
143
+    mme_ue_t *mme_ue = NULL;
144
     mme_sess_t *sess = NULL;
145
     mme_bearer_t *bearer = NULL;
146
 
147
-    ogs_assert(mme_ue);
148
     ogs_assert(rsp);
149
 
150
     ogs_debug("Release Access Bearers Response");
151
@@ -1076,12 +1099,21 @@
152
     ogs_assert(xact);
153
     action = xact->release_action;
154
     ogs_assert(action);
155
+    mme_ue = xact->data;
156
+    ogs_assert(mme_ue);
157
     sgw_ue = sgw_ue_cycle(mme_ue->sgw_ue);
158
     ogs_assert(sgw_ue);
159
 
160
     rv = ogs_gtp_xact_commit(xact);
161
     ogs_expect_or_return(rv == OGS_OK);
162
 
163
+    /***********************
164
+     * Check MME-UE Context
165
+     ***********************/
166
+    if (!mme_ue_from_teid) {
167
+        ogs_error("No Context in TEID ACTION:%d", action);
168
+    }
169
+
170
     /********************
171
      * Check Cause Value
172
      ********************/
173
@@ -1091,7 +1123,7 @@
174
 
175
         cause_value = cause->value;
176
         if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
177
-            ogs_error("GTP Failed CAUSE:%d", cause_value);
178
+            ogs_error("GTP Failed CAUSE:%d, ACTION:%d", cause_value, action);
179
     }
180
 
181
     /********************
182
@@ -1333,7 +1365,7 @@
183
 }
184
 
185
 void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
186
-        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
187
+        ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
188
         ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t *rsp)
189
 {
190
     int rv;
191
@@ -1341,12 +1373,12 @@
192
     ogs_gtp2_cause_t *cause = NULL;
193
     sgw_ue_t *sgw_ue = NULL;
194
     mme_bearer_t *bearer = NULL;
195
+    mme_ue_t *mme_ue = NULL;
196
     enb_ue_t *source_ue = NULL;
197
     int i;
198
 
199
     ogs_gtp2_f_teid_t *teid = NULL;
200
 
201
open5gs_2.4.8.202206300002.tar.xz/src/mme/mme-s6a-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/mme/mme-s6a-handler.c Changed
26
 
1
@@ -67,10 +67,13 @@
2
 
3
     mme_session_remove_all(mme_ue);
4
 
5
-    mme_ue->num_of_session = slice_data->num_of_session;
6
-    mme_ue->context_identifier = slice_data->context_identifier;
7
-
8
     for (i = 0; i < slice_data->num_of_session; i++) {
9
+        if (i >= OGS_MAX_NUM_OF_SESS) {
10
+            ogs_warn("Ignore max session count overflow %d>=%d",
11
+                    slice_data->num_of_session, OGS_MAX_NUM_OF_SESS);
12
+            break;
13
+        }
14
+
15
         mme_ue->sessioni.name = ogs_strdup(slice_data->sessioni.name);
16
         ogs_assert(mme_ue->sessioni.name);
17
 
18
@@ -89,4 +92,7 @@
19
         memcpy(&mme_ue->sessioni.smf_ip, &slice_data->sessioni.smf_ip,
20
                 sizeof(mme_ue->sessioni.smf_ip));
21
     }
22
+
23
+    mme_ue->num_of_session = i;
24
+    mme_ue->context_identifier = slice_data->context_identifier;
25
 }
26
open5gs_2.4.8.202206300002.tar.xz/src/sgwc/pfcp-path.c -> open5gs_2.4.8.202207010002.tar.xz/src/sgwc/pfcp-path.c Changed
26
 
1
@@ -212,8 +212,6 @@
2
     ogs_assert(sess);
3
     ogs_assert(xact);
4
 
5
-    xact->local_seid = sess->sgwc_sxa_seid;
6
-
7
     memset(&h, 0, sizeof(ogs_pfcp_header_t));
8
     h.type = OGS_PFCP_SESSION_MODIFICATION_REQUEST_TYPE;
9
     h.seid = sess->sgwu_sxa_seid;
10
@@ -284,6 +282,7 @@
11
         xact->gtpbuf = ogs_pkbuf_copy(gtpbuf);
12
         ogs_expect_or_return_val(xact->gtpbuf, OGS_ERROR);
13
     }
14
+    xact->local_seid = sess->sgwc_sxa_seid;
15
 
16
     ogs_list_for_each(&sess->bearer_list, bearer)
17
         ogs_list_add(&xact->bearer_to_modify_list, &bearer->to_modify_node);
18
@@ -378,7 +377,6 @@
19
     ogs_pfcp_header_t h;
20
 
21
     ogs_assert(xact);
22
-    xact->local_seid = sess->sgwc_sxa_seid;
23
 
24
     memset(&h, 0, sizeof(ogs_pfcp_header_t));
25
     h.type = OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE;
26
open5gs_2.4.8.202206300002.tar.xz/src/sgwc/pfcp-sm.c -> open5gs_2.4.8.202207010002.tar.xz/src/sgwc/pfcp-sm.c Changed
33
 
1
@@ -217,6 +217,7 @@
2
             break;
3
         case OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE:
4
             if (!message->h.seid_presence) ogs_error("No SEID");
5
+
6
             sgwc_sxa_handle_session_establishment_response(
7
                 sess, xact, e->gtp_message,
8
                 &message->pfcp_session_establishment_response);
9
@@ -224,6 +225,7 @@
10
 
11
         case OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE:
12
             if (!message->h.seid_presence) ogs_error("No SEID");
13
+
14
             sgwc_sxa_handle_session_modification_response(
15
                 sess, xact, e->gtp_message,
16
                 &message->pfcp_session_modification_response);
17
@@ -231,6 +233,7 @@
18
 
19
         case OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE:
20
             if (!message->h.seid_presence) ogs_error("No SEID");
21
+
22
             sgwc_sxa_handle_session_deletion_response(
23
                 sess, xact, e->gtp_message,
24
                 &message->pfcp_session_deletion_response);
25
@@ -238,6 +241,7 @@
26
 
27
         case OGS_PFCP_SESSION_REPORT_REQUEST_TYPE:
28
             if (!message->h.seid_presence) ogs_error("No SEID");
29
+
30
             sgwc_sxa_handle_session_report_request(
31
                 sess, xact, &message->pfcp_session_report_request);
32
             break;
33
open5gs_2.4.8.202206300002.tar.xz/src/sgwc/s11-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/sgwc/s11-handler.c Changed
126
 
1
@@ -480,6 +480,7 @@
2
                 current_xact->gtpbuf = ogs_pkbuf_copy(gtpbuf);
3
                 ogs_assert(current_xact->gtpbuf);
4
             }
5
+            current_xact->local_seid = sess->sgwc_sxa_seid;
6
 
7
             ogs_list_add(&pfcp_xact_list, &current_xact->tmpnode);
8
         }
9
@@ -688,7 +689,6 @@
10
     ogs_gtp2_f_teid_t *sgw_s1u_teid = NULL, *enb_s1u_teid = NULL;
11
     ogs_gtp2_uli_t uli;
12
 
13
-    ogs_assert(sgwc_ue);
14
     ogs_assert(message);
15
     rsp = &message->create_bearer_response;
16
     ogs_assert(rsp);
17
@@ -715,10 +715,30 @@
18
     rv = ogs_gtp_xact_commit(s11_xact);
19
     ogs_expect(rv == OGS_OK);
20
 
21
+    /************************
22
+     * Check SGWC-UE Context
23
+     ************************/
24
+    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
25
+
26
+    if (!sgwc_ue) {
27
+        ogs_error("No Context in TEID");
28
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
29
+    }
30
+
31
+    if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
32
+        ogs_assert(OGS_OK ==
33
+            sgwc_pfcp_send_bearer_modification_request(
34
+                bearer, NULL, NULL,
35
+                OGS_PFCP_MODIFY_UL_ONLY|OGS_PFCP_MODIFY_REMOVE));
36
+        ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
37
+                OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
38
+        return;
39
+    }
40
+
41
     /*****************************************
42
      * Check Mandatory/Conditional IE Missing
43
      *****************************************/
44
-    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
45
+    ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
46
 
47
     if (rsp->bearer_contexts.presence == 0) {
48
         ogs_error("No Bearer");
49
@@ -853,7 +873,6 @@
50
     sgwc_bearer_t *bearer = NULL;
51
     ogs_gtp2_update_bearer_response_t *rsp = NULL;
52
 
53
-    ogs_assert(sgwc_ue);
54
     ogs_assert(message);
55
     rsp = &message->update_bearer_response;
56
     ogs_assert(rsp);
57
@@ -880,10 +899,26 @@
58
     rv = ogs_gtp_xact_commit(s11_xact);
59
     ogs_expect(rv == OGS_OK);
60
 
61
+    /************************
62
+     * Check SGWC-UE Context
63
+     ************************/
64
+    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
65
+
66
+    if (!sgwc_ue) {
67
+        ogs_error("No Context in TEID");
68
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
69
+    }
70
+
71
+    if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
72
+        ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
73
+                OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
74
+        return;
75
+    }
76
+
77
     /*****************************************
78
      * Check Mandatory/Conditional IE Missing
79
      *****************************************/
80
-    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
81
+    ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
82
 
83
     if (rsp->bearer_contexts.presence == 0) {
84
         ogs_error("No Bearer");
85
@@ -970,7 +1005,6 @@
86
     sgwc_bearer_t *bearer = NULL;
87
     ogs_gtp2_delete_bearer_response_t *rsp = NULL;
88
 
89
-    ogs_assert(sgwc_ue);
90
     ogs_assert(message);
91
     rsp = &message->delete_bearer_response;
92
     ogs_assert(rsp);
93
@@ -1002,6 +1036,11 @@
94
      ************************/
95
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
96
 
97
+    if (!sgwc_ue) {
98
+        ogs_error("No Context in TEID");
99
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
100
+    }
101
+
102
     if (rsp->linked_eps_bearer_id.presence) {
103
        /*
104
         * << Linked EPS Bearer ID >>
105
@@ -1073,8 +1112,10 @@
106
             ogs_error("No Cause");
107
         }
108
 
109
-        ogs_debug("    MME_S11_TEID%d SGW_S11_TEID%d",
110
-            sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid);
111
+        if (sgwc_ue) {
112
+            ogs_debug("    MME_S11_TEID%d SGW_S11_TEID%d",
113
+                sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid);
114
+        }
115
         ogs_debug("    SGW_S5C_TEID0x%x PGW_S5C_TEID0x%x",
116
             sess->sgw_s5c_teid, sess->pgw_s5c_teid);
117
 
118
@@ -1473,7 +1514,6 @@
119
     s5c_xact = ogs_gtp_xact_local_create(
120
             sess->gnode, &message->h, pkbuf, gtp_bearer_timeout, bearer);
121
     ogs_expect_or_return(s5c_xact);
122
-    s5c_xact->local_teid = sess->sgw_s5c_teid;
123
 
124
     ogs_gtp_xact_associate(s11_xact, s5c_xact);
125
 
126
open5gs_2.4.8.202206300002.tar.xz/src/sgwc/s5c-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/sgwc/s5c-handler.c Changed
201
 
1
@@ -79,9 +79,6 @@
2
     ogs_gtp_xact_t *s11_xact = NULL;
3
     ogs_gtp_node_t *pgw = NULL;
4
 
5
-    ogs_assert(sess);
6
-    sgwc_ue = sess->sgwc_ue;
7
-    ogs_assert(sgwc_ue);
8
     ogs_assert(gtpbuf);
9
     ogs_assert(message);
10
     rsp = &message->create_session_response;
11
@@ -99,10 +96,30 @@
12
     rv = ogs_gtp_xact_commit(s5c_xact);
13
     ogs_expect(rv == OGS_OK);
14
 
15
+    /************************
16
+     * Check Session Context
17
+     ************************/
18
+    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
19
+
20
+    if (!sess) {
21
+        ogs_error("No Context in TEID");
22
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
23
+    } else {
24
+        sgwc_ue = sess->sgwc_ue;
25
+        ogs_assert(sgwc_ue);
26
+    }
27
+
28
+    if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
29
+        ogs_gtp_send_error_message(
30
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
31
+                OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
32
+        return;
33
+    }
34
+
35
     /*****************************************
36
      * Check Mandatory/Conditional IE Missing
37
      *****************************************/
38
-    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
39
+    ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
40
 
41
     if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.presence == 0) {
42
         ogs_error("No GTP TEID");
43
@@ -265,29 +282,24 @@
44
             OGS_PFCP_MODIFY_UL_ONLY|OGS_PFCP_MODIFY_ACTIVATE));
45
 }
46
 
47
-void sgwc_s5c_handle_modify_bearer_response(
48
+void sgwc_s5c_handle_delete_session_response(
49
         sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
50
         ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
51
 {
52
     int rv;
53
     ogs_gtp2_cause_t *cause = NULL;
54
     uint8_t cause_value;
55
-    int modify_action;
56
 
57
     sgwc_ue_t *sgwc_ue = NULL;
58
-    ogs_pkbuf_t *pkbuf = NULL;
59
 
60
     ogs_gtp_xact_t *s11_xact = NULL;
61
-    ogs_gtp2_modify_bearer_response_t *rsp = NULL;
62
+    ogs_gtp2_delete_session_response_t *rsp = NULL;
63
 
64
-    ogs_assert(sess);
65
-    sgwc_ue = sess->sgwc_ue;
66
-    ogs_assert(sgwc_ue);
67
     ogs_assert(message);
68
-    rsp = &message->modify_bearer_response;
69
+    rsp = &message->delete_session_response;
70
     ogs_assert(rsp);
71
 
72
-    ogs_debug("Modify Bearer Response");
73
+    ogs_debug("Delete Session Response");
74
 
75
     /********************
76
      * Check Transaction
77
@@ -295,15 +307,34 @@
78
     ogs_assert(s5c_xact);
79
     s11_xact = s5c_xact->assoc_xact;
80
     ogs_assert(s11_xact);
81
-    modify_action = s5c_xact->modify_action;
82
 
83
     rv = ogs_gtp_xact_commit(s5c_xact);
84
     ogs_expect(rv == OGS_OK);
85
 
86
+    /************************
87
+     * Check Session Context
88
+     ************************/
89
+    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
90
+
91
+    if (!sess) {
92
+        ogs_error("No Context in TEID");
93
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
94
+    } else {
95
+        sgwc_ue = sess->sgwc_ue;
96
+        ogs_assert(sgwc_ue);
97
+    }
98
+
99
+    if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
100
+        ogs_gtp_send_error_message(
101
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
102
+                OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value);
103
+        return;
104
+    }
105
+
106
     /*****************************************
107
      * Check Mandatory/Conditional IE Missing
108
      *****************************************/
109
-    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
110
+    ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
111
 
112
     if (rsp->cause.presence == 0) {
113
         ogs_error("No Cause");
114
@@ -311,14 +342,9 @@
115
     }
116
 
117
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
118
-        if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST)
119
-            ogs_gtp_send_error_message(
120
-                    s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
121
-                    OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
122
-        else
123
-            ogs_gtp_send_error_message(
124
-                    s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
125
-                    OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
126
+        ogs_gtp_send_error_message(
127
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
128
+                OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value);
129
         return;
130
     }
131
 
132
@@ -332,67 +358,52 @@
133
     cause_value = cause->value;
134
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
135
         ogs_error("GTP Failed CAUSE:%d", cause_value);
136
-        if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST)
137
-            ogs_gtp_send_error_message(
138
-                    s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
139
-                    OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
140
-        else
141
-            ogs_gtp_send_error_message(
142
-                    s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
143
-                    OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
144
+        ogs_gtp_send_error_message(
145
+                s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
146
+                OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value);
147
         return;
148
     }
149
 
150
     /********************
151
      * Check ALL Context
152
      ********************/
153
-    ogs_assert(sgwc_ue);
154
     ogs_assert(sess);
155
+    ogs_assert(sgwc_ue);
156
 
157
+    /* Remove a pgw session */
158
     ogs_debug("    MME_S11_TEID%d SGW_S11_TEID%d",
159
         sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid);
160
     ogs_debug("    SGW_S5C_TEID0x%x PGW_S5C_TEID0x%x",
161
         sess->sgw_s5c_teid, sess->pgw_s5c_teid);
162
 
163
-    if (modify_action == OGS_GTP_MODIFY_IN_PATH_SWITCH_REQUEST) {
164
-        ogs_assert(OGS_OK ==
165
-            sgwc_gtp_send_create_session_response(sess, s11_xact));
166
-    } else {
167
-        message->h.type = OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE;
168
-        message->h.teid = sgwc_ue->mme_s11_teid;
169
-
170
-        pkbuf = ogs_gtp2_build_msg(message);
171
-        ogs_expect_or_return(pkbuf);
172
-
173
-        rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf);
174
-        ogs_expect_or_return(rv == OGS_OK);
175
-
176
-        rv = ogs_gtp_xact_commit(s11_xact);
177
-        ogs_expect(rv == OGS_OK);
178
-    }
179
+    /*
180
+     * 1. MME sends Delete Session Request to SGW/SMF.
181
+     * 2. SMF sends Delete Session Response to SGW/MME.
182
+     */
183
+    ogs_assert(OGS_OK ==
184
+        sgwc_pfcp_send_session_deletion_request(sess, s11_xact, gtpbuf));
185
 }
186
 
187
-void sgwc_s5c_handle_delete_session_response(
188
+void sgwc_s5c_handle_modify_bearer_response(
189
         sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
190
         ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
191
 {
192
     int rv;
193
     ogs_gtp2_cause_t *cause = NULL;
194
     uint8_t cause_value;
195
+    int modify_action;
196
 
197
     sgwc_ue_t *sgwc_ue = NULL;
198
+    ogs_pkbuf_t *pkbuf = NULL;
199
 
200
     ogs_gtp_xact_t *s11_xact = NULL;
201
open5gs_2.4.8.202206300002.tar.xz/src/sgwc/sgwc-sm.c -> open5gs_2.4.8.202207010002.tar.xz/src/sgwc/sgwc-sm.c Changed
10
 
1
@@ -157,7 +157,7 @@
2
         if (gtp_message.h.teid_presence && gtp_message.h.teid != 0) {
3
             /* Cause is not "Context not found" */
4
             sgwc_ue = sgwc_ue_find_by_teid(gtp_message.h.teid);
5
-        } else if (gtp_xact->local_teid) { /* rx no TEID or TEID=0 */
6
+         } else if (gtp_xact->local_teid) { /* rx no TEID or TEID=0 */
7
             /* 3GPP TS 29.274 5.5.2: we receive TEID=0 under some
8
              * conditions, such as cause "Session context not found". In those
9
              * cases, we still want to identify the local session which
10
open5gs_2.4.8.202206300002.tar.xz/src/sgwc/sxa-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/sgwc/sxa-handler.c Changed
96
 
1
@@ -157,7 +157,6 @@
2
 
3
     ogs_debug("Session Establishment Response");
4
 
5
-    ogs_assert(sess);
6
     ogs_assert(pfcp_xact);
7
     ogs_assert(pfcp_rsp);
8
     ogs_assert(recv_message);
9
@@ -172,6 +171,11 @@
10
 
11
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
12
 
13
+    if (!sess) {
14
+        ogs_warn("No Context");
15
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
16
+    }
17
+
18
     if (pfcp_rsp->up_f_seid.presence == 0) {
19
         ogs_error("No UP F-SEID");
20
         cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
21
@@ -449,7 +453,6 @@
22
 
23
     ogs_debug("Session Modification Response");
24
 
25
-    ogs_assert(sess);
26
     ogs_assert(pfcp_xact);
27
     ogs_assert(pfcp_rsp);
28
 
29
@@ -459,12 +462,30 @@
30
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
31
 
32
     if (flags & OGS_PFCP_MODIFY_SESSION) {
33
+        if (!sess) {
34
+            ogs_warn("No Context");
35
+
36
+            sess = pfcp_xact->data;
37
+            ogs_assert(sess);
38
+
39
+            cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
40
+        }
41
         sgwc_ue = sess->sgwc_ue;
42
         ogs_assert(sgwc_ue);
43
 
44
     } else {
45
         bearer = pfcp_xact->data;
46
         ogs_assert(bearer);
47
+
48
+        if (!sess) {
49
+            ogs_warn("No Context");
50
+
51
+            sess = bearer->sess;
52
+            ogs_assert(sess);
53
+
54
+            cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
55
+        }
56
+
57
         sgwc_ue = bearer->sgwc_ue;
58
         ogs_assert(sgwc_ue);
59
     }
60
@@ -1185,12 +1206,16 @@
61
 
62
     ogs_debug("Session Deletion Response");
63
 
64
-    ogs_assert(sess);
65
     ogs_assert(pfcp_xact);
66
     ogs_assert(pfcp_rsp);
67
 
68
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
69
 
70
+    if (!sess) {
71
+        ogs_warn("No Context");
72
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
73
+    }
74
+
75
     if (pfcp_rsp->cause.presence) {
76
         if (pfcp_rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
77
             ogs_warn("PFCP Cause%d : Not Accepted", pfcp_rsp->cause.u8);
78
@@ -1299,12 +1324,16 @@
79
 
80
     ogs_debug("Session Report Request");
81
 
82
-    ogs_assert(sess);
83
     ogs_assert(pfcp_xact);
84
     ogs_assert(pfcp_req);
85
 
86
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
87
 
88
+    if (!sess) {
89
+        ogs_warn("No Context");
90
+        cause_value = OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND;
91
+    }
92
+
93
     if (pfcp_req->report_type.presence == 0) {
94
         ogs_error("No Report Type");
95
         cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
96
open5gs_2.4.8.202206300002.tar.xz/src/smf/n4-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/smf/n4-handler.c Changed
90
 
1
@@ -255,7 +255,6 @@
2
 
3
     ogs_debug("Session Modification Response 5gc");
4
 
5
-    ogs_assert(sess);
6
     ogs_assert(xact);
7
     ogs_assert(rsp);
8
 
9
@@ -280,6 +279,11 @@
10
 
11
     status = OGS_SBI_HTTP_STATUS_OK;
12
 
13
+    if (!sess) {
14
+        ogs_warn("No Context");
15
+        status = OGS_SBI_HTTP_STATUS_NOT_FOUND;
16
+    }
17
+
18
     if (rsp->cause.presence) {
19
         if (rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
20
             ogs_warn("PFCP Cause %d : Not Accepted", rsp->cause.u8);
21
@@ -620,7 +624,10 @@
22
 
23
     status = OGS_SBI_HTTP_STATUS_OK;
24
 
25
-    ogs_assert(sess);
26
+    if (!sess) {
27
+        ogs_warn("No Context");
28
+        status = OGS_SBI_HTTP_STATUS_NOT_FOUND;
29
+    }
30
 
31
     if (rsp->cause.presence) {
32
         if (rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
33
@@ -662,6 +669,8 @@
34
         return status;
35
     }
36
 
37
+    ogs_assert(sess);
38
+
39
     return status;
40
 }
41
 
42
@@ -794,7 +803,6 @@
43
 
44
     OGS_LIST(pdr_to_create_list);
45
 
46
-    ogs_assert(sess);
47
     ogs_assert(xact);
48
     ogs_assert(rsp);
49
 
50
@@ -823,6 +831,11 @@
51
 
52
     ogs_pfcp_xact_commit(xact);
53
 
54
+    if (!sess) {
55
+        ogs_error("No Context");
56
+        return;
57
+    }
58
+
59
     if (rsp->cause.presence) {
60
         if (rsp->cause.u8 != OGS_PFCP_CAUSE_REQUEST_ACCEPTED) {
61
             ogs_error("PFCP Cause %d : Not Accepted", rsp->cause.u8);
62
@@ -1098,7 +1111,6 @@
63
     uint16_t pdr_id = 0;
64
     unsigned int i;
65
 
66
-    ogs_assert(sess);
67
     ogs_assert(pfcp_xact);
68
     ogs_assert(pfcp_req);
69
 
70
@@ -1106,6 +1118,11 @@
71
 
72
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
73
 
74
+    if (!sess) {
75
+        ogs_warn("No Context");
76
+        cause_value = OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND;
77
+    }
78
+
79
     if (pfcp_req->report_type.presence == 0) {
80
         ogs_error("No Report Type");
81
         cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
82
@@ -1118,6 +1135,7 @@
83
         return;
84
     }
85
 
86
+    ogs_assert(sess);
87
     report_type.value = pfcp_req->report_type.u8;
88
 
89
     if (report_type.downlink_data_report) {
90
open5gs_2.4.8.202206300002.tar.xz/src/smf/pfcp-path.c -> open5gs_2.4.8.202207010002.tar.xz/src/smf/pfcp-path.c Changed
42
 
1
@@ -329,8 +329,6 @@
2
     ogs_assert(sess);
3
     ogs_assert(xact);
4
 
5
-    xact->local_seid = sess->smf_n4_seid;
6
-
7
     memset(&h, 0, sizeof(ogs_pfcp_header_t));
8
     h.type = OGS_PFCP_SESSION_MODIFICATION_REQUEST_TYPE;
9
     h.seid = sess->upf_n4_seid;
10
@@ -402,6 +400,7 @@
11
     ogs_expect_or_return_val(xact, OGS_ERROR);
12
 
13
     xact->assoc_stream = stream;
14
+    xact->local_seid = sess->smf_n4_seid;
15
     xact->modify_flags = flags | OGS_PFCP_MODIFY_SESSION;
16
 
17
     ogs_list_init(&sess->pdr_to_modify_list);
18
@@ -428,6 +427,7 @@
19
     ogs_expect_or_return_val(xact, OGS_ERROR);
20
 
21
     xact->assoc_stream = stream;
22
+    xact->local_seid = sess->smf_n4_seid;
23
     xact->modify_flags = flags | OGS_PFCP_MODIFY_SESSION;
24
 
25
     rv = smf_pfcp_send_modify_list(
26
@@ -519,6 +519,7 @@
27
 
28
     xact->epc = true; /* EPC PFCP transaction */
29
     xact->assoc_xact = gtp_xact;
30
+    xact->local_seid = sess->smf_n4_seid;
31
     xact->modify_flags = flags | OGS_PFCP_MODIFY_SESSION;
32
 
33
     xact->gtp_pti = gtp_pti;
34
@@ -557,6 +558,7 @@
35
 
36
     xact->epc = true; /* EPC PFCP transaction */
37
     xact->assoc_xact = gtp_xact;
38
+    xact->local_seid = sess->smf_n4_seid;
39
     xact->modify_flags = flags;
40
 
41
     xact->gtp_pti = gtp_pti;
42
open5gs_2.4.8.202206300002.tar.xz/src/smf/pfcp-sm.c -> open5gs_2.4.8.202207010002.tar.xz/src/smf/pfcp-sm.c Changed
59
 
1
@@ -221,12 +221,26 @@
2
             break;
3
         case OGS_PFCP_SESSION_ESTABLISHMENT_RESPONSE_TYPE:
4
             if (!message->h.seid_presence) ogs_error("No SEID");
5
-            ogs_assert(sess);
6
+
7
+            if (!sess) {
8
+                ogs_gtp_xact_t *gtp_xact = xact->assoc_xact;
9
+                ogs_assert(gtp_xact);
10
+                if (gtp_xact->gtp_version == 1)
11
+                    ogs_gtp1_send_error_message(gtp_xact, 0,
12
+                            OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE,
13
+                            OGS_GTP1_CAUSE_CONTEXT_NOT_FOUND);
14
+                else
15
+                    ogs_gtp2_send_error_message(gtp_xact, 0,
16
+                            OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
17
+                            OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND);
18
+                break;
19
+            }
20
             ogs_fsm_dispatch(&sess->sm, e);
21
             break;
22
 
23
         case OGS_PFCP_SESSION_MODIFICATION_RESPONSE_TYPE:
24
             if (!message->h.seid_presence) ogs_error("No SEID");
25
+
26
             if (xact->epc)
27
                 smf_epc_n4_handle_session_modification_response(
28
                     sess, xact, e->gtp2_message,
29
@@ -238,12 +252,28 @@
30
 
31
         case OGS_PFCP_SESSION_DELETION_RESPONSE_TYPE:
32
             if (!message->h.seid_presence) ogs_error("No SEID");
33
-            ogs_assert(sess);
34
+
35
+            if (!sess) {
36
+                ogs_gtp_xact_t *gtp_xact = xact->assoc_xact;
37
+                if (!gtp_xact)
38
+                        break;
39
+                if (gtp_xact->gtp_version == 1)
40
+                    ogs_gtp1_send_error_message(gtp_xact, 0,
41
+                            OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE,
42
+                            OGS_GTP1_CAUSE_CONTEXT_NOT_FOUND);
43
+                else
44
+                    ogs_gtp2_send_error_message(gtp_xact, 0,
45
+                            OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
46
+                            OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND);
47
+                break;
48
+            }
49
+
50
             ogs_fsm_dispatch(&sess->sm, e);
51
             break;
52
 
53
         case OGS_PFCP_SESSION_REPORT_REQUEST_TYPE:
54
             if (!message->h.seid_presence) ogs_error("No SEID");
55
+
56
             smf_n4_handle_session_report_request(
57
                 sess, xact, &message->pfcp_session_report_request);
58
             break;
59
open5gs_2.4.8.202206300002.tar.xz/src/smf/s5c-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/smf/s5c-handler.c Changed
90
 
1
@@ -556,6 +556,7 @@
2
 
3
         pfcp_xact->gtp_pti = OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED;
4
         pfcp_xact->gtp_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
5
+        pfcp_xact->local_seid = sess->smf_n4_seid;
6
 
7
         ogs_assert(gtpbuf);
8
         pfcp_xact->gtpbuf = ogs_pkbuf_copy(gtpbuf);
9
@@ -595,7 +596,6 @@
10
     smf_bearer_t *bearer = NULL;
11
     ogs_pfcp_far_t *dl_far = NULL;
12
 
13
-    ogs_assert(sess);
14
     ogs_assert(rsp);
15
 
16
     ogs_debug("Create Bearer Response");
17
@@ -615,6 +615,11 @@
18
      ************************/
19
     cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
20
 
21
+    if (!sess) {
22
+        ogs_error("No Context in TEID");
23
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
24
+    }
25
+
26
     if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
27
         ogs_assert(OGS_OK ==
28
             smf_epc_pfcp_send_one_bearer_modification_request(
29
@@ -766,7 +771,6 @@
30
     uint64_t pfcp_flags = 0;
31
     smf_bearer_t *bearer = NULL;
32
 
33
-    ogs_assert(sess);
34
     ogs_assert(rsp);
35
 
36
     ogs_debug("Update Bearer Response");
37
@@ -783,10 +787,24 @@
38
     rv = ogs_gtp_xact_commit(xact);
39
     ogs_expect(rv == OGS_OK);
40
 
41
+    /************************
42
+     * Check Session Context
43
+     ************************/
44
+    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
45
+
46
+    if (!sess) {
47
+        ogs_error("No Context in TEID");
48
+        cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
49
+    }
50
+
51
+    if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
52
+        return;
53
+    }
54
+
55
     /*****************************************
56
      * Check Mandatory/Conditional IE Missing
57
      *****************************************/
58
-    cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
59
+    ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
60
 
61
     if (rsp->bearer_contexts.presence == 0) {
62
         ogs_error("No Bearer");
63
@@ -870,7 +888,6 @@
64
     uint8_t cause_value;
65
     smf_bearer_t *bearer = NULL;
66
 
67
-    ogs_assert(sess);
68
     ogs_assert(rsp);
69
 
70
     ogs_debug("Delete Bearer Response");
71
@@ -885,10 +902,18 @@
72
     rv = ogs_gtp_xact_commit(xact);
73
     ogs_expect(rv == OGS_OK);
74
 
75
+    /************************
76
+     * Check Session Context
77
+     ************************/
78
+    if (!sess)
79
+        ogs_error("No Context in TEID");
80
+
81
     /********************
82
      * Check ALL Context
83
      ********************/
84
     ogs_assert(bearer);
85
+    sess = bearer->sess;
86
+    ogs_assert(sess);
87
 
88
     if (rsp->linked_eps_bearer_id.presence) {
89
         /*
90
open5gs_2.4.8.202206300002.tar.xz/src/smf/smf-sm.c -> open5gs_2.4.8.202207010002.tar.xz/src/smf/smf-sm.c Changed
14
 
1
@@ -179,7 +179,11 @@
2
             break;
3
         case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
4
             if (!gtp2_message.h.teid_presence) ogs_error("No TEID");
5
-            ogs_assert(sess);
6
+            if (!sess) {
7
+                /* TODO: NACK the message */
8
+                ogs_error("TODO: NACK the message");
9
+                break;
10
+            }
11
             e->sess = sess;
12
             ogs_fsm_dispatch(&sess->sm, e);
13
             break;
14
open5gs_2.4.8.202206300002.tar.xz/src/udr/nudr-handler.c -> open5gs_2.4.8.202207010002.tar.xz/src/udr/nudr-handler.c Changed
63
 
1
@@ -539,13 +539,26 @@
2
         ogs_assert(SubscribedSnssaiInfoList);
3
 
4
         for (i = 0; i < subscription_data.num_of_slice; i++) {
5
+            if (i >= OGS_MAX_NUM_OF_SLICE) {
6
+                ogs_warn("Ignore max slice count overflow %d>=%d",
7
+                    subscription_data.num_of_slice, OGS_MAX_NUM_OF_SLICE);
8
+                break;
9
+            }
10
             slice_data = &subscription_data.slicei;
11
 
12
             DnnInfoList = OpenAPI_list_create();
13
             ogs_assert(DnnInfoList);
14
 
15
             for (j = 0; j < slice_data->num_of_session; j++) {
16
-                ogs_session_t *session = &slice_data->sessionj;
17
+                ogs_session_t *session = NULL;
18
+
19
+                if (j >= OGS_MAX_NUM_OF_SESS) {
20
+                    ogs_warn("Ignore max session count overflow %d>=%d",
21
+                        slice_data->num_of_session, OGS_MAX_NUM_OF_SESS);
22
+                    break;
23
+                }
24
+
25
+                session = &slice_data->sessionj;
26
                 ogs_assert(session);
27
                 ogs_assert(session->name);
28
 
29
@@ -662,7 +675,15 @@
30
         dnnConfigurationList = OpenAPI_list_create();
31
 
32
         for (i = 0; i < slice_data->num_of_session; i++) {
33
-            ogs_session_t *session = &slice_data->sessioni;
34
+            ogs_session_t *session = NULL;
35
+
36
+            if (i >= OGS_MAX_NUM_OF_SESS) {
37
+                ogs_warn("Ignore max session count overflow %d>=%d",
38
+                    slice_data->num_of_session, OGS_MAX_NUM_OF_SESS);
39
+                break;
40
+            }
41
+
42
+            session = &slice_data->sessioni;
43
             ogs_assert(session);
44
             ogs_assert(session->name);
45
 
46
@@ -1024,7 +1045,15 @@
47
                 slice_data = &subscription_data.slice0;
48
 
49
                 for (i = 0; i < slice_data->num_of_session; i++) {
50
-                    ogs_session_t *session = &slice_data->sessioni;
51
+                    ogs_session_t *session = NULL;
52
+
53
+                    if (i >= OGS_MAX_NUM_OF_SESS) {
54
+                        ogs_warn("Ignore max session count overflow %d>=%d",
55
+                            slice_data->num_of_session, OGS_MAX_NUM_OF_SESS);
56
+                        break;
57
+                    }
58
+
59
+                    session = &slice_data->sessioni;
60
                     ogs_assert(session);
61
                     ogs_assert(session->name);
62
 
63