HomeFreeBSD

MFV r316925: 6101 attempt to lzc_create() a filesystem under a volume results…

Description

MFV r316925: 6101 attempt to lzc_create() a filesystem under a volume results in a panic

illumos/illumos-gate@b127fe3c059af7adf772735498680b4f2e1405ef
https://github.com/illumos/illumos-gate/commit/b127fe3c059af7adf772735498680b4f2e1405ef

https://www.illumos.org/issues/6101

lzc_create(), or more correctly, zfs_ioc_create() does not reject an attempt to
create a filesystem as a child of a volume, instead it proceeds to a crash.
A crash stack obtained on FreeBSD:
page fault while in kernel mode

zap_leaf_lookup()
fzap_lookup()
zap_lookup_norm()
zap_lookup()
zfs_get_zplprop()
zfs_fill_zplprops_impl()
zfs_ioc_create()
zfsdev_ioctl()
devfs_ioctl_f()
kern_ioctl()
sys_ioctl()
This crash happened with a kernel without debugging assertions.
The immediate cause of crash appears to an attempt to interpret a zvol object
as a zap object.
For filesystems:
#define MASTER_NODE_OBJ 1
For zvols:
#define ZVOL_OBJ                1ULL
#define ZVOL_ZAP_OBJ            2ULL
So, I see two problems here:
   1. an attempt to create a filesystem under a zvol should be rejected as
      early as possible, maybe in zfs_fill_zplprops()
   2. maybe zap_lookup / zap_lockdir should reject objects that are not of one
      of the zap object types

Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Approved by: Dan McDonald <danmcd@omniti.com>
Author: Andriy Gapon <avg@FreeBSD.org>
MFC after: 2 weeks

Details

Provenance
avgAuthored on
Reviewer
matthew
Parents
rS318832: MFV r316923: 8026 retire zfs_throttle_delay and zfs_throttle_resolution
Branches
Unknown
Tags
Unknown