X-Git-Url: https://bbs.cooldavid.org/git/?a=blobdiff_plain;f=net%2Fcompat.c;h=3649d58953615fea0c0e1d1b5ba8882632df7676;hb=54aafbd4989a684ca876e49bf3e6eb931654dc02;hp=63d260e8147290520212f50f1df27e638af9fe9e;hpb=1b68c9596ce17a1e06918ed65fc3d19b92b04aab;p=net-next-2.6.git 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;