diff --git a/x11-base/xorg-server/Manifest b/x11-base/xorg-server/Manifest index 29a234a..cdb387d 100644 --- a/x11-base/xorg-server/Manifest +++ b/x11-base/xorg-server/Manifest @@ -19,6 +19,9 @@ AUX xorg-server-1.19-randr-Account-for-panning-and-transforms-when-constr.patch AUX xorg-server-1.19.4-sysmacros.patch 986 BLAKE2B 04c111591a6a558913217b24aa2357478e7d931b6cee5185dda31ebd38d68463b4a158a18d8a60ffa7ccc5c65e246f261ebbf7c0ebc81fd3ae31e7579b7adab4 SHA512 858676058779363741901ffbf79666f723f917b49f8627ddd2f31768873adfb416a70bc298e2356861cb5abca8be54a6c64f8fa4fd11a91cce072b93857ad168 AUX xorg-server-1.19.5-glx-do-not-pick-sRGB-config-for-32-bit-RGBA-visual.patch 1555 BLAKE2B ef0a52b2341939f254bdce6b705f0591d0888c8043e5c0da1c4c4e97cdac632c56b27392ac2d7ac63653c7dfe1d381edd619a5e0c1c78f3bf255348c99c30f24 SHA512 66cd27608019557029f15aa81cf1a067e124ec0f854af9e732fef8b12bade4f1797481c86de2437b63ec5364fbeb1e3e05a39aa08df71ad08df79cd7d244e280 AUX xorg-server-1.19.99.901-randr-fix-crash.patch 1774 BLAKE2B 6c8aba90b64989dc215b02514eb53412f8a7353a43373094bf0d0a8564338a4c409f5eabe4a2244fbaba46e6ed0b70d5253027319c92385c83b3a90f8e1911f6 SHA512 8513e59ea8d9782c6f088f202436b1f773a3e782d00a09c879ef49a050bc32aee0eaa8f545ecc4441e57ab82778b07d4e78b480356391e41c528d5b6b3fdda1e +AUX xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch 4981 BLAKE2B 46b6548ebddbd962725b4e2a08060decd84f33dc74c2c4a7f4325402712b9dc84fd3325b2027fe0b98e9dd6a6a39bc976ba2a35481c5c49da310cd45a0e4dd3f SHA512 423b8869c3ce2ff74373aa04dca788896d8d47380b5b2368f51e5cc3100f47a94384ef2f616779a44d4cd04b8e0f997190ab7df58ae4605b5c9819fe1f93fb45 +AUX xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch 3194 BLAKE2B 6aca2b21b6b82cdd81a82d45bdbd1f861d4babdf222b73d285f118b42fdcb0a2b1f2949ab2141c7d95d3819c6687dc2323b4da19fbe99d865a2e51393b2c534a SHA512 a2de27ade9c79e8712c66d3ec8a1c9d4af0acdbbbc9bfdc58f0f9d8f2830a069fc3f3a74c92f5b0b0ff889bfc89017e7d0fed7fcd10b8916d0589b9f9171f81a +AUX xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch 1724 BLAKE2B 34c607f6b6a6f21ed6b34d7a87cb3bc1774f526f32144218c7d5d338474c08c98c72a87b41f3d0afcaf81dc0e8d5989a48fd8e64a6a9e25ad968ad8156f6e984 SHA512 49d5af904bac03cfc8ad89b70541e9af6687f7f0153d06ada64e2226d27dddc1b7bb27024bed73c20c365197858957730de005c515bbae8e22b610c3241b70e4 AUX xorg-sets.conf 199 BLAKE2B e9414694f372d3f2a65bee903522094a60e261ddcd0c49a1d85a2ee804f3edbb5c605ed2d0b44839a91e98957f05ea88da87530f5f36b2db249e09ee56ee2975 SHA512 910fe28f20909243044f079ff35136942b8790f4f28ac42ffc64a76b7f03cd22057087fa5e4e01192080b52c0d89000ea96d5a807c6f11f680d3f43312c5be41 DIST xorg-server-1.19.5.tar.bz2 5965044 BLAKE2B 23375793ea4459a962f412440e307081ce2acd3c646e5db4d1bfac20e267bcbb1752ba8f6de66df06d25eaf92d1b55082a80eced0d44c257a757d5926ca6a7f3 SHA512 928dea5850b98cd815004cfa133eca23cfa9521920c934c68a92787f2cae13cca1534eee772a4fb74b8ae8cb92662b5d68b95b834c8aa8ec57cd57cb4e5dd45c DIST xorg-server-1.20.3.tar.bz2 6205000 BLAKE2B 9fc8acf1812d0aa4800941dd1846060f91edf1e7ebc92b35e8c2028266d88d3ab3ba14e95f535e5ee41941f8e20769ee75723ba609f5653d4892f97bc5cf91c4 SHA512 ee44554f86df4297f54c5871fe7a18954eeef4338775a25f36d6577b279c4775f61128da71b86cfaeadcc080838d6749dede138d4db178866579da2056543fba diff --git a/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch new file mode 100644 index 0000000..54ed629 --- /dev/null +++ b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Pick-the-shm-dir-at-run-time-not-build-time.patch @@ -0,0 +1,174 @@ +From 19f6cb570becbc4e355807199c6e251fc7935132 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 19 Sep 2018 13:28:06 -0700 +Subject: [PATCH xserver] shm: Pick the shm dir at run time, not build time. + +Prodding the builder's filesystem for tmp dirs doesn't necessarily +tell you anything about what the actual host's filesystem is going to +look like, so we should just try the dirs at runtime. + +Signed-off-by: Eric Anholt +--- + Xext/shm.c | 48 +++++++++++++++++++++++++---------------- + configure.ac | 43 ------------------------------------ + include/dix-config.h.in | 3 --- + include/meson.build | 5 ----- + 4 files changed, 29 insertions(+), 70 deletions(-) + +diff --git a/Xext/shm.c b/Xext/shm.c +index ed43b9202..2739a59e7 100644 +--- a/Xext/shm.c ++++ b/Xext/shm.c +@@ -1194,36 +1194,46 @@ ProcShmAttachFd(ClientPtr client) + static int + shm_tmpfile(void) + { +-#ifdef SHMDIR ++ const char *shmdirs[] = { ++ "/run/shm", ++ "/var/tmp", ++ "/tmp", ++ }; + int fd; +- char template[] = SHMDIR "/shmfd-XXXXXX"; ++ + #ifdef O_TMPFILE +- fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666); +- if (fd >= 0) { +- DebugF ("Using O_TMPFILE\n"); +- return fd; ++ for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) { ++ fd = open(shmdirs[i], O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666); ++ if (fd >= 0) { ++ DebugF ("Using O_TMPFILE\n"); ++ return fd; ++ } + } + ErrorF ("Not using O_TMPFILE\n"); + #endif ++ ++ for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) { ++ char template[PATH_MAX]; ++ snprintf(template, ARRAY_SIZE(template), "%s/shmfd-XXXXXX", shmdirs[i]); + #ifdef HAVE_MKOSTEMP +- fd = mkostemp(template, O_CLOEXEC); ++ fd = mkostemp(template, O_CLOEXEC); + #else +- fd = mkstemp(template); ++ fd = mkstemp(template); + #endif +- if (fd < 0) +- return -1; +- unlink(template); ++ if (fd < 0) ++ continue; ++ unlink(template); + #ifndef HAVE_MKOSTEMP +- int flags = fcntl(fd, F_GETFD); +- if (flags != -1) { +- flags |= FD_CLOEXEC; +- (void) fcntl(fd, F_SETFD, &flags); +- } ++ int flags = fcntl(fd, F_GETFD); ++ if (flags != -1) { ++ flags |= FD_CLOEXEC; ++ (void) fcntl(fd, F_SETFD, &flags); ++ } + #endif +- return fd; +-#else ++ return fd; ++ } ++ + return -1; +-#endif + } + + static int +diff --git a/configure.ac b/configure.ac +index 359b62cb5..57a233102 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1115,49 +1115,6 @@ case "$DRI2,$HAVE_DRI2PROTO" in + esac + AM_CONDITIONAL(DRI2, test "x$DRI2" = xyes) + +-dnl +-dnl Locate a suitable tmp file system for creating shared memeory files +-dnl +- +-AC_ARG_WITH(shared-memory-dir, AS_HELP_STRING([--with-shared-memory-dir=PATH], [Path to directory in a world-writable temporary directory for anonymous shared memory (default: auto)]), +-[], +-[with_shared_memory_dir=yes]) +- +-shmdirs="/run/shm /var/tmp /tmp" +- +-case x"$with_shared_memory_dir" in +-xyes) +- for dir in $shmdirs; do +- case x"$with_shared_memory_dir" in +- xyes) +- echo Checking temp dir "$dir" +- if test -d "$dir"; then +- with_shared_memory_dir="$dir" +- fi +- ;; +- esac +- done +- ;; +-x/*) +- ;; +-xno) +- ;; +-*) +- AC_MSG_ERROR([Invalid directory specified for --with-shared-memory-dir: $with_shared_memory_dir]) +- ;; +-esac +- +-case x"$with_shared_memory_dir" in +-xyes) +- AC_MSG_ERROR([No directory found for shared memory temp files.]) +- ;; +-xno) +- ;; +-*) +- AC_DEFINE_UNQUOTED(SHMDIR, ["$with_shared_memory_dir"], [Directory for shared memory temp files]) +- ;; +-esac +- + AC_ARG_ENABLE(xtrans-send-fds, AS_HELP_STRING([--disable-xtrans-send-fds], [Use Xtrans support for fd passing (default: auto)]), [XTRANS_SEND_FDS=$enableval], [XTRANS_SEND_FDS=auto]) + + case "x$XTRANS_SEND_FDS" in +diff --git a/include/dix-config.h.in b/include/dix-config.h.in +index f8df86608..3bd22b8bb 100644 +--- a/include/dix-config.h.in ++++ b/include/dix-config.h.in +@@ -452,9 +452,6 @@ + /* Wrap SIGBUS to catch MIT-SHM faults */ + #undef BUSFAULT + +-/* Directory for shared memory temp files */ +-#undef SHMDIR +- + /* Don't let Xdefs.h define 'pointer' */ + #define _XTYPEDEF_POINTER 1 + +diff --git a/include/meson.build b/include/meson.build +index 4a0c12f5a..04c41e999 100644 +--- a/include/meson.build ++++ b/include/meson.build +@@ -91,11 +91,6 @@ conf_data.set('SYSTEMD_LOGIND', build_systemd_logind) + conf_data.set('NEED_DBUS', build_systemd_logind or build_hal) + conf_data.set('CONFIG_WSCONS', host_machine.system() == 'openbsd') + +-# XXX: SHMDIR is weird in autoconf, probing the build system for +-# various tmp directories. Could we replace it with C code at runtime +-# that just uses whatever directory works? +-conf_data.set_quoted('SHMDIR', '/tmp') +- + conf_data.set('HAVE_XSHMFENCE', xshmfence_dep.found()) + conf_data.set('WITH_LIBDRM', libdrm_dep.found()) + conf_data.set('GLAMOR_HAS_EGL_QUERY_DMABUF', +-- +2.19.2 + diff --git a/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch new file mode 100644 index 0000000..fce2594 --- /dev/null +++ b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-Use-memfd_create-when-possible.patch @@ -0,0 +1,89 @@ +From f6753c117ef0f83499d5e2d6dda226fec9ddf803 Mon Sep 17 00:00:00 2001 +From: Alexander Volkov +Date: Mon, 11 Feb 2019 18:54:10 +0300 +Subject: [PATCH xserver] shm: Use memfd_create when possible + +It doesn't require shared memory dir and thus allows +to avoid cases when this dir is detected incorrectly, +as in https://bugreports.qt.io/browse/QTBUG-71440 + +Signed-off-by: Alexander Volkov +--- + Xext/shm.c | 12 ++++++++++++ + configure.ac | 2 +- + include/dix-config.h.in | 3 +++ + include/meson.build | 1 + + 4 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/Xext/shm.c b/Xext/shm.c +index 2739a59e7..506fd4df1 100644 +--- a/Xext/shm.c ++++ b/Xext/shm.c +@@ -35,6 +35,9 @@ in this Software without prior written authorization from The Open Group. + #include + #include + #include ++#ifdef HAVE_MEMFD_CREATE ++#include ++#endif + #include + #include + #include +@@ -1201,6 +1204,15 @@ shm_tmpfile(void) + }; + int fd; + ++#ifdef HAVE_MEMFD_CREATE ++ fd = memfd_create("xorg", MFD_CLOEXEC|MFD_ALLOW_SEALING); ++ if (fd != -1) { ++ fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK); ++ DebugF ("Using memfd_create\n"); ++ return fd; ++ } ++#endif ++ + #ifdef O_TMPFILE + for (int i = 0; i < ARRAY_SIZE(shmdirs); i++) { + fd = open(shmdirs[i], O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666); +diff --git a/configure.ac b/configure.ac +index 0ca96aeb8..79ff7fa64 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -159,7 +159,7 @@ dnl Checks for library functions. + AC_CHECK_FUNCS([backtrace geteuid getuid issetugid getresuid \ + getdtablesize getifaddrs getpeereid getpeerucred getprogname getzoneid \ + mmap posix_fallocate seteuid shmctl64 strncasecmp vasprintf vsnprintf \ +- walkcontext setitimer poll epoll_create1 mkostemp]) ++ walkcontext setitimer poll epoll_create1 mkostemp memfd_create]) + AC_CONFIG_LIBOBJ_DIR([os]) + AC_REPLACE_FUNCS([reallocarray strcasecmp strcasestr strlcat strlcpy strndup\ + timingsafe_memcmp]) +diff --git a/include/dix-config.h.in b/include/dix-config.h.in +index 855b3d50c..9eb1a924e 100644 +--- a/include/dix-config.h.in ++++ b/include/dix-config.h.in +@@ -128,6 +128,9 @@ + /* Define to 1 if you have the header file. */ + #undef HAVE_LINUX_FB_H + ++/* Define to 1 if you have the `memfd_create' function. */ ++#undef HAVE_MEMFD_CREATE ++ + /* Define to 1 if you have the `mkostemp' function. */ + #undef HAVE_MKOSTEMP + +diff --git a/include/meson.build b/include/meson.build +index 04c41e999..bbd5a6690 100644 +--- a/include/meson.build ++++ b/include/meson.build +@@ -141,6 +141,7 @@ conf_data.set('HAVE_GETPEEREID', cc.has_function('getpeereid')) + conf_data.set('HAVE_GETPEERUCRED', cc.has_function('getpeerucred')) + conf_data.set('HAVE_GETPROGNAME', cc.has_function('getprogname')) + conf_data.set('HAVE_GETZONEID', cc.has_function('getzoneid')) ++conf_data.set('HAVE_MEMFD_CREATE', cc.has_function('memfd_create')) + conf_data.set('HAVE_MKOSTEMP', cc.has_function('mkostemp')) + conf_data.set('HAVE_MMAP', cc.has_function('mmap')) + conf_data.set('HAVE_POLL', cc.has_function('poll')) +-- +2.19.2 + diff --git a/x11-base/xorg-server/files/xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch new file mode 100644 index 0000000..1ce9e13 --- /dev/null +++ b/x11-base/xorg-server/files/xorg-server-1.20.4-shm-reindent-shm_tmpfile-to-follow-our-standards.patch @@ -0,0 +1,72 @@ +From 804a9b4f57107fa2d0ed1ae0becda5bebaffe6e1 Mon Sep 17 00:00:00 2001 +From: Eric Anholt +Date: Wed, 19 Sep 2018 13:20:12 -0700 +Subject: [PATCH xserver] shm: reindent shm_tmpfile to follow our standards. + +Signed-off-by: Eric Anholt +--- + Xext/shm.c | 40 ++++++++++++++++++++-------------------- + 1 file changed, 20 insertions(+), 20 deletions(-) + +diff --git a/Xext/shm.c b/Xext/shm.c +index 589ed0b4d..ed43b9202 100644 +--- a/Xext/shm.c ++++ b/Xext/shm.c +@@ -1195,34 +1195,34 @@ static int + shm_tmpfile(void) + { + #ifdef SHMDIR +- int fd; +- char template[] = SHMDIR "/shmfd-XXXXXX"; ++ int fd; ++ char template[] = SHMDIR "/shmfd-XXXXXX"; + #ifdef O_TMPFILE +- fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666); +- if (fd >= 0) { +- DebugF ("Using O_TMPFILE\n"); +- return fd; +- } +- ErrorF ("Not using O_TMPFILE\n"); ++ fd = open(SHMDIR, O_TMPFILE|O_RDWR|O_CLOEXEC|O_EXCL, 0666); ++ if (fd >= 0) { ++ DebugF ("Using O_TMPFILE\n"); ++ return fd; ++ } ++ ErrorF ("Not using O_TMPFILE\n"); + #endif + #ifdef HAVE_MKOSTEMP +- fd = mkostemp(template, O_CLOEXEC); ++ fd = mkostemp(template, O_CLOEXEC); + #else +- fd = mkstemp(template); ++ fd = mkstemp(template); + #endif +- if (fd < 0) +- return -1; +- unlink(template); ++ if (fd < 0) ++ return -1; ++ unlink(template); + #ifndef HAVE_MKOSTEMP +- int flags = fcntl(fd, F_GETFD); +- if (flags != -1) { +- flags |= FD_CLOEXEC; +- (void) fcntl(fd, F_SETFD, &flags); +- } ++ int flags = fcntl(fd, F_GETFD); ++ if (flags != -1) { ++ flags |= FD_CLOEXEC; ++ (void) fcntl(fd, F_SETFD, &flags); ++ } + #endif +- return fd; ++ return fd; + #else +- return -1; ++ return -1; + #endif + } + +-- +2.19.2 +