[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH 27/54] block: Request real permissions in blk_new_op
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PATCH 27/54] block: Request real permissions in blk_new_open() |
Date: |
Tue, 21 Feb 2017 15:58:23 +0100 |
We can figure out the necessary permissions from the flags that the
caller passed.
Signed-off-by: Kevin Wolf <address@hidden>
---
block/block-backend.c | 22 +++++++++++++++++++---
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git a/block/block-backend.c b/block/block-backend.c
index 299948f..03d5495 100644
--- a/block/block-backend.c
+++ b/block/block-backend.c
@@ -166,17 +166,33 @@ BlockBackend *blk_new_open(const char *filename, const
char *reference,
{
BlockBackend *blk;
BlockDriverState *bs;
+ uint64_t perm;
+
+ /* blk_new_open() is mainly used in .bdrv_create implementations and the
+ * tools where sharing isn't a concern because the BDS stays private, so we
+ * just request permission according to the flags.
+ *
+ * The exceptions are xen_disk and blockdev_init(); in these cases, the
+ * caller of blk_new_open() doesn't make use of the permissions, but they
+ * shouldn't hurt either. We can still share everything here because the
+ * guest devices will add their own blockers if they can't share. */
+ perm = BLK_PERM_CONSISTENT_READ;
+ if (flags & BDRV_O_RDWR) {
+ perm |= BLK_PERM_WRITE;
+ }
+ if (flags & BDRV_O_RESIZE) {
+ perm |= BLK_PERM_RESIZE;
+ }
- blk = blk_new(0, BLK_PERM_ALL);
+ blk = blk_new(perm, BLK_PERM_ALL);
bs = bdrv_open(filename, reference, options, flags, errp);
if (!bs) {
blk_unref(blk);
return NULL;
}
- /* FIXME Use real permissions */
blk->root = bdrv_root_attach_child(bs, "root", &child_root,
- 0, BLK_PERM_ALL, blk, &error_abort);
+ perm, BLK_PERM_ALL, blk, &error_abort);
return blk;
}
--
1.8.3.1
- Re: [Qemu-block] [PATCH 19/54] block: Request child permissions in format drivers, (continued)
- [Qemu-block] [PATCH 20/54] vvfat: Implement .bdrv_child_perm(), Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 22/54] block: Request real permissions in bdrv_attach_child(), Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 21/54] block: Require .bdrv_child_perm() with child nodes, Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 23/54] block: Add permissions to BlockBackend, Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 27/54] block: Request real permissions in blk_new_open(),
Kevin Wolf <=
- [Qemu-block] [PATCH 24/54] block: Add permissions to blk_new(), Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 25/54] block: Add error parameter to blk_insert_bs(), Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 26/54] block: Add BDRV_O_RESIZE for blk_new_open(), Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 28/54] block: Allow error return in BlockDevOps.change_media_cb(), Kevin Wolf, 2017/02/21
- [Qemu-block] [PATCH 32/54] block: Add BdrvChildRole.get_parent_desc(), Kevin Wolf, 2017/02/21