aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2017-08-30 15:51:24 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2017-08-30 15:56:27 +0200
commit0ab62fe0811f6a4cf8f50c5e70908fa3935951c7 (patch)
treed90c156771b11bd8c5cf994b7b4674e1bd7a2b22
parentbdc504e29c267af29c10a04aa8afcdfbd6daea22 (diff)
ggsn: Fix DNS not sent in PDP context response
During IPv6 support implementation, helper function pco_contains_proto was added which contains an error: It is only capable of finding first protocol correctly, and as a consequence, in my setup DNS servers where not sent back to the SGSN/MS, resulting in phone being able to connect to IPs but not to domain names which required DNS resolution. The condition in the while loop is also changed to match the increment of the variable inside the loop to make it easier to understand at first glance. Fixes: 1ae98777d9b1ee62e6900caf4bb580d1a42bb416 Change-Id: Icc2e6716c33d78d3c3e000f529806228d8aa155e
-rw-r--r--ggsn/ggsn.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index c6a6dac..1e92956 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -215,14 +215,14 @@ static bool pco_contains_proto(struct ul255_t *pco, uint16_t prot)
uint8_t *cur = pco->v + 1;
/* iterate over PCO and check if protocol contained */
- while (cur + 2 < pco->v + pco->l) {
+ while (cur + 3 <= pco->v + pco->l) {
uint16_t cur_prot = osmo_load16be(cur);
uint8_t cur_len = cur[2];
if (cur_prot == prot)
return true;
if (cur_len == 0)
break;
- cur += cur_len;
+ cur += cur_len + 3;
}
return false;
}