Re: [PATCH v3 20/23] fs: Allow copy_mount_options() to access user-space in a single pass

Catalin Marinas
2020-04-28T19:36:57Z

On Tue, Apr 21, 2020 at 03:26:00PM +0100, Catalin Marinas wrote:
> --- a/fs/namespace.c
> +++ b/fs/namespace.c
> @@ -3025,13 +3025,16 @@ void *copy_mount_options(const void __user * data)
> if (!copy)
> return ERR_PTR(-ENOMEM);
>
> - size = PAGE_SIZE - offset_in_page(data);
> + size = PAGE_SIZE;
> + if (!arch_has_exact_copy_from_user(size))
> + size -= offset_in_page(data);
>
> - if (copy_from_user(copy, data, size)) {
> + if (copy_from_user(copy, data, size) == size) {
> kfree(copy);
> return ERR_PTR(-EFAULT);
> }
> if (size != PAGE_SIZE) {
> + WARN_ON(1);
> if (copy_from_user(copy + size, data + size, PAGE_SIZE - size))
> memset(copy + size, 0, PAGE_SIZE - size);
> }

Argh, this WARN_ON should not be here at all. It's something I added to
make check that I don't reach this part in arm64. Will remove in v4.

--
Catalin