diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-02-24 15:04:47 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-02-24 19:26:42 +0100 |
commit | 84de287da02f0c4392a8b1d482ee5d4d3bb4a8ff (patch) | |
tree | d3be0c7b7f337c38940ecf3f56c1a75c26f2d082 | |
parent | d7f8a1c16e8a6337539b5dae291f435cf0cf426e (diff) |
paging: Drop + Log paging requests for non-existant paging groups
Change-Id: Id02c8fea51c1260f1baae8566c67bafc5bdb970e
Related: OS#2992
-rw-r--r-- | src/common/paging.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/common/paging.c b/src/common/paging.c index d796176e..c5c23d76 100644 --- a/src/common/paging.c +++ b/src/common/paging.c @@ -35,6 +35,7 @@ #include <osmocom/gsm/protocol/gsm_04_08.h> #include <osmocom/gsm/gsm0502.h> +#include <osmocom/gsm/gsm48.h> #include <osmo-bts/bts.h> #include <osmo-bts/rsl.h> @@ -177,10 +178,18 @@ int paging_add_identity(struct paging_state *ps, uint8_t paging_group, const uint8_t *identity_lv, uint8_t chan_needed) { struct llist_head *group_q = &ps->paging_queue[paging_group]; + int blocks = gsm48_number_of_paging_subchannels(&ps->chan_desc); struct paging_record *pr; rate_ctr_inc2(ps->btsb->bts->ctrs, BTS_CTR_PAGING_RCVD); + if (paging_group >= blocks) { + LOGP(DPAG, LOGL_ERROR, "BSC Send PAGING for group %u, but number of paging " + "sub-channels is only %u\n", paging_group, blocks); + rate_ctr_inc2(ps->btsb->bts->ctrs, BTS_CTR_PAGING_DROP); + return -EINVAL; + } + if (ps->num_paging >= ps->num_paging_max) { LOGP(DPAG, LOGL_NOTICE, "Dropping paging, queue full (%u)\n", ps->num_paging); |