tcp: fix FIONREAD/SIOCINQ
authorEric Dumazet <edumazet@google.com>
Thu, 18 Oct 2012 09:14:12 +0000 (09:14 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 17 Nov 2012 21:18:52 +0000 (13:18 -0800)
commit48ff12fe363a34b854b1703ecb62d57cf9c65e9c
tree7d2b3c92f13b4f6944a6ed878c549ba7dab47567
parentdd2a911bc67a0c2ccf80f89f9aeb8e26fcd45ab1
tcp: fix FIONREAD/SIOCINQ

[ Upstream commit a3374c42aa5f7237e87ff3b0622018636b0c847e ]

tcp_ioctl() tries to take into account if tcp socket received a FIN
to report correct number bytes in receive queue.

But its flaky because if the application ate the last skb,
we return 1 instead of 0.

Correct way to detect that FIN was received is to test SOCK_DONE.

Reported-by: Elliot Hughes <enh@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/ipv4/tcp.c