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

Reply via email to