mirror of
git://git.code.sf.net/p/xtables-addons/xtables-addons
synced 2025-09-06 12:45:13 +02:00
xt_geoip: avoid recursive function calls
The stack memory is very limited in Linux kernel. Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
This commit is contained in:

committed by
Jan Engelhardt

parent
757bf0e993
commit
a5355e74ea
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
HEAD
|
HEAD
|
||||||
====
|
====
|
||||||
|
Changes:
|
||||||
|
- xt_geoip: avoid recursive function calls
|
||||||
|
|
||||||
|
|
||||||
v1.35 (2011-04-11)
|
v1.35 (2011-04-11)
|
||||||
|
@@ -167,16 +167,20 @@ static bool geoip_bsearch6(const struct geoip_subnet6 *range,
|
|||||||
{
|
{
|
||||||
int mid;
|
int mid;
|
||||||
|
|
||||||
if (hi <= lo)
|
while (true) {
|
||||||
return false;
|
if (hi <= lo)
|
||||||
mid = (lo + hi) / 2;
|
return false;
|
||||||
if (ipv6_cmp(&range[mid].begin, addr) <= 0 &&
|
mid = (lo + hi) / 2;
|
||||||
ipv6_cmp(addr, &range[mid].end) <= 0)
|
if (ipv6_cmp(&range[mid].begin, addr) <= 0 &&
|
||||||
return true;
|
ipv6_cmp(addr, &range[mid].end) <= 0)
|
||||||
if (ipv6_cmp(&range[mid].begin, addr) > 0)
|
return true;
|
||||||
return geoip_bsearch6(range, addr, lo, mid);
|
if (ipv6_cmp(&range[mid].begin, addr) > 0)
|
||||||
else if (ipv6_cmp(&range[mid].end, addr) < 0)
|
hi = mid;
|
||||||
return geoip_bsearch6(range, addr, mid + 1, hi);
|
else if (ipv6_cmp(&range[mid].end, addr) < 0)
|
||||||
|
lo = mid + 1;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
WARN_ON(true);
|
WARN_ON(true);
|
||||||
return false;
|
return false;
|
||||||
@@ -218,15 +222,19 @@ static bool geoip_bsearch4(const struct geoip_subnet4 *range,
|
|||||||
{
|
{
|
||||||
int mid;
|
int mid;
|
||||||
|
|
||||||
if (hi <= lo)
|
while (true) {
|
||||||
return false;
|
if (hi <= lo)
|
||||||
mid = (lo + hi) / 2;
|
return false;
|
||||||
if (range[mid].begin <= addr && addr <= range[mid].end)
|
mid = (lo + hi) / 2;
|
||||||
return true;
|
if (range[mid].begin <= addr && addr <= range[mid].end)
|
||||||
if (range[mid].begin > addr)
|
return true;
|
||||||
return geoip_bsearch4(range, addr, lo, mid);
|
if (range[mid].begin > addr)
|
||||||
else if (range[mid].end < addr)
|
hi = mid;
|
||||||
return geoip_bsearch4(range, addr, mid + 1, hi);
|
else if (range[mid].end < addr)
|
||||||
|
lo = mid + 1;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
WARN_ON(true);
|
WARN_ON(true);
|
||||||
return false;
|
return false;
|
||||||
|
Reference in New Issue
Block a user