egl: Fix _eglPointerIsDereferencable() to ignore page residency
authorMiguel A. Vico <mvicomoya@nvidia.com>
Thu, 20 Jul 2017 00:25:57 +0000 (17:25 -0700)
committerEmil Velikov <emil.l.velikov@gmail.com>
Mon, 24 Jul 2017 09:27:48 +0000 (10:27 +0100)
mincore() returns 0 on success, and -1 on failure.  The last parameter
is a vector of bytes with one entry for each page queried.  mincore
returns page residency information in the first bit of each byte in the
vector.

Residency doesn't actually matter when determining whether a pointer is
dereferenceable, so the output vector can be ignored.  What matters is
whether mincore succeeds. See:

  http://man7.org/linux/man-pages/man2/mincore.2.html

Signed-off-by: Miguel A. Vico <mvicomoya@nvidia.com>
Acked-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
src/egl/main/eglglobals.c

index 6fdc6c31ce34ef6a087795975742163adec48e5d..90712266189bbda8786334c719da8841d2d091fb 100644 (file)
@@ -168,7 +168,18 @@ _eglPointerIsDereferencable(void *p)
       return EGL_FALSE;
    }
 
-   return (valid & 0x01) == 0x01;
+   /* mincore() returns 0 on success, and -1 on failure.  The last parameter
+    * is a vector of bytes with one entry for each page queried.  mincore
+    * returns page residency information in the first bit of each byte in the
+    * vector.
+    *
+    * Residency doesn't actually matter when determining whether a pointer is
+    * dereferenceable, so the output vector can be ignored.  What matters is
+    * whether mincore succeeds. See:
+    *
+    *   http://man7.org/linux/man-pages/man2/mincore.2.html
+    */
+   return EGL_TRUE;
 #else
    return p != NULL;
 #endif