From a34844b009c32f24570af91459eefea849e802b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Buchm=C3=BCller?= Date: Tue, 1 Dec 2020 20:51:23 +0100 Subject: [PATCH] xorg-server: update to 1.20.10 Also add a patch to fix build w/ musl-1.2.1 --- .../patches/fix-musl-input_event.patch | 43 ++++ .../fix-use-after-free-after-switch-vt.patch | 30 --- srcpkgs/xorg-server/patches/mr-508.patch | 229 ------------------ srcpkgs/xorg-server/template | 6 +- 4 files changed, 46 insertions(+), 262 deletions(-) create mode 100644 srcpkgs/xorg-server/patches/fix-musl-input_event.patch delete mode 100644 srcpkgs/xorg-server/patches/fix-use-after-free-after-switch-vt.patch delete mode 100644 srcpkgs/xorg-server/patches/mr-508.patch diff --git a/srcpkgs/xorg-server/patches/fix-musl-input_event.patch b/srcpkgs/xorg-server/patches/fix-musl-input_event.patch new file mode 100644 index 00000000000..ec1ae8f3751 --- /dev/null +++ b/srcpkgs/xorg-server/patches/fix-musl-input_event.patch @@ -0,0 +1,43 @@ +Source: @pullmoll +Upstream: no +Reason: Gracefully handle transition to 64 bit time with musl-1.2.1 + +--- hw/dmx/input/usb-keyboard.c 2020-12-01 17:32:25.000000000 +0100 ++++ hw/dmx/input/usb-keyboard.c 2020-12-01 20:28:02.489695853 +0100 +@@ -278,8 +278,8 @@ + + gettimeofday(&tv, NULL); + for (i = 0; i < 5; i++) { +- event.time.tv_sec = tv.tv_sec; +- event.time.tv_usec = tv.tv_usec; ++ event.input_event_sec = tv.tv_sec; ++ event.input_event_usec = tv.tv_usec; + event.type = EV_LED; + if (i == 0) + led = 1; /* LED_CAPSL == 0x01 */ +--- hw/dmx/examples/ev.c 2020-12-01 17:32:25.000000000 +0100 ++++ hw/dmx/examples/ev.c 2020-12-01 20:31:24.585605950 +0100 +@@ -114,8 +114,8 @@ + if ((fd = open(name, O_RDWR, 0)) >= 0) { + printf("%s: open, fd = %d\n", name, fd); + for (i = 0; i < LED_MAX; i++) { +- event.time.tv_sec = time(0); +- event.time.tv_usec = 0; ++ event.input_event_sec = time(0); ++ event.input_event_usec = 0; + event.type = EV_LED; + event.code = i; + event.value = 0; +@@ -123,9 +123,10 @@ + } + + while ((rc = read(fd, &event, sizeof(event))) > 0) { ++ struct timeval t = {event.input_event_sec, event.input_event_usec}; + printf("%-24.24s.%06lu type 0x%04x; code 0x%04x;" + " value 0x%08x; ", +- ctime(&event.time.tv_sec), +- event.time.tv_usec, event.type, event.code, event.value); ++ ctime(&t.tv_sec), ++ t.tv_usec, event.type, event.code, event.value); + switch (event.type) { + case EV_KEY: diff --git a/srcpkgs/xorg-server/patches/fix-use-after-free-after-switch-vt.patch b/srcpkgs/xorg-server/patches/fix-use-after-free-after-switch-vt.patch deleted file mode 100644 index 8627de7e707..00000000000 --- a/srcpkgs/xorg-server/patches/fix-use-after-free-after-switch-vt.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 919f1f46fc67dae93b2b3f278fcbfc77af34ec58 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Michel=20D=C3=A4nzer?= -Date: Mon, 31 Aug 2020 12:10:43 +0200 -Subject: [PATCH] xfree86: Take second reference for SavedCursor in - xf86CursorSetCursor - -The same pointer is kept in CurrentCursor as well, therefore two -RefCursor calls are needed. - -Fixes use-after-free after switching VTs. - -Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1067 ---- - hw/xfree86/ramdac/xf86CursorRD.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git hw/xfree86/ramdac/xf86CursorRD.c hw/xfree86/ramdac/xf86CursorRD.c -index 9aa3de97bd..c8362d1690 100644 ---- hw/xfree86/ramdac/xf86CursorRD.c -+++ hw/xfree86/ramdac/xf86CursorRD.c -@@ -334,6 +334,9 @@ xf86CursorSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCurs, - ScreenPriv->HotY = cursor->bits->yhot; - - if (!infoPtr->pScrn->vtSema) { -+ cursor = RefCursor(cursor); -+ if (ScreenPriv->SavedCursor) -+ FreeCursor(ScreenPriv->SavedCursor, None); - ScreenPriv->SavedCursor = cursor; - return; - } diff --git a/srcpkgs/xorg-server/patches/mr-508.patch b/srcpkgs/xorg-server/patches/mr-508.patch deleted file mode 100644 index d3a47c866fa..00000000000 --- a/srcpkgs/xorg-server/patches/mr-508.patch +++ /dev/null @@ -1,229 +0,0 @@ -https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/508/diffs - -From 4b6fce5975c2f931a0478cf4deeec97529b05eb6 Mon Sep 17 00:00:00 2001 -From: Olivier Fourdan -Date: Tue, 8 Sep 2020 10:01:55 +0200 -Subject: [PATCH 1/3] Revert "linux: Fix platform device probe for DT-based - PCI" - -This reverts commit 249a12c54a9316b089bd22683c011519348496df. - -https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068 ---- - config/udev.c | 27 +-------------------------- - 1 file changed, 1 insertion(+), 26 deletions(-) - ---- config/udev.c -+++ config/udev.c -@@ -464,31 +464,6 @@ config_udev_fini(void) - - #ifdef CONFIG_UDEV_KMS - --/* Find the last occurrence of the needle in haystack */ --static char *strrstr(const char *haystack, const char *needle) --{ -- char *prev, *last, *tmp; -- -- prev = strstr(haystack, needle); -- if (!prev) -- return NULL; -- -- last = prev; -- tmp = prev + 1; -- -- while (tmp) { -- last = strstr(tmp, needle); -- if (!last) -- return prev; -- else { -- prev = last; -- tmp = prev + 1; -- } -- } -- -- return last; --} -- - static void - config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath, - int major, int minor, -@@ -503,7 +478,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path - attribs->minor = minor; - - value = udev_device_get_property_value(udev_device, "ID_PATH"); -- if (value && (str = strrstr(value, "pci-"))) { -+ if (value && (str = strstr(value, "pci-"))) { - attribs->busid = XNFstrdup(str); - attribs->busid[3] = ':'; - } --- -GitLab - - -From 39cb95e959fab97a7e255dda1a1599b096fb0f7e Mon Sep 17 00:00:00 2001 -From: Olivier Fourdan -Date: Tue, 8 Sep 2020 10:03:11 +0200 -Subject: [PATCH 2/3] Revert "linux: Fix platform device PCI detection for - complex bus topologies" - -This reverts commit 5c96eb5f44e62a4cfe835023cde304eb5795b8fd. - -https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068 ---- - config/udev.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - ---- config/udev.c -+++ config/udev.c -@@ -470,7 +470,7 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path - config_odev_probe_proc_ptr probe_callback) - { - struct OdevAttributes *attribs = config_odev_allocate_attributes(); -- const char *value, *str; -+ const char *value; - - attribs->path = XNFstrdup(path); - attribs->syspath = XNFstrdup(syspath); -@@ -478,8 +478,8 @@ config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path - attribs->minor = minor; - - value = udev_device_get_property_value(udev_device, "ID_PATH"); -- if (value && (str = strstr(value, "pci-"))) { -- attribs->busid = XNFstrdup(str); -+ if (value && !strncmp(value, "pci-", 4)) { -+ attribs->busid = XNFstrdup(value); - attribs->busid[3] = ':'; - } - --- -GitLab - - -From af4c84ce8855e84c0ad89b929bc972e884f0b8e3 Mon Sep 17 00:00:00 2001 -From: Olivier Fourdan -Date: Tue, 8 Sep 2020 10:03:33 +0200 -Subject: [PATCH 3/3] Revert "linux: Make platform device probe less fragile" - -This reverts commit 74b7427c41b4e4104af7abf70a996c086d3d7628. - -https://gitlab.freedesktop.org/xorg/xserver/-/issues/1068 ---- - config/udev.c | 17 +++++------------ - hw/xfree86/os-support/linux/lnx_platform.c | 20 ++++++++++++++++++-- - 2 files changed, 23 insertions(+), 14 deletions(-) - ---- config/udev.c -+++ config/udev.c -@@ -56,7 +56,7 @@ static struct udev_monitor *udev_monitor; - - #ifdef CONFIG_UDEV_KMS - static void --config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath, -+config_udev_odev_setup_attribs(const char *path, const char *syspath, - int major, int minor, - config_odev_probe_proc_ptr probe_callback); - #endif -@@ -128,7 +128,7 @@ device_added(struct udev_device *udev_device) - - LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n", path); - -- config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum), -+ config_udev_odev_setup_attribs(path, syspath, major(devnum), - minor(devnum), NewGPUDeviceRequest); - return; - } -@@ -322,7 +322,7 @@ device_removed(struct udev_device *device) - - LogMessage(X_INFO, "config/udev: removing GPU device %s %s\n", - syspath, path); -- config_udev_odev_setup_attribs(device, path, syspath, major(devnum), -+ config_udev_odev_setup_attribs(path, syspath, major(devnum), - minor(devnum), DeleteGPUDeviceRequest); - /* Retry vtenter after a drm node removal */ - systemd_logind_vtenter(); -@@ -465,24 +465,17 @@ config_udev_fini(void) - #ifdef CONFIG_UDEV_KMS - - static void --config_udev_odev_setup_attribs(struct udev_device *udev_device, const char *path, const char *syspath, -+config_udev_odev_setup_attribs(const char *path, const char *syspath, - int major, int minor, - config_odev_probe_proc_ptr probe_callback) - { - struct OdevAttributes *attribs = config_odev_allocate_attributes(); -- const char *value; - - attribs->path = XNFstrdup(path); - attribs->syspath = XNFstrdup(syspath); - attribs->major = major; - attribs->minor = minor; - -- value = udev_device_get_property_value(udev_device, "ID_PATH"); -- if (value && !strncmp(value, "pci-", 4)) { -- attribs->busid = XNFstrdup(value); -- attribs->busid[3] = ':'; -- } -- - /* ownership of attribs is passed to probe layer */ - probe_callback(attribs); - } -@@ -523,7 +516,7 @@ config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback) - else if (!check_seat(udev_device)) - goto no_probe; - -- config_udev_odev_setup_attribs(udev_device, path, syspath, major(devnum), -+ config_udev_odev_setup_attribs(path, syspath, major(devnum), - minor(devnum), probe_callback); - no_probe: - udev_device_unref(udev_device); ---- hw/xfree86/os-support/linux/lnx_platform.c -+++ hw/xfree86/os-support/linux/lnx_platform.c -@@ -23,13 +23,13 @@ - static Bool - get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) - { -+ drmSetVersion sv; - drmVersionPtr v; -+ char *buf; - int fd; - int err = 0; - Bool paused, server_fd = FALSE; - -- LogMessage(X_INFO, "Platform probe for %s\n", attribs->syspath); -- - fd = systemd_logind_take_fd(attribs->major, attribs->minor, path, &paused); - if (fd != -1) { - if (paused) { -@@ -48,6 +48,18 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) - if (fd == -1) - return FALSE; - -+ sv.drm_di_major = 1; -+ sv.drm_di_minor = 4; -+ sv.drm_dd_major = -1; /* Don't care */ -+ sv.drm_dd_minor = -1; /* Don't care */ -+ -+ err = drmSetInterfaceVersion(fd, &sv); -+ if (err) { -+ xf86Msg(X_ERROR, "%s: failed to set DRM interface version 1.4: %s\n", -+ path, strerror(-err)); -+ goto out; -+ } -+ - /* for a delayed probe we've already added the device */ - if (delayed_index == -1) { - xf86_add_platform_device(attribs, FALSE); -@@ -57,6 +69,10 @@ get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) - if (server_fd) - xf86_platform_devices[delayed_index].flags |= XF86_PDEV_SERVER_FD; - -+ buf = drmGetBusid(fd); -+ xf86_platform_odev_attributes(delayed_index)->busid = XNFstrdup(buf); -+ drmFreeBusid(buf); -+ - v = drmGetVersion(fd); - if (!v) { - xf86Msg(X_ERROR, "%s: failed to query DRM version\n", path); --- -GitLab - diff --git a/srcpkgs/xorg-server/template b/srcpkgs/xorg-server/template index 6e589ed7762..1cbee6712e2 100644 --- a/srcpkgs/xorg-server/template +++ b/srcpkgs/xorg-server/template @@ -1,7 +1,7 @@ # Template file for 'xorg-server' pkgname=xorg-server -version=1.20.9 -revision=4 +version=1.20.10 +revision=1 build_style=meson configure_args="-Dipv6=true -Dxorg=true -Dxnest=true -Dxephyr=true -Dxvfb=true -Dhal=false -Dudev=true -Dxkb_dir=/usr/share/X11/xkb @@ -25,7 +25,7 @@ maintainer="Orphaned " license="MIT, BSD-3-Clause" homepage="https://xorg.freedesktop.org" distfiles="${XORG_SITE}/xserver/${pkgname}-${version}.tar.bz2" -checksum=e219f2e0dfe455467939149d7cd2ee53b79b512cc1d2094ae4f5c9ed9ccd3571 +checksum=977420c082450dc808de301ef56af4856d653eea71519a973c3490a780cb7c99 lib32disabled=yes provides="xserver-abi-extension-10_1 xserver-abi-input-24_1 xserver-abi-video-24_1 xf86-video-modesetting-1_1"