From ba6267f05acbea1600360f40bd390a25cae50fbe Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Fri, 19 Sep 2014 16:14:14 +0200 Subject: [PATCH] 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 --- openbsc/src/gprs/gb_proxy_tlli.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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) &&