Commit 6825a26c2dc21eb4f8df9c06d3786ddec97cf53b
Committed by
David S. Miller
1 parent
32418cfe49
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
ipv6: release reference of ip6_null_entry's dst entry in __ip6_del_rt
as we hold dst_entry before we call __ip6_del_rt, so we should alse call dst_release not only return -ENOENT when the rt6_info is ip6_null_entry. and we already hold the dst entry, so I think it's safe to call dst_release out of the write-read lock. Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 1 changed file with 6 additions and 5 deletions Side-by-side Diff
net/ipv6/route.c
... | ... | @@ -1593,17 +1593,18 @@ |
1593 | 1593 | struct fib6_table *table; |
1594 | 1594 | struct net *net = dev_net(rt->dst.dev); |
1595 | 1595 | |
1596 | - if (rt == net->ipv6.ip6_null_entry) | |
1597 | - return -ENOENT; | |
1596 | + if (rt == net->ipv6.ip6_null_entry) { | |
1597 | + err = -ENOENT; | |
1598 | + goto out; | |
1599 | + } | |
1598 | 1600 | |
1599 | 1601 | table = rt->rt6i_table; |
1600 | 1602 | write_lock_bh(&table->tb6_lock); |
1601 | - | |
1602 | 1603 | err = fib6_del(rt, info); |
1603 | - dst_release(&rt->dst); | |
1604 | - | |
1605 | 1604 | write_unlock_bh(&table->tb6_lock); |
1606 | 1605 | |
1606 | +out: | |
1607 | + dst_release(&rt->dst); | |
1607 | 1608 | return err; |
1608 | 1609 | } |
1609 | 1610 |