mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
ipv4: avoid divide by zero in fib_rebalance
fib_rebalance() computes the total eligible nexthop weight in one pass and programs upper bounds in a second pass. A concurrent change to ignore_routes_with_linkdown can make the first pass return zero while the second pass sees an eligible nexthop, resulting in division by zero. If the first pass reports a zero total, set each nexthop upper bound to -1 and skip the division. This matches the IPv6 fix in commitd2c26c2911("ipv6: avoid divide by zero in rt6_multipath_rebalance") and preserves the lock-free rebalance path. Fixes:0e884c78ee("ipv4: L3 hash-based multipath") Cc: stable@vger.kernel.org Reported-by: Vega <vega@nebusec.ai> Signed-off-by: Zihan Xi <zihanx@nebusec.ai> Reviewed-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Link: https://patch.msgid.link/20260827182514.4667-2-zihanx@nebusec.ai Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
1b78070aae
commit
5046d2880f
|
|
@ -874,7 +874,7 @@ static void fib_rebalance(struct fib_info *fi)
|
|||
change_nexthops(fi) {
|
||||
int upper_bound;
|
||||
|
||||
if (nexthop_nh->fib_nh_flags & RTNH_F_DEAD) {
|
||||
if (!total || nexthop_nh->fib_nh_flags & RTNH_F_DEAD) {
|
||||
upper_bound = -1;
|
||||
} else if (ip_ignore_linkdown(nexthop_nh->fib_nh_dev) &&
|
||||
nexthop_nh->fib_nh_flags & RTNH_F_LINKDOWN) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user