X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=net%2Fcompat.c;h=a1fb1b079a82b00bd269fa208984de34010bf7f4;hb=1223c67c0938d2df309fde618bd82c87c8c1af04;hp=6a2f75fb3f45ac102b33e08907dd7059cf78a371;hpb=65a1c4fffaaf5ca166a1263d84ca664d5192cda6;p=safe%2Fjmp%2Flinux-2.6 diff --git a/net/compat.c b/net/compat.c index 6a2f75f..a1fb1b0 100644 --- a/net/compat.c +++ b/net/compat.c @@ -754,22 +754,21 @@ asmlinkage long compat_sys_recvfrom(int fd, void __user *buf, size_t len, asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg, unsigned vlen, unsigned int flags, - struct timespec __user *timeout) + struct compat_timespec __user *timeout) { int datagrams; struct timespec ktspec; - struct compat_timespec __user *utspec = - (struct compat_timespec __user *)timeout; - if (get_user(ktspec.tv_sec, &utspec->tv_sec) || - get_user(ktspec.tv_nsec, &utspec->tv_nsec)) + if (timeout == NULL) + return __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, + flags | MSG_CMSG_COMPAT, NULL); + + if (get_compat_timespec(&ktspec, timeout)) return -EFAULT; datagrams = __sys_recvmmsg(fd, (struct mmsghdr __user *)mmsg, vlen, flags | MSG_CMSG_COMPAT, &ktspec); - if (datagrams > 0 && - (put_user(ktspec.tv_sec, &utspec->tv_sec) || - put_user(ktspec.tv_nsec, &utspec->tv_nsec))) + if (datagrams > 0 && put_compat_timespec(&ktspec, timeout)) datagrams = -EFAULT; return datagrams;