All of lore.kernel.org
 help / color / mirror / Atom feed
* Why does OUT_FENCE_PTR point not to an fd (s32) but to an s64?
@ 2017-01-06 21:04 Chad Versace
  2017-01-06 21:13 ` Chad Versace
  2017-01-09 10:23 ` Daniel Vetter
  0 siblings, 2 replies; 9+ messages in thread
From: Chad Versace @ 2017-01-06 21:04 UTC (permalink / raw)
  To: dri-devel, Gustavo Padovan, Daniel Vetter, Rob Clark,
	Chris Wilson

Was this a mistake in the API? If so, can we fix this ABI mistake before
kernel consumers rely on this?

I naïvely expected that OUT_FENCE_PTR would be a pointer to, obviously, a fence
fd (s32 __user *). But it's not. It's s64 __user *. Due to that surprise, I
spent several hours chasing down weird corruption in Rob Clark's kmscube. The
kernel unexpectedly cleared the 32 bits *above* an `int kms_fence_fd` in
userspace.

For reference, here's the relevant DRM code.

    // file: drivers/gpu/drm/drm_atomic.c
    struct drm_out_fence_state {
            s64 __user *out_fence_ptr;
            struct sync_file *sync_file;
            int fd;
    };
    
    static int setup_out_fence(struct drm_out_fence_state *fence_state,
                               struct dma_fence *fence)
    {
            fence_state->fd = get_unused_fd_flags(O_CLOEXEC);
            if (fence_state->fd < 0)
                    return fence_state->fd;
    
            if (put_user(fence_state->fd, fence_state->out_fence_ptr))
                    return -EFAULT;
    
            fence_state->sync_file = sync_file_create(fence);
            if (!fence_state->sync_file)
                    return -ENOMEM;
    
            return 0;
    }
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2017-01-13 21:31 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-01-06 21:04 Why does OUT_FENCE_PTR point not to an fd (s32) but to an s64? Chad Versace
2017-01-06 21:13 ` Chad Versace
2017-01-09 10:23 ` Daniel Vetter
2017-01-10 20:58   ` Laurent Pinchart
2017-01-12 19:17     ` Gustavo Padovan
2017-01-12 19:26       ` Daniel Vetter
2017-01-12 19:29         ` Laurent Pinchart
2017-01-12 19:34           ` Gustavo Padovan
2017-01-13 21:31             ` Chad Versace

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.