r-b
On Thu, Apr 25, 2019 at 12:22 PM Emil Velikov <emil.l.veli...@gmail.com> wrote: > > On Fri, 19 Apr 2019 at 16:01, Emil Velikov <emil.l.veli...@gmail.com> wrote: > > > > From: Emil Velikov <emil.veli...@collabora.com> > > > > 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 <kei...@keithp.com> > > Cc: Jason Ekstrand <ja...@jlekstrand.net> > > Cc: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> > > Cc: Andres Rodriguez <andre...@gmail.com> > > Reported-by: Andres Rodriguez <andre...@gmail.com> > > Fixes: da997ebec92 ("vulkan: Add KHR_display extension using DRM [v10]") > > Signed-off-by: Emil Velikov <emil.veli...@collabora.com> > > --- > > 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 mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev