summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Machata <petrm@mellanox.com>2018-05-15 00:59:59 +0300
committerTobias Klauser <tklauser@distanz.ch>2018-05-15 09:05:52 +0200
commitf6d450a5e4054b7ac17b73fb5081a55479c327d6 (patch)
treed41ff0e69179a89bf8623a8287cf6bb7edea9f45
parentc44813eb1a7546f77b00ae9d1702d8f5c47b7d40 (diff)
mausezahn: Fix IPv6 address comparison
CMP_INT evaluates its arguments more than once, and thus passing a post-incremented pointer as an argument causes double increments and hence buffer overruns. This can be observed by erratic behavior of IPv6 address ranges. Fix by moving the increment to loop header. Signed-off-by: Petr Machata <petrm@mellanox.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-rw-r--r--staging/tools.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/staging/tools.c b/staging/tools.c
index 9d2d1be..72445b6 100644
--- a/staging/tools.c
+++ b/staging/tools.c
@@ -233,8 +233,8 @@ int in6_addr_cmp(struct libnet_in6_addr addr1,
*p2 = addr2.__u6_addr.__u6_addr32;
int i, val = 0;
- for (i = 0; i < 4; i++) {
- val = CMP_INT(ntohl(*p1++), ntohl(*p2++));
+ for (i = 0; i < 4; i++, p1++, p2++) {
+ val = CMP_INT(ntohl(*p1), ntohl(*p2));
if (val) {
break;
}