From 3a42baf8753185ecdcbbdf62b52ced30fc322047 Mon Sep 17 00:00:00 2001 From: Lumir Balhar Date: Aug 13 2020 09:58:33 +0000 Subject: Add support for upstream architectures' names (patch 353) --- diff --git a/00353-Original-names-for-architectures-with-different-name.patch b/00353-Original-names-for-architectures-with-different-name.patch new file mode 100644 index 0000000..d3b1a28 --- /dev/null +++ b/00353-Original-names-for-architectures-with-different-name.patch @@ -0,0 +1,79 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Lumir Balhar +Date: Tue, 4 Aug 2020 12:04:03 +0200 +Subject: [PATCH] 00353: Original names for architectures with different names + downstream + +Pythons in RHEL/Fedora use different names for some architectures +than upstream and other distros (for example ppc64 vs. powerpc64). +See patch 274. +That means that an extension built with the default upstream settings +(on other distro or as an manylinux wheel) cannot be found by Python +on RHEL/Fedora because it has a different suffix. +This patch adds the original names to importlib so Python is able +to import extensions with an original architecture name in its +file name. + +WARNING: This patch has no effect on Python built with bootstrap +enabled because Python/importlib_external.h is not regenerated +and therefore Python during bootstrap contains importlib from +upstream without this feature. It's possible to include +Python/importlib_external.h to this patch but it'd make rebasing +a nightmare because it's basically a binary file. +--- + Lib/importlib/_bootstrap_external.py | 31 ++++++++++++++++++++++++++-- + 1 file changed, 29 insertions(+), 2 deletions(-) + +diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py +index 25a3f8c0e0..db4bb4d02d 100644 +--- a/Lib/importlib/_bootstrap_external.py ++++ b/Lib/importlib/_bootstrap_external.py +@@ -1566,7 +1566,7 @@ def _get_supported_file_loaders(): + + Each item is a tuple (loader, suffixes). + """ +- extensions = ExtensionFileLoader, _imp.extension_suffixes() ++ extensions = ExtensionFileLoader, _alternative_architectures(_imp.extension_suffixes()) + source = SourceFileLoader, SOURCE_SUFFIXES + bytecode = SourcelessFileLoader, BYTECODE_SUFFIXES + return [extensions, source, bytecode] +@@ -1622,7 +1622,7 @@ def _setup(_bootstrap_module): + + # Constants + setattr(self_module, '_relax_case', _make_relax_case()) +- EXTENSION_SUFFIXES.extend(_imp.extension_suffixes()) ++ EXTENSION_SUFFIXES.extend(_alternative_architectures(_imp.extension_suffixes())) + if builtin_os == 'nt': + SOURCE_SUFFIXES.append('.pyw') + if '_d.pyd' in EXTENSION_SUFFIXES: +@@ -1635,3 +1635,30 @@ def _install(_bootstrap_module): + supported_loaders = _get_supported_file_loaders() + sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders)]) + sys.meta_path.append(PathFinder) ++ ++ ++_ARCH_MAP = { ++ "-arm-linux-gnueabi.": "-arm-linux-gnueabihf.", ++ "-armeb-linux-gnueabi.": "-armeb-linux-gnueabihf.", ++ "-mips64-linux-gnu.": "-mips64-linux-gnuabi64.", ++ "-mips64el-linux-gnu.": "-mips64el-linux-gnuabi64.", ++ "-ppc-linux-gnu.": "-powerpc-linux-gnu.", ++ "-ppc-linux-gnuspe.": "-powerpc-linux-gnuspe.", ++ "-ppc64-linux-gnu.": "-powerpc64-linux-gnu.", ++ "-ppc64le-linux-gnu.": "-powerpc64le-linux-gnu.", ++} ++ ++ ++def _alternative_architectures(suffixes): ++ """Add a suffix with an alternative architecture name ++ to the list of suffixes so an extension built with ++ the default (upstream) setting is loadable with our Pythons ++ """ ++ ++ for suffix in suffixes: ++ for original, alternative in _ARCH_MAP.items(): ++ if original in suffix: ++ suffixes.append(suffix.replace(original, alternative)) ++ return suffixes ++ ++ return suffixes diff --git a/python3.spec b/python3.spec index 1716f9b..4635ee1 100644 --- a/python3.spec +++ b/python3.spec @@ -17,7 +17,7 @@ URL: https://www.python.org/ #global prerel rc1 %global upstream_version %{general_version}%{?prerel} Version: %{general_version}%{?prerel:~%{prerel}} -Release: 2%{?dist} +Release: 3%{?dist} License: Python @@ -331,6 +331,27 @@ Patch351: 00351-avoid-infinite-loop-in-the-tarfile-module.patch # Fixed upstream: https://bugs.python.org/issue41004 Patch352: 00352-resolve-hash-collisions-for-ipv4interface-and-ipv6interface.patch +# 00353 # f3c11e227c715450b3c1e945a5004e84cce41a58 +# Original names for architectures with different names downstream +# +# Pythons in RHEL/Fedora use different names for some architectures +# than upstream and other distros (for example ppc64 vs. powerpc64). +# See patch 274. +# That means that an extension built with the default upstream settings +# (on other distro or as an manylinux wheel) cannot be found by Python +# on RHEL/Fedora because it has a different suffix. +# This patch adds the original names to importlib so Python is able +# to import extensions with an original architecture name in its +# file name. +# +# WARNING: This patch has no effect on Python built with bootstrap +# enabled because Python/importlib_external.h is not regenerated +# and therefore Python during bootstrap contains importlib from +# upstream without this feature. It's possible to include +# Python/importlib_external.h to this patch but it'd make rebasing +# a nightmare because it's basically a binary file. +Patch353: 00353-Original-names-for-architectures-with-different-name.patch + # (New patches go here ^^^) # # When adding new patches to "python" and "python3" in Fedora, EL, etc., @@ -752,6 +773,9 @@ BuildPython() { %global flags_override EXTRA_CFLAGS="$MoreCFlags" CFLAGS_NODIST="$CFLAGS_NODIST $MoreCFlags" + # Regenerate generated importlib frozen modules (see patch 353) + %make_build %{flags_override} regen-importlib + # Invoke the build %make_build %{flags_override} @@ -1569,6 +1593,9 @@ CheckPython optimized # ====================================================== %changelog +* Mon Aug 03 2020 Lumír Balhar - 3.7.8-3 +- Add support for upstream architectures' names (patch 353) + * Tue Jul 28 2020 Charalampos Stratakis - 3.7.8-2 - Avoid infinite loop when reading specially crafted TAR files (CVE-2019-20907) Resolves: rhbz#1856481