Re: [PATCH net] inet: fix races with reqsk timers

2015-08-13 Thread Eric Dumazet
On Fri, 2015-08-14 at 00:13 +0300, Nikolay Aleksandrov wrote: > > On Aug 13, 2015, at 11:44 PM, Eric Dumazet wrote: > > > > On Thu, 2015-08-13 at 13:19 -0700, Eric Dumazet wrote: > > > >> > >> A caller handler can not call del_timer_sync() > > > > A timer handler can not call del_timer_sync()

Re: [PATCH net] inet: fix races with reqsk timers

2015-08-13 Thread Nikolay Aleksandrov
> On Aug 13, 2015, at 11:44 PM, Eric Dumazet wrote: > > On Thu, 2015-08-13 at 13:19 -0700, Eric Dumazet wrote: > >> >> A caller handler can not call del_timer_sync() > > A timer handler can not call del_timer_sync() > > I am testing a minimal fix : > > diff --git a/net/ipv4/inet_connection_

Re: [PATCH net] inet: fix races with reqsk timers

2015-08-13 Thread Eric Dumazet
On Thu, 2015-08-13 at 13:19 -0700, Eric Dumazet wrote: > > A caller handler can not call del_timer_sync() A timer handler can not call del_timer_sync() I am testing a minimal fix : diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 05e3145f7dc3..134957159c27 1

Re: [PATCH net] inet: fix races with reqsk timers

2015-08-13 Thread Eric Dumazet
On Mon, 2015-08-10 at 21:18 -0700, David Miller wrote: > From: Eric Dumazet > Date: Mon, 10 Aug 2015 09:09:13 -0700 > > > From: Eric Dumazet > > > > reqsk_queue_destroy() and reqsk_queue_unlink() should use > > del_timer_sync() instead of del_timer() before calling reqsk_put(), > > otherwise we

Re: [PATCH net] inet: fix races with reqsk timers

2015-08-10 Thread David Miller
From: Eric Dumazet Date: Mon, 10 Aug 2015 09:09:13 -0700 > From: Eric Dumazet > > reqsk_queue_destroy() and reqsk_queue_unlink() should use > del_timer_sync() instead of del_timer() before calling reqsk_put(), > otherwise we could free a req still used by another cpu. > > But before doing so,

[PATCH net] inet: fix races with reqsk timers

2015-08-10 Thread Eric Dumazet
From: Eric Dumazet reqsk_queue_destroy() and reqsk_queue_unlink() should use del_timer_sync() instead of del_timer() before calling reqsk_put(), otherwise we could free a req still used by another cpu. But before doing so, reqsk_queue_destroy() must release syn_wait_lock spinlock or risk a dead