fuse_vnop_copy_file_range(): add safety

v_mount for unlocked vnode could be NULL, check for it.  Explain why it
is safe to access fs-specific data for mp if it is read as non-NULL.

Reviewed by:	asomers, jah
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D42625
This commit is contained in:
Konstantin Belousov 2023-11-15 00:49:35 +02:00
parent 318c56714a
commit 4c6cded216

View file

@ -861,7 +861,7 @@ fuse_vnop_copy_file_range(struct vop_copy_file_range_args *ap)
pid_t pid;
int err;
if (mp != vnode_mount(outvp))
if (mp == NULL || mp != vnode_mount(outvp))
goto fallback;
if (incred->cr_uid != outcred->cr_uid)
@ -870,6 +870,7 @@ fuse_vnop_copy_file_range(struct vop_copy_file_range_args *ap)
if (incred->cr_groups[0] != outcred->cr_groups[0])
goto fallback;
/* Caller busied mp, mnt_data can be safely accessed. */
if (fsess_not_impl(mp, FUSE_COPY_FILE_RANGE))
goto fallback;