summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel A. Vico <[email protected]>2017-07-19 17:25:57 -0700
committerEmil Velikov <[email protected]>2017-07-24 10:27:48 +0100
commit63c251e38f9b4ac3606094a72c8c5b658402f3d0 (patch)
tree4b1b9d14be0a063e46c6cfc0287a66207f963cc3
parent045108938c11f507dcc3c50b59b0a8a8529486bd (diff)
egl: Fix _eglPointerIsDereferencable() to ignore page residency
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 <[email protected]> Acked-by: Daniel Stone <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
-rw-r--r--src/egl/main/eglglobals.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/egl/main/eglglobals.c b/src/egl/main/eglglobals.c
index 6fdc6c31ce3..90712266189 100644
--- a/src/egl/main/eglglobals.c
+++ b/src/egl/main/eglglobals.c
@@ -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