The check for !anon && !shmem happens after hugetlb is branched off into
its own function, so it only applies to anon and shmem types. Move the
check to the uffd ops is_dst_valid() for both those types.
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
static ssize_t shmem_is_dst_valid(struct vm_area_struct *dst_vma,
unsigned long dst_start, unsigned long len)
{
+ if (!vma_is_anonymous(dst_vma) && !vma_is_shmem(dst_vma))
+ return -EINVAL;
+
return 0;
}
static ssize_t uffd_def_is_dst_valid(struct vm_area_struct *dst_vma,
unsigned long dst_start, unsigned long len)
{
+ if (!vma_is_anonymous(dst_vma) && !vma_is_shmem(dst_vma))
+ return -EINVAL;
+
return 0;
}
src_start, len, flags);
err = -EINVAL;
- if (!vma_is_anonymous(dst_vma) && !vma_is_shmem(dst_vma))
- goto out_unlock;
if (!vma_is_shmem(dst_vma) &&
uffd_flags_mode_is(flags, MFILL_ATOMIC_CONTINUE))
goto out_unlock;