]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
DRM_IOCTLs SYNCOBJ_HANDLE_TO_FD, PRIME_HANDLE_TO_FD and MODE_CREATE_LEASE
authorMark Wielaard <mark@klomp.org>
Fri, 1 Nov 2024 03:26:45 +0000 (04:26 +0100)
committerMark Wielaard <mark@klomp.org>
Fri, 1 Nov 2024 03:27:35 +0000 (04:27 +0100)
These three DRM_IOCTLs create new file descriptors, so track them using
ML_(record_fd_open_nameless).

https://bugs.kde.org/show_bug.cgi?id=492422

NEWS
coregrind/m_syswrap/syswrap-linux.c
include/vki/vki-linux-drm.h

diff --git a/NEWS b/NEWS
index 52c66c8f7c9e93d7b9711f2443feecd6fb3f6296..3922b423d83dc43568e22e711eb7dc1f2c2d50f4 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -75,6 +75,7 @@ are not entered into bugzilla tend to get forgotten about or ignored.
 492210  False positive on x86/amd64 with ZF taken directly from addition
 492214  statx(fd, NULL, AT_EMPTY_PATH) is supported since Linux 6.11
         but not supported in valgrind
+492422  Please support DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD
 492663  Valgrind ignores debug info for some binaries
 493418  Add bad fd usage errors for --track-fds in ML_(fd_allowed)
 493454  Missing FUSE_COMPATIBLE_MAY_BLOCK markers
index 6a6b6bcb3422681910d4f14ae30383e8e46a6343..eec8388224bae3877ee03b3bfdae4892c61ccb4e 100644 (file)
@@ -11777,6 +11777,33 @@ POST(sys_ioctl)
       }
       break;
 
+   case VKI_DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD:
+      if (ARG3) {
+         struct vki_drm_syncobj_handle *data =
+            (struct vki_drm_syncobj_handle *)(Addr)ARG3;
+         if (VG_(clo_track_fds))
+            ML_(record_fd_open_nameless) (tid, data->fd);
+      }
+      break;
+
+   case VKI_DRM_IOCTL_PRIME_HANDLE_TO_FD:
+      if (ARG3) {
+         struct vki_drm_prime_handle *data =
+            (struct vki_drm_prime_handle *)(Addr)ARG3;
+         if (VG_(clo_track_fds))
+            ML_(record_fd_open_nameless) (tid, data->fd);
+      }
+      break;
+
+   case VKI_DRM_IOCTL_MODE_CREATE_LEASE:
+      if (ARG3) {
+         struct vki_drm_mode_create_lease *data =
+            (struct vki_drm_mode_create_lease*)(Addr)ARG3;
+         if (VG_(clo_track_fds))
+            ML_(record_fd_open_nameless) (tid, data->fd);
+      }
+      break;
+
    /* KVM ioctls that only write the system call return value */
    case VKI_KVM_GET_API_VERSION:
    case VKI_KVM_CREATE_VM:
index ca62044d229816be59feac4695157734cdede08f..e7ff5837703f14f26fdc2e5887c80a8d2cfabbcf 100644 (file)
@@ -441,6 +441,30 @@ struct vki_drm_mode_crtc_lut {
        __vki_u64 blue;
 };
 
+struct vki_drm_syncobj_handle {
+        __vki_u32 handle;
+        __vki_u32 flags;
+
+        __vki_s32 fd;
+        __vki_u32 pad;
+};
+
+struct vki_drm_prime_handle {
+        __vki_u32 handle;
+        __vki_u32 flags;
+        __vki_s32 fd;
+};
+
+struct vki_drm_mode_create_lease {
+        __vki_u64 object_ids;
+        __vki_u32 object_count;
+        __vki_u32 flags;
+
+        __vki_u32 lessee_id;
+        __vki_u32 fd;
+};
+
+
 //----------------------------------------------------------------------
 // From include/drm/drm.h
 //----------------------------------------------------------------------
@@ -537,6 +561,10 @@ struct vki_drm_mode_crtc_lut {
 #define VKI_DRM_COMMAND_BASE            0x40
 #define VKI_DRM_COMMAND_END            0xA0
 
+#define VKI_DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD VKI_DRM_IOWR(0xC1, struct vki_drm_syncobj_handle)
+#define VKI_DRM_IOCTL_PRIME_HANDLE_TO_FD VKI_DRM_IOWR(0x2d, struct vki_drm_prime_handle)
+#define VKI_DRM_IOCTL_MODE_CREATE_LEASE VKI_DRM_IOWR(0xC6, struct vki_drm_mode_create_lease)
+
 //----------------------------------------------------------------------
 // From include/drm/i915_drm.h
 //----------------------------------------------------------------------