diff options
Diffstat (limited to 'net/compat.c')
-rw-r--r-- | net/compat.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/net/compat.c b/net/compat.c index a1fb1b079a8..73462196de3 100644 --- a/net/compat.c +++ b/net/compat.c @@ -40,10 +40,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; |