X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=net%2Fcompat.c;h=3649d58953615fea0c0e1d1b5ba8882632df7676;hb=1a75972c61f2c224eb5283c183f9f6b17fb09b6b;hp=63d260e8147290520212f50f1df27e638af9fe9e;hpb=fdfb7fa7c9118a4112738ad86452a67107082723;p=~andy%2Flinux diff --git a/net/compat.c b/net/compat.c index 63d260e8147..3649d589536 100644 --- a/net/compat.c +++ b/net/compat.c @@ -41,10 +41,12 @@ static inline int iov_from_user_compat_to_kern(struct iovec *kiov, compat_size_t len; if (get_user(len, &uiov32->iov_len) || - get_user(buf, &uiov32->iov_base)) { - tot_len = -EFAULT; - break; - } + get_user(buf, &uiov32->iov_base)) + return -EFAULT; + + if (len > INT_MAX - tot_len) + len = INT_MAX - tot_len; + tot_len += len; kiov->iov_base = compat_ptr(buf); kiov->iov_len = (__kernel_size_t) len;