qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Cédric Le Goater" <clg@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Alex Williamson" <alex.williamson@redhat.com>,
	"Eric Auger" <eric.auger@redhat.com>,
	"Cédric Le Goater" <clg@redhat.com>,
	"Zhenzhong Duan" <zhenzhong.duan@intel.com>
Subject: [PULL 17/17] backends/iommufd: Remove mutex
Date: Mon,  8 Jan 2024 08:32:32 +0100	[thread overview]
Message-ID: <20240108073232.118228-18-clg@redhat.com> (raw)
In-Reply-To: <20240108073232.118228-1-clg@redhat.com>

Coverity reports a concurrent data access violation because be->users
is being accessed in iommufd_backend_can_be_deleted() without holding
the mutex.

However, these routines are called from the QEMU main thread when a
device is created. In this case, the code paths should be protected by
the BQL lock and it should be safe to drop the IOMMUFD backend mutex.
Simply remove it.

Fixes: CID 1531550
Fixes: CID 1531549
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com>
Signed-off-by: Cédric Le Goater <clg@redhat.com>
---
 include/sysemu/iommufd.h | 2 --
 backends/iommufd.c       | 7 -------
 2 files changed, 9 deletions(-)

diff --git a/include/sysemu/iommufd.h b/include/sysemu/iommufd.h
index 9c5524b0ed15ef5f81be159415bc216572a283d8..9af27ebd6ccb78ca8e16aa3c62629aab9f7f31e4 100644
--- a/include/sysemu/iommufd.h
+++ b/include/sysemu/iommufd.h
@@ -2,7 +2,6 @@
 #define SYSEMU_IOMMUFD_H
 
 #include "qom/object.h"
-#include "qemu/thread.h"
 #include "exec/hwaddr.h"
 #include "exec/cpu-common.h"
 
@@ -19,7 +18,6 @@ struct IOMMUFDBackend {
     /*< protected >*/
     int fd;            /* /dev/iommu file descriptor */
     bool owned;        /* is the /dev/iommu opened internally */
-    QemuMutex lock;
     uint32_t users;
 
     /*< public >*/
diff --git a/backends/iommufd.c b/backends/iommufd.c
index 393c0d9a3719e3de1a6b51a8ff2e75e184badc82..1ef683c7b080e688af46c5b98e61eafa73e39895 100644
--- a/backends/iommufd.c
+++ b/backends/iommufd.c
@@ -29,7 +29,6 @@ static void iommufd_backend_init(Object *obj)
     be->fd = -1;
     be->users = 0;
     be->owned = true;
-    qemu_mutex_init(&be->lock);
 }
 
 static void iommufd_backend_finalize(Object *obj)
@@ -52,10 +51,8 @@ static void iommufd_backend_set_fd(Object *obj, const char *str, Error **errp)
         error_prepend(errp, "Could not parse remote object fd %s:", str);
         return;
     }
-    qemu_mutex_lock(&be->lock);
     be->fd = fd;
     be->owned = false;
-    qemu_mutex_unlock(&be->lock);
     trace_iommu_backend_set_fd(be->fd);
 }
 
@@ -79,7 +76,6 @@ int iommufd_backend_connect(IOMMUFDBackend *be, Error **errp)
 {
     int fd, ret = 0;
 
-    qemu_mutex_lock(&be->lock);
     if (be->owned && !be->users) {
         fd = qemu_open_old("/dev/iommu", O_RDWR);
         if (fd < 0) {
@@ -93,13 +89,11 @@ int iommufd_backend_connect(IOMMUFDBackend *be, Error **errp)
 out:
     trace_iommufd_backend_connect(be->fd, be->owned,
                                   be->users, ret);
-    qemu_mutex_unlock(&be->lock);
     return ret;
 }
 
 void iommufd_backend_disconnect(IOMMUFDBackend *be)
 {
-    qemu_mutex_lock(&be->lock);
     if (!be->users) {
         goto out;
     }
@@ -110,7 +104,6 @@ void iommufd_backend_disconnect(IOMMUFDBackend *be)
     }
 out:
     trace_iommufd_backend_disconnect(be->fd, be->users);
-    qemu_mutex_unlock(&be->lock);
 }
 
 int iommufd_backend_alloc_ioas(IOMMUFDBackend *be, uint32_t *ioas_id,
-- 
2.43.0



  parent reply	other threads:[~2024-01-08  7:35 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-08  7:32 [PULL 00/17] vfio queue Cédric Le Goater
2024-01-08  7:32 ` [PULL 01/17] vfio/spapr: Extend VFIOIOMMUOps with a release handler Cédric Le Goater
2024-01-08  7:32 ` [PULL 02/17] vfio/container: Introduce vfio_legacy_setup() for further cleanups Cédric Le Goater
2024-01-08  7:32 ` [PULL 03/17] vfio/container: Initialize VFIOIOMMUOps under vfio_init_container() Cédric Le Goater
2024-01-08  7:32 ` [PULL 04/17] vfio/container: Introduce a VFIOIOMMU QOM interface Cédric Le Goater
2024-01-08  7:32 ` [PULL 05/17] vfio/container: Introduce a VFIOIOMMU legacy " Cédric Le Goater
2024-01-08  7:32 ` [PULL 06/17] vfio/container: Intoduce a new VFIOIOMMUClass::setup handler Cédric Le Goater
2024-01-08  7:32 ` [PULL 07/17] vfio/spapr: Introduce a sPAPR VFIOIOMMU QOM interface Cédric Le Goater
2024-01-08  7:32 ` [PULL 08/17] vfio/iommufd: Introduce a VFIOIOMMU iommufd " Cédric Le Goater
2024-01-08  7:32 ` [PULL 09/17] vfio/spapr: Only compile sPAPR IOMMU support when needed Cédric Le Goater
2024-01-08  7:32 ` [PULL 10/17] vfio/iommufd: Remove CONFIG_IOMMUFD usage Cédric Le Goater
2024-01-08  7:32 ` [PULL 11/17] vfio/container: Replace basename with g_path_get_basename Cédric Le Goater
2024-01-08  7:32 ` [PULL 12/17] hw/vfio: fix iteration over global VFIODevice list Cédric Le Goater
2024-01-08  7:32 ` [PULL 13/17] vfio/iommufd: Remove the use of stat() to check file existence Cédric Le Goater
2024-01-08  7:32 ` [PULL 14/17] vfio/container: Rename vfio_init_container to vfio_set_iommu Cédric Le Goater
2024-01-08  7:32 ` [PULL 15/17] vfio/migration: Add helper function to set state or reset device Cédric Le Goater
2024-01-08  7:32 ` [PULL 16/17] backends/iommufd: Remove check on number of backend users Cédric Le Goater
2024-01-08  7:32 ` Cédric Le Goater [this message]
2024-01-08 13:16 ` [PULL 00/17] vfio queue Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240108073232.118228-18-clg@redhat.com \
    --to=clg@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=eric.auger@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=zhenzhong.duan@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).