From: Eric Dumazet Date: Fri, 23 Oct 2015 17:59:16 +0000 (-0700) Subject: af_unix: do not report POLLOUT on listeners X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=1586a5877db9eee313379738d6581bc7c6ffb5e3;p=deliverable%2Flinux.git af_unix: do not report POLLOUT on listeners poll(POLLOUT) on a listener should not report fd is ready for a write(). This would break some applications using poll() and pfd.events = -1, as they would not block in poll() Signed-off-by: Eric Dumazet Reported-by: Alan Burlison Tested-by: Eric Dumazet Signed-off-by: David S. Miller --- diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 94f658235fb4..aaa0b58d6aba 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -326,9 +326,10 @@ found: return s; } -static inline int unix_writable(struct sock *sk) +static int unix_writable(const struct sock *sk) { - return (atomic_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf; + return sk->sk_state != TCP_LISTEN && + (atomic_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf; } static void unix_write_space(struct sock *sk)