* [PATCH net] sock: fix sendmmsg for partial sendmsg
@ 2016-11-04 19:36 Soheil Hassas Yeganeh
2016-11-05 3:10 ` Maciej Żenczykowski
2016-11-09 18:18 ` David Miller
0 siblings, 2 replies; 3+ messages in thread
From: Soheil Hassas Yeganeh @ 2016-11-04 19:36 UTC (permalink / raw)
To: davem, netdev; +Cc: edumazet, willemb, ncardwell, Soheil Hassas Yeganeh
From: Soheil Hassas Yeganeh <soheil@google.com>
Do not send the next message in sendmmsg for partial sendmsg
invocations.
sendmmsg assumes that it can continue sending the next message
when the return value of the individual sendmsg invocations
is positive. It results in corrupting the data for TCP,
SCTP, and UNIX streams.
For example, sendmmsg([["abcd"], ["efgh"]]) can result in a stream
of "aefgh" if the first sendmsg invocation sends only the first
byte while the second sendmsg goes through.
Datagram sockets either send the entire datagram or fail, so
this patch affects only sockets of type SOCK_STREAM and
SOCK_SEQPACKET.
Fixes: 228e548e6020 ("net: Add sendmmsg socket system call")
Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
---
net/socket.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/socket.c b/net/socket.c
index 5a9bf5e..272518b 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -2038,6 +2038,8 @@ int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
if (err)
break;
++datagrams;
+ if (msg_data_left(&msg_sys))
+ break;
cond_resched();
}
--
2.8.0.rc3.226.g39d4020
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH net] sock: fix sendmmsg for partial sendmsg
2016-11-04 19:36 [PATCH net] sock: fix sendmmsg for partial sendmsg Soheil Hassas Yeganeh
@ 2016-11-05 3:10 ` Maciej Żenczykowski
2016-11-09 18:18 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: Maciej Żenczykowski @ 2016-11-05 3:10 UTC (permalink / raw)
To: Soheil Hassas Yeganeh
Cc: David Miller, Linux NetDev, Eric Dumazet, Willem de Bruijn,
Neal Cardwell, Soheil Hassas Yeganeh
Acked-by: Maciej Żenczykowski <maze@google.com>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net] sock: fix sendmmsg for partial sendmsg
2016-11-04 19:36 [PATCH net] sock: fix sendmmsg for partial sendmsg Soheil Hassas Yeganeh
2016-11-05 3:10 ` Maciej Żenczykowski
@ 2016-11-09 18:18 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: David Miller @ 2016-11-09 18:18 UTC (permalink / raw)
To: soheil.kdev; +Cc: netdev, edumazet, willemb, ncardwell, soheil
From: Soheil Hassas Yeganeh <soheil.kdev@gmail.com>
Date: Fri, 4 Nov 2016 15:36:49 -0400
> From: Soheil Hassas Yeganeh <soheil@google.com>
>
> Do not send the next message in sendmmsg for partial sendmsg
> invocations.
>
> sendmmsg assumes that it can continue sending the next message
> when the return value of the individual sendmsg invocations
> is positive. It results in corrupting the data for TCP,
> SCTP, and UNIX streams.
>
> For example, sendmmsg([["abcd"], ["efgh"]]) can result in a stream
> of "aefgh" if the first sendmsg invocation sends only the first
> byte while the second sendmsg goes through.
>
> Datagram sockets either send the entire datagram or fail, so
> this patch affects only sockets of type SOCK_STREAM and
> SOCK_SEQPACKET.
>
> Fixes: 228e548e6020 ("net: Add sendmmsg socket system call")
> Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Signed-off-by: Willem de Bruijn <willemb@google.com>
> Signed-off-by: Neal Cardwell <ncardwell@google.com>
Applied and queued up for -stable, thanks.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-11-09 18:18 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-04 19:36 [PATCH net] sock: fix sendmmsg for partial sendmsg Soheil Hassas Yeganeh
2016-11-05 3:10 ` Maciej Żenczykowski
2016-11-09 18:18 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).