All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL for-8.1 0/2] Block patches
@ 2023-08-03 15:55 Stefan Hajnoczi
  2023-08-03 15:55 ` [PULL for-8.1 1/2] block/blkio: close the fd when blkio_connect() fails Stefan Hajnoczi
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2023-08-03 15:55 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Hanna Reitz, qemu-block,
	Richard Henderson

The following changes since commit 9ba37026fcf6b7f3f096c0cca3e1e7307802486b:

  Update version for v8.1.0-rc2 release (2023-08-02 08:22:45 -0700)

are available in the Git repository at:

  https://gitlab.com/stefanha/qemu.git tags/block-pull-request

for you to fetch changes up to 9b06d0d076271d76e5384d767ef94a676f0a9efd:

  block/blkio: add more comments on the fd passing handling (2023-08-03 11:28:43 -0400)

----------------------------------------------------------------
Pull request

Fix for an fd leak in the blkio block driver.

----------------------------------------------------------------

Stefano Garzarella (2):
  block/blkio: close the fd when blkio_connect() fails
  block/blkio: add more comments on the fd passing handling

 block/blkio.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

-- 
2.41.0



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PULL for-8.1 1/2] block/blkio: close the fd when blkio_connect() fails
  2023-08-03 15:55 [PULL for-8.1 0/2] Block patches Stefan Hajnoczi
@ 2023-08-03 15:55 ` Stefan Hajnoczi
  2023-08-03 15:55 ` [PULL for-8.1 2/2] block/blkio: add more comments on the fd passing handling Stefan Hajnoczi
  2023-08-04  1:47 ` [PULL for-8.1 0/2] Block patches Richard Henderson
  2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2023-08-03 15:55 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Hanna Reitz, qemu-block,
	Richard Henderson, Stefano Garzarella

From: Stefano Garzarella <sgarzare@redhat.com>

libblkio drivers take ownership of `fd` only after a successful
blkio_connect(), so if it fails, we are still the owners.

Fixes: cad2ccc395 ("block/blkio: use qemu_open() to support fd passing for virtio-blk")
Suggested-by: Hanna Czenczek <hreitz@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Message-id: 20230803082825.25293-2-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 block/blkio.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/block/blkio.c b/block/blkio.c
index 8e7ce42c79..baba2f0b67 100644
--- a/block/blkio.c
+++ b/block/blkio.c
@@ -678,7 +678,7 @@ static int blkio_virtio_blk_connect(BlockDriverState *bs, QDict *options,
     const char *path = qdict_get_try_str(options, "path");
     BDRVBlkioState *s = bs->opaque;
     bool fd_supported = false;
-    int fd, ret;
+    int fd = -1, ret;
 
     if (!path) {
         error_setg(errp, "missing 'path' option");
@@ -719,6 +719,7 @@ static int blkio_virtio_blk_connect(BlockDriverState *bs, QDict *options,
             if (ret < 0) {
                 fd_supported = false;
                 qemu_close(fd);
+                fd = -1;
             }
         }
     }
@@ -733,14 +734,18 @@ static int blkio_virtio_blk_connect(BlockDriverState *bs, QDict *options,
     }
 
     ret = blkio_connect(s->blkio);
+    if (ret < 0 && fd >= 0) {
+        /* Failed to give the FD to libblkio, close it */
+        qemu_close(fd);
+        fd = -1;
+    }
+
     /*
      * If the libblkio driver doesn't support the `fd` property, blkio_connect()
      * will fail with -EINVAL. So let's try calling blkio_connect() again by
      * directly setting `path`.
      */
     if (fd_supported && ret == -EINVAL) {
-        qemu_close(fd);
-
         /*
          * We need to clear the `fd` property we set previously by setting
          * it to -1.
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PULL for-8.1 2/2] block/blkio: add more comments on the fd passing handling
  2023-08-03 15:55 [PULL for-8.1 0/2] Block patches Stefan Hajnoczi
  2023-08-03 15:55 ` [PULL for-8.1 1/2] block/blkio: close the fd when blkio_connect() fails Stefan Hajnoczi
@ 2023-08-03 15:55 ` Stefan Hajnoczi
  2023-08-04  1:47 ` [PULL for-8.1 0/2] Block patches Richard Henderson
  2 siblings, 0 replies; 4+ messages in thread
From: Stefan Hajnoczi @ 2023-08-03 15:55 UTC (permalink / raw)
  To: qemu-devel
  Cc: Kevin Wolf, Fam Zheng, Stefan Hajnoczi, Hanna Reitz, qemu-block,
	Richard Henderson, Stefano Garzarella

From: Stefano Garzarella <sgarzare@redhat.com>

As Hanna pointed out, it is not clear in the code why qemu_open()
can fail, and why blkio_set_int("fd") is not enough to discover
the `fd` property support.

Let's fix them by adding more details in the code comments.

Suggested-by: Hanna Czenczek <hreitz@redhat.com>
Reviewed-by: Hanna Czenczek <hreitz@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Message-id: 20230803082825.25293-3-sgarzare@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 block/blkio.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/block/blkio.c b/block/blkio.c
index baba2f0b67..1dd495617c 100644
--- a/block/blkio.c
+++ b/block/blkio.c
@@ -713,6 +713,12 @@ static int blkio_virtio_blk_connect(BlockDriverState *bs, QDict *options,
          */
         fd = qemu_open(path, O_RDWR, NULL);
         if (fd < 0) {
+            /*
+             * qemu_open() can fail if the user specifies a path that is not
+             * a file or device, for example in the case of Unix Domain Socket
+             * for the virtio-blk-vhost-user driver. In such cases let's have
+             * libblkio open the path directly.
+             */
             fd_supported = false;
         } else {
             ret = blkio_set_int(s->blkio, "fd", fd);
@@ -741,9 +747,12 @@ static int blkio_virtio_blk_connect(BlockDriverState *bs, QDict *options,
     }
 
     /*
-     * If the libblkio driver doesn't support the `fd` property, blkio_connect()
-     * will fail with -EINVAL. So let's try calling blkio_connect() again by
-     * directly setting `path`.
+     * Before https://gitlab.com/libblkio/libblkio/-/merge_requests/208
+     * (libblkio <= v1.3.0), setting the `fd` property is not enough to check
+     * whether the driver supports the `fd` property or not. In that case,
+     * blkio_connect() will fail with -EINVAL.
+     * So let's try calling blkio_connect() again by directly setting `path`
+     * to cover this scenario.
      */
     if (fd_supported && ret == -EINVAL) {
         /*
-- 
2.41.0



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PULL for-8.1 0/2] Block patches
  2023-08-03 15:55 [PULL for-8.1 0/2] Block patches Stefan Hajnoczi
  2023-08-03 15:55 ` [PULL for-8.1 1/2] block/blkio: close the fd when blkio_connect() fails Stefan Hajnoczi
  2023-08-03 15:55 ` [PULL for-8.1 2/2] block/blkio: add more comments on the fd passing handling Stefan Hajnoczi
@ 2023-08-04  1:47 ` Richard Henderson
  2 siblings, 0 replies; 4+ messages in thread
From: Richard Henderson @ 2023-08-04  1:47 UTC (permalink / raw)
  To: Stefan Hajnoczi, qemu-devel
  Cc: Kevin Wolf, Fam Zheng, Hanna Reitz, qemu-block, Richard Henderson

On 8/3/23 08:55, Stefan Hajnoczi wrote:
> The following changes since commit 9ba37026fcf6b7f3f096c0cca3e1e7307802486b:
> 
>    Update version for v8.1.0-rc2 release (2023-08-02 08:22:45 -0700)
> 
> are available in the Git repository at:
> 
>    https://gitlab.com/stefanha/qemu.git  tags/block-pull-request
> 
> for you to fetch changes up to 9b06d0d076271d76e5384d767ef94a676f0a9efd:
> 
>    block/blkio: add more comments on the fd passing handling (2023-08-03 11:28:43 -0400)
> 
> ----------------------------------------------------------------
> Pull request
> 
> Fix for an fd leak in the blkio block driver.

Applied, thanks.  Please update https://wiki.qemu.org/ChangeLog/8.1 as appropriate.


r~



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-08-04  1:48 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-03 15:55 [PULL for-8.1 0/2] Block patches Stefan Hajnoczi
2023-08-03 15:55 ` [PULL for-8.1 1/2] block/blkio: close the fd when blkio_connect() fails Stefan Hajnoczi
2023-08-03 15:55 ` [PULL for-8.1 2/2] block/blkio: add more comments on the fd passing handling Stefan Hajnoczi
2023-08-04  1:47 ` [PULL for-8.1 0/2] Block patches Richard Henderson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.