Message ID | 20180227232240.145396-1-soheil.kdev@gmail.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] socket: skip checking sk_err for recvmmsg(MSG_ERRQUEUE) | expand |
From: Soheil Hassas Yeganeh <soheil.kdev@gmail.com> Date: Tue, 27 Feb 2018 18:22:40 -0500 > From: Soheil Hassas Yeganeh <soheil@google.com> > > recvmmsg does not call ___sys_recvmsg when sk_err is set. > That is fine for normal reads but, for MSG_ERRQUEUE, recvmmsg > should always call ___sys_recvmsg regardless of sk->sk_err to > be able to clear error queue. Otherwise, users are not able to > drain the error queue using recvmmsg. > > Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com> > Reviewed-by: Eric Dumazet <edumazet@google.com> > Signed-off-by: Willem de Bruijn <willemb@google.com> Applied, thank you.
diff --git a/net/socket.c b/net/socket.c index 645d32b4872c..d9a1ac233b35 100644 --- a/net/socket.c +++ b/net/socket.c @@ -2289,10 +2289,12 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, if (!sock) return err; - err = sock_error(sock->sk); - if (err) { - datagrams = err; - goto out_put; + if (likely(!(flags & MSG_ERRQUEUE))) { + err = sock_error(sock->sk); + if (err) { + datagrams = err; + goto out_put; + } } entry = mmsg;