]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Flush remaining routes from the routing table during VNET shutdown.
authorAlexander V. Chernikov <melifaro@FreeBSD.org>
Mon, 8 Mar 2021 21:35:41 +0000 (21:35 +0000)
committerAlexander V. Chernikov <melifaro@FreeBSD.org>
Wed, 10 Mar 2021 21:10:14 +0000 (21:10 +0000)
commitb1d63265ac399112b3bca36c3d75df1a3c2c8102
treee78872c7a8f6b99974643cf118fd94d4dac6b9d3
parent3fa034210c75431173cb0a2375f6938386e25315
Flush remaining routes from the routing table during VNET shutdown.

Summary:
This fixes rtentry leak for the cloned interfaces created inside the
 VNET.

PR: 253998
Reported by: rashey at superbox.pl
MFC after: 3 days

Loopback teardown order is `SI_SUB_INIT_IF`, which happens after `SI_SUB_PROTO_DOMAIN` (route table teardown).
Thus, any route table operations are too late to schedule.
As the intent of the vnet teardown procedures to minimise the amount of effort by doing global cleanups instead of per-interface ones, address this by adding a relatively light-weight routing table cleanup function, `rib_flush_routes()`.
It removes all remaining routes from the routing table and schedules the deletion, which will happen later, when `rtables_destroy()` waits for the current epoch to finish.

Test Plan:
```
set_skip:set_skip_group_lo  ->  passed  [0.053s]
tail -n 200 /var/log/messages | grep rtentry
```

Reviewers: #network, kp, bz

Reviewed By: kp

Subscribers: imp, ae

Differential Revision: https://reviews.freebsd.org/D29116
sys/net/route.c
sys/net/route.h
sys/net/route/route_ctl.c
sys/netinet/ip_input.c
sys/netinet6/ip6_input.c