diff options
Diffstat (limited to 'net/socket.c')
| -rw-r--r-- | net/socket.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/net/socket.c b/net/socket.c index 769c386bd42..35bc198bbf6 100644 --- a/net/socket.c +++ b/net/socket.c @@ -87,6 +87,7 @@  #include <linux/wireless.h>  #include <linux/nsproxy.h>  #include <linux/magic.h> +#include <linux/slab.h>  #include <asm/uaccess.h>  #include <asm/unistd.h> @@ -619,10 +620,9 @@ void __sock_recv_timestamp(struct msghdr *msg, struct sock *sk,  			put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMP,  				 sizeof(tv), &tv);  		} else { -			struct timespec ts; -			skb_get_timestampns(skb, &ts); +			skb_get_timestampns(skb, &ts[0]);  			put_cmsg(msg, SOL_SOCKET, SCM_TIMESTAMPNS, -				 sizeof(ts), &ts); +				 sizeof(ts[0]), &ts[0]);  		}  	} @@ -2135,6 +2135,10 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,  			break;  		++datagrams; +		/* MSG_WAITFORONE turns on MSG_DONTWAIT after one packet */ +		if (flags & MSG_WAITFORONE) +			flags |= MSG_DONTWAIT; +  		if (timeout) {  			ktime_get_ts(timeout);  			*timeout = timespec_sub(end_time, *timeout);  |