diff options
Diffstat (limited to 'net/socket.c')
-rw-r--r-- | net/socket.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/socket.c b/net/socket.c index 310d16b1b3c9..65b2310a2cb2 100644 --- a/net/socket.c +++ b/net/socket.c | |||
@@ -2122,14 +2122,16 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen, | |||
2122 | */ | 2122 | */ |
2123 | if (MSG_CMSG_COMPAT & flags) { | 2123 | if (MSG_CMSG_COMPAT & flags) { |
2124 | err = __sys_recvmsg(sock, (struct msghdr __user *)compat_entry, | 2124 | err = __sys_recvmsg(sock, (struct msghdr __user *)compat_entry, |
2125 | &msg_sys, flags, datagrams); | 2125 | &msg_sys, flags & ~MSG_WAITFORONE, |
2126 | datagrams); | ||
2126 | if (err < 0) | 2127 | if (err < 0) |
2127 | break; | 2128 | break; |
2128 | err = __put_user(err, &compat_entry->msg_len); | 2129 | err = __put_user(err, &compat_entry->msg_len); |
2129 | ++compat_entry; | 2130 | ++compat_entry; |
2130 | } else { | 2131 | } else { |
2131 | err = __sys_recvmsg(sock, (struct msghdr __user *)entry, | 2132 | err = __sys_recvmsg(sock, (struct msghdr __user *)entry, |
2132 | &msg_sys, flags, datagrams); | 2133 | &msg_sys, flags & ~MSG_WAITFORONE, |
2134 | datagrams); | ||
2133 | if (err < 0) | 2135 | if (err < 0) |
2134 | break; | 2136 | break; |
2135 | err = put_user(err, &entry->msg_len); | 2137 | err = put_user(err, &entry->msg_len); |