[ovs-dev] [backport branch-2.3] route-table: Make route-table module thread-safe.
Alex Wang
alexw at nicira.com
Mon Jul 21 17:43:08 UTC 2014
Thx, backported to branch-2.3 with suggested changes,
On Mon, Jul 21, 2014 at 8:57 AM, Ben Pfaff <blp at nicira.com> wrote:
> On Sun, Jul 20, 2014 at 12:43:41AM -0700, Alex Wang wrote:
> > From: Ryan Wilson <wryan at nicira.com>
> >
> > Since the use of xcache, the netdev struct can be freed by the
> > revalidator threads. This fact also makes the following race possible:
> >
> > 1. Consider there is a gre tunnel, and datapath flows that go through
> > the tunnel. Now, assume user deletes the tunnel port.
> > 2. The main thread closes all of its references to the corresponding
> > netdev struct.
> > 3. If the ukey for the tunnel datapath flows hold the last reference
> > to the old port's netdev, the revalidator will then close it
> > and remove the netlink notifier struct (if the netdev is the last
> > vport netdev).
> > 4. However, if the main thread executes the netdev_vport_run(), and
> > sees the existence of netlink notifier struct (before revalidator
> > frees it), it will try polling updates from the notifier socket.
> > And when it polls the socket fd, the fd has already been freed,
> > and poll will keep failing with "Bad file descriptor".
> >
> > This race has already been fixed on master by commit 3c27dbe6 (route
> > -table: Make route-table module thread-safe.). This commit backports
> > it to branch-2.3.
> >
> > VMware-BZ: #1287360
> >
> > Signed-off-by: Alex Wang <alexw at nicira.com>
>
> This should reproduce Ryan's Signed-off-by from the original commit.
>
> Acked-by: Ben Pfaff <blp at nicira.com>
>
More information about the dev
mailing list