aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2014-09-19 16:14:14 +0200
committerHolger Hans Peter Freyther <holger@moiji-mobile.com>2014-10-09 17:46:06 +0200
commitba6267f05acbea1600360f40bd390a25cae50fbe (patch)
tree9667d4332c50dea55b40bb87fa7b7fca68b4bb30 /openbsc/src
parentd4c79a458b58f5d0c1061485b290d2c6fde90845 (diff)
gbproxy: Only search by valid identifiers
Don't return a link_info if TLLI is 0 resp. P-TMSI is 0xffff. These values are used for uninitialised or cleared fields and can possibly match several entries. Sponsored-by: On-Waves ehf
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/gprs/gb_proxy_tlli.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/openbsc/src/gprs/gb_proxy_tlli.c b/openbsc/src/gprs/gb_proxy_tlli.c
index f5d7ef6a7..fdb1509f8 100644
--- a/openbsc/src/gprs/gb_proxy_tlli.c
+++ b/openbsc/src/gprs/gb_proxy_tlli.c
@@ -38,6 +38,9 @@ struct gbproxy_link_info *gbproxy_link_info_by_tlli(struct gbproxy_peer *peer,
struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
+ if (!tlli)
+ return NULL;
+
llist_for_each_entry(link_info, &state->logical_links, list)
if (link_info->tlli.current == tlli ||
link_info->tlli.assigned == tlli)
@@ -53,6 +56,9 @@ struct gbproxy_link_info *gbproxy_link_info_by_ptmsi(
struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
+ if (ptmsi == GSM_RESERVED_TMSI)
+ return NULL;
+
llist_for_each_entry(link_info, &state->logical_links, list)
if (link_info->tlli.ptmsi == ptmsi)
return link_info;
@@ -67,6 +73,9 @@ struct gbproxy_link_info *gbproxy_link_info_by_any_sgsn_tlli(
struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
+ if (!tlli)
+ return NULL;
+
/* Don't care about the NSEI */
llist_for_each_entry(link_info, &state->logical_links, list)
if (link_info->sgsn_tlli.current == tlli ||
@@ -83,6 +92,9 @@ struct gbproxy_link_info *gbproxy_link_info_by_sgsn_tlli(
struct gbproxy_link_info *link_info;
struct gbproxy_patch_state *state = &peer->patch_state;
+ if (!tlli)
+ return NULL;
+
llist_for_each_entry(link_info, &state->logical_links, list)
if ((link_info->sgsn_tlli.current == tlli ||
link_info->sgsn_tlli.assigned == tlli) &&