]> git.baikalelectronics.ru Git - kernel.git/commit
PPPoE: Fix flush/close races.
authorMichal Ostrowski <mostrows@gmail.com>
Mon, 26 Oct 2009 23:23:20 +0000 (16:23 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 26 Oct 2009 23:23:20 +0000 (16:23 -0700)
commit7d7fe38e1c3ae985c6929efaaa20970a3594b574
treed3f5f15e9840964657bf40326705d79abe06e9e1
parent72e2d8b1036fe757f48f53b7e8cf144e90723b7f
PPPoE: Fix flush/close races.

Be more careful about the state of pointers during tear-down.
The "pppoe_dev" field can only be looked at safely while holding socket locks.
This subsequently allows for the flush_lock to be killed.

We depend on the PPPOX_CONNECTED state to tell us that that those fields are
valid, so whoever clears that state (pppox_unbind_sock()) is responsible for
the dev_put() call.

We also have to ensure that we delete_item() on all sockets before they are
cleaned up.

The need for these changes has been exposed by scenarios wherein namespace
bindings of ethernet devices change while there are ongoing PPPoE sessions,
which resulted in oopses due to unusual socket connection termination paths,
exposing these issues.

Signed-off-by: Michal Ostrowski <mostrows@gmail.com>
Reviewed-by: Cyril Gorcunov <gorcunov@gmail.com>
Reported-by: Denys Fedoryschenko <denys@visp.net.lb>
Tested-by: Denys Fedoryschenko <denys@visp.net.lb>
drivers/net/pppoe.c