From 967e2c186820ea9f250f3b1cd2af4a3974c4fe7e Mon Sep 17 00:00:00 2001 From: Daniel Willmann Date: Thu, 14 Jan 2021 16:58:17 +0100 Subject: 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 --- src/gb/gprs_ns2_sns.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c index 2cb42934..19584775 100644 --- a/src/gb/gprs_ns2_sns.c +++ b/src/gb/gprs_ns2_sns.c @@ -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) -- cgit v1.2.3