From 767804d95d4d8eec4df98fd875994594b1104352 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 17 Nov 2015 14:24:46 +0100 Subject: [PATCH] gtphub: fix number map range for TEIs. Use unsigned int for nr_map, just large enough to fit the TEI space. Adjust log output formats and casts accordingly. Fixes: TEIs are uint32_t, but the nr_map so far used int. This would cause TEIs from 0x80000000 on to be handled and printed as a negative value. Sponsored-by: On-Waves ehi --- openbsc/include/openbsc/gtphub.h | 2 +- openbsc/src/gprs/gtphub.c | 15 ++++++++------- openbsc/tests/gtphub/gtphub_test.c | 6 +++--- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/openbsc/include/openbsc/gtphub.h b/openbsc/include/openbsc/gtphub.h index 68cf90e6..c43a3286 100644 --- a/openbsc/include/openbsc/gtphub.h +++ b/openbsc/include/openbsc/gtphub.h @@ -249,7 +249,7 @@ int expiry_tick(struct expiry *exq, time_t now); * NULL, no deallocation will be done (allowing statically allocated entries). */ -typedef int nr_t; +typedef unsigned int nr_t; /* Generator for unused numbers. So far this counts upwards from zero, but the * implementation may change in the future. Treat this like an opaque struct. diff --git a/openbsc/src/gprs/gtphub.c b/openbsc/src/gprs/gtphub.c index f21eb98d..ef622a68 100644 --- a/openbsc/src/gprs/gtphub.c +++ b/openbsc/src/gprs/gtphub.c @@ -914,10 +914,10 @@ static void gtphub_mapping_del_cb(struct expiring_item *expi) /* Just for log */ struct gtphub_peer_port *from = nrm->origin; OSMO_ASSERT(from); - LOG(LOGL_DEBUG, "expired: %d: nr mapping from %s: %d->%d\n", + LOG(LOGL_DEBUG, "expired: %d: nr mapping from %s: %u->%u\n", (int)nrm->expiry_entry.expiry, gtphub_port_str(from), - (int)nrm->orig, (int)nrm->repl); + (unsigned int)nrm->orig, (unsigned int)nrm->repl); gtphub_port_ref_count_dec(from); @@ -960,10 +960,10 @@ static uint32_t gtphub_tei_mapping_have(struct gtphub *hub, { struct nr_mapping *nrm = gtphub_mapping_have(&hub->tei_map[plane_idx], from, orig_tei, now); - LOG(LOGL_DEBUG, "New %s TEI: (from %s, TEI %d) <-- TEI %d\n", + LOG(LOGL_DEBUG, "New %s TEI: (from %s, TEI %u) <-- TEI %u\n", gtphub_plane_idx_names[plane_idx], gtphub_port_str(from), - (int)orig_tei, (int)nrm->repl); + (unsigned int)orig_tei, (unsigned int)nrm->repl); return (uint32_t)nrm->repl; } @@ -1046,8 +1046,9 @@ static int gtphub_unmap_header_tei(struct gtphub_peer_port **to_port_p, uint32_t unmapped_tei = nrm->orig; set_tei(p, unmapped_tei); - LOG(LOGL_DEBUG, "Unmapped TEI coming from %s: %d -> %d (to %s)\n", - gtphub_port_str(from_port), tei, unmapped_tei, + LOG(LOGL_DEBUG, "Unmapped TEI coming from %s: %u -> %u (to %s)\n", + gtphub_port_str(from_port), + (unsigned int)tei, (unsigned int)unmapped_tei, gtphub_port_str2(to_port)); *to_port_p = to_port; @@ -1240,7 +1241,7 @@ static int gtphub_unmap(struct gtphub *hub, gtphub_peer_str(from_peer), (int)p->seq, gtphub_port_str(from_seq), - (int)p->header_tei, + (unsigned int)p->header_tei, gtphub_port_str2(from_tei) ); } diff --git a/openbsc/tests/gtphub/gtphub_test.c b/openbsc/tests/gtphub/gtphub_test.c index 12c9d782..2fa28c2f 100644 --- a/openbsc/tests/gtphub/gtphub_test.c +++ b/openbsc/tests/gtphub/gtphub_test.c @@ -233,9 +233,9 @@ static int nr_map_is(struct nr_map *map, const char *str) size_t len = sizeof(buf); struct nr_mapping *m; llist_for_each_entry(m, &map->mappings, entry) { - size_t wrote = snprintf(pos, len, "(%d->%d@%d), ", - (int)m->orig, - (int)m->repl, + size_t wrote = snprintf(pos, len, "(%u->%u@%d), ", + m->orig, + m->repl, (int)m->expiry_entry.expiry); OSMO_ASSERT(wrote < len); pos += wrote;