[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 22/24] block-backend: Retain permissions after migration
From: |
Hanna Reitz |
Subject: |
[PULL 22/24] block-backend: Retain permissions after migration |
Date: |
Tue, 1 Feb 2022 15:42:31 +0100 |
After migration, the permissions the guest device wants to impose on its
BlockBackend are stored in blk->perm and blk->shared_perm. In
blk_root_activate(), we take our permissions, but keep all shared
permissions open by calling `blk_set_perm(blk->perm, BLK_PERM_ALL)`.
Only afterwards (immediately or later, depending on the runstate) do we
restrict the shared permissions by calling
`blk_set_perm(blk->perm, blk->shared_perm)`. Unfortunately, our first
call with shared_perm=BLK_PERM_ALL has overwritten blk->shared_perm to
be BLK_PERM_ALL, so this is a no-op and the set of shared permissions is
not restricted.
Fix this bug by saving the set of shared permissions before invoking
blk_set_perm() with BLK_PERM_ALL and restoring it afterwards.
Fixes: 5f7772c4d0cf32f4e779fcd5a69ae4dae24aeebf
("block-backend: Defer shared_perm tightening migration
completion")
Reported-by: Peng Liang <liangpeng10@huawei.com>
Signed-off-by: Hanna Reitz <hreitz@redhat.com>
Message-Id: <20211125135317.186576-2-hreitz@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Peng Liang <liangpeng10@huawei.com>
---
block/block-backend.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/block/block-backend.c b/block/block-backend.c
index 23e727199b..4ff6b4d785 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -190,6 +190,7 @@ static void blk_root_activate(BdrvChild *child, Error
**errp)
{
BlockBackend *blk = child->opaque;
Error *local_err = NULL;
+ uint64_t saved_shared_perm;
if (!blk->disable_perm) {
return;
@@ -197,12 +198,22 @@ static void blk_root_activate(BdrvChild *child, Error
**errp)
blk->disable_perm = false;
+ /*
+ * blk->shared_perm contains the permissions we want to share once
+ * migration is really completely done. For now, we need to share
+ * all; but we also need to retain blk->shared_perm, which is
+ * overwritten by a successful blk_set_perm() call. Save it and
+ * restore it below.
+ */
+ saved_shared_perm = blk->shared_perm;
+
blk_set_perm(blk, blk->perm, BLK_PERM_ALL, &local_err);
if (local_err) {
error_propagate(errp, local_err);
blk->disable_perm = true;
return;
}
+ blk->shared_perm = saved_shared_perm;
if (runstate_check(RUN_STATE_INMIGRATE)) {
/* Activation can happen when migration process is still active, for
--
2.34.1
- [PULL 04/24] iotests.py: implement unsupported_imgopts, (continued)
- [PULL 04/24] iotests.py: implement unsupported_imgopts, Hanna Reitz, 2022/02/01
- [PULL 02/24] iotests/MRCE: Write data to source, Hanna Reitz, 2022/02/01
- [PULL 23/24] iotests/migration-permissions: New test, Hanna Reitz, 2022/02/01
- [PULL 20/24] iotest 214: explicit compression type, Hanna Reitz, 2022/02/01
- [PULL 21/24] iotests: declare lack of support for compresion_type in IMGOPTS, Hanna Reitz, 2022/02/01
- [PULL 18/24] iotests: bash tests: filter compression type, Hanna Reitz, 2022/02/01
- [PULL 13/24] iotest 302: use img_info_log() helper, Hanna Reitz, 2022/02/01
- [PULL 15/24] iotests/common.rc: introduce _qcow2_dump_header helper, Hanna Reitz, 2022/02/01
- [PULL 17/24] iotest 39: use _qcow2_dump_header, Hanna Reitz, 2022/02/01
- [PULL 09/24] iotest 303: explicit compression type, Hanna Reitz, 2022/02/01
- [PULL 22/24] block-backend: Retain permissions after migration,
Hanna Reitz <=
- [PULL 24/24] block.h: remove outdated comment, Hanna Reitz, 2022/02/01
- [PULL 03/24] iotests.py: img_info_log(): rename imgopts argument, Hanna Reitz, 2022/02/01
- [PULL 11/24] iotests.py: filter out successful output of qemu-img create, Hanna Reitz, 2022/02/01
- [PULL 16/24] iotests: massive use _qcow2_dump_header, Hanna Reitz, 2022/02/01
- [PULL 01/24] tests/qemu-iotests: Fix 051 for binaries without 'lsi53c895a', Hanna Reitz, 2022/02/01
- Re: [PULL 00/24] Block patches, Peter Maydell, 2022/02/01