mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
block: remove all encryption handling APIs
Now that all encryption keys must be provided upfront via the QCryptoSecret API and associated block driver properties there is no need for any explicit encryption handling APIs in the block layer. Encryption can be handled transparently within the block driver. We only retain an API for querying whether an image is encrypted or not, since that is a potentially useful piece of metadata to report to the user. Reviewed-by: Alberto Garcia <berto@igalia.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> Message-id: 20170623162419.26068-18-berrange@redhat.com Signed-off-by: Max Reitz <mreitz@redhat.com>
This commit is contained in:
parent
788cf9f8c8
commit
c01c214b69
12 changed files with 16 additions and 159 deletions
77
block.c
77
block.c
|
@ -2573,15 +2573,7 @@ static BlockDriverState *bdrv_open_inherit(const char *filename,
|
|||
goto close_and_fail;
|
||||
}
|
||||
|
||||
if (!bdrv_key_required(bs)) {
|
||||
bdrv_parent_cb_change_media(bs, true);
|
||||
} else if (!runstate_check(RUN_STATE_PRELAUNCH)
|
||||
&& !runstate_check(RUN_STATE_INMIGRATE)
|
||||
&& !runstate_check(RUN_STATE_PAUSED)) { /* HACK */
|
||||
error_setg(errp,
|
||||
"Guest must be stopped for opening of encrypted image");
|
||||
goto close_and_fail;
|
||||
}
|
||||
bdrv_parent_cb_change_media(bs, true);
|
||||
|
||||
QDECREF(options);
|
||||
|
||||
|
@ -3072,7 +3064,6 @@ static void bdrv_close(BlockDriverState *bs)
|
|||
bs->backing_format[0] = '\0';
|
||||
bs->total_sectors = 0;
|
||||
bs->encrypted = false;
|
||||
bs->valid_key = false;
|
||||
bs->sg = false;
|
||||
QDECREF(bs->options);
|
||||
QDECREF(bs->explicit_options);
|
||||
|
@ -3502,72 +3493,6 @@ bool bdrv_is_encrypted(BlockDriverState *bs)
|
|||
return bs->encrypted;
|
||||
}
|
||||
|
||||
bool bdrv_key_required(BlockDriverState *bs)
|
||||
{
|
||||
BdrvChild *backing = bs->backing;
|
||||
|
||||
if (backing && backing->bs->encrypted && !backing->bs->valid_key) {
|
||||
return true;
|
||||
}
|
||||
return (bs->encrypted && !bs->valid_key);
|
||||
}
|
||||
|
||||
int bdrv_set_key(BlockDriverState *bs, const char *key)
|
||||
{
|
||||
int ret;
|
||||
if (bs->backing && bs->backing->bs->encrypted) {
|
||||
ret = bdrv_set_key(bs->backing->bs, key);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (!bs->encrypted)
|
||||
return 0;
|
||||
}
|
||||
if (!bs->encrypted) {
|
||||
return -EINVAL;
|
||||
} else if (!bs->drv || !bs->drv->bdrv_set_key) {
|
||||
return -ENOMEDIUM;
|
||||
}
|
||||
ret = bs->drv->bdrv_set_key(bs, key);
|
||||
if (ret < 0) {
|
||||
bs->valid_key = false;
|
||||
} else if (!bs->valid_key) {
|
||||
/* call the change callback now, we skipped it on open */
|
||||
bs->valid_key = true;
|
||||
bdrv_parent_cb_change_media(bs, true);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Provide an encryption key for @bs.
|
||||
* If @key is non-null:
|
||||
* If @bs is not encrypted, fail.
|
||||
* Else if the key is invalid, fail.
|
||||
* Else set @bs's key to @key, replacing the existing key, if any.
|
||||
* If @key is null:
|
||||
* If @bs is encrypted and still lacks a key, fail.
|
||||
* Else do nothing.
|
||||
* On failure, store an error object through @errp if non-null.
|
||||
*/
|
||||
void bdrv_add_key(BlockDriverState *bs, const char *key, Error **errp)
|
||||
{
|
||||
if (key) {
|
||||
if (!bdrv_is_encrypted(bs)) {
|
||||
error_setg(errp, "Node '%s' is not encrypted",
|
||||
bdrv_get_device_or_node_name(bs));
|
||||
} else if (bdrv_set_key(bs, key) < 0) {
|
||||
error_setg(errp, QERR_INVALID_PASSWORD);
|
||||
}
|
||||
} else {
|
||||
if (bdrv_key_required(bs)) {
|
||||
error_set(errp, ERROR_CLASS_DEVICE_ENCRYPTED,
|
||||
"'%s' (%s) is encrypted",
|
||||
bdrv_get_device_or_node_name(bs),
|
||||
bdrv_get_encrypted_filename(bs));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char *bdrv_get_format_name(BlockDriverState *bs)
|
||||
{
|
||||
return bs->drv ? bs->drv->format_name : NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue