Commit 50cd95ac authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull execve fix from Kees Cook:

 - Replace remaining kmap() uses with kmap_local_page() (Fabio M. De
   Francesco)

* tag 'execve-v6.0-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  exec: Replace kmap{,_atomic}() with kmap_local_page()
parents e45c8901 3a608cfe
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -584,11 +584,11 @@ static int copy_strings(int argc, struct user_arg_ptr argv,

				if (kmapped_page) {
					flush_dcache_page(kmapped_page);
					kunmap(kmapped_page);
					kunmap_local(kaddr);
					put_arg_page(kmapped_page);
				}
				kmapped_page = page;
				kaddr = kmap(kmapped_page);
				kaddr = kmap_local_page(kmapped_page);
				kpos = pos & PAGE_MASK;
				flush_arg_page(bprm, kpos, kmapped_page);
			}
@@ -602,7 +602,7 @@ static int copy_strings(int argc, struct user_arg_ptr argv,
out:
	if (kmapped_page) {
		flush_dcache_page(kmapped_page);
		kunmap(kmapped_page);
		kunmap_local(kaddr);
		put_arg_page(kmapped_page);
	}
	return ret;
@@ -880,11 +880,11 @@ int transfer_args_to_stack(struct linux_binprm *bprm,

	for (index = MAX_ARG_PAGES - 1; index >= stop; index--) {
		unsigned int offset = index == stop ? bprm->p & ~PAGE_MASK : 0;
		char *src = kmap(bprm->page[index]) + offset;
		char *src = kmap_local_page(bprm->page[index]) + offset;
		sp -= PAGE_SIZE - offset;
		if (copy_to_user((void *) sp, src, PAGE_SIZE - offset) != 0)
			ret = -EFAULT;
		kunmap(bprm->page[index]);
		kunmap_local(src);
		if (ret)
			goto out;
	}
@@ -1686,13 +1686,13 @@ int remove_arg_zero(struct linux_binprm *bprm)
			ret = -EFAULT;
			goto out;
		}
		kaddr = kmap_atomic(page);
		kaddr = kmap_local_page(page);

		for (; offset < PAGE_SIZE && kaddr[offset];
				offset++, bprm->p++)
			;

		kunmap_atomic(kaddr);
		kunmap_local(kaddr);
		put_arg_page(page);
	} while (offset == PAGE_SIZE);