xfrm: Fix wraparound in xfrm_policy_addr_delta()
authorVisa Hankala <visa@hankala.org>
Wed, 30 Dec 2020 16:15:53 +0000 (16:15 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Feb 2021 22:28:45 +0000 (23:28 +0100)
commit6daa52884c3fd8f534b7ebfd784111cea69daa9d
tree7e19e83c726678d2b0ce9e2cd1030ada6b01f614
parent8ea899803bb5c9d3cfb60d75d0c40f68f8227abe
xfrm: Fix wraparound in xfrm_policy_addr_delta()

[ Upstream commit da64ae2d35d3673233f0403b035d4c6acbf71965 ]

Use three-way comparison for address components to avoid integer
wraparound in the result of xfrm_policy_addr_delta(). This ensures
that the search trees are built and traversed correctly.

Treat IPv4 and IPv6 similarly by returning 0 when prefixlen == 0.
Prefix /0 has only one equivalence class.

Fixes: 9cf545ebd591d ("xfrm: policy: store inexact policies in a tree ordered by destination address")
Signed-off-by: Visa Hankala <visa@hankala.org>
Acked-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/xfrm/xfrm_policy.c
tools/testing/selftests/net/xfrm_policy.sh