block: Request real permissions in blk_new_open()
We can figure out the necessary permissions from the flags that the caller passed. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Acked-by: Fam Zheng <famz@redhat.com>
This commit is contained in:
parent
55880601d8
commit
c62d32f503
|
@ -166,17 +166,33 @@ BlockBackend *blk_new_open(const char *filename, const char *reference,
|
||||||
{
|
{
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
BlockDriverState *bs;
|
BlockDriverState *bs;
|
||||||
|
uint64_t perm;
|
||||||
|
|
||||||
blk = blk_new(0, BLK_PERM_ALL);
|
/* 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(perm, BLK_PERM_ALL);
|
||||||
bs = bdrv_open(filename, reference, options, flags, errp);
|
bs = bdrv_open(filename, reference, options, flags, errp);
|
||||||
if (!bs) {
|
if (!bs) {
|
||||||
blk_unref(blk);
|
blk_unref(blk);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME Use real permissions */
|
|
||||||
blk->root = bdrv_root_attach_child(bs, "root", &child_root,
|
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;
|
return blk;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue