https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=6ec6e12678273e3b09ddf9ae07d11d4ac0c91d7a
commit 6ec6e12678273e3b09ddf9ae07d11d4ac0c91d7a
Author: Mark Wielaard <ma...@kl...>
Date: Fri Nov 1 04:26:45 2024 +0100
DRM_IOCTLs SYNCOBJ_HANDLE_TO_FD, PRIME_HANDLE_TO_FD and MODE_CREATE_LEASE
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
Diff:
---
NEWS | 1 +
coregrind/m_syswrap/syswrap-linux.c | 27 +++++++++++++++++++++++++++
include/vki/vki-linux-drm.h | 28 ++++++++++++++++++++++++++++
3 files changed, 56 insertions(+)
diff --git a/NEWS b/NEWS
index 52c66c8f7c..3922b423d8 100644
--- 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
diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c
index 6a6b6bcb34..eec8388224 100644
--- a/coregrind/m_syswrap/syswrap-linux.c
+++ b/coregrind/m_syswrap/syswrap-linux.c
@@ -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:
diff --git a/include/vki/vki-linux-drm.h b/include/vki/vki-linux-drm.h
index ca62044d22..e7ff583770 100644
--- a/include/vki/vki-linux-drm.h
+++ b/include/vki/vki-linux-drm.h
@@ -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
//----------------------------------------------------------------------
|