|
@@ -827,15 +827,16 @@ static ssize_t environ_read(struct file *file, char __user *buf,
|
|
|
if (!atomic_inc_not_zero(&mm->mm_users))
|
|
|
goto free;
|
|
|
while (count > 0) {
|
|
|
- int this_len, retval, max_len;
|
|
|
+ size_t this_len, max_len;
|
|
|
+ int retval;
|
|
|
|
|
|
- this_len = mm->env_end - (mm->env_start + src);
|
|
|
-
|
|
|
- if (this_len <= 0)
|
|
|
+ if (src >= (mm->env_end - mm->env_start))
|
|
|
break;
|
|
|
|
|
|
- max_len = (count > PAGE_SIZE) ? PAGE_SIZE : count;
|
|
|
- this_len = (this_len > max_len) ? max_len : this_len;
|
|
|
+ this_len = mm->env_end - (mm->env_start + src);
|
|
|
+
|
|
|
+ max_len = min_t(size_t, PAGE_SIZE, count);
|
|
|
+ this_len = min(max_len, this_len);
|
|
|
|
|
|
retval = access_remote_vm(mm, (mm->env_start + src),
|
|
|
page, this_len, 0);
|