NS2: Fix bind selection of SNS NSVCs

The SNS code ignored the link type of the bind and just bound to every
bind it could find. This resulted in a segfault when an SNS NSVC tries
to send its UDP messages though frame relay.

Fixes: OS#4948
Change-Id: Ibb832a39876362d094cce635192f7b4f84dc2b10
This commit is contained in:
Daniel Willmann 2021-01-14 16:58:17 +01:00 committed by laforge
parent 2ecb71bcd4
commit 967e2c1868
1 changed files with 8 additions and 0 deletions

View File

@ -270,6 +270,8 @@ static void ns2_nsvc_create_ip4(struct osmo_fsm_inst *fi,
/* for every bind, create a connection if bind type == IP */
llist_for_each_entry(bind, &nsi->binding, list) {
if (bind->ll != GPRS_NS2_LL_UDP)
continue;
/* ignore failed connection */
nsvc = gprs_ns2_ip_connect_inactive(bind,
&remote,
@ -299,6 +301,8 @@ static void ns2_nsvc_create_ip6(struct osmo_fsm_inst *fi,
/* for every bind, create a connection if bind type == IP */
llist_for_each_entry(bind, &nsi->binding, list) {
if (bind->ll != GPRS_NS2_LL_UDP)
continue;
/* ignore failed connection */
nsvc = gprs_ns2_ip_connect_inactive(bind,
&remote,
@ -332,6 +336,8 @@ static int create_missing_nsvcs(struct osmo_fsm_inst *fi)
llist_for_each_entry(bind, &nse->nsi->binding, list) {
bool found = false;
if (bind->ll != GPRS_NS2_LL_UDP)
continue;
llist_for_each_entry(nsvc, &nse->nsvc, list) {
if (nsvc->bind != bind)
@ -367,6 +373,8 @@ static int create_missing_nsvcs(struct osmo_fsm_inst *fi)
llist_for_each_entry(bind, &nse->nsi->binding, list) {
bool found = false;
if (bind->ll != GPRS_NS2_LL_UDP)
continue;
llist_for_each_entry(nsvc, &nse->nsvc, list) {
if (nsvc->bind != bind)