]> git.proxmox.com Git - mirror_zfs.git/commit
Fix errant EFAULT during writes (#8719)
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 8 May 2019 17:04:04 +0000 (10:04 -0700)
committerGitHub <noreply@github.com>
Wed, 8 May 2019 17:04:04 +0000 (10:04 -0700)
commit515ddf65042e8eb772c3f38ed4556850a0c2fbf3
tree4e6c28535d5f3fc991b941c781d01b91d6d11c58
parent1f02ecc5a56d08b744b618c641505c451bd9b1e4
Fix errant EFAULT during writes (#8719)

Commit 98bb45e resolved a deadlock which could occur when
handling a page fault in zfs_write().  This change added
the uio_fault_disable field to the uio structure but failed
to initialize it to B_FALSE.  This uninitialized field would
cause uiomove_iov() to call __copy_from_user_inatomic()
instead of copy_from_user() resulting in unexpected EFAULTs.

Resolve the issue by fully initializing the uio, and clearing
the uio_fault_disable flags after it's used in zfs_write().

Additionally, reorder the uio_t field assignments to match
the order the fields are declared in the  structure.

Reviewed-by: Chunwei Chen <tuxoko@gmail.com>
Reviewed-by: Richard Laager <rlaager@wiktel.com>
Reviewed-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #8640
Closes #8719
module/zfs/zfs_vnops.c
module/zfs/zpl_file.c
module/zfs/zpl_inode.c
module/zfs/zvol.c