From 8b2ccb8eb92746131d37dcae2c69657d34153d36 Mon Sep 17 00:00:00 2001 From: mengwenhua Date: Mon, 9 Jan 2023 11:27:51 +0800 Subject: [PATCH] Automatically disable inet6 transport if ipv6 is disabled on machine Signed-off-by: mengwenhua --- ...sable-inet6-transport-if-ipv6-is-dis.patch | 59 +++++++++++++++++++ xorg-x11-xtrans-devel.spec | 7 ++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 backport-0001-Automatically-disable-inet6-transport-if-ipv6-is-dis.patch diff --git a/backport-0001-Automatically-disable-inet6-transport-if-ipv6-is-dis.patch b/backport-0001-Automatically-disable-inet6-transport-if-ipv6-is-dis.patch new file mode 100644 index 0000000..7418e67 --- /dev/null +++ b/backport-0001-Automatically-disable-inet6-transport-if-ipv6-is-dis.patch @@ -0,0 +1,59 @@ +From 7898badde44cf518da6879c2622b6db9cd709c7d Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Fri, 6 May 2022 14:23:59 -0400 +Subject: [PATCH] Automatically disable inet6 transport if ipv6 is disabled on + machine + +If a machine is booted with ipv6.disable=1, trying to bind to an +AF_INET6 socket will fail with AFNOSUPPORT. + +The tcp transport automatically falls back to ipv4 in this case, but +the more specific inet6 transport just fails. + +This failure leads to MakeAllCOTSServerListeners returning a partial +success. + +Unfortunately, the X server can't really contiue with partial successes +from this function if -displayfd is in use, since that would, in other +cases, potentially lead to the -displayfd electing a display number that +is potentially partially in use by a rogue program. + +This commit addresses the issue by automatically disabling transports +when they fail with AFNOSUPPORT, leading them to get ignored, rather than +proceeding and ultimately returning from MakeAllCOTSServerListerns with +partial=TRUE. +--- + Xtranssock.c | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +diff --git a/Xtranssock.c b/Xtranssock.c +index 632c1b5..0177186 100644 +--- a/Xtranssock.c ++++ b/Xtranssock.c +@@ -611,12 +611,19 @@ TRANS(SocketOpenCOTSServer) (Xtransport *thistrans, const char *protocol, + break; + } + if (i < 0) { +- if (i == -1) +- prmsg (1,"SocketOpenCOTSServer: Unable to open socket for %s\n", +- thistrans->TransName); +- else ++ if (i == -1) { ++ if (errno == EAFNOSUPPORT) { ++ thistrans->flags |= TRANS_NOLISTEN; ++ prmsg (1,"SocketOpenCOTSServer: Socket for %s unsupported on this system.\n", ++ thistrans->TransName); ++ } else { ++ prmsg (1,"SocketOpenCOTSServer: Unable to open socket for %s\n", ++ thistrans->TransName); ++ } ++ } else { + prmsg (1,"SocketOpenCOTSServer: Unable to determine socket type for %s\n", + thistrans->TransName); ++ } + return NULL; + } + +-- +2.37.3.windows.1 + diff --git a/xorg-x11-xtrans-devel.spec b/xorg-x11-xtrans-devel.spec index 8cb8fae..f6dd5b9 100644 --- a/xorg-x11-xtrans-devel.spec +++ b/xorg-x11-xtrans-devel.spec @@ -1,6 +1,6 @@ Name: xorg-x11-xtrans-devel Version: 1.4.0 -Release: 1 +Release: 2 Summary: X.Org X11 developmental X transport library License: MIT URL: http://www.x.org @@ -12,6 +12,8 @@ BuildRequires: xorg-x11-util-macros Patch1: xtrans-1.0.3-avoid-gethostname.patch +Patch6000: backport-0001-Automatically-disable-inet6-transport-if-ipv6-is-dis.patch + %description xtrans is a library of code that is shared among various X packages to handle network protocol transport in a modular fashion, allowing a @@ -47,6 +49,9 @@ install -pm 644 AUTHORS ChangeLog COPYING README.md $RPM_BUILD_ROOT%{_pkgdocdir} %{_datadir}/pkgconfig/xtrans.pc %changelog +* Mon Jan 9 2023 mengwenhua - 1.4.0-2 +- Automatically disable inet6 transport if ipv6 is disabled on machine + * Wed Jan 12 2022 yaoxin - 1.4.0-1 - Upgrade xorg-x11-xtrans-devel to 1.4.0 -- Gitee