gprs_ns2: prevent division by zero in load_sharing

Check if the NSE is alive before passing UNITDATA to the load sharing.

Change-Id: I0e2a59bec9b72f74eb64510a2e1ad60486694a55
Fixes: OS#4996
This commit is contained in:
Alexander Couzens 2021-02-02 11:26:17 +01:00 committed by laforge
parent 9bbb703a95
commit 265a5ebac8
1 changed files with 8 additions and 1 deletions

View File

@ -365,9 +365,13 @@ static struct gprs_ns2_vc *ns2_load_sharing_modulor(
uint32_t load_selector)
{
struct gprs_ns2_vc *tmp;
uint32_t mod = (bvci + load_selector) % nse->nsvc_count;
uint32_t mod;
uint32_t i = 0;
if (nse->nsvc_count == 0)
return NULL;
mod = (bvci + load_selector) % nse->nsvc_count;
llist_for_each_entry(tmp, &nse->nsvc, list) {
if (!ns2_vc_is_unblocked(tmp))
continue;
@ -457,6 +461,9 @@ int gprs_ns2_recv_prim(struct gprs_ns2_inst *nsi, struct osmo_prim_hdr *oph)
if (!nse)
return -EINVAL;
if (!nse->alive)
return 0;
nsvc = ns2_load_sharing(nse, bvci, nsp->u.unitdata.link_selector);
/* TODO: send a status primitive back */