X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=net%2Fcompat.c;h=3649d58953615fea0c0e1d1b5ba8882632df7676;hb=4b0e976c663e808822adf51274f948e8a4986f06;hp=63d260e8147290520212f50f1df27e638af9fe9e;hpb=2301b65b86df8b80e6779ce9885ad62a5c4adc38;p=cascardo%2Flinux.git diff --git a/net/compat.c b/net/compat.c index 63d260e81472..3649d5895361 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;