summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2013-01-31 09:59:10 (GMT)
committerThomas Graf <tgraf@suug.ch>2013-01-31 09:59:10 (GMT)
commit87458abbd03b0928b9d2ddd84b7bcb07892450d0 (patch)
tree69603776c48f6c1b1aad13352d891c955afea067
parent73cb5f57bab8e0cbe5958ffc03dd126f14e07bf6 (diff)
downloadlibnl-87458abbd03b0928b9d2ddd84b7bcb07892450d0.zip
libnl-87458abbd03b0928b9d2ddd84b7bcb07892450d0.tar.gz
libnl-87458abbd03b0928b9d2ddd84b7bcb07892450d0.tar.bz2
Fix mask calculation in nl_addr_cmp_prefix()
Signed-off-by: Malte Langermann <mlangermann@radiodata.biz> Signed-off-by: Thomas Graf <tgraf@suug.ch>
-rw-r--r--lib/addr.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/addr.c b/lib/addr.c
index 806664b..9089be8 100644
--- a/lib/addr.c
+++ b/lib/addr.c
@@ -525,8 +525,8 @@ int nl_addr_cmp_prefix(struct nl_addr *a, struct nl_addr *b)
int bytes = len / 8;
d = memcmp(a->a_addr, b->a_addr, bytes);
- if (d == 0) {
- int mask = (1UL << (len % 8)) - 1UL;
+ if (d == 0 && (len % 8) != 0) {
+ int mask = (0xFF00 >> (len % 8)) & 0xFF;
d = (a->a_addr[bytes] & mask) -
(b->a_addr[bytes] & mask);