summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2007-10-10 03:21:37 -0700
committerGreg Kroah-Hartman <gregkh@suse.de>2007-11-02 08:44:10 -0700
commit791333baf11dbf37dd8f566909f8c1d5b939bf04 (patch)
tree5ec9088b78ad051f2a58aa2d327e656604a4017a
parentf7c6bfbbb4a3c06015c2ce4098000a4d037098db (diff)
Fix zero length socket write() semantics.
changeset e79ad711a0108475c1b3a03815527e7237020b08 from mainline. This fixes kernel bugzilla #5731 It should generate an empty packet for datagram protocols when the socket is connected, for one. The check is doubly-wrong because all that a write() can be is a sendmsg() call with a NULL msg_control and a single entry iovec. No special semantics should be assigned to it, therefore the zero length check should be removed entirely. This matches the behavior of BSD and several other systems. Alan Cox notes that SuSv3 says the behavior of a zero length write on non-files is "unspecified", but that's kind of useless since BSD has defined this behavior for a quarter century and BSD is essentially what application folks code to. Based upon a patch from Stephen Hemminger. Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--net/socket.c3
1 files changed, 0 insertions, 3 deletions
diff --git a/net/socket.c b/net/socket.c
index 0010da086acf..48bd793ecc1c 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -778,9 +778,6 @@ static ssize_t sock_aio_write(struct kiocb *iocb, const struct iovec *iov,
if (pos != 0)
return -ESPIPE;
- if (iocb->ki_left == 0) /* Match SYS5 behaviour */
- return 0;
-
x = alloc_sock_iocb(iocb, &siocb);
if (!x)
return -ENOMEM;