]> granicus.if.org Git - zfs/commit
Prevent raw zfs recv -F if dataset is unencrypted
authorTom Caputi <tcaputi@datto.com>
Wed, 21 Feb 2018 20:30:11 +0000 (15:30 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 21 Feb 2018 20:30:11 +0000 (12:30 -0800)
commit4a385862b7a9c62f5ec46462e92db48c3c5ec7d9
tree0bc578f3cc4ce9937b4aa8c74ecef8071b72eea0
parentb1d217338a51b025b802ebf6a759f45dcd8e3b4c
Prevent raw zfs recv -F if dataset is unencrypted

The current design of ZFS encryption only allows a dataset to
have one DSL Crypto Key at a time. As a result, it is important
that the zfs receive code ensures that only one key can be in use
at a time for a given DSL Directory. zfs receive -F complicates
this, since the new dataset is received as a clone of the existing
one so that an atomic switch can be done at the end. To prevent
confusion about which dataset is actually encrypted a check was
added to ensure that encrypted datasets cannot use zfs recv -F to
completely replace existing datasets. Unfortunately, the check did
not take into account unencrypted datasets being overriden by
encrypted ones as a case.

Along the same lines, the code also failed to ensure that raw
recieves could not be done on top of existing unencrypted
datasets, which causes amny problems since the new stream cannot
be decrypted.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #7199
lib/libzfs/libzfs_sendrecv.c
module/zfs/dmu_send.c