Message ID | 20200510134037.18487-4-mlevitsk@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | LUKS: encryption slot management using amend interface | expand |
On 10.05.20 15:40, Maxim Levitsky wrote: > 'force' option will be used for some unsafe amend operations. > > This includes things like erasing last keyslot in luks based formats > (which destroys the data, unless the master key is backed up > by external means), but that _might_ be desired result. > > Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> > --- > block.c | 4 +++- > block/qcow2.c | 1 + > docs/tools/qemu-img.rst | 5 ++++- > include/block/block.h | 1 + > include/block/block_int.h | 1 + > qemu-img-cmds.hx | 4 ++-- > qemu-img.c | 8 +++++++- > 7 files changed, 19 insertions(+), 5 deletions(-) [...] > diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst > index 0080f83a76..fc2dca6649 100644 > --- a/docs/tools/qemu-img.rst > +++ b/docs/tools/qemu-img.rst > @@ -249,11 +249,14 @@ Command description: > > .. program:: qemu-img-commands > > -.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] -o OPTIONS FILENAME > +.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] [--force] -o OPTIONS FILENAME > > Amends the image format specific *OPTIONS* for the image file > *FILENAME*. Not all file formats support this operation. > > + --force allows some unsafe operations. Currently for -f luks, it allows to > + erase last encryption key, and to overwrite an active encryption key. *erase the last encryption key With that fixed: Reviewed-by: Max Reitz <mreitz@redhat.com>
On Thu, 2020-05-14 at 14:18 +0200, Max Reitz wrote: > On 10.05.20 15:40, Maxim Levitsky wrote: > > 'force' option will be used for some unsafe amend operations. > > > > This includes things like erasing last keyslot in luks based formats > > (which destroys the data, unless the master key is backed up > > by external means), but that _might_ be desired result. > > > > Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> > > Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> > > --- > > block.c | 4 +++- > > block/qcow2.c | 1 + > > docs/tools/qemu-img.rst | 5 ++++- > > include/block/block.h | 1 + > > include/block/block_int.h | 1 + > > qemu-img-cmds.hx | 4 ++-- > > qemu-img.c | 8 +++++++- > > 7 files changed, 19 insertions(+), 5 deletions(-) > > [...] > > > diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst > > index 0080f83a76..fc2dca6649 100644 > > --- a/docs/tools/qemu-img.rst > > +++ b/docs/tools/qemu-img.rst > > @@ -249,11 +249,14 @@ Command description: > > > > .. program:: qemu-img-commands > > > > -.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] -o OPTIONS FILENAME > > +.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] [--force] -o OPTIONS FILENAME > > > > Amends the image format specific *OPTIONS* for the image file > > *FILENAME*. Not all file formats support this operation. > > > > + --force allows some unsafe operations. Currently for -f luks, it allows to > > + erase last encryption key, and to overwrite an active encryption key. > > *erase the last encryption key Fixed, thanks! > > With that fixed: > > Reviewed-by: Max Reitz <mreitz@redhat.com> > Thanks for the review, Best regards, Maxim Levitsky
diff --git a/block.c b/block.c index 0653ccb913..94a6e851b4 100644 --- a/block.c +++ b/block.c @@ -6356,6 +6356,7 @@ void bdrv_remove_aio_context_notifier(BlockDriverState *bs, int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts, BlockDriverAmendStatusCB *status_cb, void *cb_opaque, + bool force, Error **errp) { if (!bs->drv) { @@ -6367,7 +6368,8 @@ int bdrv_amend_options(BlockDriverState *bs, QemuOpts *opts, bs->drv->format_name); return -ENOTSUP; } - return bs->drv->bdrv_amend_options(bs, opts, status_cb, cb_opaque, errp); + return bs->drv->bdrv_amend_options(bs, opts, status_cb, + cb_opaque, force, errp); } /* diff --git a/block/qcow2.c b/block/qcow2.c index 1ad95ff048..79fbad9d76 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -5227,6 +5227,7 @@ static void qcow2_amend_helper_cb(BlockDriverState *bs, static int qcow2_amend_options(BlockDriverState *bs, QemuOpts *opts, BlockDriverAmendStatusCB *status_cb, void *cb_opaque, + bool force, Error **errp) { BDRVQcow2State *s = bs->opaque; diff --git a/docs/tools/qemu-img.rst b/docs/tools/qemu-img.rst index 0080f83a76..fc2dca6649 100644 --- a/docs/tools/qemu-img.rst +++ b/docs/tools/qemu-img.rst @@ -249,11 +249,14 @@ Command description: .. program:: qemu-img-commands -.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] -o OPTIONS FILENAME +.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] [--force] -o OPTIONS FILENAME Amends the image format specific *OPTIONS* for the image file *FILENAME*. Not all file formats support this operation. + --force allows some unsafe operations. Currently for -f luks, it allows to + erase last encryption key, and to overwrite an active encryption key. + .. option:: bench [-c COUNT] [-d DEPTH] [-f FMT] [--flush-interval=FLUSH_INTERVAL] [-i AIO] [-n] [--no-drain] [-o OFFSET] [--pattern=PATTERN] [-q] [-s BUFFER_SIZE] [-S STEP_SIZE] [-t CACHE] [-w] [-U] FILENAME Run a simple sequential I/O benchmark on the specified image. If ``-w`` is diff --git a/include/block/block.h b/include/block/block.h index 4de8d8f8a6..5b44a838d9 100644 --- a/include/block/block.h +++ b/include/block/block.h @@ -392,6 +392,7 @@ typedef void BlockDriverAmendStatusCB(BlockDriverState *bs, int64_t offset, int64_t total_work_size, void *opaque); int bdrv_amend_options(BlockDriverState *bs_new, QemuOpts *opts, BlockDriverAmendStatusCB *status_cb, void *cb_opaque, + bool force, Error **errp); /* check if a named node can be replaced when doing drive-mirror */ diff --git a/include/block/block_int.h b/include/block/block_int.h index df6d0273d6..952b2f033a 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -432,6 +432,7 @@ struct BlockDriver { int (*bdrv_amend_options)(BlockDriverState *bs, QemuOpts *opts, BlockDriverAmendStatusCB *status_cb, void *cb_opaque, + bool force, Error **errp); void (*bdrv_debug_event)(BlockDriverState *bs, BlkdebugEvent event); diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx index c9c54de1df..9920f1f9d4 100644 --- a/qemu-img-cmds.hx +++ b/qemu-img-cmds.hx @@ -10,9 +10,9 @@ HXCOMM When amending the rST sections, please remember to copy the usage HXCOMM over to the per-command sections in qemu-img.texi. DEF("amend", img_amend, - "amend [--object objectdef] [--image-opts] [-p] [-q] [-f fmt] [-t cache] -o options filename") + "amend [--object objectdef] [--image-opts] [-p] [-q] [-f fmt] [-t cache] [--force] -o options filename") SRST -.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] -o OPTIONS FILENAME +.. option:: amend [--object OBJECTDEF] [--image-opts] [-p] [-q] [-f FMT] [-t CACHE] [--force] -o OPTIONS FILENAME ERST DEF("bench", img_bench, diff --git a/qemu-img.c b/qemu-img.c index 6a4327aaba..ef422d5471 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -71,6 +71,7 @@ enum { OPTION_SHRINK = 266, OPTION_SALVAGE = 267, OPTION_TARGET_IS_ZERO = 268, + OPTION_FORCE = 269, }; typedef enum OutputFormat { @@ -3958,6 +3959,7 @@ static int img_amend(int argc, char **argv) BlockBackend *blk = NULL; BlockDriverState *bs = NULL; bool image_opts = false; + bool force = false; cache = BDRV_DEFAULT_CACHE; for (;;) { @@ -3965,6 +3967,7 @@ static int img_amend(int argc, char **argv) {"help", no_argument, 0, 'h'}, {"object", required_argument, 0, OPTION_OBJECT}, {"image-opts", no_argument, 0, OPTION_IMAGE_OPTS}, + {"force", no_argument, 0, OPTION_FORCE}, {0, 0, 0, 0} }; c = getopt_long(argc, argv, ":ho:f:t:pq", @@ -4012,6 +4015,9 @@ static int img_amend(int argc, char **argv) case OPTION_IMAGE_OPTS: image_opts = true; break; + case OPTION_FORCE: + force = true; + break; } } @@ -4089,7 +4095,7 @@ static int img_amend(int argc, char **argv) /* In case the driver does not call amend_status_cb() */ qemu_progress_print(0.f, 0); - ret = bdrv_amend_options(bs, opts, &amend_status_cb, NULL, &err); + ret = bdrv_amend_options(bs, opts, &amend_status_cb, NULL, force, &err); qemu_progress_print(100.f, 0); if (ret < 0) { error_report_err(err);