net: unix: allow set_peek_off to fail

[ Upstream commit 12663bfc97 ]

unix_dgram_recvmsg() will hold the readlock of the socket until recv
is complete.

In the same time, we may try to setsockopt(SO_PEEK_OFF) which will hang until
unix_dgram_recvmsg() will complete (which can take a while) without allowing
us to break out of it, triggering a hung task spew.

Instead, allow set_peek_off to fail, this way userspace will not hang.

Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
Acked-by: Pavel Emelyanov <xemul@parallels.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Sasha Levin
2013-12-07 17:26:27 -05:00
committed by Greg Kroah-Hartman
parent 90af0bf930
commit d90d9ff6ca
3 changed files with 8 additions and 4 deletions

View File

@@ -885,7 +885,7 @@ set_rcvbuf:
case SO_PEEK_OFF:
if (sock->ops->set_peek_off)
sock->ops->set_peek_off(sk, val);
ret = sock->ops->set_peek_off(sk, val);
else
ret = -EOPNOTSUPP;
break;