[NET]: Fix race condition in sk_wait_event().
authorAlexey Kuznetsov <kuznet@ms2.inr.ac.ru>
Sat, 18 Mar 2006 00:05:43 +0000 (16:05 -0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 18 Mar 2006 00:05:43 +0000 (16:05 -0800)
It is broken, the condition is checked out of socket lock. It is
wonderful the bug survived for so long time.

[ This fixes bugzilla #6233:
  race condition in tcp_sendmsg when connection became established ]

Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sock.h

index 30758035d6161b13eb7b6715978340d28058bb3f..f63d0d56712c7c13febfa7016f5cc5ef2c1f734b 100644 (file)
@@ -478,9 +478,9 @@ static inline void sk_add_backlog(struct sock *sk, struct sk_buff *skb)
        rc = __condition;                                       \
        if (!rc) {                                              \
                *(__timeo) = schedule_timeout(*(__timeo));      \
-               rc = __condition;                               \
        }                                                       \
        lock_sock(__sk);                                        \
+       rc = __condition;                                       \
        rc;                                                     \
 })