On Fri, 19 Apr 2019 at 16:01, Emil Velikov <[email protected]> wrote: > > From: Emil Velikov <[email protected]> > > As effectively required by the extension, we need to ensure we're master > > Currently drivers employ vendor specific solutions, which check if the > device behind the fd is capable*, yet none of them do the master check. > > *In the radv case, if acceleration is available. > > Instead of duplicating the check in each driver, keep it where it's > needed and used. > > Note this copies libdrm's drmIsMaster() to avoid depending on bleeding > edge version of the library. > > v2: set the fd to -1 if not master (Bas) > > Cc: Keith Packard <[email protected]> > Cc: Jason Ekstrand <[email protected]> > Cc: Bas Nieuwenhuizen <[email protected]> > Cc: Andres Rodriguez <[email protected]> > Reported-by: Andres Rodriguez <[email protected]> > Fixes: da997ebec92 ("vulkan: Add KHR_display extension using DRM [v10]") > Signed-off-by: Emil Velikov <[email protected]> > --- > src/vulkan/wsi/wsi_common_display.c | 27 +++++++++++++++++++++++++++ > 1 file changed, 27 insertions(+) > > diff --git a/src/vulkan/wsi/wsi_common_display.c > b/src/vulkan/wsi/wsi_common_display.c > index 74ed36ed646..2be20e85046 100644 > --- a/src/vulkan/wsi/wsi_common_display.c > +++ b/src/vulkan/wsi/wsi_common_display.c > @@ -1812,6 +1812,30 @@ fail_attr_init: > return ret; > } > > + > +/* > + * Local version fo the libdrm helper. Added to avoid depending on bleeding > + * edge version of the library. > + */ > +static int > +local_drmIsMaster(int fd) > +{ > + /* Detect master by attempting something that requires master. > + * > + * Authenticating magic tokens requires master and 0 is an > + * internal kernel detail which we could use. Attempting this on > + * a master fd would fail therefore fail with EINVAL because 0 > + * is invalid. > + * > + * A non-master fd will fail with EACCES, as the kernel checks > + * for master before attempting to do anything else. > + * > + * Since we don't want to leak implementation details, use > + * EACCES. > + */ > + return drmAuthMagic(fd, 0) != -EACCES; > +} > + > VkResult > wsi_display_init_wsi(struct wsi_device *wsi_device, > const VkAllocationCallbacks *alloc, > @@ -1827,6 +1851,9 @@ wsi_display_init_wsi(struct wsi_device *wsi_device, > } > > wsi->fd = display_fd; > + if (wsi->fd != -1 && !local_drmIsMaster(wsi->fd)) > + wsi->fd = -1; > + > wsi->alloc = alloc; > Humble ping?
-Emil _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
