[PATCH libdrm v2] xf86drm: fallback to normal path when realpath fails

Eric Engestrom eric.engestrom at intel.com
Thu Aug 23 15:00:47 UTC 2018


On Thursday, 2018-08-23 14:37:28 +0100, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
> 
> Earlier commit reworked our sysfs handling to use realpath.
> Sadly that backfired since the Firefox sandboxing mechanism rejects
> that. Despite the files/folders being in the allowed list, of the
> sandboxing mechanism.
> 
> Oddly enough, the Chromium sandboxing doesn't complain about any of
> this.
> 
> Since there are no Firefox releases with the fix, add a temporary
> solution which falls back to the original handling.
> 
> Sadly, this won't work for virgl.
> 
> v2: drop return type - function cannot return NULL (Eric)
> 
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107516
> Cc: Michel Dänzer <michel.daenzer at amd.com>
> Cc: Mike <bugs.freedesktop.org at pm.port0.org>
> Fixes: a02900133b3 ("xf86drm: introduce a get_real_pci_path() helper")
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
> Reviewed-by: Michel Dänzer <michel.daenzer at amd.com> (v1)
> Tested-by: Michel Dänzer <michel.daenzer at amd.com> (v1)

Reviewed-by: Eric Engestrom <eric.engestrom at intel.com>

> ---
>  xf86drm.c | 12 +++++++++---
>  1 file changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/xf86drm.c b/xf86drm.c
> index 336d64de..7807dce9 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
> @@ -3014,6 +3014,12 @@ get_real_pci_path(int maj, int min, char *real_path)
>      return real_path;
>  }
>  
> +static void
> +get_normal_pci_path(int maj, int min, char *normal_path)
> +{
> +    snprintf(normal_path, PATH_MAX, "/sys/dev/char/%d:%d/device", maj, min);
> +}
> +
>  static int drmParsePciBusInfo(int maj, int min, drmPciBusInfoPtr info)
>  {
>  #ifdef __linux__
> @@ -3022,7 +3028,7 @@ static int drmParsePciBusInfo(int maj, int min, drmPciBusInfoPtr info)
>      int num;
>  
>      if (get_real_pci_path(maj, min, real_path) == NULL)
> -        return -ENOENT;
> +        get_normal_pci_path(maj, min, real_path);
>  
>      value = sysfs_uevent_get(real_path, "PCI_SLOT_NAME");
>      if (!value)
> @@ -3143,7 +3149,7 @@ static int parse_separate_sysfs_files(int maj, int min,
>      int ret;
>  
>      if (get_real_pci_path(maj, min, real_path) == NULL)
> -        return -ENOENT;
> +        get_normal_pci_path(maj, min, real_path);
>  
>      for (unsigned i = ignore_revision ? 1 : 0; i < ARRAY_SIZE(attrs); i++) {
>          snprintf(path, PATH_MAX, "%s/%s", real_path, attrs[i]);
> @@ -3175,7 +3181,7 @@ static int parse_config_sysfs_file(int maj, int min,
>      int fd, ret;
>  
>      if (get_real_pci_path(maj, min, real_path) == NULL)
> -        return -ENOENT;
> +        get_normal_pci_path(maj, min, real_path);
>  
>      snprintf(path, PATH_MAX, "%s/config", real_path);
>      fd = open(path, O_RDONLY);
> -- 
> 2.18.0
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list