From 41fe93a9b74b3aeaa48383e564e0e669f2bdfd4a Mon Sep 17 00:00:00 2001 From: termux-pacman-bot Date: Tue, 21 Feb 2023 13:34:28 +0000 Subject: [PATCH] xorg-server{,-xvfb}, xwayland: fix for using /dev/ashmem * tigervnc: Bump revision --- x11-packages/tigervnc/build.sh | 2 +- x11-packages/xorg-server-xvfb/build.sh | 3 +- .../xorg-server-xvfb/use_ashmem.patch | 84 +++++++++++++++++++ x11-packages/xorg-server/build.sh | 2 + x11-packages/xorg-server/use_ashmem.patch | 84 +++++++++++++++++++ x11-packages/xwayland/build.sh | 4 +- .../xwayland/fix-required-libgl-version.patch | 11 +++ x11-packages/xwayland/use_ashmem.patch | 84 +++++++++++++++++++ 8 files changed, 270 insertions(+), 4 deletions(-) create mode 100644 x11-packages/xorg-server-xvfb/use_ashmem.patch create mode 100644 x11-packages/xorg-server/use_ashmem.patch create mode 100644 x11-packages/xwayland/fix-required-libgl-version.patch create mode 100644 x11-packages/xwayland/use_ashmem.patch diff --git a/x11-packages/tigervnc/build.sh b/x11-packages/tigervnc/build.sh index 2520cbd26b..cb5d64c7b4 100644 --- a/x11-packages/tigervnc/build.sh +++ b/x11-packages/tigervnc/build.sh @@ -5,7 +5,7 @@ TERMUX_PKG_MAINTAINER="@termux" # No update anymore. v1.11.x requires support of PAM. TERMUX_PKG_VERSION=(1.10.1 21.1.7) -TERMUX_PKG_REVISION=33 +TERMUX_PKG_REVISION=34 TERMUX_PKG_SRCURL=(https://github.com/TigerVNC/tigervnc/archive/v${TERMUX_PKG_VERSION}.tar.gz https://xorg.freedesktop.org/releases/individual/xserver/xorg-server-${TERMUX_PKG_VERSION[1]}.tar.xz) TERMUX_PKG_SHA256=(19fcc80d7d35dd58115262e53cac87d8903180261d94c2a6b0c19224f50b58c4 diff --git a/x11-packages/xorg-server-xvfb/build.sh b/x11-packages/xorg-server-xvfb/build.sh index 54315929fa..0d7ca5ee4e 100644 --- a/x11-packages/xorg-server-xvfb/build.sh +++ b/x11-packages/xorg-server-xvfb/build.sh @@ -3,11 +3,12 @@ TERMUX_PKG_DESCRIPTION="X virtual framebuffer" TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_MAINTAINER="@termux" TERMUX_PKG_VERSION=21.1.7 +TERMUX_PKG_REVISION=1 TERMUX_PKG_SRCURL=https://xorg.freedesktop.org/releases/individual/xserver/xorg-server-${TERMUX_PKG_VERSION}.tar.xz TERMUX_PKG_SHA256=d9c60b2dd0ec52326ca6ab20db0e490b1ff4f566f59ca742d6532e92795877bb TERMUX_PKG_DEPENDS="libandroid-shmem, libdrm, libpixman, libx11, libxau, libxfont2, libxinerama, libxkbfile, libxshmfence, opengl, openssl, xkeyboard-config, xorg-protocol-txt, xorg-xkbcomp" -TERMUX_PKG_BUILD_DEPENDS="libxcvt" +TERMUX_PKG_BUILD_DEPENDS="libxcvt, mesa-dev" TERMUX_PKG_CONFLICTS="xorg-xvfb" TERMUX_PKG_REPLACES="xorg-xvfb" diff --git a/x11-packages/xorg-server-xvfb/use_ashmem.patch b/x11-packages/xorg-server-xvfb/use_ashmem.patch new file mode 100644 index 0000000000..f34c085534 --- /dev/null +++ b/x11-packages/xorg-server-xvfb/use_ashmem.patch @@ -0,0 +1,84 @@ +--- ./Xext/shm_old.c 2023-02-07 03:16:51.000000000 +0200 ++++ ./Xext/shm.c 2023-02-21 10:35:54.199460924 +0200 +@@ -60,6 +60,7 @@ + #include + #include "protocol-versions.h" + #include "busfault.h" ++#include + + /* Needed for Solaris cross-zone shared memory extension */ + #ifdef HAVE_SHMCTL64 +@@ -1142,6 +1143,20 @@ + FreeResource (shmdesc->resource, RT_NONE); + } + ++static int ++shm_tmpfile_size(int fd) ++{ ++ char path[PATH_MAX] = {0}; ++ char realpath[256] = {0}; ++ sprintf(path, "/proc/self/fd/%d", fd); ++ ++ int size; ++ if (readlink(path, realpath, sizeof(realpath)) != -1 && !strcmp("/dev/ashmem", realpath)) ++ return ioctl(fd, /* ASHMEM_GET_SIZE */ _IO(0x77, 4), NULL); ++ else ++ return 0; ++} ++ + static int + ProcShmAttachFd(ClientPtr client) + { +@@ -1161,7 +1176,7 @@ + if (fd < 0) + return BadMatch; + +- if (fstat(fd, &statb) < 0 || statb.st_size == 0) { ++ if (fstat(fd, &statb) < 0 || (statb.st_size == 0 && (statb.st_size = shm_tmpfile_size(fd)) == 0)) { + close(fd); + return BadMatch; + } +@@ -1257,6 +1272,28 @@ + return -1; + } + ++static inline int ++shm_tmpfile_sized(size_t size) ++{ ++ int fd, ret; ++ long flags; ++ fd = open("/dev/ashmem", O_RDWR | O_CLOEXEC); ++ if (fd < 0) ++ return fd; ++ ret = ioctl(fd, /* ASHMEM_SET_SIZE */ _IOW(0x77, 3, size_t), size); ++ if (ret < 0) ++ goto err; ++ flags = fcntl(fd, F_GETFD); ++ if (flags == -1) ++ goto err; ++ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) ++ goto err; ++ return fd; ++ err: ++ close(fd); ++ return ret; ++} ++ + static int + ProcShmCreateSegment(ClientPtr client) + { +@@ -1276,13 +1313,9 @@ + client->errorValue = stuff->readOnly; + return BadValue; + } +- fd = shm_tmpfile(); ++ fd = shm_tmpfile_sized(stuff->size); + if (fd < 0) + return BadAlloc; +- if (ftruncate(fd, stuff->size) < 0) { +- close(fd); +- return BadAlloc; +- } + shmdesc = malloc(sizeof(ShmDescRec)); + if (!shmdesc) { + close(fd); diff --git a/x11-packages/xorg-server/build.sh b/x11-packages/xorg-server/build.sh index bd0ebc0279..0fefe13695 100644 --- a/x11-packages/xorg-server/build.sh +++ b/x11-packages/xorg-server/build.sh @@ -3,9 +3,11 @@ TERMUX_PKG_DESCRIPTION="Xorg server" TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_MAINTAINER="@termux" TERMUX_PKG_VERSION=21.1.7 +TERMUX_PKG_REVISION=1 TERMUX_PKG_SRCURL=https://xorg.freedesktop.org/releases/individual/xserver/xorg-server-${TERMUX_PKG_VERSION}.tar.xz TERMUX_PKG_SHA256=d9c60b2dd0ec52326ca6ab20db0e490b1ff4f566f59ca742d6532e92795877bb TERMUX_PKG_DEPENDS="libandroid-shmem, libdrm, libpciaccess, libpixman, libx11, libxau, libxcvt, libxfont2, libxinerama, libxkbfile, libxshmfence, opengl, openssl, xkeyboard-config, xorg-protocol-txt, xorg-xkbcomp" +TERMUX_PKG_BUILD_DEPENDS="mesa-dev" # Provided by xorg-protocol-txt (subpackage of xorg-server-xvfb): TERMUX_PKG_RM_AFTER_INSTALL="lib/xorg/protocol.txt" diff --git a/x11-packages/xorg-server/use_ashmem.patch b/x11-packages/xorg-server/use_ashmem.patch new file mode 100644 index 0000000000..f34c085534 --- /dev/null +++ b/x11-packages/xorg-server/use_ashmem.patch @@ -0,0 +1,84 @@ +--- ./Xext/shm_old.c 2023-02-07 03:16:51.000000000 +0200 ++++ ./Xext/shm.c 2023-02-21 10:35:54.199460924 +0200 +@@ -60,6 +60,7 @@ + #include + #include "protocol-versions.h" + #include "busfault.h" ++#include + + /* Needed for Solaris cross-zone shared memory extension */ + #ifdef HAVE_SHMCTL64 +@@ -1142,6 +1143,20 @@ + FreeResource (shmdesc->resource, RT_NONE); + } + ++static int ++shm_tmpfile_size(int fd) ++{ ++ char path[PATH_MAX] = {0}; ++ char realpath[256] = {0}; ++ sprintf(path, "/proc/self/fd/%d", fd); ++ ++ int size; ++ if (readlink(path, realpath, sizeof(realpath)) != -1 && !strcmp("/dev/ashmem", realpath)) ++ return ioctl(fd, /* ASHMEM_GET_SIZE */ _IO(0x77, 4), NULL); ++ else ++ return 0; ++} ++ + static int + ProcShmAttachFd(ClientPtr client) + { +@@ -1161,7 +1176,7 @@ + if (fd < 0) + return BadMatch; + +- if (fstat(fd, &statb) < 0 || statb.st_size == 0) { ++ if (fstat(fd, &statb) < 0 || (statb.st_size == 0 && (statb.st_size = shm_tmpfile_size(fd)) == 0)) { + close(fd); + return BadMatch; + } +@@ -1257,6 +1272,28 @@ + return -1; + } + ++static inline int ++shm_tmpfile_sized(size_t size) ++{ ++ int fd, ret; ++ long flags; ++ fd = open("/dev/ashmem", O_RDWR | O_CLOEXEC); ++ if (fd < 0) ++ return fd; ++ ret = ioctl(fd, /* ASHMEM_SET_SIZE */ _IOW(0x77, 3, size_t), size); ++ if (ret < 0) ++ goto err; ++ flags = fcntl(fd, F_GETFD); ++ if (flags == -1) ++ goto err; ++ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) ++ goto err; ++ return fd; ++ err: ++ close(fd); ++ return ret; ++} ++ + static int + ProcShmCreateSegment(ClientPtr client) + { +@@ -1276,13 +1313,9 @@ + client->errorValue = stuff->readOnly; + return BadValue; + } +- fd = shm_tmpfile(); ++ fd = shm_tmpfile_sized(stuff->size); + if (fd < 0) + return BadAlloc; +- if (ftruncate(fd, stuff->size) < 0) { +- close(fd); +- return BadAlloc; +- } + shmdesc = malloc(sizeof(ShmDescRec)); + if (!shmdesc) { + close(fd); diff --git a/x11-packages/xwayland/build.sh b/x11-packages/xwayland/build.sh index 6ca276bf1e..6bb6ffd128 100644 --- a/x11-packages/xwayland/build.sh +++ b/x11-packages/xwayland/build.sh @@ -3,11 +3,11 @@ TERMUX_PKG_DESCRIPTION="Wayland X11 server" TERMUX_PKG_LICENSE="MIT" TERMUX_PKG_MAINTAINER="@termux" TERMUX_PKG_VERSION=1.20.5 -TERMUX_PKG_REVISION=16 +TERMUX_PKG_REVISION=17 TERMUX_PKG_SRCURL=https://xorg.freedesktop.org/releases/individual/xserver/xorg-server-${TERMUX_PKG_VERSION}.tar.bz2 TERMUX_PKG_SHA256=a81d8243f37e75a03d4f8c55f96d0bc25802be6ec45c3bfa5cb614c6d01bac9d TERMUX_PKG_DEPENDS="libandroid-shmem, libdrm, libpciaccess, libpixman, libx11, libxau, libxfont2, libxinerama, libxkbfile, libxshmfence, opengl, openssl, xkeyboard-config, xorg-xkbcomp, libwayland, libwayland-protocols, libepoxy" -TERMUX_PKG_BUILD_DEPENDS="libwayland-cross-scanner" +TERMUX_PKG_BUILD_DEPENDS="libwayland-cross-scanner, mesa-dev" TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" ac_cv_path_RAWCPP=/usr/bin/cpp diff --git a/x11-packages/xwayland/fix-required-libgl-version.patch b/x11-packages/xwayland/fix-required-libgl-version.patch new file mode 100644 index 0000000000..c5b26d83e8 --- /dev/null +++ b/x11-packages/xwayland/fix-required-libgl-version.patch @@ -0,0 +1,11 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -765,7 +765,7 @@ + LIBDRM="libdrm >= 2.4.89" + LIBEGL="egl" + LIBGBM="gbm >= 10.2.0" +-LIBGL="gl >= 7.1.0" ++LIBGL="gl >= 1.2" + LIBXEXT="xext >= 1.0.99.4" + LIBXFONT="xfont2 >= 2.0.0" + LIBXI="xi >= 1.2.99.1" diff --git a/x11-packages/xwayland/use_ashmem.patch b/x11-packages/xwayland/use_ashmem.patch new file mode 100644 index 0000000000..f34c085534 --- /dev/null +++ b/x11-packages/xwayland/use_ashmem.patch @@ -0,0 +1,84 @@ +--- ./Xext/shm_old.c 2023-02-07 03:16:51.000000000 +0200 ++++ ./Xext/shm.c 2023-02-21 10:35:54.199460924 +0200 +@@ -60,6 +60,7 @@ + #include + #include "protocol-versions.h" + #include "busfault.h" ++#include + + /* Needed for Solaris cross-zone shared memory extension */ + #ifdef HAVE_SHMCTL64 +@@ -1142,6 +1143,20 @@ + FreeResource (shmdesc->resource, RT_NONE); + } + ++static int ++shm_tmpfile_size(int fd) ++{ ++ char path[PATH_MAX] = {0}; ++ char realpath[256] = {0}; ++ sprintf(path, "/proc/self/fd/%d", fd); ++ ++ int size; ++ if (readlink(path, realpath, sizeof(realpath)) != -1 && !strcmp("/dev/ashmem", realpath)) ++ return ioctl(fd, /* ASHMEM_GET_SIZE */ _IO(0x77, 4), NULL); ++ else ++ return 0; ++} ++ + static int + ProcShmAttachFd(ClientPtr client) + { +@@ -1161,7 +1176,7 @@ + if (fd < 0) + return BadMatch; + +- if (fstat(fd, &statb) < 0 || statb.st_size == 0) { ++ if (fstat(fd, &statb) < 0 || (statb.st_size == 0 && (statb.st_size = shm_tmpfile_size(fd)) == 0)) { + close(fd); + return BadMatch; + } +@@ -1257,6 +1272,28 @@ + return -1; + } + ++static inline int ++shm_tmpfile_sized(size_t size) ++{ ++ int fd, ret; ++ long flags; ++ fd = open("/dev/ashmem", O_RDWR | O_CLOEXEC); ++ if (fd < 0) ++ return fd; ++ ret = ioctl(fd, /* ASHMEM_SET_SIZE */ _IOW(0x77, 3, size_t), size); ++ if (ret < 0) ++ goto err; ++ flags = fcntl(fd, F_GETFD); ++ if (flags == -1) ++ goto err; ++ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) ++ goto err; ++ return fd; ++ err: ++ close(fd); ++ return ret; ++} ++ + static int + ProcShmCreateSegment(ClientPtr client) + { +@@ -1276,13 +1313,9 @@ + client->errorValue = stuff->readOnly; + return BadValue; + } +- fd = shm_tmpfile(); ++ fd = shm_tmpfile_sized(stuff->size); + if (fd < 0) + return BadAlloc; +- if (ftruncate(fd, stuff->size) < 0) { +- close(fd); +- return BadAlloc; +- } + shmdesc = malloc(sizeof(ShmDescRec)); + if (!shmdesc) { + close(fd);