]> git.baikalelectronics.ru Git - kernel.git/commit
[NEIGH] Fix timer leak in neigh_changeaddr
authorHerbert Xu <herbert@gondor.apana.org.au>
Sun, 23 Oct 2005 07:18:00 +0000 (17:18 +1000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 23 Oct 2005 07:18:00 +0000 (17:18 +1000)
commitd43f19242477b1b9ee4fb3a10ec1cb277afc9f6e
treeb7a29d9344d0e6ee41d5e28f5a7b6fda5da05fa3
parent9e7f07753406ff815cc4f1862c5cd2b244805d95
[NEIGH] Fix timer leak in neigh_changeaddr

neigh_changeaddr attempts to delete neighbour timers without setting
nud_state.  This doesn't work because the timer may have already fired
when we acquire the write lock in neigh_changeaddr.  The result is that
the timer may keep firing for quite a while until the entry reaches
NEIGH_FAILED.

It should be setting the nud_state straight away so that if the timer
has already fired it can simply exit once we relinquish the lock.

In fact, this whole function is simply duplicating the logic in
neigh_ifdown which in turn is already doing the right thing when
it comes to deleting timers and setting nud_state.

So all we have to do is take that code out and put it into a common
function and make both neigh_changeaddr and neigh_ifdown call it.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
net/core/neighbour.c