diff options
author | Marko Zec <zec@FreeBSD.org> | 2021-09-15 20:23:17 +0000 |
---|---|---|
committer | Marko Zec <zec@FreeBSD.org> | 2021-09-15 20:42:48 +0000 |
commit | 442c8a245ee3c6640fc9321e18e8316edf469805 (patch) | |
tree | 127ab94de16be495888d0d5eb9583cc875d6217e | |
parent | 0cd6e85e242bb07a33df9a6314e90bcb0ba99576 (diff) | |
download | src-442c8a245ee3c6640fc9321e18e8316edf469805.tar.gz src-442c8a245ee3c6640fc9321e18e8316edf469805.zip |
[fib algo][dxr] Fix undefined behavior.
The result of shifting uint32_t by 32 (or more) is undefined: fix it.
-rw-r--r-- | sys/netinet/in_fib_dxr.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/netinet/in_fib_dxr.c b/sys/netinet/in_fib_dxr.c index ec32819a5a6d..7afe2a3da024 100644 --- a/sys/netinet/in_fib_dxr.c +++ b/sys/netinet/in_fib_dxr.c @@ -1150,7 +1150,10 @@ dxr_change_rib_batch(struct rib_head *rnh, struct fib_change_queue *q, #endif plen = q->entries[ui].plen; ip = ntohl(q->entries[ui].addr4.s_addr); - hmask = 0xffffffffU >> plen; + if (plen < 32) + hmask = 0xffffffffU >> plen; + else + hmask = 0; start = (ip & ~hmask) >> DXR_RANGE_SHIFT; end = (ip | hmask) >> DXR_RANGE_SHIFT; |