From: Mark Wielaard Date: Fri, 1 Nov 2024 03:26:45 +0000 (+0100) Subject: DRM_IOCTLs SYNCOBJ_HANDLE_TO_FD, PRIME_HANDLE_TO_FD and MODE_CREATE_LEASE X-Git-Tag: VALGRIND_3_24_0~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ec6e12678273e3b09ddf9ae07d11d4ac0c91d7a;p=thirdparty%2Fvalgrind.git 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 --git a/NEWS b/NEWS index 52c66c8f7..3922b423d 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 6a6b6bcb3..eec838822 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 ca62044d2..e7ff58377 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 //----------------------------------------------------------------------